Quality / traceability
Framework
Traceability — evidence
The data to ARD to display to sentence chain: provenance envelopes, iteration ledgers, and the trace panel that answers all five questions about any number on the site.
16reviewed requirementstraceability.md
23test recordsjs-unit · r-unit
0failing23 passing
56%requirement coverage9/16 evidenced
Requirements
| ID | Area | Requirement | Evidence type | Result |
|---|---|---|---|---|
| TRC-ARD-001 | Provenance | The evidence set's traceability object is assembled from the display's current output manifest and the ARD's provenance envelope, carrying ADaM datasets, ARD file and hash, display spec, spec hash, iteration and source commit. | js-unit | 2 passing |
| TRC-ARD-002 | Provenance | A missing manifest, a missing ARD, or an ARD with no provenance yields a traceability object of nulls and empty lists rather than an exception. | js-unit | 2 passing |
| TRC-ARD-003 | Provenance | Every ADaM dataset named in the ARD provenance is surfaced with its content hash, so the data behind a number is identifiable. | js-unit | 1 passing |
| TRC-ARD-004 | Provenance | When the output manifest records no ARD hash, one is computed from the committed ard.json so the chain is never hash-less. | js-unit | no test |
| TRC-ITER-001 | Iterations | The iteration timeline merges iterations.yaml entries with the manifests found under outputs/<slug>/, so it renders from either source alone. | js-unit | no test |
| TRC-ITER-002 | Iterations | The live iteration is the one named by outputs/<slug>/current.json; with no pointer, or a pointer to a version that does not exist, the highest vNNN present is used. | js-unit | no test |
| TRC-ITER-003 | Iterations | A ledger entry with no corresponding output directory is rendered and flagged rather than dropped. | js-unit | no test |
| TRC-BIND-001 | Bindings | A binding address parses into display, analysis, statistic name and qualifiers per contracts §5, including group= and variable_level=. | js-unit | 2 passing |
| TRC-BIND-002 | Bindings | A binding resolves only when exactly one ARD row matches; zero matches and multiple matches are both unresolved, with the reason recorded. | js-unit | 4 passing |
| TRC-BIND-003 | Bindings | An unresolved binding renders as a visibly marked, non-numeric placeholder carrying its reason — a stale number is never displayed in its place. | js-unit | 1 passing |
| TRC-BIND-004 | Bindings | A resolved binding renders as a clickable element carrying its display, address, analysis and statistic, so the trace panel needs no lookup service. | js-unit | 3 passing |
| TRC-CHAIN-001 | Trace | The build emits a trace index keyed by display slug carrying datasets, dataset hashes, both spec files, the ARD file and hash, the iteration, and the source commit. | js-unit | no test |
| TRC-CHAIN-002 | Trace | Every trace index entry links to that display's gallery page and its evidence page, closing the loop from a sentence back to the requirement. | js-unit | no test |
| TRC-DOC-001 | Document | The CSR reader normalizes the assembled document tolerantly — sections, nested sections, text blocks and display placements — and renders a documented empty state when no assembly exists. | js-unit | no test |
| TRC-DOC-003 | Document | A {{xref:section:…}} reference resolves to an in-page link and a {{xref:display:…}} reference to a trace handle carrying the display's assigned number; an unresolved reference degrades to readable text and never leaks the marker. | js-unit | 4 passing |
| TRC-DOC-002 | Document | Prose that still carries {{ard:…}} markers at render time is resolved against the committed ARDs, so the trace panel works whether or not the assembler pre-resolved the bindings. | js-unit | 2 passing |
Test records
| Result | Suite | Test | Requirements | File |
|---|---|---|---|---|
| pass | js-unit | binding addresses TRC-BIND-001: an address parses into display, analysis, statistic and qualifiers (#1) | TRC-BIND-001 | tests/unit/site-binding.test.js |
| pass | js-unit | binding addresses TRC-BIND-001: an address with no qualifiers parses with an empty filter set (#1) | TRC-BIND-001 | tests/unit/site-binding.test.js |
| pass | js-unit | binding resolution TRC-BIND-002: a binding matching exactly one ARD row resolves to its value (#1) | TRC-BIND-002 | tests/unit/site-binding.test.js |
| pass | js-unit | binding resolution TRC-BIND-002: a binding matching no ARD row is unresolved (#1) | TRC-BIND-002 | tests/unit/site-binding.test.js |
| pass | js-unit | binding resolution TRC-BIND-002: a binding matching several ARD rows is unresolved with a reason (#1) | TRC-BIND-002 | tests/unit/site-binding.test.js |
| pass | js-unit | binding resolution TRC-BIND-002: a binding naming a display with no generated ARD is unresolved (#1) | TRC-BIND-002 | tests/unit/site-binding.test.js |
| pass | js-unit | bound prose TRC-BIND-003: an unresolved binding renders a marked placeholder, never a number (#1) | TRC-BIND-003 | tests/unit/site-binding.test.js |
| pass | js-unit | bound prose TRC-BIND-004: a resolved binding renders as a clickable element carrying its address (#1) | TRC-BIND-004 | tests/unit/site-binding.test.js |
| pass | js-unit | bound prose TRC-BIND-004: scale and digits qualifiers turn a stored proportion into a percentage (#1) | TRC-BIND-004 | tests/unit/site-binding.test.js |
| pass | js-unit | bound prose TRC-BIND-004: statistics format for display without losing list values (#1) | TRC-BIND-004 | tests/unit/site-binding.test.js |
| pass | js-unit | bound prose TRC-DOC-002: a value the assembler already resolved is used even without an ARD (#1) | TRC-DOC-002 | tests/unit/site-binding.test.js |
| pass | js-unit | bound prose TRC-DOC-002: markers left in the assembled document are resolved at render time (#1) | TRC-DOC-002 | tests/unit/site-binding.test.js |
| pass | js-unit | cross-references TRC-DOC-003: a display reference becomes a trace handle with its assigned number (#1) | TRC-DOC-003 | tests/unit/site-binding.test.js |
| pass | js-unit | cross-references TRC-DOC-003: a section reference becomes an in-page link (#1) | TRC-DOC-003 | tests/unit/site-binding.test.js |
| pass | js-unit | cross-references TRC-DOC-003: an unresolved reference degrades to text and never leaks the marker (#1) | TRC-DOC-003 | tests/unit/site-binding.test.js |
| pass | js-unit | cross-references TRC-DOC-003: prose rendering resolves bindings and cross-references together (#1) | TRC-DOC-003 | tests/unit/site-binding.test.js |
| pass | js-unit | the traceability object TRC-ARD-001: the chain is assembled from the manifest and the ARD provenance envelope (#1) | TRC-ARD-001 | tests/unit/evidence-traceability.test.js |
| pass | js-unit | the traceability object TRC-ARD-001: the git commit falls back to the ARD envelope when the manifest omits it (#1) | TRC-ARD-001 | tests/unit/evidence-traceability.test.js |
| pass | js-unit | the traceability object TRC-ARD-002: a display with no manifest and no ARD yields nulls, not an exception (#1) | TRC-ARD-002 | tests/unit/evidence-traceability.test.js |
| pass | js-unit | the traceability object TRC-ARD-002: an ARD with an empty provenance envelope still produces a usable object (#1) | TRC-ARD-002 | tests/unit/evidence-traceability.test.js |
| pass | js-unit | the traceability object TRC-ARD-003: every ADaM dataset in the envelope carries its content hash (#1) | TRC-ARD-003 | tests/unit/evidence-traceability.test.js |
| pass | r-unit | DSP-ALL-001: every display renders a table that actually contains numbers (#1) | DSP-ALL-001 | test-displays.R |
| pass | r-unit | DSP-ALL-002: every display declares a regulatory identifier and a source line (#1) | DSP-ALL-002 | test-displays.R |
Traceability
No generated output yet, so the data → ARD → display chain is empty.
Provenance
- Generated
- 2026-07-27T04:44:02.378Z
- Environment
- os Darwin 23.6.0 · node v24.14.0 · vitest 2.1.9 · r 4.3.3
- CI run
- Not recorded for this evidence set