ADR-0087: The Scope Traceability Report — One Derived Overview Artifact, Never a Controlled Document¶
- Status: accepted (Nicolas 2026-07-21: "reads good")
- Date: 2026-07-21
- Deciders: Nicolas Burri (question: "one full traceability matrix … summarizing all relations and gaps in one big table … one central point for overview?"), design by Claude.
- Relates to: ADR-0086 (requirement chains + CSV — the machine form this report is the human form of), ADR-0079/0082 (the risk chain model), ADR-0049 (document-level coverage rules), ADR-0083 (the audit pack this report joins), ADR-0074 + its 2026-07-20 clarifications (the derived-content boundary + permission-conditional inclusion precedent), ADR-0080 (per-view gating), ADR-0069 (file attachments — the milestone-snapshot vehicle).
Context¶
"Show me your traceability matrix" is a stock audit request. Today the answer is distributed: three workspace sub-pages, a CSV path export, and per-document annexes. The overview exists but has no single artifact. The tempting legacy answer — a controlled document whose content is the matrix — is the exact pathology this system replaced: matrix-as-content is stale the moment a link changes, and either rots quietly or forces perpetual re-release rounds. It would also break the derived-never-stored doctrine. Separately, "one big table" cannot honestly hold the data: requirement chains and risk chains have different shapes and depths (the ADR-0086 discussion), so a unified grid would be mostly empty cells.
Decision¶
- The artifact is a generated, per-scope "Traceability report" PDF — derived live at generation from the EXISTING read models (requirement chains, risk traceability, document-level coverage rules, suspect verdicts). Nothing new is stored; the report is a point-in-time compilation and says so.
- Front page: the gap digest — the actual "one central point". One summary of everything unhealthy in the scope: stakeholder requirements satisfied / fully verified (of N), unverified software requirements, the risk gap counts (no mitigating control / not implemented / not verified / residual flags), document-level coverage-rule gaps, and suspect links. Counts link (PDF-internally) to their detail sections.
- Then sectioned detail tables, deliberately NOT one mega-table: requirement chains (stakeholder → satisfied-by → verified-by, per-hop suspect), risk chains (risk → controls → implementation → verification, the annex tables scaled to scope), document-relation coverage (the ADR-0049 rule results). Each section reuses the visual language its on-screen sibling already established (neutral score tokens, gap pills as red flags, em-dash absences).
- Honesty chrome, unchanged from the annex precedent: "Derived — as at export" heading discipline, the ADR-0074 identity header + uncontrolled-copy band, and the explicit statement that the report is not controlled content. Two exports on two days may differ — by design and by label.
- Delivery, two points:
- a "Traceability report (PDF)" download on the workspace hub,
VIEW_TRACEABILITY-gated exactly like the views it aggregates; - an entry in the scope audit pack (zip:
traceability-report.pdfbefore the manifests, listed + hashed in the manifest like every entry; merged: a closing chapter). Inclusion is permission-conditional on the exporter holdingVIEW_TRACEABILITY— the ADR-0074 clarification point-4 rule verbatim; the pack must never become a backdoor around per-view gating. - Milestone snapshots ride existing machinery: to archive the traceability state at a design-review milestone, export the report and attach it to the review RECORD as an ADR-0069 FILE attachment — a frozen, reviewed snapshot as a record, without the tool pretending derived data is content. A first-class "snapshot entity" is deliberately NOT built; re-entry trigger: a real workflow where attach-to-record demonstrably fails.
- Deliberately rejected: a controlled matrix document (stale-or-perpetual-re-release, breaks derived-never-stored); one unified mega-table (heterogeneous chains — empty-cell lies); any stored/cached report state.
Consequences¶
- A composition-and-rendering slice over shipped derivations (RequirementChainService, RiskTraceabilityService, the coverage-rule engine) — no schema change, no new authz concept.
- The ADR-0086 CSV remains the machine-consumption form; this report is the human/audit form — the two must derive from the same read models so they can never disagree.
- Audit pack manifests gain the report entry (sha-listed); the pack README notes the report's derived nature and its permission-conditional presence.
- REQ rows join the pending v1.8 block when the slice ships; e2e + screenshot/PDF-visual verification per house discipline; the seeded SAMPLE + PULSEMED corpora are the acceptance fixtures (real gaps, real chains, real suspect states on day one).