Decisions
- Context
-
The workflow needed an entry point and a minimal traceability core.
- Decision
-
The change is the entry point, and the requirement is the spec unit; both belong to the Tier-1 core. Use cases and goals are deferred to growth roles.
- Consequences
-
No mandatory use-case ceremony; the requirement is the durable contract a change addresses.
- Context
-
OpenSpec nests scenarios inside requirements, but antora-tracer is a flat typed graph.
- Decision
-
Scenarios remain prose inside a requirement body, and a test verifies the requirement. A scenario role is a later growth option.
- Consequences
-
Coverage is tracked at requirement granularity; no scenario-level traceability yet.
- Context
-
Most choices are domain or specification clarifications, not architecture.
- Decision
-
Record design as the decision role. Drop the ADR and design-concept distinction; add a design-concept role later if stable abstractions are needed.
- Consequences
-
One decision role; no forced decision-to-concept link.
- Context
-
In-place edits break the referential integrity of the traceability graph.
- Decision
-
An approved requirement is immutable: a change to its meaning supersedes it with a new requirement. Typos may be edited in place.
- Consequences
-
Append-only requirements with a supersedes lineage edge; some document sprawl.
- Context
-
The core
spec-driven-developmentpreset’schange.adocnow carries a five-field template (Rationale, Outcome, Out of Scope, Open Questions, Notes), but tracer-spec extendsminimaland owns its own guidance. - Decision
-
tracer-spec’s change role keeps the established three fields (Rationale, Outcome, Out-of-scope), matching CHG-004 and the current skill fallback.
- Consequences
-
tracer-spec and the core preset diverge on the change field set. The skill follows whatever the guidance declares, so divergence is tolerated, and Open Questions and Notes can be added later as growth.
- Context
-
Conformance verification has no home in the workflow:
validateis structural, andapplyself-reports its own evidence. - Decision
-
Fold the conformance check into
tspec-archiveas a gate before close, performed by a cold, read-only reviewer. Do not add a dedicatedverify-changeskill. - Consequences
-
The skill count stays at six, and verification is always and only a precondition to close, so the
verifiedstate remains self-claimed byapply.
- Context
-
MADR structures per-option advantages and disadvantages as a separate "Pros and Cons of the Options" section, but tracer-spec decisions are flat AsciiDoc labeled lists.
- Decision
-
Nest each option’s good and bad as sub-bullets under Options, keeping the field list flat as Context, Options, Decision, Rationale, and Consequences.
- Consequences
-
Field derivation and AsciiDoc rendering stay uniform, options are enumerated once, and a reader sees each alternative with its trade-offs inline.
- Context
-
The tracker is a tracer-spec orchestration concern, but the workflow’s only configuration file is
traceability.yml, which belongs to the antora-tracer core. Placing tracker settings there would make tracer-spec inject content into a file owned by a dependency it adds onto. - Options
-
-
Add a
tracker:block totraceability.yml— one file, but leaks tracer-spec content into antora-tracer’s configuration.-
Good: no new file; skills already read this file.
-
Bad: couples tracer-spec configuration to a file antora-tracer owns and validates.
-
-
A tracer-spec-owned
tspec.yml— a parallel file scaffolded besidetraceability.yml.-
Good: keeps the dependency boundary clean; tracer-spec owns its own configuration.
-
Bad: a second configuration file to discover.
-
-
- Decision
-
A tracer-spec-owned
tspec.yml. - Rationale
-
traceability.ymlbelongs to antora-tracer, which has no dependency on tracer-spec; tracer-spec is an independent add-on and should own its configuration. - Consequences
-
Two configuration files. The
tspec-trackskill readstspec.ymldirectly, and the command-line tool stays thin.
- Context
-
A change item must reference its tracker issue. Two candidate forms: a
trackerIdheader attribute or atracker:<id>[]relation macro. - Options
-
-
A
trackerId=header attribute.-
Good: arbitrary attributes are already parsed into
item.attributes, so no grammar or core change; the issue stays outside the graph. -
Bad: antora-tracer does not validate or render the link.
-
-
A
tracker:<id>[]relation macro.-
Good: consistent with existing relation syntax; potentially matrixable.
-
Bad: the target is not a graph item, so the edge dangles on validation or requires declaring an
issuerole that drags tracker data into the graph.
-
-
- Decision
-
A
trackerId=attribute. - Rationale
-
The issue is a pointer, not a traceability item; the parser already stores arbitrary attributes, so no core change is needed and validation stays quiet.
- Consequences
-
The link is inert to antora-tracer — not validated, not in matrices — which is intended;
tspec-trackreads it from the item header.
- Context
-
Both a change and its tracker issue carry a status; if both own it, they drift. Two candidate models: bidirectional sync or a link with one-way status push.
- Options
-
-
Bidirectional synchronization — reconcile status in both directions.
-
Good: the tracker and the graph always agree.
-
Bad: needs conflict resolution and per-provider webhooks; the brittle path.
-
-
A link with one-way push — the change owns spec state; status is pushed to the tracker at lifecycle boundaries and never pulled back.
-
Good: one writer for status; no reconciliation logic; thin.
-
Bad: tracker-driven state changes are not reflected in the graph.
-
-
- Decision
-
A link with one-way push.
- Rationale
-
The acceptance gate is already human; the agent mirrors the human’s decision into the tracker. Reconciliation adds complexity with no benefit to spec traceability.
- Consequences
-
Tracker-driven state changes are ignored by design. Teams that want the tracker to be the execution source of truth mirror it manually, or a future change adds an explicit pull path.
- Context
-
Tracker interaction spans propose (link or create), apply and archive (status push), and a new import path. It could be folded into the existing lifecycle skills or centralized in one.
- Options
-
-
Extend
tspec-propose,tspec-apply, andtspec-archive— each grows tracker calls.-
Good: no new skill; the lifecycle reads as one flow.
-
Bad: spreads provider-specific logic across skills that otherwise stay provider-agnostic.
-
-
One
tspec-trackskill — all tracker interaction in one place.-
Good: provider specifics (gh CLI, Jira REST, transition names) change together and live together; import delegates item-writing to propose’s machinery.
-
Bad: an extra skill in the workflow.
-
-
- Decision
-
One
tspec-trackskill. - Rationale
-
Provider specifics change together and should live together; keeping them in one skill leaves the six lifecycle skills provider-agnostic.
- Consequences
-
The lifecycle skills stay unchanged;
tspec-trackis the single place to add or fix a provider.
- Context
-
Requirement statements leak implementation detail. Candidates: strengthen the propose skill, add a validation rule, or add a reviewer.
- Options
-
-
Strengthen the propose skill’s Rules with a self-check.
-
Good: catches the leak where requirements are authored; cheap.
-
Bad: advisory — the authoring agent must apply it.
-
-
A validation or lint rule.
-
Good: automatic and always-on.
-
Bad: "what not how" is semantic, so no structural linter can catch it.
-
-
A dedicated review skill.
-
Good: an independent check.
-
Bad: another skill and step for a one-bullet problem.
-
-
- Decision
-
Strengthen the propose skill’s Rules with a self-check that references the requirement guidance’s "Solution prescription" list.
- Rationale
-
Semantic leakage cannot be linted; the cheapest effective lever is a self-check at authoring time, reusing the flag list the guidance already defines.
- Consequences
-
Reduces but does not eliminate leakage; the human accept gate and the archive cold reviewer remain the backstops.
- Context
-
Each skill could get its own how-to page, or the workflow could be documented as one task. Candidates: seven per-skill pages, one combined page, or one page now with a split later.
- Options
-
-
One combined how-to page, "How to drive the workflow".
-
Good: the skills are one sequential workflow, not seven independent tasks; the sequence is the thing to learn.
-
Bad: a long page once any single skill accumulates standalone steps.
-
-
Seven per-skill pages.
-
Good: strictly one task per page.
-
Bad: 15-line pages hide the workflow sequence and fragment a walkthrough that is already linear.
-
-
- Decision
-
One combined how-to page now; split a skill into its own page only when that skill’s section grows real standalone steps.
- Rationale
-
The seven skills are phases of one task, so a single walkthrough models the workflow accurately; splitting is a mechanical cut with no rework when a section outgrows the page.
- Consequences
-
Keeps the how-to section at two pages (scaffold + workflow); per-skill detail lives in the reference catalog where it belongs.
tracer:links[]
- Context
-
guidance/change.adocandguidance/decision.adocare targets oftraceability.ymlroleGuidance, and their template content overlapsworkflow/authoring.adoc. Candidates: move them intoreference/, or keep them and fold the overlap. - Options
-
-
Keep them in place and fold
workflow/authoring.adocintoreference/roles.adoc.-
Good:
roleGuidancekeeps pointing at stable paths; no config edit. -
Bad: two reference-like pages remain outside the
reference/directory.
-
-
Move them into
reference/and updatetraceability.yml.-
Good: a clean
reference/directory. -
Bad: an unnecessary config change for pages the graph itself resolves.
-
-
- Decision
-
Keep the guidance pages in place; fold the duplicated template content into
reference/roles.adoc. - Rationale
-
The pages are config-coupled, not ordinary docs; moving them buys layout purity at the cost of a
traceability.ymledit with no functional gain. - Consequences
-
roleGuidancepaths stay stable;workflow/authoring.adocis removed and its content lands once inreference/roles.adoc.
tracer:links[]