Development record
Every verb family has a behavioural scenario that drives the built binary end to end
Typed links: related_issues iss-48 (the record this draft plans).
Press Release
Every family of abcd verbs has at least one scenario that drives the built binary through a real round trip, in continuous integration on macOS and Linux. Where the smoke lane proves that help renders and that the verbs writing a committed record land what they claim, the scenario suite follows a person's actual sequence per family: capture an issue, resolve it and list it; install abcd into a scratch repository; ask the memory store a question over a fixture; lint the docs; capture and list a transcript; preview a release. "A change once passed every gate while the verb it touched refused every real input," said Bob, a staff engineer on a platform team. "Now each verb family is driven end to end the way a person uses it, and that kind of break fails the change."
Why This Matters
The smoke lane (evals/smoke_test.go) is structural: every command's help
renders and the read-only verbs run without a panic. The write-path smoke
(evals/smoke_write_test.go, the product thinker's ruling M11 of 2026-09-23)
runs the verbs that write a committed record against a scratch repository.
Neither drives a person's sequence through a verb family: iss-48 lists capture,
ahoy, memory, docs, history and launch as families with no behavioural
end-to-end scenario. The product thinker ruled on 2026-09-29 to plan a
behavioural scenario suite per verb family (ruling J24).
What's In Scope
- One scenario per verb family at least, run against the cross-compiled binary in a scratch repository and a scratch home, asserting what lands on disk and what the verbs print.
- The families iss-48 names first: capture, ahoy, memory, docs, history,
launch; the planning interview decides whether every family in
abcd --helpis in scope. - Continuous integration on both platforms, in the tagged lane the smoke harness already uses.
What's Out of Scope
- Anything that reaches a network service or a paid key: a scenario runs offline.
- Replacing unit tests: a scenario proves the wiring, not every branch.
Mechanism
Prompted (the claim-recording gradient): why the authors expect this to work, as a falsifiable "we expect X because Y" — not the outcome restated. Replace this line with the claim, or with the exact token
None stated.alone on its line to record the claim as considered and declined.
Scope Conditions
Required (the claim-recording gradient): the population, platform, scale, or assumptions this claim holds under, one per top-level bullet —
abcd intent planstamps each with a persistent identity. Replace this line with those bullets, or with the exact tokenNone stated.alone on its line.
Acceptance Criteria
Seeded by the run from iss-48 and the ruling, unconfirmed: the planning interview walks each one.
- Given a scratch repository and home, when the capture scenario runs,
then it captures an issue, resolves it and lists it through the built
binary, and the record is in
resolved/with its resolution. - Given a scratch repository, when the ahoy scenario runs, then install writes the scaffold and a second install reports nothing to do.
- Given a fixture memory store, when the memory scenario asks a question, then the answer cites the fixture's pages.
- Given each family in scope, when the suite runs in CI on macOS and Linux, then every family has at least one passing scenario and a family with none fails the suite by name.
SOTA
Surveyed on 2026-10-23; sources, evidence tiers and the local fit risks are in the verification-assurance SOTA note. The ground is shared with itd-75, whose fixtures and this intent's scenarios are one format.
- A declarative script a reviewer reads without Go exists and is the Go project's own: a
testscriptfile holds the commands, the expected output (regular-expression match orcmpagainst a file in the same archive) and the fixture tree, runs in a fresh work directory withHOME=/no-home, and gates a line to one platform with a condition such as[unix](testscriptpackage documentation;cmd/internal/script/scripttestruns thegocommand's owntestdata/script/*.txt). - The same engine has a standalone runner, so a scenario is usable from CI or a non-Go project without
go test(one practitioner's report of thetestscriptcommand). - BATS reads to anyone and emits TAP but needs Bash on every runner and keeps the fixture tree outside the test file (bats-core documentation); godog binds Gherkin steps to Go functions by regular expression, is pre-1.0 with a deprecated CLI, and reintroduces the step-definition tier itd-109's fit-challenge refused.
- Every family, by detection: the smoke harness already walks the Cobra tree in-process, so a detector that fails on a top-level verb with no non-empty
scenarios/<family>/directory is a few lines over an existing walk, not a hand-kept list. - Its own tagged lane is a question of run time and failure attribution, not of standing down: the CI classifier already stands the smoke harness down on a docs-confined pull request (with the race lane and the workflow audit), so scenarios inside that lane inherit the stand-down either way.
- Locally, neither
rogpeppe/go-internalnorgolang.org/x/toolsis a dependency today.
Path 1 for the format, shared with itd-75: scenarios are testscript files run from the harness. This adds a test-only Go dependency on github.com/rogpeppe/go-internal and needs explicit sign-off; if refused, Path 2 is itd-75's in-house subset runner over the same files. The detector and the lane are native either way. The independent fit-challenge runs at plan time.
Open Questions
- Every family or a named list: does the suite have to cover every top-level verb, with a detector that fails on a family with no scenario?
- Where it runs: inside the existing smoke lane or its own tagged lane, and whether a pull request confined to docs skips it.
- Scenario format: Go tests beside the smoke harness, or a declarative script format a reviewer can read without Go.
- (SOTA 2026-10-23) A family whose only real round trip needs the network or
a paid key (
launch, parts ofmemory) is out of scope by the intent's own rule; does the detector accept a scenario gated by a condition that is never true in CI, or must each such family carry an offline round trip?
Audit Notes
Empty. Populated by intent-auditor when intent moves to shipped/.
Frontmatter
| id | itd-2609292109475690 |
|---|---|
| type | intent |
| lifecycle | drafts |
| severity | minor |
.abcd/development/intents/drafts/itd-2609292109475690-every-family-of-abcd-verbs-has-at-least.md
open on GitHub ↗ · commit history ↗
Referenced by2
- iss-48behavioural end-to-end coverage: evals/smoke_test.go is structural only (help renders, no panic) — no scenario drives the built binary through a real verb round-trip (capture an issue, resolve it, list it; ahoy install into a temp repo; memory ask against a fixture substrate). Detector: a small scenario suite against the cross-compiled binary, one scenario per verb family, run in CI on both platforms. Acceptance corpus: the verb families with zero behavioural e2e today — capture, ahoy, memory, docs, history, launch.related
- iss-2610262039010827itd-2609292109475690's memory scenario asks the memory store a question; the surfaces register says notes come back automatically and asking is the library's jobrelated
mentions4
- dcn-26092900000000112026-09-29 — The product thinker answered the twenty-six Group J rulings (plan or close), J1 to J26 (recorded by lane recGroupJ of autonomous run A, for orchestrator abcd-fc). The answers are kept verbatim in the local-tier file `.abcd/.work.local/scratch/reports/rulings-answered-2609-29.md`, section "Group J", dated 2026-09-29, and are restated here because that file is not committed. PLAN: the installer script becomes a minimal starter with an ownership-checked hand-over, planned as a new intent with its planning interview owed (J2, iss-377, draft itd-2609292106557115); token metering and size classes are planned as one intent (J3, iss-2608301744251874 and iss-2608301856299268), and session token accounting in the history store joins that metering intent (J4, iss-2608220150157508; all three in draft itd-2609292107351737); the sources tooling moves into abcd's core with ingest and consult as abcd verbs (J5, iss-27, whose corpus half itd-76 already delivered), and the backfill of the placeholder source entries is part of that intent (J6, iss-55; both in draft itd-2609292108089653); the grill hands off to an installed external interview skill and falls back to its own (J11, iss-165, draft itd-2609292108373494); an opt-in local-model prompt sanitiser is planned (J14, iss-2608261543489261, draft itd-2609292109005937); decision-to-transcript links are planned, with the anchor kind and the link's home settled in the planning interview owed for draft itd-171 (J16, iss-2608290819228175); the dredge synthesis, its write-ups as their own memory source class, is planned together with draft itd-25, whose planning interview is owed (J19, iss-2609211905340006); one provenance register across ingest and vendoring is planned together with draft itd-26, whose planning interview is owed (J20, iss-2609211905346507); release retention, keeping the newest release per version line, is automated by planning draft itd-70 (J21, iss-282); a rules-backend seam with an opt-in CARL adapter is planned, the native loader staying the default (J22, iss-64, draft itd-2609292109214516); core-owned managed pre-commit gates are planned with draft itd-62 (J23, iss-84); a behavioural end-to-end scenario suite per verb family is planned (J24, iss-48, draft itd-2609292109475690). Every draft stays in drafts/ until a person plans it, and each source issue links its draft and names that planning interview in its deferral. BUILD: the teaching plane, the rules-loader safety domain generated from the hazard registry, is built as a lane, the registry being the single source (J10, iss-151 and itd-103; a code lane owns it). RULED DETAILS: `source_kind` carries both, as two separate labels, one for the tool and one for the route (J13, iss-2608230752354928); the prompt router's removal signal is the full list of active domains every time, a domain's absence meaning it has stopped (J15, iss-2608261550580260); setup offers an outside AI service (for example OpenRouter) at install, skippable, once the API adapter ships (J18, iss-2609081951416843, which waits on the API adapter); the salvage-hook timeout is 120 seconds, the wait must show a counter or a message while it runs and never stall silently, and every per-event timeout is pinned in a test (J25, iss-323). J13, J15 and J25 are carried by code lanes. CLOSE: the quick-tunnel preview protocol is closed unless the need recurs (J26, iss-2608230617385431, wontfix with that reason). PARKED ON A TRIGGER: agent payment protocols are kept under watch, not now, revisited as the protocols mature (J8, iss-138); the findings-only skill waits for the skill format to be versioned and stewarded (J9, iss-139); the disposition worksheet as an intent and a site page waits until after the first study (J17, iss-2609021815529020). DECIDE LATER: the Homebrew tap stays parked (J1, iss-380); pluggable search back ends (J7, iss-26); forge-backed record numbering (J12, iss-2608210737264758).
- dcn-26092900000000202026-09-29 — The product thinker answered the twenty-six Group J rulings (plan or close), J1 to J26 (recorded by lane recGroupJ of autonomous run A, for orchestrator abcd-fc). The answers are kept verbatim in the local-tier file `.abcd/.work.local/scratch/reports/rulings-answered-2609-29.md`, section "Group J", dated 2026-09-29, and are restated here because that file is not committed. PLAN: the installer script becomes a minimal starter with an ownership-checked hand-over, planned as a new intent with its planning interview owed (J2, iss-377, draft itd-2609292106557115); token metering and size classes are planned as one intent (J3, iss-2608301744251874 and iss-2608301856299268), and session token accounting in the history store joins that metering intent (J4, iss-2608220150157508; all three in draft itd-2609292107351737); the sources tooling moves into abcd's core with ingest and consult as abcd verbs (J5, iss-27, whose corpus half itd-76 already delivered), and the backfill of the placeholder source entries is part of that intent (J6, iss-55; both in draft itd-2609292108089653); the grill hands off to an installed external interview skill and falls back to its own (J11, iss-165, draft itd-2609292108373494); an opt-in local-model prompt sanitiser is planned (J14, iss-2608261543489261, draft itd-2609292109005937); decision-to-transcript links are planned, with the anchor kind and the link's home settled in the planning interview owed for draft itd-171 (J16, iss-2608290819228175); the dredge synthesis, its write-ups as their own memory source class, is planned together with draft itd-25, whose planning interview is owed (J19, iss-2609211905340006); one provenance register across ingest and vendoring is planned together with draft itd-26, whose planning interview is owed (J20, iss-2609211905346507); release retention, keeping the newest release per version line, is automated by planning draft itd-70 (J21, iss-282); a rules-backend seam with an opt-in CARL adapter is planned, the native loader staying the default (J22, iss-64, draft itd-2609292109214516); core-owned managed pre-commit gates are planned with draft itd-62 (J23, iss-84); a behavioural end-to-end scenario suite per verb family is planned (J24, iss-48, draft itd-2609292109475690). Every draft stays in drafts/ until a person plans it, and each source issue links its draft and names that planning interview in its deferral. BUILD: the teaching plane, the rules-loader safety domain generated from the hazard registry, is built as a lane, the registry being the single source (J10, iss-151 and itd-103; a code lane owns it). RULED DETAILS: `source_kind` carries both, as two separate labels, one for the tool and one for the route (J13, iss-2608230752354928); the prompt router's removal signal is the full list of active domains every time, a domain's absence meaning it has stopped (J15, iss-2608261550580260); setup offers an outside AI service (for example OpenRouter) at install, skippable, once the API adapter ships (J18, iss-2609081951416843, which waits on the API adapter); the salvage-hook timeout is 120 seconds, the wait must show a counter or a message while it runs and never stall silently, and every per-event timeout is pinned in a test (J25, iss-323). J13, J15 and J25 are carried by code lanes. CLOSE: the quick-tunnel preview protocol is closed unless the need recurs (J26, iss-2608230617385431, wontfix with that reason). PARKED ON A TRIGGER: agent payment protocols are kept under watch, not now, revisited as the protocols mature (J8, iss-138); the findings-only skill waits for the skill format to be versioned and stewarded (J9, iss-139); the disposition worksheet as an intent and a site page waits until after the first study (J17, iss-2609021815529020). DECIDE LATER: the Homebrew tap stays parked (J1, iss-380); pluggable search back ends (J7, iss-26); forge-backed record numbering (J12, iss-2608210737264758).
- itd-75abcd Proves Your CLI Actually Runs — From Fixtures You Drop In
- itd-109Acceptance Criteria Verify Themselves, And The Manual Rest Renders For A Human