Reqtrace v2.1.5 Architecture Decision Records
ADR-001 — Do not ship hierarchy presets in core
Status: Accepted for v2.1.5
Decision: Reqtrace v2.1.5 will not ship built-in hierarchy presets.
Tools considered:
| Tool | What it already owns |
|---|---|
| Doorstop | Document-tree requirements management with document prefixes and parent document relationships |
| Sphinx-Needs / Open-Needs | Configurable need types, links, filters, tables, and flows |
| OpenFastTrace | Artifact-type coverage chains with explicit coverage/dependency semantics |
Reasoning: Hierarchy presets would make Reqtrace appear to choose one requirements model too early. Real teams use different structures: document trees, typed docs-as-code objects, artifact-coverage chains, tracker-native issue hierarchies, and flat ADR logs. Reqtrace should not compete with tools that already own those hierarchy models.
Reqtrace core responsibility: Reqtrace owns portable evidence handles, annotations, registry records, generated ledgers, JSON reports, and strict checks.
Delegated responsibility: Teams that want opinionated hierarchy presets should use Doorstop, Sphinx-Needs/Open-Needs, OpenFastTrace, or their tracker-native hierarchy. Reqtrace can coexist by using those IDs as handles.
Implementation consequence: Do not add preset commands, preset templates, auto-numbering, or preset validation in v2.1.5.
ADR-002 — Reserve parent and links, but do not validate hierarchy semantics yet
Status: Accepted for v2.1.5
Decision: Reqtrace v2.1.5 will document and preserve parent and links fields in docs/handle-registry.jsonl, but will not validate their semantics in check --strict.
Clarification: In v2.1.5, register writes handle, type, and source. It does not write parent or links. Those fields may be added manually or by downstream tools and must be preserved by Reqtrace when present.
Tools considered:
| Tool | Relationship model |
|---|---|
| Doorstop | Parent document prefixes and item links define document-tree traceability |
| Sphinx-Needs / Open-Needs | Need objects support configurable links, including default links and parent_needs behavior |
| OpenFastTrace | Separates coverage, need, and dependency semantics |
Reasoning: Vertical hierarchy and horizontal links are real, but their meanings vary. A parent may mean “belongs under this document,” “satisfies this requirement,” “implements this design,” or “is a child work item.” A link may mean “depends on,” “supersedes,” “verifies,” “cross-cuts,” or “references.” Validating those relationships before real usage data would hard-code the wrong semantics.
Reqtrace core responsibility: Reqtrace preserves relationship metadata when present.
Delegated responsibility:
Downstream tools may write and traverse parent and links immediately. Dedicated hierarchy tools may enforce stricter relationship rules.
Implementation consequence:
parent and links are reserved fields. They must not be stripped or rejected. They must not be validated by check --strict in v2.1.5. register --parent and register --link are deferred.
ADR-003 — Do not implement a native grep proxy in v2.1.5
Status: Accepted for v2.1.5
Decision: Reqtrace v2.1.5 will not implement reqtrace grep.
Tools considered:
| Tool | What it already owns |
|---|---|
| GNU grep | Universal plain-text search baseline |
| ripgrep | Fast recursive repository search with developer-friendly defaults |
| RTK | AI-agent-oriented CLI proxying and compact command output |
Reasoning:
Reqtrace’s value is not search performance or command-output compression. Its value is the convention: @reqtrace <handle> markers remain plain text and searchable with ordinary tools. A native grep proxy may be useful later, but adding it now risks weakening the “grep-first” promise by making discovery feel Reqtrace-dependent.
Reqtrace core responsibility: Reqtrace keeps annotations grep-native and emits stable JSON for tools that need structured output.
Delegated responsibility: Use grep, ripgrep, or RTK for search and compressed command output.
Implementation consequence:
Do not add reqtrace grep in v2.1.5. Documentation may show examples using grep, rg, and rtk grep.
ADR-004 — Do not implement native HTML reports in v2.1.5
Status: Accepted for v2.1.5
Decision: Reqtrace v2.1.5 will not implement native HTML report generation.
Tools considered:
| Tool | What it already owns |
|---|---|
| Sphinx-Needs / Open-Needs | Documentation-native tables, flows, filtering, and rendered trace views |
| OpenFastTrace | Trace reports, including HTML-oriented reporting workflows |
| GitHub Actions Job Summaries | CI-native Markdown report surfaces |
Reasoning: HTML reporting is presentation. Reqtrace core should emit stable machine-readable contracts first: JSON scan output, JSON report envelopes, generated JSONL ledgers, and deterministic status lines. Once those contracts are stable, any downstream renderer can generate HTML, Markdown, dashboards, or CI summaries.
Reqtrace core responsibility: Provide stable JSON and JSONL output.
Delegated responsibility: Downstream tools render HTML or CI summaries from Reqtrace outputs.
Implementation consequence: Do not add native HTML reports in v2.1.5. Add schema documentation so renderers know what to consume.
ADR-005 — Do not implement native blame in v2.1.5
Status: Accepted for v2.1.5
Decision: Reqtrace v2.1.5 will not implement --blame.
Tools considered:
| Tool | What it already owns |
|---|---|
| Git blame | Line-level commit provenance |
| Reqtrace ledger consumers | Occurrence-level evidence provenance from scan and trace-ledger.jsonl |
| RTK / downstream agent tools | Compact provenance presentation for agent workflows |
Reasoning: “Blame” has multiple meanings: Git commit attribution, evidence occurrence identity, reviewer attribution, actor attribution, and downstream audit provenance. Implementing native blame too early risks choosing the wrong semantic model. v2.1.5 should instead make occurrence objects complete enough that downstream tools can join scan output to the ledger and produce their own blame view.
Reqtrace core responsibility:
Expose complete occurrence records with handle, path, line, kind, and id.
Delegated responsibility: Downstream tools join Reqtrace output with Git, local ledgers, review systems, or agent logs.
Implementation consequence:
Do not add --blame in v2.1.5. Complete scan --format json instead.
ADR-006 — Stabilize machine contracts before adding new UX surfaces
Status: Accepted for v2.1.5
Decision: Reqtrace v2.1.5 will prioritize machine-readable stabilization over new product surfaces.
Tools considered:
| Tool | What it already owns |
|---|---|
| GitHub Actions | CI execution and job summaries |
| pre-commit | Local hook execution before commit |
| downstream agents / CLIs | Consuming JSON contracts and presenting tailored output |
Reasoning: Reqtrace must be safe for unconditional agentic usage before it expands. Silent success, incomplete JSON fields, unversioned report envelopes, and missing schema documentation create ambiguity for agents. v2.1.5 should remove that ambiguity first.
Reqtrace core responsibility:
Provide stable command outputs, stable schemas, deterministic exit codes, and a low-friction register command.
Delegated responsibility: CI, hooks, agents, and dashboards decide how to present those stable outputs.
Implementation consequence:
Implement only the stabilization tasks: complete scan --format json, envelope report --format json, status check --strict, add register, document schemas, and document hierarchy patterns.