feat(adr): capabilities active at adoption need no add decision (ADR-305, #582) - #583
Conversation
…t change's prior (#582) adr.yaml may list the capabilities a project had when it adopted adr/v1 under baseline. The add check skips them, and the first change on one needs no prior record. A later change names the earlier decision, ordered by date then number; cite now shares that ordering.
…86 migrates to v1 (#582) agent-ways declares twelve baseline capabilities. ADR-305 also widens §6's stale-citation wording to the targets adr cite already warns on. ADR-123 stays v0: it spans three capabilities and only constrain may list several.
Review: baseline capabilities (ADR-305, #582)What this changes: Verified: 1. High: which change counts as "first" shifts when older records migrate, and a frozen record can't be fixed
2. Medium: rejected and abandoned decisions count as the prior
3. Medium: the operator basis records the agent's words as the operator's
Fix: record the act honestly. For example: 4. Low-medium: ADR-305 does not fully describe what the code does
5. Low: order edge cases
6. Goldens: none pass vacuously, but some claims go untested
7. ADR-186 migration: mostly faithful, one reframingI compared against AssessmentThe code is small and defensive, and it validates malformed config cleanly. Finding 1 is the one to settle before merge: under the current rule, migrating older records can break ADR-186 once it's frozen. Findings 2 and 3 are quick fixes. Recommend revise. AI-assisted review via Claude |
…so the prior never depends on migration order Only decisions dated after adoption count as the prior for a bare change on a baseline capability; constrain, rejected and abandoned decisions never do. Goldens cover date-before-number ordering, a malformed baseline, a second change that names the first, and a rejected prior. ADR-305 now describes the rule as built, records the operator's picks as selections of agent-written labels at level guided, and includes archived in the stale-citation list. ADR-186's Summary names the container and drops a probe the original never raised.
|
Review addressed in a6f71e8:
Still for the operator: whether ADR-186 gets an operator basis. That needs a considered entry in the operator's own words, per ADR-304 §11. |
Closes #582. Stacked on #581.
Summary
baselineinadr.yamlthe capabilities it had when it adopted adr/v1. Those need noadd, and the firstchangeon one needs no prior record. A capability declared after adoption still needs anadd. ADR-305 amends ADR-304 §6 to say so, and widens §6's stale-citation wording to the targetsadr citealready warns on (deprecated, rejected, abandoned).baselinerestores the check for it.add, which misstates a corpus that predates the contract. At the other end the vocabulary is its own authority and new capabilities enter unrecorded. The rule sits between them.Changes
rules_v1.py: validatesbaseline, and the add check skips baseline names.rule_v1_change_replaceslets the first change on a baseline capability stand without a prior.decision_orderis now shared withcmd_cite.adr.yaml: twelve baseline capabilities.adrhas ADR-304 as its add, so it isn't listed.changeonadr, amends ADR-304#6). Its operator basis quotes the option picked in session.changeontesting, withmodel: unrecorded. Every original section is kept, and the Summary is drawn from the existing text.Not done
ADR-123 stays v0. It spans attend, matching and disclosure, and only
constrainmay list several capabilities. It needs either a split or the multi-capability rule, which this PR does not decide.make test-adr: lint 12, archive 41, golden 101, macro 31, all passing.adr linton the repo: 0 errors, 0 warnings.