Development record
three-intent-kinds
Summary
The design record for itd-34's remainder, from the product thinker's
interview of 2026-09-21 (decisions 1 to 4): the bundle command and the
reclassify verb. The kinds, the shelves and the two-way supersession link
already exist and are read, not built.
Scope
- The bundle command:
abcd intent plan itd-A itd-B [itd-C…]takes--bundle <name>(asked for by the plugin page, refused absent on the CLI), refuses a member that names another inblocked_by, naming the edge, mints ONE spec whose frontmatter lists every intent (intents: [itd-A, itd-B]beside the existingintent:key naming the first), stampskind: bundle-memberandbundle: <name>on each, links eachspec_id, stamps scope conditions on each, and moves all together under the intent store's mint lock; any refusal leaves nothing moved (criterion 1). - The close-hook:
spec closeon a spec naming several intents ships every member whosebundle:matches, with the same impact rule per member (criterion 2). abcd intent reclassify <itd-N> --kind <standalone|bundle-member [--bundle <name>]|superseded --by <id> --reason "…">: one write under the lock that setskind, moves the shelf where the kind implies one (superseded →superseded/), writessuperseded_byon the record and appends tosupersedeson the successor (an intent or an ADR), appends areclassification_historyentry (from, to, date, reason), and prints the paths moved;--kind disciplineon a shipped intent is refused with the remedy "file a discipline that supersedes it" (criterion 3).- The survivor rule: superseding a bundle member leaves the other as
bundle-memberand appends a line to itsreclassification_historystating the bundle now has one member (criterion 4). - The lint:
record_schemagains two checks: a planned or shipped intent'skindmatches its shelf (disciplineondisciplines/, the other two onplanned/orshipped/), and everybundle-member'sbundle:names a bundle at least one other record names or a history line saying it is one (criterion 5).
Out of scope
- Reclassifying a shipped intent to
discipline(decision 4). - Dissolving a bundle (decision 3).
- Any change to the disciplines' template or the supersession note's prose.
Approach
The bundle command extends intent.Plan to take a list, minting once and
stamping per member inside the existing withIntentMintLock; the close-hook
extends the spec store's Reconcile to iterate the spec's intents list.
reclassify is a new internal/core/intent entry point over the same lock
and the record store's frontmatter writer, reusing the supersession-note
shape the superseded records already carry. The lint rows go beside the
one-way-supersession check that already exists. CLI and commands/intent.md
gain the two forms; the brief's intent chapter says what they do.
How the criteria are satisfied
| Criterion | Where |
|---|---|
| 1 bundle plan, named, refused across phases | scope 1 |
| 2 members ship together | scope 2 |
| 3 reclassify in one write, shipped-to-discipline refused | scope 3 |
| 4 survivor stays and says so | scope 4 |
| 5 lint on kind and bundle | scope 5 |
Frontmatter
| id | spc-2609211859391533 |
|---|---|
| type | spec |
| lifecycle | closed |
.abcd/development/specs/closed/spc-2609211859391533-three-intent-kinds.md
open on GitHub ↗ · commit history ↗
References1
- itd-34Intents Promote In Three Flavours — Standalone, Bundle-Member, Disciplineimplements