Quality
Requirements, tests, evidence
A reviewed requirement matrix per component; test titles that carry the requirement IDs; one normalized evidence stream across testthat and vitest; drift guards that fail CI when any committed artifact stops matching a fresh run.
316reviewed requirements15 matrices
546distinct test recordsjs-unit · r-unit · text-review
99%requirement coverage314 evidenced
96%tests passing0 failing · 23 pending review
18 unresolved requirement IDs — referenced by a test but defined in no matrix: TXT-SYN-0101, TXT-SYN-0102, TXT-SYN-0103, TXT-SYN-0104, TXT-SYN-0105, TXT-SYN-0106, TXT-SYN-0200, TXT-SYN-0300, TXT-SYN-0400, TXT-SYN-0500, TXT-SYN-0600, TXT-SYN-0700, TXT-SYN-0800, TXT-SYN-0902, TXT-SYN-1000, TXT-SYN-1102, TXT-SYN-1103, TXT-SYN-1200. Exact-match resolution is unforgiving: a renamed or A/B-split requirement stops resolving silently, which is why this report exists.
2 reviewed requirements not yet referenced by any test: QC-CI-001, QC-CI-002
Components
How the loop works
- 1MatrixA reviewed Markdown table in
quality/requirements/, one row per requirement. - 2Test titleTests name the IDs they evidence:
"DSP-AE-001: overview counts match ADAE (#1)". Guard tests in both suites enforce the convention. - 3Evidence
scripts/evidence.mjsnormalizes testthat and vitest into oneevidence.jsonper module, with the data → ARD → display traceability object attached. - 4PageThis site joins the matrix extract to the evidence set and publishes it.
- 5Guards
requirements:checkandevidence:checkfail CI when a committed artifact drifts from a fresh run.
Requirement ID scheme
All IDs match ^[A-Z]{2,4}-[A-Z]+-\d+[A-D]?$ — unchanged from safety.viz, because every downstream tool depends on it.
- TFL- TFL Builder engine
- DSP- per-display requirements
- TXT- Text Library blocks
- RPT- Report template assembly
- TRC- traceability and provenance
- QC- the quality framework itself
Test naming, both suites: "<REQ-ID>[, <REQ-ID>]: <description> (#1)".
Reproduce
npm ci
npx vitest run # the JS suite
Rscript qc/run-tests.R # testthat → qc/testthat-results.json
node scripts/requirements.mjs # matrices → docs/requirements/*.json
node scripts/evidence.mjs # both suites → docs/evidence/*/evidence.json
node scripts/requirements.mjs --check # drift guard
node scripts/evidence.mjs --check # drift guard
node scripts/site.mjs # this site → site/_build/