feat(adr): agent-ways adopts adr/v1 and migrates a first sample - #581
Conversation
- ADR-179 is a retire on install, targeting cli:migrate, enacted by b4f63aa, the commit that removed the migrator. - ADR-186 is an add on testing. - ADR-123 is a change on disclosure. It supersedes records still on v0, so lint warns until they migrate. Each keeps every original field and section, and gains a Summary drawn only from the record's own text. Each basis is grounded in the record's own evidence and precedents. None gets an operator entry, since none of these records quotes the operator. The agent model is recorded as 'unrecorded', because these records never named one. The tier 2 migration rehearsal made the same choices. Example ADR numbers in two agent prompts and the migration way carry an adr-cite-ignore marker. adr cite on this repo is now 0 errors and 128 warnings, which are citations of superseded records. Lint under adr/v1 is 0 errors; 91 records remain on v0.
d3e941a to
078909a
Compare
Review: adr/v1 adoption and the first migration sampleWhat this changes: declares Verdict: revise before merge. Two findings matter most. The Gates run
High1. 2. ADR-123's Summary does not match its body.
Suggested Decided line: "one firing engine with pluggable curves serves attend and ways; each caller supplies its own monotonic axis (seconds for attend, token position for ways). Ways also gains reactive firing through postcheck, and Medium3. ADR-123 omits the operator direction its body quotes. Line 280 says "the code reuse Aaron surfaced in this conversation". Line 304 says "Rejected on Aaron's direction: shims are carryovers…". ADR-304 §7 says an operator basis migrates "where the record already quotes operator direction". This is under-reporting, not invention. The PR's Confident probe ("each is grounded in its own text: evidence plus precedent") is therefore incomplete for ADR-123. Fix: add 4. The evidence bases point back into the record itself. ADR-179:10, ADR-186:8, ADR-123:8. "The deferral audit in this record's Context" meets the lint rule, but it has the self-referencing shape that §11 is meant to break. The facts each record rests on sit outside the corpus, so cite those directly:
ADR-123's "divergent decay models" also contradicts its Context: "The math is identical across both tools … Only the units differ" (line 45). The evidence is duplicated math, not divergent models. 5. ADR-123 spans more than 6. ADR-186 as 7.
Low8. 9. 10. An empty 11. ADR-186's Summary is slightly loose. Tier 1 runs on PRs that touch the install path and on pushes to 12. The new 13. The capability vocabulary has overlaps and gaps.
14. Smaller points.
What is solid
AI-assisted review via Claude |
…re records land
- ADR-123 and ADR-186 go back to v0.
- ADR-123's Summary misread its own body, and the record spans several
capabilities, which no single-capability change expresses.
- ADR-186 is an add on a capability, testing, that existed before any
record, so no add is honest. That is a contract gap, filed for the
operator.
- ADR-179 keeps its migration, with two fixes.
- Its evidence points outside the record, to the release tags.
- Its target is cli:ways-migrate, since agent-ways ships four CLIs.
- The two subagent prompts move into cite.exclude instead of carrying
markers a subagent could copy. adr.yaml declares basis_sources
explicitly.
- The frozen snapshot reads the default branch's history (origin/HEAD)
when there is one. A decision still in review on a feature branch can be
revised, and it freezes where it lands. Without a remote default, HEAD's
history counts, so the goldens are unchanged.
…on relative paths Found by the tier 2 migration rehearsal: the agent migrating ADR-179 and ADR-186 reported that adr lint on a relative path falsely failed precedent grounding. The grounding map keys on corpus paths, which are absolute, and a record parsed from a relative argument never matched them. Arguments are now resolved. A regression golden lints ADR-109, which is grounded only through precedent, by relative path. The adr-migrate scenario, per the #581 review: - setup refuses records that are already v1 - check fails on any invented operator basis, considered or concern entry - check confirms every original heading survives - the rubric regexes are word-bounded, with a threshold of 3 An empty max_turns falls back to the default. The fixture's CLAUDE.md warns that /fixture is mounted live, so the branch must not change during a run.
|
Review addressed in ce184a6 and b360990. The sample is now narrower and honest. ADR-179 stays migrated, with its evidence pointing outside the record (the release tags) and its target
Items 5 and 6 are a real contract gap, filed as #582 for the operator: a baseline add, capabilities that start active, or a multi-capability change. Other items:
Item 1 and item 7 (the rehearsal):
The first real rehearsal (both records starting from v0) turned up a tool bug. The migrating agent reported that New design fix: the frozen check caught my own mid-review edit to ADR-179. A record now freezes where it lands: the snapshot reads the default branch's history ( For the operator (item 13): the capability list's overlaps and gaps are yours to call. Candidates: config/guards, matching/introspection, and no home yet for the method, localization, binary structure or the CLI output contract. |
|
Rehearsal rerun: |
guards folds into config, introspection into matching. method and cli are new; localization joins disclosure and binary structure joins install. Operator's call on the #581 review.
|
Operator decisions from this morning's review:
|
Stacked on #580 → #579 → #578 → #576 → #575 → #574 → #573. Closes #566. Human-gated: this sets direction for this repo.
Summary
Decided: agent-ways'
adr.yamldeclarescontract: adr/v1. That covers:cite.excludefor fixtures and the adr tool's own sourcesA first sample migrates:
retireoninstall, targetingcli:migrate, enacted byb4f63aa6addontestingchangeondisclosure, superseding records still on v0ADR-304 gains a second
consideredentry with your words after reading it in full.Trades away: every new decision in this repo now needs the v1 frontmatter and a Summary, as ADR-304 intends. The 91 unmigrated records keep linting as v0.
One-way? No. Removing
contract:fromadr.yamlreturns the repo to v0 rules, and the migrated records' extra fields are ignored under v0.State after this PR:
adr lint: 0 errors. There are 12 warnings, 11 of them capabilities with noadddecision yet, expected while records are on v0.adr cite: 0 errors and 128 warnings, all citations of superseded records.Probes:
adr,docs,matching,disclosure,authoring,attend,install,config,introspection,governance,loop,guards,testing. Split, merge or rename freely; each one-liner is the capability's only description.agent: {name: Claude, model: unrecorded}, because pre-v1 records never named a model. ADR-304 didn't anticipate historical records. Isunrecordedthe right convention, or shouldagentbe optional for migrated records?Inversion: one end migrates nothing and leaves every record v0 until touched, per §7. The other end migrates all 91 now. This PR adopts the contract and migrates a sample that exercises each shape: an enacted retire, an add, a change over v0 priors. Is the sample right, or should adoption wait until more of the corpus moves?
Rehearsal (tier 2 container)
tests/fixtures/docker/scenarios/adr-migratehad a real agent (claude-sonnet-5) migrate ADR-179 and ADR-186 on a copy of this corpus. It cost $1.10 over 40 turns. It made the same choices as this PR:model: unspecifiedrather than a guess.Its check.sh never ran, because I switched branches during the run and the fixture mounts live from the working tree. A rerun is in progress, and its result will follow as a comment.
Not done