Development record
abcd's verbs consolidate: modes become flags and five checks become one lint
Press Release
abcd's command list loses its modes-as-verbs and its five spellings of "check this repository", so the person's list holds about a dozen verbs.
"Twenty-four verbs, and three of them were the same check wearing different hats," said a product thinker reading
abcd --help. "Nowlintis the check,ahoyhas flags instead of sub-verbs for its modes, and--versionis where every tool keeps it. I can hold the list."
Why This Matters
On 2026-09-21 the product thinker asked whether fifty-three verbs all make sense. The command-line guidelines the field converges on say: a sub-verb for a distinct action, a flag for a mode of the same action, and a top-level list a newcomer can hold. Three of ahoy's sub-verbs are modes; version is a flag everywhere else; intent new is a dead alias; and lint, docs lint, lint outbound, site check and identity render are five spellings of one act. Together with the agent block (itd-146) the person's list falls to about fourteen. The cut is breaking, in the same major as the four rename intents already in the run.
Mechanism
We expect a person to hold a list of about a dozen verbs and stop asking which of five checks to run, because the checks become one verb with targets and the modes stop looking like actions; shown wrong if the same questions recur after it ships.
Scope Conditions
None stated.
What's In Scope
- Modes to flags:
ahoy dry-run,ahoy identity-check,ahoy remotebecomeahoy --dry-run,--identity,--remote; the old spellings answer with the new one and exit non-zero for one release. --versionreplacesabcd version;version --checkbecomesupdate --check;intent newis removed.- One lint with targets:
abcd lint(all),lint docs,lint outbound,lint site,lint identity;docs citeandsite buildstay, because they write. - The record of the move: every moved spelling in the surface snapshot with its successor; the command pages and the brief's surface chapters say the new forms only; the release derives as breaking.
- The count: the person's default list (itd-146) is at most fourteen verbs after this ships.
What's Out of Scope
- The people/agent split (itd-146).
- Renaming any record family verb (
capture,intent,spec).
Decisions
Ruled by the product thinker on 2026-09-21, in the interview that filed and planned this intent (adr-2609212115255771 records the vocabulary rulings it rests on):
- Modes to flags,
--version, the dead alias removed, and one lint with targets, in one breaking change (ruled 2026-09-21).
Open Questions
None open.
Acceptance Criteria
- Given
ahoy dry-run,ahoy identity-checkorahoy remote, when run after this ships, then each answers naming its flag form and exits non-zero, and the flag form does what the sub-verb did. - Given
abcd --version, when run, then it prints whatabcd versionprinted;abcd versionanswers naming the flag;update --checkdoes whatversion --checkdid;intent newis unknown. - Given
abcd lint docs,lint outbound,lint siteandlint identity, when run, then each does what its old spelling did,abcd lintruns them all, anddocs citeandsite buildare unchanged. - Given the surface snapshot, when regenerated, then every moved spelling is recorded with its successor, the pages and the brief say the new forms only, and the release derives as breaking.
- Given
abcd --help, when it renders after itd-146 and this ship, then the person's list counts at most fourteen verbs.
Audit Notes
Fidelity review — receipt rcp-dd80f3fcae80 (verifier intent-auditor claude-fable-5-1).
Provenance: intent-auditor@claude-fable-5-1 · rubric_hash sha256:effa65b3e9e88ff29433b443ec2be159522a8b0b71cf1434526514aa61edb13e · prompt_hash sha256:a7dec6f142b4d0effcdc25320638cce616b7883884e5365c9861437d3b0294be Input attestations: diff:tree at 7c476185 (main lineage, itd-2609212130136102 shipped)@-;
Acceptance rollup: MET 5 · MET_WITH_CONCERNS 0 · NOT_MET 0 · INCONCLUSIVE 0
Per-criterion verdicts:
- ac-1 — MET: ahoy dry-run and ahoy identity-check are movedStub commands and bare ahoy remote is markMoved with its apply sub-verb live; each names its flag form on stderr and exits 2 (TestMovedSpellingsAnswerWithTheirSuccessor), the three flags are declared mutually exclusive on ahoy, and TestAhoyDryRunFlagPrintsTheDetectionEnvelope, TestAhoyIdentityFlagHoldsTheCommitIdentityToThePin and TestAhoyRemoteFlagReportsTheRemoteSettings show the flag doing what the sub-verb did; all green at BASE evidence: internal/surface/cli/cli.go:3093 — "ahoyCmd.AddCommand(movedStub("dry-run", "abcd ahoy --dry-run"))" evidence: internal/surface/cli/cli.go:3153 — "markMoved(remoteCmd, "abcd ahoy --remote")" evidence: internal/surface/cli/cli.go:2950 — "ahoyCmd.MarkFlagsMutuallyExclusive("dry-run", "identity", "remote")" evidence: internal/surface/cli/moved.go:58 — "func movedStub(use, successor string) *cobra.Command {" evidence: internal/surface/cli/consolidate_test.go:54 — "func TestMovedSpellingsAnswerWithTheirSuccessor(t *testing.T) {" evidence: internal/surface/cli/consolidate_test.go:141 — "func TestAhoyDryRunFlagPrintsTheDetectionEnvelope(t *testing.T) {"
- ac-2 — MET: version is a movedStub naming abcd --version and its --check flag names update --check; update carries --check with the old report; TestRootVersionFlagPrintsWhatVersionPrinted and TestIntentNewIsUnknown (which also proves no draft titled new is filed) are green evidence: internal/surface/cli/version.go:71 — "cmd := movedStub("version", "abcd --version")" evidence: internal/surface/cli/version.go:79 — "cmd.Flags().BoolVar(&check, "check", false, "moved to: abcd update --check")" evidence: internal/surface/cli/update.go:106 — "cmd.Flags().BoolVar(&check, "check", false, "fetch the latest release once and compare it with this binary" evidence: internal/surface/cli/consolidate_test.go:276 — "func TestRootVersionFlagPrintsWhatVersionPrinted(t *testing.T) {" evidence: internal/surface/cli/consolidate_test.go:295 — "func TestIntentNewIsUnknown(t *testing.T) {"
- ac-3 — MET: lint registers outbound, docs, site and identity sub-verbs; docs lint and site check are stubs naming lint docs and lint site and bare identity names lint identity; TestLintTargetsAreRegistered, TestLintIdentityRendersTheIdentityReport, TestLintSiteRefusesWithoutAComposition and TestBareLintRunsEveryTarget are green, and docs cite and site build stay live; identity render stays as a distinct act by the 2026-09-25 ruling, so the fifth spelling is read as the bare identity report
evidence: internal/surface/cli/lint.go:90 — "cmd.AddCommand(newLintDocsCommand(asJSON))"
evidence: internal/surface/cli/cli.go:604 — "docsCmd.AddCommand(movedStub("lint", "abcd lint docs"))"
evidence: internal/surface/cli/site.go:83 — "siteCmd.AddCommand(movedStub("check", "abcd lint site"))"
evidence: internal/surface/cli/identity.go:35 — "markMoved(identityCmd, "abcd lint identity")"
evidence: internal/surface/cli/consolidate_test.go:311 — "func TestLintTargetsAreRegistered(t *testing.T) {"
evidence: internal/surface/cli/consolidate_test.go:359 — "func TestBareLintRunsEveryTarget(t *testing.T) {"
evidence: dcn-2609250000000023 — "
identity renderproposes a correction, a distinct act, and stays" - ac-4 — MET: the snapshot records moved_to per stub (TestMovedSpellingsAreRecordedWithTheirSuccessor), the brief appendix omits a whole-moved stub and prints the successor where a bare form moved, the generated reference and the pages carry no section for an old spelling (TestReferenceNamesTheNewFormsOnly, TestReferenceUsageNeverOffersAMovedBareForm), and the intent declares impact: breaking, which DeriveNext maps to the breaking bump
evidence: internal/surface/cli/consolidate_test.go:92 — "func TestMovedSpellingsAreRecordedWithTheirSuccessor(t *testing.T) {"
evidence: internal/core/surface/appendix.go:120 — "fmt.Fprintf(&b, "###
%s\n\nIt moved to%s.\n\n", p, c.MovedTo)" evidence: .abcd/development/brief/04-surfaces/12-version.md:100 — "It moved toabcd --version." evidence: internal/surface/cli/consolidate_test.go:451 — "func TestReferenceNamesTheNewFormsOnly(t *testing.T) {" evidence: .abcd/development/intents/shipped/itd-2609212130136102-abcd-s-verbs-consolidate-ahoy-s-three.md:10 — "impact: breaking" evidence: internal/core/changelog/version.go:38 — "func DeriveNext(prev launch.Semver, bump Impact) (launch.Semver, bool) {" - ac-5 — MET: TestPersonsListHoldsAtMostFourteenVerbs counts the verbs the default help lists and TestPersonVerbsCountsEveryListedVerb is its negative control on a fifteen-verb tree; both green at BASE evidence: internal/surface/cli/consolidate_test.go:420 — "func TestPersonsListHoldsAtMostFourteenVerbs(t *testing.T) {" evidence: internal/surface/cli/consolidate_test.go:434 — "func TestPersonVerbsCountsEveryListedVerb(t *testing.T) {"
Gap audit:
- honoured:
- modes to flags: the old spellings answer with the new one and exit non-zero for one release evidence: internal/surface/cli/consolidate_test.go:54 — "func TestMovedSpellingsAnswerWithTheirSuccessor(t *testing.T) {"
- a --json caller of a stub reads exactly one refusal on stdout evidence: internal/surface/cli/moved.go:66 — "cmd.SetOut(stderrOf{cmd})"
- one lint with targets; docs cite and site build stay because they write evidence: internal/surface/cli/lint.go:92 — "cmd.AddCommand(newLintIdentityCommand(asJSON))" evidence: internal/surface/cli/consolidate_test.go:114 — "for _, live := range []string{"abcd lint docs", "abcd ahoy remote apply", "abcd identity init"} {"
- the person's default list is at most fourteen verbs evidence: internal/surface/cli/consolidate_test.go:420 — "func TestPersonsListHoldsAtMostFourteenVerbs(t *testing.T) {"
- diverged:
- the intent's Why names
identity renderamong the five spellings of one check folded intolint; the delivery moves the bareidentityreport tolint identityand keepsidentity render(a proposal, a distinct act) as a live sub-verb documented in the brief, by the 2026-09-25 ruling evidence: internal/surface/cli/identity.go:38 — "Use: "render"," evidence: .abcd/development/brief/04-surfaces/19-identity.md:160 — "###abcd identity render" evidence: dcn-2609250000000023 — "identity renderproposes a correction, a distinct act, and stays" - spec scope 3 says the old lint verbs become stubs for one release and the Approach names a follow-on remainder spec for their removal; the ruling records that no remainder spec is minted and the removal is captured as an issue instead evidence: dcn-2609250000000023 — "The spec's remainder spec for removing the stubs is not minted"
- the intent's Why names
- missing: (none)
Grounds
- pursued: batch 3 already carries four breaking renames, so this lands in the same major cut at no extra cost to adopters; we expect the person's list to be held and the which-check question to stop; shown wrong if the same questions recur
Frontmatter
| id | itd-2609212130136102 |
|---|---|
| type | intent |
| lifecycle | shipped |
| kind | standalone |
| severity | minor |
.abcd/development/intents/shipped/itd-2609212130136102-abcd-s-verbs-consolidate-ahoy-s-three.md
open on GitHub ↗ · commit history ↗
References6
- adr-2609212115255771Phases and milestones are retired: sequencing is dependencies rendered as status, the checkpoint is the derived releaserelated
- itd-122The Registry Cannot Wave Its Handsrelated
- itd-123The Intent Audit Says Auditrelated
- itd-124The Conformance Check Calls Itself Lintrelated
- itd-125The Lifeboat Verdict Says What It Isrelated
- itd-146abcd's help renders in labelled command groups, and the grouping is gated like every other surface claimbuilds on
Referenced by14
- iss-2610262033144314itd-2609212130136102 retires `ahoy remote` as the old spelling of the remote report; the ahoy chapter still lists `abcd ahoy remote` as a shipped sub-verbrelated
- iss-2610262036404974The verb-consolidation intent makes bare `abcd lint` run all targets; the lint chapter keeps the outbound target out of the bare run.related
- iss-2610262039536939itd-2609212130136102 caps the person's default verb list at fourteen; the README says neither surface caps it and lists seventeen.related
- iss-2610262043297244itd-25's dredge promote calls /abcd:intent new, which itd-2609212130136102 removedrelated
- iss-2610262044170732The design-fiction draft adds a format flag to intent new, which the verb consolidation removedrelated
- iss-2610262044201056The audit draft adds a separate repo-conformance check verb, while the shipped consolidation folded every 'check this repository' spelling into one lintrelated
- iss-2610262045024914itd-138's install script ends by running abcd version; itd-2609212130136102 removes that verb in favour of --versionrelated
- iss-2610262045033573itd-111 names abcd version as where install mode and vintage always show; itd-2609212130136102 removes the abcd version verbrelated
- iss-2610262045411383itd-2609212130136102 caps the person's list at fourteen verbs; itd-2610090831227812 rules that neither surface caps itrelated
- iss-2610262045459641itd-60 calls the docs-currency lint abcd docs lint; itd-2609212130136102 moves every check under abcd lint, as lint docsrelated
- iss-2610262045478245itd-4's capture promote calls /abcd:intent new; itd-2609212130136102 removes intent newrelated
- itd-146abcd's help renders in labelled command groups, and the grouping is gated like every other surface claimrelated
- itd-2610090831227812A person who types `/abcd:` sees the commands people userelated
- spc-2609212139587510abcd-s-verbs-consolidate-ahoy-s-three-modes-become-flagsimplemented by
mentions20
- adr-38Implicit checks are disk-only — the network answers only an explicit ask
- dcn-26092100000000012026-09-21 — Phases and milestones are retired, and the word roadmap with them (product thinker, at an interactive interview after an independent research pass; adr-2609212115255771 supersedes adr-9). Sequencing is dependencies plus the lifecycle shelves, rendered as a Now / Next / Later status block on the `abcd` board and the site (itd-2609212103568351), never stored; the checkpoint is the derived release plus each intent's acceptance criteria, with an optional `target_release` the cut reports and moves forward (itd-2609212103572513); the unit below a spec is the step, a section not a family (itd-2609212103565953); an issue carries no spec by design; the batch is the run's internal order; one page maps the families (itd-2609211913453478). itd-24 becomes release retrospectives; itd-34 drops its phase rule. Same interview: `build` is the verb a person types and `implement` the loop (itd-2609201916151817 decision 8), the loop takes an issue key (decision 10), only the loop writes a verdict (decision 9); the person's command list is grouped with an agents block behind `--agent` (itd-146), every verb opens with a does/writes/refuses sentence (itd-2609212113220149), modes become flags and five checks one lint (itd-2609212130136102, breaking); the status-line badge is guarded and reset (itd-2609212130146198); a new capture or draft is matched and linked at filing, never refused (itd-2609212137116617); abcd's text names the product thinker or the technical facilitator and never the maintainer (itd-2609212137129937, captured for the run, no sweep today); the lab conventions become `abcd lab` (itd-2609212137128014); a managed repository's site goes live by one verb behind a provider seam (itd-2609061543533170).
- dcn-26092500000000212026-09-25 — Help placement of the verbs itd-146's decision 2 does not name: the orchestrator's technical ruling for itd-146, taken by the implementing lane of autonomous run A and subject to the product thinker's review on return (recorded, not asked). The principle applied is the intent's own: a verb goes in the block of whoever runs it, and where a verb could go either way it goes to the agents-and-hosts block, because itd-2609212130136102 AC5 caps the person's list at fourteen verbs and decision 2's thirteen (with `build` and `drain`, not yet built and left out until they are) leave room for one. People, set-up: `rules` (criterion 6 keeps it in the person's default list; a person inspects the rule set the loader injects, and the `ahoy` marker block tells them to run it), plus cobra's generated `help` and `completion` (a person runs both; itd-146 counts them apart from the verbs, "twenty visible verbs, plus help and completion", so they do not press on the fourteen; and neither has a command page an agents-block line could name). Agents and hosts, each line naming the page read next: `banlist` (commands/banlist.md; its lists are maintained by the agent at the person's word and enforced by the commit gate), `docs` (docs.md; its lint folds into `lint docs` under itd-2609212130136102 and `cite` maintains a baseline), `guard` (guard.md; the agent asks it before running a shell command, and `guard hook` is the host's adapter), `ideate` (ideate.md; the gauntlet runs in the host from the page, and the binary's one act is `ideate record`), `identity` (identity.md; folds into `lint identity`, and `init` runs inside prepare-this-repo), `inbox` (inbox.md; the session-start greeting hands it to the agent in abcd's own checkout), `peers` (peers.md; AGENTS.md has the agent run it before capturing, resolving or picking a record), `report` (report.md; the agent in a managed repository fills the template), `site` (site.md; build and check run in the release gate, and the check folds into `lint site`), `version` (version.md; hosts and agents read it, and it becomes `--version`). Decision 2's agent entries take these pages: `implement`, `reading`, `history`, `mode` their own; `changelog` commands/launch.md (the page that runs the cut it previews); `statusline` commands/ahoy.md (the page whose install wires it); `guard hook` guard.md; `intent audit ingest` intent.md; `ideate record` ideate.md. Group ids: set-up, records, checks, portability, release, agents. The snapshot records `group` and `block` at schema version 2, and version 1 stays readable because every release tag before this one carries it.
- dcn-26092500000000232026-09-25 — How itd-2609212130136102's consolidation is built where its record leaves a choice: the implementing lane's technical rulings in autonomous run A, subject to the product thinker's review on return (recorded, not asked). The identity mode is spelt `--identity`, as the intent's scope names it, not `--identity-check`. A spelling that moved WHOLE (`ahoy dry-run`, `ahoy identity-check`, `version`, `docs lint`, `site check`) becomes a stub carrying cobra's `Deprecated` field, which lists it nowhere and keeps it out of the person's count; it accepts any argument and flag the old spelling took, runs nothing, and answers exit 2 naming its successor, with cobra's deprecation line routed to stderr so a `--json` caller reads exactly one refusal on stdout. A verb whose BARE form moved while its sub-verbs stay (`identity`, whose `render` and `init` stay; `ahoy remote`, whose `apply` stays) keeps its place and only its bare invocation answers; deprecating it would have hidden live sub-verbs. `lint identity` is what bare `identity` printed (the block and every surface's verdict), because that is the check; `identity render` proposes a correction, a distinct act, and stays, which reads the intent's "identity render" among the five spellings as the identity family's check (itd-146's lane read it the same way). Bare `lint` runs every target that judges the repository: docs, identity and the outbound policy over committed files were already rules (`docs-currency`, `identity-positioning`, `privacy-hygiene`), and the site joins as a `site-gates` rule, Where-gated on `.abcd/site.json`, rendering into a temporary directory outside the repository and removing it so bare lint still writes nothing, at warn severity as docs-currency is; `lint outbound` stays out of the bare run because its subject is text the caller hands it. `version --check` names `update --check`, the rest of `version` names `--version`; `update --check` prints the old `version --check` report, takes no tag, excludes `--yes` and never constructs the updater. `intent new` is refused as an unknown sub-verb in every shape, including before prose, so it can never be filed as a draft titled "new …". The snapshot records `moved_to` at schema version 4 (version 3 stays readable, the last tag's shape); the brief's appendix omits a whole-moved stub and names the successor where the bare form moved, `surface_coverage` needs no row for a moved spelling and refuses one that names it, and the generated CLI reference omits the stubs. `commands/version.md` stays as a page with no block that runs `--version`. The site workflow's release path probes the released binary's `lint` listing and falls back to `site check` for a tag cut before this release. The spec's remainder spec for removing the stubs is not minted: a remainder close keeps the intent planned, and the run brief closes it shipped, so the removal is captured as an issue instead (implementer of lane consolidate).
- dcn-26092600000000012026-09-26 — Release v0.11.0 is cut by autonomous run A, and the run's agenda line is: approve the publish step. Under ruling A2 of the product thinker's run A interview (2026-09-23 07:52Z: the run approves the release environment itself once every gate is green) and the product thinker's releases ruling of 2026-09-25T08:04:52Z ("cut additional releases if that makes sense, but bundle multiple intents for it"), the run approves the `release` environment's deployment of v0.11.0 only after the merge queue, the verify job and every other gate on the tagged commit report green, and stops with a handover instead if any does not. The cut: v0.11.0, impact breaking (decided by itd-2609212130136102, the verb consolidation, whose five surface removals the guard names), 193 records since v0.10.0: eleven shipped intents (ten additive, one breaking) and 182 resolved or declined issues (108 fixes, three additive, 71 internal and outside the changelog); two major findings pass on their recorded deferrals (iss-2609250834251447, iss-2609251824244354). Content commit 9ef24744, on top of ae116575, which the docs-currency gate's findings required. Both semantic gates ran at tier full. docs-currency-reviewer (Fable 5.1) read the first roll and found four: the install one-liners ended on the retired `abcd version`, which v0.11.0 refuses with exit 2 (major; fixed in ae116575), a CONTRIBUTING wording (fixed there too), and two changelog lines recomposed by the composer; the guard gap behind one of them is captured as iss-2609260543090196. The brief-surface cross-check (40 pinned checkers, Opus 5.5, at most four alive) found 130, all real at the content commit by an independent classification (Fable 5.1): the eight user-facing and four behaviour findings are captured as nine minor records (iss-2609260552249742, iss-2609260552247395, iss-2609260552246303, iss-2609260552247252, iss-2609260552256523, iss-2609260552256401, iss-2609260552250826, iss-2609260552254288, iss-2609260552251398), and the design-record drift goes to the systematic brief pass iss-2609091956001547. Landed before the cut on the cutting session's ruling: #717 (the shell guard cluster) and #718 (the race lane's declared timeout, after #717 was ejected from the merge queue by the default ten-minute package timeout).
- dcn-26093000000000032026-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.
- 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-2609292057441479itd-111 acceptance criteria 3 and 5 name command spellings the CLI no longer answers to: AC3 says the vintage report comes from 'abcd version' and AC5 says the explicit release check is 'abcd version --check' (design decision 6 and its open question say the same). Since itd-2609212130136102 consolidated the verbs, the report is 'abcd --version' and the check is 'abcd update --check'; both old spellings refuse with a moved notice naming the new one. The behaviour each criterion asks for is present at the new spelling, so the shipped criteria read true only once the record says which surface meets them. adr-38 tier 2 also cites 'abcd version --check' as an example of an explicit ask; the rule it states still holds.
- iss-2610020726165588Bare abcd ahoy remote prints the sub-verb's help and exits 0, while the shipped itd-2609212130136102 acceptance criterion ac-1 says bare ahoy remote answers naming --remote and exits non-zero, and its audit evidence still cites the markMoved stub in internal/surface/cli/cli.go that the v0.12.0 cycle removed. Read against the record this is not a regression: the intent's scope bounds the moved-spelling answers to one release, the product thinker's rulings BT1 and H6 (2026-09-29) removed them in the breaking v0.12.0 cut, iss-2609251324599468's resolution says bare ahoy remote lists its sub-verbs instead of answering with a successor, docs/how-to/upgrade-to-v0.12.0.md documents that it lists them and exits 0, and TestBareIdentityAndAhoyRemoteListTheirSubVerbs pins it.
- iss-2610262034492769itd-111 has abcd version show install mode and vintage; the board chapter says version is a retired name and the report is now a flag on the root.
- iss-2610262034550860itd-4 has capture promote call intent new with the issue's body; the capture surface page says promotion mints the draft natively with a by-id pointer, not a copy.
- iss-2610262036353820itd-130 names the staleness check abcd version --check; the update chapter makes the check a flag of abcd update
- iss-2610262039394542itd-130 names an `abcd version --check` command; the surfaces register says `version` is the root's `--version` flag, not a verb
- iss-2610262039403534itd-111 says `abcd version` always shows install mode and vintage; the surfaces register says `version` is a root flag, not a verb
- iss-2610262039410774itd-138's install script finishes by running `abcd version`; the surfaces register says `version` is a root flag, not a verb
- itd-111A Stale abcd Never Answers Silently
- itd-135Iris opens abcdev.app and understands who abcd is for, what they and their facilitator own, and how to install it — from one page rendered from the repository
- itd-136Alice opens the record explorer and reads the whole development record — every decision, intent, spec and issue as a page, with contributors and references — without reading YAML on GitHub
- spc-2609212139586554abcd-s-help-renders-in-labelled-command-groups-and-the-group
- spc-2609230613208843Staleness behaviour is calibrated per platform