Development record
2026-09-30 — BU1 and BT1 are applied under H6, the person's approval of v0.12.0 as a breaking release in the human-step interview ("next release: APPROVED as BREAKING v0.12.0 (lane-stage rename per BU1 + old command spellings removed per BT1), with a migration note in the release notes", 2026-09-29), by autonomous run A's lane breakingStages. The implement loop's lane stages are `stage`: the run state file's lanes and record lines, the `implement step` and `implement receipt` results (`performed` became `performed_stage`, `step` became `stage`), every loop refusal (`refusal.stage`) and the status board's lane; the spec's `spec_step`, `step_title` and `pending` keep "step", and the verb keeps its name, `implement step` performing one stage. The state file is schema version 4, and a file of versions 1 to 3 is migrated on read, never rewritten by the read: each `step` is carried over to `stage` in memory and the run's next mutation writes version 4, as the loop already did for versions 1 and 2, while such a file that already says `stage` is refused. Migration was chosen over refusing the old file so a run in progress survives the upgrade (the lane's technical ruling). The one-release stubs itd-2609212130136102 left are removed in the same cut: `ahoy dry-run`, `ahoy identity-check`, `version` (with `--check`), `docs lint` and `site check` are unknown commands, and bare `identity` and bare `ahoy remote` list their sub-verbs; the CLI's moved-spelling machinery goes with them while the release snapshot keeps its `moved_to` field, which the snapshots the guardrail diffs against still carry. The upgrade guide `docs/how-to/upgrade-to-v0.12.0.md` names every renamed field and removed spelling with its replacement. BU1 ruled on the build loop only, so the shared run's `implement check` vocabulary, which also says "step", is left as it is and captured as iss-2609292359485570 for a ruling. Resolves iss-2609291313276243 and iss-2609251324599468; criterion 5 of itd-2609212103565953 is met, and its spec stays open for criterion 2.
2026-09-30 — BU1 and BT1 are applied under H6, the person's approval of v0.12.0 as a breaking release in the human-step interview ("next release: APPROVED as BREAKING v0.12.0 (lane-stage rename per BU1 + old command spellings removed per BT1), with a migration note in the release notes", 2026-09-29), by autonomous run A's lane breakingStages. The implement loop's lane stages are stage: the run state file's lanes and record lines, the implement step and implement receipt results (performed became performed_stage, step became stage), every loop refusal (refusal.stage) and the status board's lane; the spec's spec_step, step_title and pending keep "step", and the verb keeps its name, implement step performing one stage. The state file is schema version 4, and a file of versions 1 to 3 is migrated on read, never rewritten by the read: each step is carried over to stage in memory and the run's next mutation writes version 4, as the loop already did for versions 1 and 2, while such a file that already says stage is refused. Migration was chosen over refusing the old file so a run in progress survives the upgrade (the lane's technical ruling). The one-release stubs itd-2609212130136102 left are removed in the same cut: ahoy dry-run, ahoy identity-check, version (with --check), docs lint and site check are unknown commands, and bare identity and bare ahoy remote list their sub-verbs; the CLI's moved-spelling machinery goes with them while the release snapshot keeps its moved_to field, which the snapshots the guardrail diffs against still carry. The upgrade guide docs/how-to/upgrade-to-v0.12.0.md names every renamed field and removed spelling with its replacement. BU1 ruled on the build loop only, so the shared run's implement check vocabulary, which also says "step", is left as it is and captured as iss-2609292359485570 for a ruling. Resolves iss-2609291313276243 and iss-2609251324599468; criterion 5 of itd-2609212103565953 is met, and its spec stays open for criterion 2.
Frontmatter
| id | dcn-2609300000000003 |
|---|---|
| type | decision |
| date | 2026-09-30 |
.abcd/work/decisions/dcn-2609300000000003-bu1-and-bt1-are-applied-under-h6-the.md
open on GitHub ↗ · commit history ↗
mentions5
- iss-2609251324599468The stubs itd-2609212130136102 leaves for one release are to be removed in the release after it: ahoy dry-run, ahoy identity-check, version, docs lint and site check (deprecated commands), and the bare answers of identity and ahoy remote (whose sub-verbs stay). The spec named a remainder spec minted at close for this, but a remainder close keeps the intent planned while the run closed it shipped, so the removal is held here instead; removing them narrows the surface again and needs the release to declare it.
- iss-2609291313276243The glossary entry for step (.abcd/development/brief/glossary/core/step.md) says the loop's step interface, abcd implement step, uses the same word for the same thing as a spec's steps: the next piece of the current spec. The loop does not work that way: implement step performs one stage of the current lane (worktree, brief, implement, validate, land), and a lane lands one spec step, so the state file, the JSON payloads (step, performed, refusal.step) and the command pages already use one word for two things and qualify the spec's as spec step. itd-2609212103565953 criterion 5 asks the command page to describe them as one word for one thing, which cannot be written truthfully until someone rules which of the two keeps the word (rename the lane's stages, or change what implement step means) or restates the criterion.
- iss-2609292359485570The shared run's bounds use 'step' for a third thing: abcd implement check <lane|release|review|audit|land> asks whether a session 'may take a step', its verdict carries the point under a JSON 'step' field (internal/core/implement/bounds.go, Step/StepLane/StepRelease/StepReview/StepAudit/StepLand), and commands/implement.md and brief 27-implement.md speak of 'the release step' and 'a step that is not a claim'. BU1 (2026-09-29) settled that in the build loop 'step' names a spec's piece and a lane's are stages; the check vocabulary, a point in a shared run where the second session's bounds are checked, was not in that ruling and still says step.
- itd-2609212103565953A spec lists its steps, and the build lands them one at a time
- itd-2609212130136102abcd's verbs consolidate: modes become flags and five checks become one lint