Development record
A person who types `/abcd:` sees the commands people use
Press Release
A person who types
/abcd:sees only the commands people use. Commands only agents run, such as the guard that judges a shell command, are hidden from the menu and keep their names; typed in full, the host says to ask the agent, which still runs them.abcd --helplists the same commands."I used to scroll past twenty entries I would never type to reach the three I use," said Iris, a product thinker. "Now the menu is mine, and the agent has not lost anything: when it needs the guard, it still runs the guard."
Why This Matters
/abcd: lists 35 commands; a person reads them all to find the few they type. An autonomous run set most agent labels unasked, so ideate and the dashboard sat with agents. Now the menu holds the 15 people use and hides the other 15; four source commands become library; three fold into commands doing their job.
Mechanism
A person finds their command faster and stops opening agent pages by mistake: the menu drops from 35 to 15, all typed by people, and an agent still reaches each hidden page by name. Shown wrong if people ask agents to run hidden commands for their own work, or an agent can't find a page the help names.
Scope Conditions
- Holds for a host whose plugin loader registers every markdown file under
commands/as a slash command and honoursuser-invocable: falseon it, as the trial of 2026-10-10 showed on the host then current. A host without that key re-decides the mechanism. - Holds while itd-146's two-block classification stands and each binary-backed page's
block:frontmatter is the one source of its class, gated byTestCommandPagesDeclareTheirBlock. - Holds for the pages with no block: their class is ruled by the audit iss-2610090831317531, since no tree placement can be checked for them.
- Holds while abcd ships zero skills; the
/abcd:namespace is commands only (05-internals/08-skills.md), so a page moved off the person's list stays a command.
What's In Scope
- The person's
/abcd:menu lists the pages whoseblock:ispeople, set to the placements the product thinker ruled on 2026-10-09; every page whoseblock:isagentscarries the host'suser-invocable: false, so it is hidden from the person's menu and refused when a person types it. - Every page whose
block:isagentsstays a command, keeps its name, and is reached by an agent from the agents-block help line that names it;abcd --help --agentstays the one place both lists render. - The command-line help already sorts every verb into For people and For agents and hosts (itd-146); the plugin's command list keeps that same classification, and the page's
block:stays the one source of it. - A test holds the plugin menu to the classification, the way
TestCommandPagesDeclareTheirBlockholds the pages to the tree. - The merges and the retirement the product thinker ruled on 2026-10-09: the version page retires and the version shows on the board;
changelogmerges intolaunchas a preview;prepare-this-repofolds intoahoy install;consult,ingest,memoryandsourcemerge intolibrary, which asks whether an item is confidential when the person did not say. Under adr-40 no old name survives as an alias. - The verb audit's table (iss-2610090831317531) is the first section of this intent's spec. It starts from the recorded
block:frontmatter and rules what that leaves open: the four pages with no block the record has not ruled (abcd,consult,ingest,prepare-this-repo;versionis ruled blockless on 2026-09-25 as a deprecated stub, anddrainsits with the agents until it runs end to end, ruling BX1 of 2026-09-29), the pages either side could claim (report,ideate,dashboard), and the keep/merge/rename/retire column no record holds.
What's Out of Scope
- Any rename or retirement beyond the merges in scope. A further one is its own intent under adr-40's pre-1.0 clean-break rule (no alias) and the retire-the-name principle.
- Moving any page to
skills/. abcd ships zero skills and the/abcd:namespace is commands only (05-internals/08-skills.md). - Deleting a page outside the merges in scope. Every verb that remains stays reachable from both the CLI and the plugin surface (AGENTS.md, Boundaries); hiding a page keeps it on the plugin surface.
- Giving
/abcd:memoryits new job as memory notes: that is itd-2610091918433290.
Prior Art
- itd-146 (shipped): the two-block help behind one flag, every verb running the same whichever block lists it; this intent carries the same classification to the plugin surface and adds nothing to the CLI.
- itd-2609212130136102 (shipped): the consolidation that brought the person's list to its ceiling; its AC5 count is the CLI's, and this intent needs the plugin-side counterpart.
- itd-2609212113220149 (shipped): one sentence per verb, byte-identical on the list,
--helpand the page; a page moved off the person's menu keeps its sentence. - dcn-2609250000000021, 2026-09-25 "Help placement of the verbs itd-146's decision 2 does not name" and 2026-09-29 ruling BX1 (dcn-2609290000000007): the placements and the one provisional one this intent inherits.
.abcd/development/research/notes/2026-08-22-ideate-cli-verb-taxonomy-restructure.md: hiding and a namespaced plugin tree were both tried against the record; the objections that transfer are named in Open Questions.04-surfaces/README.md"The command files": the flat directory is load-bearing (iss-161) and the index is gated byindex_drift.
Acceptance Criteria
- Given a product thinker in a host with abcd installed, when they type
/abcd:and read the completion menu, then every entry shown is a page whoseblock:ispeopleor a page the audit classed as a person's, and no page classed as an agent's is listed. - Given a facilitator watching an agent in that same host, when the agent is told by
abcd --help --agentto readcommands/guard.mdand run/abcd:guard, then the agent runs it and it behaves exactly as before; no invocation named on an agents-block help line is renamed or removed. - Given
abcd --help --agent, when it renders, then it is still the one place both blocks appear, and each agents-block line still names the page an agent reads next. - Given a new hire who types the full name of an agent's page, when the host answers, then the host says the page is not a person's command and points them to ask the agent, as the trial of 2026-10-10 showed, so the behaviour is a decision, not an accident.
- Given a command page is added or changed with
block: agentsbut without the host'suser-invocable: false, or withblock: peoplebut carrying it, when the tests run, then a test fails naming the page; the plugin menu is gated like the CLI list (itd-146, criterion 3). - Given the thirty-five pages at the tip, when this intent ships, then the verb audit's table (iss-2610090831317531) names every page with its class and keep/merge/retire decision, and the only pages that leave are the ones the merges below retire.
- Given a live host session, when this intent ships, then a capture of the
/abcd:menu before and after is attached to the spec, since the host's menu rendering is not visible to a test. - Given a person who types bare
abcdin a terminal or/abcd:abcdin the host, when the board renders, then it shows the installed abcd version, and the retired/abcd:versionpage is gone;abcd --versionstill answers. - Given a person about to cut a release, when they ask launch for a preview, then launch shows the changelog the cut would write, and the
changelogcommand and its page are gone. - Given a person setting abcd up in a repository, when they run
ahoy install, then it does whatprepare-this-repodid, and theprepare-this-repopage is gone. - Given a person adding or recalling a source, when they use
library, then it does whatconsult,ingest,memoryandsourcedid, and those four names are gone from the command line and the plugin alike, with no alias (adr-40). - Given a person adding an item to the library without saying whether it is confidential, when the item is added, then abcd asks them first; an item added with
--privateis not asked about.
Open Questions
- What gates the plugin menu's classification, the way
TestCommandPagesDeclareTheirBlockand the surface snapshot gate the CLI's? The person's menu needs a test that fails when a page'sblock:and its menu placement disagree, and one that holds the plugin's person list equal to the CLI's (Decisions, 2026-10-09: no cap, the two kept in step); under the hiding ruled below, the first reads each page'sblock:against itsuser-invocablekey. - Would a later recommendation of which verb fits a situation belong to this intent, or to a separate one? The nearest record today is itd-2609212113220149, one actionable sentence per verb, and bare
abcd <record-id>already names a record's next move.
Decisions
- 2026-10-09: the product thinker ruled who a command belongs to. Asked whose command menu it is, given that some commands marked for agents are typed by people (the inbox, the drain, the dashboard), they answered: "who marked them for agents? If people have to use them to do their job, they're not agents-only". Most of the current agent labels were placed on 2026-09-25 by an autonomous run's orchestrator, recorded and not asked, with a tie-break that sent a command either side could claim to the agents' side to keep the person's list under its cap (dcn-2609250000000021). So a command a person needs to do their job is a person's command whatever else also runs it; the verb audit (iss-2610090831317531) re-labels every command by who actually types it, and only commands no person types leave the person's menu.
- 2026-10-09: the product thinker chose to try the host's hiding before choosing between hiding and grouping. Answer verbatim: "Try it first". One command no person types is hidden in a real session, with captures before and after of what a person sees on typing it and whether an agent still runs it; the choice of mechanism (the first open question) waits on that trial.
- 2026-10-09, settled by the ruling above without a further question (one defensible answer each):
ideateanddashboardare a person's commands, since the product thinker types both;consultandingestare classed by the audit on the same rule; and each command keeps its one-sentence description unchanged wherever it is listed (itd-2609212113220149). - 2026-10-09: the product thinker ruled on the menu's length, for the command line and the plugin alike. Answer verbatim: "no cap for either plugin or cli -- both should expose the same and stay in sync; we need to research (SOTA) all available verbs first before making a decision. 14 is a good aspirational target but not one that must be met for now." So neither surface caps the person's list; the command line and the plugin list the same commands for a person and are kept in step; fourteen stays an aspiration, not a gate; and a state-of-the-art review of every verb comes before any keep, merge, rename or retire decision. This reverses the cap of itd-2609212130136102's fifth criterion (held by TestPersonsListHoldsAtMostFourteenVerbs), flagged here for the spec to carry out.
- 2026-10-09: the product thinker ruled how agent-only steps on a person's command are shown. Asked whether steps such as the intent page's pre-pass and audit ingest should get commands of their own, they answered: "verbs the human uses are listed, options that are agent specific are not listed in help or explained to where humans look. It's a simple distinction: An agent gets to see everything, a human only what they need to see". So no agent step is moved to a command of its own and no invocation is renamed; a person's view (the menu, the default help, the user-facing docs) lists the commands a person uses and leaves out agent-only steps and options, while the agent's view (
--help --agentand the command pages an agent reads) shows everything. - 2026-10-09: the product thinker placed commands one by one, after the verb inventory (typed counts from saved sessions, agent run counts, and who placed each command; scratch research for iss-2610090831317531). On the person's list: abcd (the board), ahoy, build, capture, decide, disembark, embark, intent, launch, update, ideate, dashboard, lab and reading. Agent-only: lint, reflect, inbox, implement, history, site, docs, scribe, identity, guard, hook and statusline. Deferred: source ("Decide later"). They asked why several were placed where they were, and on reading asked whether a cold reading is only triggered automatically and only for the brief: it is neither, but abcd offers a person no way to commission one on a document they choose (captured separately). With reading a person's command and scribe an agent's, merging the two is no longer asked.
- 2026-10-09: drain stays on the agents' list under ruling BX1 and joins the person's list when itd-82 ships; the product thinker grouped the drain's remaining work into itd-82's plan the same day.
- 2026-10-09: peers and mode are agent-only (answers "Agent-only" to each).
- 2026-10-09: the product thinker placed the remaining commands. report, spec and rules are agent-only (rules after an answer the product thinker corrected: the first "Keep on your list" was accidental); report must ask the person's permission before it files from an abcd-managed repository (iss-2610091903077581). The
/abcd:versionpage retires, and the version number shows instead when a person types/abcd:abcdand on bareabcdin a terminal. prepare-this-repo folds intoahoy install. changelog merges into launch, as a preview. consult, ingest, memory and source merge into one person's command namedlibrary, which asks whether an item is confidential when the person did not say. With the old memory command merged away,/abcd:memorybecomes an agent's command for memory notes (itd-2610091918433290). The person's list is then: the board, ahoy, build, capture, decide, disembark, embark, intent, launch, update, ideate, dashboard, lab, reading and library, with drain joining when itd-82 ships. - 2026-10-10: the product thinker chose hiding over grouping, after the trial they asked for. In a live session with a trial plugin holding one visible command (capture) and one hidden with the host's
user-invocable: false(scribe): typing the plugin's prefix listed capture alone; typing the hidden command's full name was refused by the host with "This skill can only be invoked by Claude, not directly by users"; and an agent asked in plain words ran it and printed its help. Answer: "Hide them". So an agent-only page keeps its name and its place in the flatcommands/directory, carriesuser-invocable: false, and is run by asking the agent; its documentation stays published and gated, and the agents-block help lines keep naming it. Grouping under/abcd:agent:is not taken, so no invocation is renamed and the three gates that locate a page by its verb name stand. The open question on the mechanism is closed by this entry. - 2026-10-10: the product thinker confirmed the press release. They took a rewritten opening paragraph that states the hiding, the host's answer to a hidden name typed in full, and the same list in
abcd --help(answer: "Take it"). They kept the quote word for word, asking whether Iris was the right persona; the persona registry picks the name from the role, and asked whose voice the quote should carry they chose the product thinker (answer: "Iris, product thinker"). - 2026-10-10: the product thinker walked the acceptance criteria. They accepted the three a person sees (the menu listing only people's commands, the host's answer to a hidden name typed in full, the docs setting the library beside memory notes) and, as one list, the five technical ones carried from the draft, with the gate re-read for hiding. Asked where the merges and the retirement ship, they answered "In this intent", so the out-of-scope ban on renames and retirements narrows to any beyond these, and five criteria for the merges were added and accepted ("Accept all").
- 2026-10-10: the product thinker confirmed Why This Matters, the Mechanism with its falsifier, and the four scope conditions, each as put to them ("Take it", "Take it", "Accept all"), and the grounds recorded on the intent ("Record it"). Settled without a further question by the ruling that only commands no person types leave the person's menu:
banlist, typed by no person in the saved sessions and run by an agent at a person's word, stays agent-only. The impact is breaking, because the merged commands' old names go with no alias (adr-40).
- 2026-10-11: the product thinker answered the spec's open question 12 with "Wait for memory notes": the docs comparison of the library and memory notes moves to itd-2610091918433290, which already carries it as its own criterion, because memory notes are a draft with nothing built and the docs describe only what ships. That criterion leaves this intent, so the clean-up ships without it.
Audit Notes
Fidelity review — receipt rcp-07866e464a3a (verifier abcd:intent-auditor claude-opus-5-5).
Provenance: abcd:intent-auditor@claude-opus-5-5 · rubric_hash sha256:effa65b3e9e88ff29433b443ec2be159522a8b0b71cf1434526514aa61edb13e · prompt_hash sha256:e7b75f4feac5bb758a075fb0b8408a17c6170c837c56d077bc5117bc35a1957b Input attestations: diff:5f5592eefe0d49037f3aae067751baaf1fccf0a8..2c11d34c3f660291b7b7306d5f858bd25757771a (PR #907, spec step 1; the request named no range, so the delivery was read from the four merge commits into main that carry the spec's steps and their first parents; digest over git diff --no-color --no-ext-diff)@sha256:670b2b17324303e2a49206c1a9e9e0ccb01d0ac3c23387017075a6d5fc803fd6; diff:a09dd42b6de9a6556d5ddc49b8810f65b5064b61..fdb21c66bf7567ca84b3ce187953177748f0ffed (PR #913, spec step 2; digest over git diff --no-color --no-ext-diff)@sha256:06c95761f9342991a5398528e9994740c19c28329cf1be565360ae6199b696ff; diff:8cbb1ae450a17bb3d95fc9366a5229be82cef1b6..4700d60e928272af1c0979ff05b636f12b4f6df1 (PR #922, spec steps 3 to 7, stacked branches; digest over git diff --no-color --no-ext-diff)@sha256:44c90d9df01c3fa3ffcdcd23698b391c1e6b72bc3a9e0f7c4f0828fa85b6736e; diff:22492dbf493756ee4c3963533a15c08d2738b0b3..f104bab826399e826d2a05123f30b53602b5d98e (PR #936, spec step 8: the live captures and the close; digest over git diff --no-color --no-ext-diff)@sha256:b5067cd0d7d4ad6f2fbb9ecc124a79ec3b3adec6edd2a5014ee69aa1718798e6; repository:2e03c61e454bf09ecda8cee0ae2f377157b522f7 (origin/main, where every unprefixed file:line was read; the local audit-notes commits above it touch none of them; a ref prefixed 314e9c3ce:, 839983b8c: or f104bab82: was read at that commit, which is step 1's base, step 1 and the close)@-;
Acceptance rollup: MET 6 · MET_WITH_CONCERNS 6 · NOT_MET 0 · INCONCLUSIVE 0
Per-criterion verdicts:
- ac-1 — MET_WITH_CONCERNS: At the close the fifteen block: people pages carry no host key and all fifteen block: agents pages carry user-invocable: false, held page by page by TestCommandPagesMatchTheMenu, and the after capture found /abcd:scr offering capture and reading but not scribe; concerns: the after capture records three partial-match probes, not the list bare /abcd: shows (the fifteen step 8 planned to capture), and the host still offers a hidden page as the single suggestion once its full name is typed
evidence: commands/scribe.md:6 — "user-invocable: false"
evidence: internal/surface/cli/menu_test.go:77 — "func TestCommandPagesMatchTheMenu(t *testing.T) {"
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:597 — "
/abcd:scroffered/abcd:captureand/abcd:readingand not/abcd:scribe. A hidden page is absent from what the person browses and from partial matches." evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:597 — "The host does show a hidden command once its full name is typed (/abcd:guardappeared as the single suggestion), and Enter is then refused, as A4 records." - ac-2 — MET_WITH_CONCERNS: The after capture shows an agent running the hidden guard (allow, exit 0), TestPlacementChangesNoInvocation still runs
guard check, and every agents-block line but one survives; concerns:abcd changelog, an agents-block line naming commands/launch.md before step 1, was removed and is now an unknown command, which ac-9 and the 2026-10-10 narrowing require but this criterion's letter does not allow, and the captured agent was asked in plain words rather than led byabcd --help --agentevidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:596 — "A2: asked in plain words to run abcd's guard check ongit status, the agent loaded the guard and ran it ("The guard returned allow for git status, exit code 0")." evidence: internal/surface/cli/helpgroups_test.go:236 — "out := runCLI(t, "guard", "check", "--command", "ls", "--json")" evidence: 314e9c3ce:internal/surface/cli/helpgroups.go:117 — ""changelog": {group: groupAgents, page: "commands/launch.md"}," evidence: internal/surface/cli/staleusage.go:101 — "changelogmerged into launch as its preview: runabcd launch --dry-run" evidence: .abcd/development/intents/shipped/itd-2610090831227812-a-person-who-types-abcd-sees-only-the.md:100 — "so the out-of-scope ban on renames and retirements narrows to any beyond these" - ac-3 — MET: The root-help renderer is byte-identical across the delivery and still prints each agents line ending
(read <page>)under the one agents title; TestRootHelpAgentRendersBothBlocks fails on an agents line whose page is missing or never mentions the entry, and the moved rules and spec lines name commands/ahoy.md and commands/intent.md, both existing pages that describe them evidence: internal/surface/cli/helpgroups.go:379 — "fmt.Fprintf(w, " %-*s %s (read %s)\n", agentWidth, e.name, e.short, e.page)" evidence: internal/surface/cli/helpgroups.go:65 — "helpAgentsTitle = "For agents and hosts (each line names the page to read next):"" evidence: internal/surface/cli/helpgroups_test.go:117 — "func TestRootHelpAgentRendersBothBlocks(t *testing.T) {" evidence: internal/surface/cli/helpgroups_test.go:169 — "t.Errorf("%q names %s, which does not exist: %v", m[1], page, err)" evidence: internal/surface/cli/helpgroups.go:157 — ""rules": {group: groupAgents, page: "commands/ahoy.md"}," - ac-4 — MET: The after capture records the host refusing
/abcd:guardtyped in full with words saying users cannot invoke it and to ask the agent, the answer the 2026-10-10 trial got and the product thinker then ruled on ("Hide them"), so the behaviour is a recorded decision evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:595 — "A4: typing/abcd:guardin full was refused by the host: "This skill can only be invoked by Claude, not directly by users. Ask Claude to use the "abcd:guard" skill for you."" evidence: .abcd/development/intents/shipped/itd-2610090831227812-a-person-who-types-abcd-sees-only-the.md:98 — "typing the hidden command's full name was refused by the host with "This skill can only be invoked by Claude, not directly by users"" evidence: commands/guard.md:6 — "user-invocable: false" - ac-5 — MET: TestCommandPagesMatchTheMenu walks every page under commands/ and names each one whose block: and user-invocable key disagree in either direction, and its synthetic negative control proves each defect is named with its page
evidence: internal/surface/cli/menu_test.go:77 — "func TestCommandPagesMatchTheMenu(t *testing.T) {"
evidence: internal/surface/cli/menu_test.go:61 — "says
block: agentsbut carries no%s: false, so the host lists it on the person's menu" evidence: internal/surface/cli/menu_test.go:58 — "saysblock: peoplebut carries%s: %s; a person's page carries no such key, or the host hides it from the person's menu" evidence: internal/surface/cli/menu_test.go:94 — "func TestPageMenuDefectsNamesEachDefect(t *testing.T) {" - ac-6 — MET: The spec's verb audit has one row for each of the thirty-five pages at 3b8700ef7 (the row names equal that tree's commands/ listing), each with its ruled class and action; the four delivery PRs delete exactly version, prepare-this-repo, consult, ingest, memory and source and add library; and the audit issue is resolved against the spec
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:50 — "| 1 |
abcd(the board) | none | the bare root | people (P1) | keep; addblock: people; show the version |" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:84 — "| 35 |version| none | no verb (the root's--version) | retire; the version shows on the board (P4); people until then (decision 14) |" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:93 — "At the end,commands/holds thirty pages: the thirty-five, less version," evidence: 314e9c3ce..f104bab82 -- commands/ (git diff --name-status; the same changes as the four PR diffs together, with no page deleted and re-added between them) — "D commands/consult.md, D commands/ingest.md, A commands/library.md, D commands/memory.md, D commands/prepare-this-repo.md, D commands/source.md, D commands/version.md" evidence: .abcd/work/issues/resolved/iss-2610090831317531-abcd-s-verbs-have-never-been-reviewed-as.md:13 — "Every verb was audited with the product thinker (spc-2610100613109045's verb audit)" - ac-7 — MET_WITH_CONCERNS: The spec carries a Live captures section recording a before session (published 0.13.4, where /abcd: listed /abcd:scribe) and an after session at 3d171421a; concerns: the record is prose, and the screenshots are kept in another checkout's local tier, not attached to the spec and not found in this machine's main checkout; the after record never states what bare /abcd: lists, only three partial-match probes; and the before capture came from the published 0.13.4 plugin, not the planned checkout of 314e9c3ce (equivalent in effect, since v0.13.4 is an ancestor of 314e9c3ce and no page there carries the key)
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:589 — "## Live captures"
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:591 — "Taken 2026-10-11 in live host sessions (Claude Code v2.1.296); the screenshots are kept in the coordinating checkout's local tier."
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:593 — "typing
/abcd:opened the host's command list, and the agents' command/abcd:scribewas listed to the person" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:597 — "A1:/abcd:versmatched no command (no retired page, and no installed 0.13.4 loaded alongside);/abcd:libroffered/abcd:librarywith its use-when text;" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:585 — "the AFTER capture at the merged tip: what/abcd:lists (the fifteen, A1)" - ac-8 — MET: The board appends a version line built from the same core.VersionInfo
abcd --versionreports; TestBoardShowsTheVersion asserts it as the last line of both views in text and in the markdown form /abcd:abcd pastes, and asversionin --json; commands/version.md is deleted in PR #913; and TestRootVersionFlagPrintsWhatVersionPrinted still holdsabcd --versionevidence: internal/core/board/board.go:125 — "if l := versionLine(in.Version, f); l != "" {" evidence: internal/surface/cli/board_view_test.go:257 — "func TestBoardShowsTheVersion(t *testing.T) {" evidence: internal/surface/cli/consolidate_test.go:329 — "func TestRootVersionFlagPrintsWhatVersionPrinted(t *testing.T) {" evidence: a09dd42b6de9a6556d5ddc49b8810f65b5064b61..fdb21c66bf7567ca84b3ce187953177748f0ffed -- commands/ (git diff --name-status) — "D commands/version.md" evidence: commands/abcd.md:23 — "The board's last line is the installed abcd version, in both views and both" - ac-9 — MET_WITH_CONCERNS:
launch --dry-runnow renders the cut the next ship would make (derived tag, impact, guard, findings, and the added and removed records) in text and --json, andabcd changelogis an unknown command whose note names the preview; concerns: the preview is the deterministic cut with no prose (spec decision 5), not the changelog prose the ship composes and writes to CHANGELOG.md, and the changelog verb never had a page, so there was no page to remove evidence: internal/surface/cli/launch_preview_test.go:85 — "func TestLaunchDryRunRendersTheCut(t *testing.T) {" evidence: internal/surface/cli/launch_preview_test.go:154 — "func TestChangelogIsAnUnknownCommand(t *testing.T) {" evidence: internal/surface/cli/ship.go:732 — "renderEntries(w, "added", cut.Added)" evidence: commands/launch.md:451 — "below), with no prose, so no agent runs in a preview. Relay the derived" evidence: commands/launch.md:21 — "changelog prose and the release page, write them. It writes the dated section" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:85 — "| — |changelog| no page | agents (namescommands/launch.md) | merge into launch as a preview (P4) | merge; verb goes | Step 3. |" - ac-10 — MET_WITH_CONCERNS: Every phase of the retired page (the ownership refusal, orientation, audit, the adoption with its AGENTS.md merge and identity block, the conventions section and the definition of done) now sits in commands/ahoy.md's install section, held there by TestAhoyInstallCarriesThePreparation, and commands/prepare-this-repo.md is deleted; concern: the fold is page-only (spec decision 6), so the preparation runs when the host runs /abcd:ahoy install, while
abcd ahoy installtyped in a terminal is the unchanged binary install, which writes no AGENTS.md by default evidence: commands/ahoy.md:121 — "##install— prepare the repository and apply the outstanding gaps" evidence: commands/ahoy.md:150 — "### Phase 0 — Refuse unless the user owns this repo" evidence: internal/core/ahoy/preparation_page_test.go:56 — "func TestAhoyInstallCarriesThePreparation(t *testing.T) {" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:632 — "6. The prepare-this-repo fold. Page-only, intocommands/ahoy.md's install" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:307 — "writes the conventions file, and a default binaryabcd ahoy installwrites no" evidence: 8cbb1ae450a17bb3d95fc9366a5229be82cef1b6..4700d60e928272af1c0979ff05b636f12b4f6df1 -- commands/ (git diff --name-status) — "D commands/prepare-this-repo.md" - ac-11 — MET_WITH_CONCERNS: library carries every memory and source sub-verb under its old name, and its page folds in the consult and ingest workflows; the six pages are gone, and at the close
abcd memoryandabcd sourcerefused as unknown commands, while consult, ingest and prepare-this-repo, never verbs, refuse with a note naming the successor and no alias; concerns: the name ingest survives aslibrary ingest, the memory store's distiller, while the retired /abcd:ingest meant registering a document (iss-2610110233253365, still open), and after the ship itd-2610091918433290 gave the memory name back to an agents' command, as this intent anticipated evidence: internal/surface/cli/library_test.go:20 — "func TestLibraryCarriesEveryMemoryAndSourceSubVerb(t *testing.T) {" evidence: f104bab82:internal/surface/cli/library_test.go:52 — "func TestMemoryAndSourceAreUnknownCommands(t *testing.T) {" evidence: commands/library.md:76 — "### Search the corpus" evidence: commands/library.md:194 — "### Record an influence" evidence: internal/surface/cli/staleusage.go:99 — "abcd library ingestdistils a source into memory pages and registers nothing" evidence: .abcd/work/issues/open/iss-2610110233253365-on-the-library-surface-ingest-now-names.md:15 — "On the library surface 'ingest' now names two different acts" evidence: internal/surface/cli/library_test.go:52 — "memory verb's name is not retired any more: the verb split gave it to the" - ac-12 — MET:
library addwith no class asks the one private-or-public question at a terminal and files by the answer; off a terminal it refuses with exit 2 and writes nothing; it files --private and --public without asking; and the library page tells the agent to ask through the host's question tool unless the person already said, each held by a test evidence: internal/surface/cli/library_class_test.go:124 — "func TestLibraryAddAsksTheClassAtATerminal(t *testing.T) {" evidence: internal/surface/cli/library_class_test.go:160 — "func TestLibraryAddRefusesWithoutAClassOffATerminal(t *testing.T) {" evidence: internal/surface/cli/library_class_test.go:179 — "func TestLibraryAddPrivateIsNotAsked(t *testing.T) {" evidence: internal/surface/cli/library_class_test.go:224 — "func TestLibraryPageAsksTheClassThroughTheQuestionTool(t *testing.T) {" evidence: commands/library.md:155 — "through the host's question tool under the chip naming their role, unless the"
Gap audit:
- honoured:
- A person who types /abcd: sees only the commands people use: at the close the fifteen people's pages carry no host key and the fifteen agents' pages carry user-invocable: false, gated page by page evidence: commands/scribe.md:6 — "user-invocable: false" evidence: internal/surface/cli/menu_test.go:77 — "func TestCommandPagesMatchTheMenu(t *testing.T) {"
- Commands only agents run, the guard among them, keep their names, and an agent still runs them evidence: commands/guard.md:6 — "user-invocable: false" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:596 — "the agent loaded the guard and ran it"
- Typed in full, a hidden page is refused by the host, which says to ask the agent evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:595 — "Ask Claude to use the "abcd:guard" skill for you."
- abcd --help lists the same commands as the plugin's person menu evidence: internal/surface/cli/menu_test.go:149 — "func TestPluginPersonListEqualsTheCLIs(t *testing.T) {"
- The menu drops from 35 pages to 15 visible and 15 hidden, with only the merged and retired pages gone
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:93 — "At the end,
commands/holds thirty pages: the thirty-five, less version," evidence: 314e9c3ce..f104bab82 -- commands/ (git diff --name-status) — "D commands/consult.md, D commands/ingest.md, A commands/library.md, D commands/memory.md, D commands/prepare-this-repo.md, D commands/source.md, D commands/version.md" - The version shows on the board and the version page retires, with abcd --version unchanged evidence: internal/core/board/board.go:125 — "if l := versionLine(in.Version, f); l != "" {" evidence: internal/surface/cli/consolidate_test.go:329 — "func TestRootVersionFlagPrintsWhatVersionPrinted(t *testing.T) {"
- Four source commands become library, which asks whether an item is confidential when the person did not say evidence: internal/surface/cli/library_test.go:20 — "func TestLibraryCarriesEveryMemoryAndSourceSubVerb(t *testing.T) {" evidence: internal/surface/cli/library_class_test.go:124 — "func TestLibraryAddAsksTheClassAtATerminal(t *testing.T) {"
- An agent still reaches each hidden page by name, from the agents-block help line that names it evidence: internal/surface/cli/helpgroups.go:379 — "fmt.Fprintf(w, " %-*s %s (read %s)\n", agentWidth, e.name, e.short, e.page)" evidence: internal/surface/cli/helpgroups_test.go:169 — "t.Errorf("%q names %s, which does not exist: %v", m[1], page, err)"
- diverged:
- changelog merges into launch as a preview of the changelog the cut would write; delivered as the deterministic cut (tag, impact, records, guard) with no composed changelog prose (spec decision 5)
evidence: commands/launch.md:451 — "below), with no prose, so no agent runs in a preview. Relay the derived"
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:629 — "5. The launch preview. Spelling:
launch --dry-runrenders the cut." - prepare-this-repo folds into ahoy install; delivered as a page-only fold, so /abcd:ahoy install in the host runs the preparation while the terminal binary
abcd ahoy installis unchanged and writes no AGENTS.md by default (spec decision 6) evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:632 — "6. The prepare-this-repo fold. Page-only, intocommands/ahoy.md's install" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:307 — "writes the conventions file, and a default binaryabcd ahoy installwrites no" - No invocation named on an agents-block help line is renamed or removed, and the agent loses nothing;
abcd changelog, an agents-block line naming commands/launch.md, is now an unknown command whose note points atabcd launch --dry-runevidence: 314e9c3ce:internal/surface/cli/helpgroups.go:117 — ""changelog": {group: groupAgents, page: "commands/launch.md"}," evidence: internal/surface/cli/staleusage.go:101 — "changelogmerged into launch as its preview: runabcd launch --dry-run" - Agents' pages are hidden from the menu; the host still offers a hidden page as the single suggestion once its full name is typed, and refuses it on Enter
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:597 — "The host does show a hidden command once its full name is typed (
/abcd:guardappeared as the single suggestion), and Enter is then refused, as A4 records." - The names consult, ingest, memory and source are gone; ingest lives on as
library ingest, the memory store's distiller, while the retired /abcd:ingest meant registering a document (iss-2610110233253365, open) evidence: .abcd/work/issues/open/iss-2610110233253365-on-the-library-surface-ingest-now-names.md:15 — "On the library surface 'ingest' now names two different acts" evidence: internal/surface/cli/staleusage.go:99 — "abcd library ingestdistils a source into memory pages and registers nothing" - The intent carries itd-146's classification to the plugin and adds nothing to the CLI; the delivery also re-placed eight verbs in the CLI help (lint, reflect, rules and spec to the agents' block; ideate, reading, lab and dashboard to the person's) and superseded itd-146's criterion keeping rules and spec on the person's help (spec decision 3)
evidence: .abcd/development/intents/shipped/itd-2610090831227812-a-person-who-types-abcd-sees-only-the.md:60 — "this intent carries the same classification to the plugin surface and adds nothing to the CLI."
evidence: 314e9c3ce:internal/surface/cli/helpgroups.go:100 — ""rules": {group: groupSetUp},"
evidence: internal/surface/cli/helpgroups.go:157 — ""rules": {group: groupAgents, page: "commands/ahoy.md"},"
evidence: .abcd/development/intents/shipped/itd-146-abcd-s-help-renders-in-labelled-command.md:161 — "Given
abcd rulesandabcd spec, when--helprenders, then they keep their places; nothing is renamed or nested." - The docs set the library beside memory notes (accepted on 2026-10-10); moved to itd-2610091918433290 by the product thinker's 2026-10-11 answer, so this intent ships without it evidence: .abcd/development/intents/shipped/itd-2610090831227812-a-person-who-types-abcd-sees-only-the.md:103 — "That criterion leaves this intent, so the clean-up ships without it."
- changelog merges into launch as a preview of the changelog the cut would write; delivered as the deterministic cut (tag, impact, records, guard) with no composed changelog prose (spec decision 5)
evidence: commands/launch.md:451 — "below), with no prose, so no agent runs in a preview. Relay the derived"
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:629 — "5. The launch preview. Spelling:
- missing:
- An after capture of what bare /abcd: lists (the fifteen, as step 8 planned), and the screenshots themselves attached to the spec: the spec records three partial-match probes in prose and keeps the screenshots in another checkout's local tier
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:585 — "the AFTER capture at the merged tip: what
/abcd:lists (the fifteen, A1)" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:591 — "the screenshots are kept in the coordinating checkout's local tier."
- An after capture of what bare /abcd: lists (the fifteen, as step 8 planned), and the screenshots themselves attached to the spec: the spec records three partial-match probes in prose and keeps the screenshots in another checkout's local tier
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:585 — "the AFTER capture at the merged tip: what
Scope-condition dispositions:
- cond-2610100613101033 — narrowed: The after capture on Claude Code v2.1.296 shows the host registering every page under commands/ and honouring user-invocable: false for browsing, partial matches and a person's invocation, but still offering a hidden page as the single suggestion once its full name is typed
narrowing: Holds for the host as captured on 2026-10-11 (Claude Code v2.1.296): the key keeps a hidden page out of what a person browses and partially matches, and refuses a person's invocation, but does not keep a hidden page's fully typed name out of the suggestions.
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:595 — "A4: typing
/abcd:guardin full was refused by the host" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:597 — "The host does show a hidden command once its full name is typed (/abcd:guardappeared as the single suggestion), and Enter is then refused, as A4 records." evidence: commands/guard.md:6 — "user-invocable: false" - cond-2610100613106642 — narrowed: TestCommandPagesDeclareTheirBlock is unchanged and the two blocks still render, but a verb's class is declared in three places (helpPlacements, the page's block: and the host key), each held to the next by a gate rather than read from one source, and itd-146's criterion that rules and spec keep their places on the person's help was superseded (spec decision 3)
narrowing: Holds as a gated equality, not a single source: TestCommandPagesDeclareTheirBlock holds the page's block: to helpPlacements and TestCommandPagesMatchTheMenu holds the host key to block:, so a class changes only when all three move together; itd-146's two blocks stand, but not its criterion keeping rules and spec on the person's help.
evidence: internal/surface/cli/helpgroups_test.go:316 — "func TestCommandPagesDeclareTheirBlock(t *testing.T) {"
evidence: internal/surface/cli/helpgroups.go:255 — "func helpBlock(cmd *cobra.Command) string {"
evidence: internal/surface/cli/menu_test.go:77 — "func TestCommandPagesMatchTheMenu(t *testing.T) {"
evidence: .abcd/development/intents/shipped/itd-146-abcd-s-help-renders-in-labelled-command.md:161 — "Given
abcd rulesandabcd spec, when--helprenders, then they keep their places; nothing is renamed or nested." evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:617 — "3. rules and spec leave the person's help. Type: supersession." - cond-2610100613103552 — survived: The audit rules each page that had no block (the board people under P1; consult, ingest, prepare-this-repo and version people until their own step, under decision 14); step 1 wrote that class into each page's frontmatter; and after the ship the board is the only page backing no verb, with its class asserted by the menu test
evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:50 — "| 1 |
abcd(the board) | none | the bare root | people (P1) |" evidence: .abcd/development/specs/closed/spc-2610100613109045-a-person-who-types-abcd-sees-only-the.md:55 — "| 6 |consult| none | no verb (host-delegated) | merge into library (P4); people until then (decision 14) |" evidence: 839983b8c:commands/version.md:4 — "block: people" evidence: internal/surface/cli/menu_test.go:83 — "if fields, _, err := launch.PageFieldsForTest(board); err != nil || fields["block"] != blockPeople {" - cond-2610100613103858 — survived: abcd still ships zero skills: the brief says so, the release payload names commands, agents and hooks and no skills directory, and each hidden page stays a command under commands/ with only the host key added
evidence: .abcd/development/brief/05-internals/08-skills.md:8 — "abcd ships zero skills. The
/abcd:namespace is commands only, and there is" evidence: .abcd/config/launch-payload.json:4 — ""commands"," evidence: commands/guard.md:6 — "user-invocable: false"
Grounds
- pursued: a menu of only people's commands lets a person find theirs without reading agents'; shown wrong if people keep asking agents to run hidden commands for their own work.
Frontmatter
| id | itd-2610090831227812 |
|---|---|
| type | intent |
| lifecycle | shipped |
| kind | standalone |
| severity | minor |
.abcd/development/intents/shipped/itd-2610090831227812-a-person-who-types-abcd-sees-only-the.md
open on GitHub ↗ · commit history ↗
References4
- adr-40Review, audit, lint, and gate are four buckets, separated by what each comparesrelated
- itd-146abcd's help renders in labelled command groups, and the grouping is gated like every other surface claimbuilds on
- itd-2609212113220149Every verb's help opens with one sentence an agent can act onrelated
- itd-2609212130136102abcd's verbs consolidate: modes become flags and five checks become one lintrelated
Referenced by20
- iss-2610262036453716The menu intent hides the guard as a command only agents run; the guard chapter says a person or a script asks the guard about a command line.related
- iss-2610262036460690The menu intent puts lint among the commands no person types; the lint chapter says bare lint runs when a human types it.related
- iss-2610262037594127The menu intent keeps drain on the agents' list until itd-82 ships; the drain chapter calls drain the verb a person types, with itd-82 still open.related
- iss-2610262042029426The product-thinker entry says a persona's role hint is an outside job title, not the product thinker; itd-2610090831227812 attributes its quote to 'Iris, a product thinker'.related
- iss-2610262043265040itd-106 gives the product-thinker persona the name Alice; itd-2610090831227812 records the registry's product-thinker persona as Irisrelated
- iss-2610262043310309itd-26 names /abcd:memory ingest as the user-facing knowledge-ingest verb; itd-2610090831227812 makes /abcd:memory an agent's command for memory notesrelated
- iss-2610262043322187itd-126 adds abcd source share and abcd source ingest; itd-2610090831227812 merged the source family into library with no aliasrelated
- iss-2610262043323769itd-2609292108089653 builds ingest and consult as their own verbs; itd-2610090831227812 merged consult, ingest and source into libraryrelated
- iss-2610262044186274The decision-verdict draft routes capture through an abcd-intent-new skill, but abcd ships zero skillsrelated
- iss-2610262044229426The audit draft wires into prepare-this-repo Phase 2, but prepare-this-repo has folded into ahoy install with no aliasrelated
- iss-2610262044419558The review-bar draft says prepare-this-repo owns the AGENTS.md conventions section, but prepare-this-repo has folded into ahoy installrelated
- iss-2610262044429007The attribution-preference draft puts its setup question in `/abcd:init` / `prepare-this-repo`, surfaces the verb split retired or never hadrelated
- iss-2610262044589669itd-146 keeps rules and spec listed so --help matches the marker block; itd-2610090831227812 makes rules and spec agent-onlyrelated
- iss-2610262044591588itd-24 has the person run /abcd:reflect < tag>; itd-2610090831227812 makes reflect an agent-only page the host refuses when a person types itrelated
- iss-2610262045409665itd-2609231013154443 names abcd changelog as the read-only preview; itd-2610090831227812 merges changelog into launch with no aliasrelated
- iss-2610262045411383itd-2609212130136102 caps the person's list at fourteen verbs; itd-2610090831227812 rules that neither surface caps itrelated
- iss-2610262045524988itd-42 updates a grill SKILL.md; itd-2610090831227812 says abcd ships zero skillsrelated
- iss-2610262045546558itd-2609150819445595 gives the persona Iris the technical facilitator's role; itd-2610090831227812 says the registry picks the name from the role, Iris being the product thinkerrelated
- itd-2610091918433290Agents keep memory notes with /abcd:memory, recalled when they matterrelated
- spc-2610100613109045a-person-who-types-abcd-sees-only-the-commands-people-useimplemented by
mentions18
- 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-26092900000000072026-09-29 — The product thinker answered twenty-six owed rulings and the published-history question in one interview, asked one at a time by orchestrator abcd-23 of autonomous run A (recorded by lane recRulings for orchestrator abcd-cb). The answers are kept verbatim in the local-tier file `.abcd/.work.local/scratch/reports/rulings-answered-2609-29.md`, dated 2026-09-29, and are restated here because that file is not committed. Published history is left as it is, with no rewrite. The build loop's fidelity audit runs once, on the lane that closes the spec, over the whole delivery (AI). On the vendor denylist the product thinker answered, verbatim: "I think we need an allow list rather than trying to catch a deny list." The interviewer's reading of that answer, recorded as a reading and not as the product thinker's words, is that the per-provider allowlist is the control and the vendor denylist is not extended to chase spellings, with whether the bundled `anthropic/*` entry stays as a backstop left to the technical facilitator (AA(a)). Only a route the person set up on their own machine may use their paid key, and a repository's own route to it is refused, which replaces the route half of itd-2609081951381895 decision 8 (AA(b)). The live site setup, the API adapter and the decision adapter may each close on tests against a simulated service, with the live paid check recorded as owed to a person (iss-2609291925387011, iss-2609291925393913, iss-2609291925398978). itd-111's last criterion is met by an agent's timing check on macOS plus the Linux CI run, so the intent may be finished. Automated dependency updates are switched on, pushed with a personal or app token the person creates and stores as a repository secret (itd-2609221842494980; creating the token is the person's act, and the lane builds everything else and names the secret it expects). itd-6 adds a Go MCP module, proposed for the person's explicit sign-off before it is fetched; closing itd-6 on a fake server was not ruled in this interview. (A later answer the same day, H1b in the local-tier file `.abcd/.work.local/scratch/reports/rulings-answered-2609-29-b.md`, dated 2026-09-29, rules that it is not: itd-6 is finished only after running once against the real RepoPrompt app, a check owed to a person.) For itd-148: the store under the home folder wins (adr-2609091248200336); the store draft itd-2609091014076309 owns add, list and clean-up and itd-148 uses them; a session that declares itself the coordinator is exempt from the write block in the primary checkout and every other session is blocked; and the store draft is planned first, with nothing from the store draft, the merged-worktree clean-up included, built before its planning interview (Q4). itd-148's own wait is not part of that ruling: it follows from Q2, because itd-148 uses the store's verbs, and is carried by the `blocked_by` below. itd-148 and spc-42 are rewritten to match in this change, and itd-148 is now `blocked_by` the store draft. A release retrospective is seeded from a release, the intents a tag shipped (AD); itd-24 and its spec are rewritten to the release in this change. An unpointed route is refused naming the one setting to add, as built in 35100512e, so AC11 of itd-2609170822093401 is complete (BR1). A missed target becomes `next`, whatever the following release is numbered (BS1). Spec pieces keep "step" and the lane stages are renamed, a breaking change to the JSON fields `step`, `performed` and `refusal.step` that resolves iss-2609291313276243 and corrects the glossary entry `core/step.md` (BU1), and the old command spellings are removed in that same breaking release (BT1). The text board shows Later as a count only while the site and `--json` keep the full list (BV1), and an intent in progress appears only under Now (BV2). A pause of zero is allowed (BW1); drain stays in the agents' help list until it runs end to end (BX1); a managed repository must hold the drain eligibility decision in its own record, and drain refuses there until it does (BX2); a capture without a remedy is refused (BX3), which tightens the one-line capture friction `commands/capture.md` promises, so the lane that builds it reconciles that page, the principle wording and every caller that files a capture; a run's pick reason keeps the shared `pursued:` kind with its marker (BZ1); and an intent whose blocker was superseded waits on the successor, transitively (BZ2). The five itd-48 follow-ups are planned as one intent, drafted as itd-2609291923559186 (BT2), and all warn rules share one shrink-only baseline file in which a new warning fails, drafted as itd-2609291924469783 (BT3); both drafts wait on their planning interviews. Each ruling that contradicts a shipped behaviour or another record is amended in the change that builds it, not here. itd-7's planning interview stays owed.
- dcn-26110415501392642026-11-04 — The product thinker's rulings on the stop switch (itd-2611041549471712), the restart path (itd-2611041549461012) and the daily digest (itd-2611041549483696), at their filing. The stop lives on the machine that runs the work, in a shared folder chosen as an option at setup (/Users/Shared on macOS and its counterpart on Linux), on a machine no other person shares; the store ownership rule admits this one exception, and a stop that reaches the machine over a private network or through a cloud adapter is later work. The daily digest is a dated file in that same folder: the digest draft asked that one choice hold for both, and an unshared machine answers the privacy cost, so this followed from the ruling above and no question was put. A stop lets an agent in a call finish that call, then stops. A stop releases the run's claims on its work, so a peer may take it up. The drain's plugin page stays an agent's command and its terminal form stays the person's way to drive it; this changes the 2026-10-09 ruling on itd-2610090831227812 that the drain joins the person's menu when itd-82 ships.
- iss-161Plugin verbs render as /abcd:abcd:<verb> instead of /abcd:<verb>: the verb files live in commands/abcd/, and the harness maps a commands/ subdirectory to a namespace segment, so the directory name duplicates the plugin prefix. Verbs need to live flat under commands/ (or the subdirectory renamed away from the plugin name) for the documented /abcd:<verb> surface.
- iss-2610090831317531abcd's verbs have never been reviewed as a set: nothing lists every CLI verb and /abcd: command page with whether people or agents mainly use it, and whether it should be kept, merged, renamed or retired. Draft intent itd-2610090831227812 (a person's /abcd: list shows only the commands people use) needs that classification before its spec can say which pages move.
- iss-2610090849280432The issue-resolution gate (RS004) does not count a Refs: line that names an issue alongside an intent, such as 'Refs: itd-2610090831227812, iss-2610090831317531, itd-146': DECLARE_RE in scripts/check-issue-resolution.sh accepts a line listing iss- ids and nothing else, so the issue on a mixed line reads as an undeclared mention. The refusal then asks for exactly one declaration line, which the commit already appears to carry, and never says the line was passed over because it also names an intent, so the author cannot tell what is wrong. Found on 2026-10-09 when make preflight refused a records commit.
- iss-2610091903077581abcd report lets an agent in an abcd-managed repository file a defect report or proposal about abcd into the abcd inbox without asking anyone: commands/report.md says nothing about permission. The product thinker ruled on 2026-10-09 that report stays an agent's command but must ask the person's permission first when it runs in an abcd-managed repository, since the report carries that project's words to another project's inbox.
- iss-2610110233253365On the library surface 'ingest' now names two different acts: abcd library ingest distils a source into the memory store's cited pages, while the /abcd:ingest page (to fold into the library page in step 6 of spc-2610100613109045) means registering a document in the sources corpus, which is abcd library add. Every sub-verb kept its name under decision 7, so a person who learned ingest as register will run the distiller, and one who reads the page title will look for a corpus verb named ingest.
- iss-2610241549433260Five open records carry remedies that name verbs or pages itd-2610090831227812 retired with no alias on 2026-10-09: iss-25 and iss-52 name abcd source add (iss-52 also source ledger), and iss-92, iss-2608210934566220 and iss-2610040350491915 name prepare-this-repo, so a lane applying any of them targets a command that no longer exists; nothing checks a remedy against the retired names.
- iss-2610252224295213itd-2610090831227812's spec planned an after capture of what the bare abcd listing shows (the fifteen, step 8), with the screenshots attached to the spec. The closed spec records three partial-match probes in prose and keeps the screenshots in another checkout's local tier.
- iss-2610262039536939itd-2609212130136102 caps the person's default verb list at fourteen; the README says neither surface caps it and lists seventeen.
- iss-2610262039541373itd-2609231013154443 names `abcd changelog` as the release-page preview; the README says `changelog` merged into `launch` and is in neither help block.
- itd-36Knowledge That Compounds, Not Knowledge That Re-Derives
- itd-39abcd Surfaces the Right Memory at the Right Moment
- itd-82`abcd drain` fixes the issues that need no decision, and hands the rest back by kind
- itd-2610301327282266abcd's help fits the screen it is read on
- itd-2610301346085246An agent learns how to call abcd from the abcd it runs
- spc-2610111627213138memory-recall