Development record
Intents Promote In Three Flavours — Standalone, Bundle-Member, Discipline
Re-scoped on 2026-09-21 by the product thinker: the three kinds, the
disciplines/shelf and the two-way supersession link this record described have shipped through other records; what remains, and what this record now plans, is the bundle command and thereclassifyverb. The press release and scope below are read through this paragraph and the Decisions section.
Press Release
abcd ships three intent kinds, each with its own lifecycle path through
/abcd:intent plan. A standalone intent maps 1:1 to a flow-nextspec— the default for ~60% of intents, and the only path the prior brief recognised. A bundle-member intent shares aspecwith its bundle-mates: the persona runs/abcd:intent plan itd-A itd-B, abcd creates one sharedspecwith both intents listed, and both files move fromdrafts/toplanned/together. A discipline intent has no persona moment of its own — it's a cross-cutting rule (everyspecmust carry acceptance criteria, every agentpromptmust declare aversion) that lives indisciplines/instead ofdrafts/, never gets its ownspec, but applies to every otherspecas an inherited acceptance gate. Capture stays format-neutral; the bindingkindfield is set at plan time, with anoracleclassifier writing an advisory hint at capture time. The discipline shape isvoyage-agnostic — an applicationvoyage(e.g., a macOS app under abcd) produces its own disciplines around privacy-impact review or accessibility passes with the same lifecycle as abcd's own discipline intents."I had an intent that didn't fit the standard mould — it was a rule about every future
spec, not afeaturebeing built — and I'd been forcing it through thepress-releaseformat anyway, ending up with prose that read awkwardly because there was no real persona moment to describe," said Iris, product lead. "The discipline kind let me write## Ruleinstead of## Press Releaseand have the system understand what it was looking at. Two of my intents reclassified from standalone to discipline; the lifecycle paths matched the actual shape of the work for the first time."
Why This Matters
The original abcd intent system treated every intent as a 1:1 capability that maps to one flow-next spec. An audit-driven corpus sweep surfaced a structural finding: ~40% of intents have non-1:1 relationships with at least one other intent. Three patterns recurred:
- Coupled intents — two or more intents that capture distinct user moments but only make sense delivered together. The original canonical example was itd-31 (cross-document fidelity review) and itd-32 (audit-role taxonomy) — but that bundle was dissolved on 2026-05-07 when the round-2 command-structure review split the three review roles into three distinct verbs under
/abcd:intent(review/consistency/shape), making itd-32's unified-/abcd:audit-surface taxonomy premise no longer load-bearing. itd-31 promoted to standalone; itd-32 superseded. The pattern itself is still real (coupled intents that ship together as one shared spec exist in the corpus), but it has no live example in the current corpus. - Subsuming intents — one intent whose value is fully covered by another, larger intent. itd-5 (prompt-quality additions) and itd-14 (prompt registry) are the canonical example: itd-5 carves off a cheaper subset of itd-14. Shipping both means writing prompt-version handling twice.
- Cross-cutting rules — itd-1 (acceptance gates) and itd-5 are not features at all. They are rules that apply to every other spec. Forcing them into the standalone-spec mould produces a "spec" whose only deliverable is "every other spec inherits this gate" — which is not a spec.
The 1:1 model fits cleanly only for the standalone ~60%. The other 40% calcifies into wrong shapes — bundles ship as separately-planned epics that retrofit onto each other; disciplines get press-release shaped despite having no user moment; supersession is implicit and lossy.
This intent introduces the three kinds as first-class lifecycle paths. Most intents stay standalone — the default doesn't change. Bundle-member and discipline are escape hatches for the shapes the standalone path doesn't fit. Capture stays cheap and format-neutral; the kind decision happens at plan time, when the user is committing to build the thing — that's where the shape decision has to be true.
The change is also project-agnostic. abcd is the loud first user of disciplines because abcd is a methodology project (its outputs include rules), but the pattern generalises. An idelphiDev intent like "every recording feature must include a privacy-impact review" is structurally identical to itd-1 — a rule that applies to every other spec — and naturally fits the discipline kind. The three kinds are a property of the intent framework, not of abcd's particular subject matter.
What's In Scope
Three intent kinds
kind: standalone— one press-release-shaped user moment, ships as one spec. Default; ~60% of the corpus. Lives indrafts/→planned/→shipped/. No change from the original 1:1 behaviour.kind: bundle-member— multiple intents that share underlying delivery. Each member has its own press release (each captures a distinct user moment); they share anepic_idand abundle: <bundle-id>frontmatter field./abcd:intent plan <itd-A> <itd-B>is the multi-arg promotion path. Members move together (drafts/→planned/→shipped/); audit runs per-member against the same delivered reality.kind: discipline— cross-cutting rule with no user moment. Lives indisciplines/instead ofdrafts/. Never gets a flow-next spec; instead imposes acceptance gates that every other spec inherits and is checked against. Uses## Rule+## Whytemplate instead of## Press Release.kind_notesfree-text field describes what kind of rule it is (subtype taxonomy deferred — see "Discipline subtypes are deferred" below).
Lifecycle paths
/abcd:intent plan proposes a kind based on the intent body, cross-references, and any suggested_kind hint from capture time. The user confirms or overrides; the chosen value is binding once written to frontmatter.
- Standalone: today's path.
/flow-next:plan+plan-review; bidirectional link;drafts/→planned/. - Bundle-member: multi-arg
/abcd:intent plan itd-A itd-B./flow-next:planonce with all intents as joint input;epic.intent: [itd-A, itd-B]; each intent'sepic_id: spc-Nandbundle: <bundle-id>; all membersdrafts/→planned/together. - Discipline: no
/flow-next:plancall. Registers acceptance gates in.abcd/disciplines/<itd-N>.json./flow-next:plan-reviewruns on the discipline's## Rulefor sanity (catches malformed rules).drafts/→disciplines/(active state encoded by directory location; nostatus:field per the 2026-05-08 directive — see brief 04-surfaces/05-intent.md § 5). Noshipstep — disciplines are continuously active once indisciplines/.
/abcd:intent reclassify subcommand
For late kind changes (a standalone intent realised to be a bundle-member; a draft realised to be a discipline; a shipped intent superseded by a later one):
/abcd:intent reclassify <itd-N> --kind <new-kind> [--reason <text>]- Records
reclassification_historyentry (date + from-kind + to-kind + reason) in the intent's frontmatter - Moves the file between directories as the new kind dictates
--kind superseded --by <itd-M>is the supersession path: file moves tosuperseded/; frontmatter recordssuperseded_by: itd-M; preserved as historical record
Frontmatter additions
All intent files gain four new fields:
suggested_kind: null # advisory, written by capture-time LLM classifier; can be ignored
bundle: null # for kind: bundle-member, the bundle ID
reclassification_history: [] # appended to by /abcd:intent reclassify
Discipline-kind intents additionally use kind_notes: "<free-text>" describing what kind of rule they are. Disciplines have no status field — the directory IS the state (disciplines/ = active; superseded/ = retired). Across all kinds, directory location is the single source of truth for lifecycle state; status fields would duplicate (and risk drifting from) what the directory already says.
Supersession captures original kind
When /abcd:intent reclassify <itd-N> --kind superseded --by <itd-M> runs, the intent's frontmatter records two fields:
superseded_by: itd-M # the successor intent
kind_at_supersession: <original> # what the intent was when retired:
# standalone | bundle-member | discipline
Both are required (lint hard-blocks if either is missing). The reason: "superseded" means different things depending on what the intent was. A superseded standalone is a retired capability. A superseded bundle-member is a retired half of a coupled pair. A superseded discipline is a retired rule that was inherited by every other spec. Without kind_at_supersession, future archaeology has to reconstruct the original shape from reclassification_history (which exists but is harder to query).
intent-fidelity-reviewer shape-classification role (third role)
The same agent that performs single-document fidelity audits (per the itd-1 discipline) and cross-document fidelity audits (per itd-48, which superseded itd-31) gains a third role: shape classification. It runs continuously via the pre-commit hook (writing findings to the latest report) and on-demand via /abcd:intent shape. Bare /abcd:intent (status+help) surfaces the latest cached shape suggestions in its summary output without itself running a fresh scan — bare invocation never mutates the report. Findings live at .abcd/logbook/audit/shape-<ts>/report.{json,md}. Specific suggestions:
- Bundle candidate: "intents X and Y reference each other in scope/references and target the same release; consider
kind: bundle-memberwith shared bundle ID." - Supersession candidate: "intent X's scope is fully covered by intent Y; consider
kind: superseded --by Y." - Discipline candidate: "intent X has no user moment in its press release (the customer quote describes a process, not a feature); consider
kind: discipline."
The user accepts a suggestion via /abcd:intent reclassify. Declined suggestions are logged so the reviewer doesn't re-surface the same one every run.
The agent count in the catalog stays at 15 — these three roles share one agent's prompt scaffolding, oracle backend resolution, and receipts.
Discipline subtypes are deferred
The brief introduces the discipline kind itself; it deliberately does not commit to a closed enum of discipline subtypes (e.g., methodology / documentation / audit / convention). Each discipline declares a free-text kind_notes field describing what kind of rule it is. The subtype taxonomy moves from free-text to formal enum when ANY of the following:
- Three or more disciplines exist with
kind_notesdescribing similar shapes. - A user is confused about which existing discipline a finding belongs to.
intent-fidelity-reviewer's shape-classification role cannot describe a proposed discipline without more constraint thankind_notesprovides.- Cross-project usage — once abcd is in three or more projects, comparing disciplines across them needs a shared subtype vocabulary.
This mirrors the lint-code namespace pattern in 05-internals/06-lint.md — categories added empirically as intents introduce them, not declared up front.
New directories
intents/disciplines/— active discipline-kind intents (created alongside this intent)intents/superseded/— intents killed by reclassification or absorption (currently empty)
Reclassification of two existing intents
itd-1 (acceptance gates) and itd-5 (prompt-quality additions) are reclassified from kind: standalone to kind: discipline. Their press-release sections are replaced with ## Rule + ## Why (the press-release format requires a user moment, which disciplines do not have). Files move from drafts/ to disciplines/. Each gains a reclassification_history entry recording the reclassification.
Brief edits
01-product/03-mental-model.md— three-layer model gains the three intent kinds under "Intents."04-surfaces/05-intent.md— § 1 grows kinds + discipline format + subtype-deferred revisit triggers; § 2 subcommands table addsreclassifyand multi-argplan; § 5 lint rules extend to verifykind,bundle:, and directory matching; § 6 documents the reviewer's three roles.05-internals/01-agents.md—intent-fidelity-reviewerrow condensed; new "three roles" sub-section.
What's Out of Scope
- Mandating bundle-member or discipline kinds for any specific intent. The kinds are available; the user (with the LLM classifier's advice) chooses. abcd never auto-reclassifies without user confirmation.
- A closed enum of discipline subtypes. Deferred per the revisit triggers above.
- Cross-bundle dependency tracking ("bundle X must ship before bundle Y"). Out of scope; bundles are a delivery shape, not a dependency graph.
- Auto-merging coupled intents at capture time. The LLM classifier proposes; the user binds at plan time. The framework never silently merges intents.
- A fourth kind for some hypothetical case the three kinds don't cover. If a fourth kind is needed, it lands as a future intent, not this one. Lineage update (itd-44; amended 2026-09-26, iss-239): the standing-infrastructure-choice case the three kinds don't fit is drafted as itd-44 — and not as a fourth persisted
kind. itd-44 proposes a fourth capture-time verdict,decision, that would route a confirmed standing choice into the existing ADR store (adr-N); it is a draft with no live spec, and nothing in the binary implements the verdict (its thin-adoption design was ratified against spc-56 of the predecessor store, not the livespc-56). The persistedkindenum here stays three-valued, and there is deliberately nointents/decisions/lifecycle. - Migrating disciplines into the brief itself. Disciplines live in
intents/disciplines/so they have the same lifecycle, lint, and frontmatter discipline as other intents. Folding them into the brief would lose the lifecycle handling. The brief describes the discipline kind in its mental-model and intent-surface sections; the discipline files themselves stay underintents/.
Mechanism
We expect a reclassify verb to end the hand moves that leave one-way supersession links and mismatched kinds, because the two-way write and the shelf move become one command whose refusals name what is missing; shown wrong if superseded records still arrive with a missing back-link after it ships.
Scope Conditions
None stated.
Acceptance Criteria
- Given two draft intents, when
abcd intent plan itd-A itd-Bruns, then it asks for a bundle name, mints one shared spec naming both, writeskind: bundle-memberandbundle: <name>on each, and moves both toplanned/together; a draft that names the other inblocked_byis refused naming the edge (a bundle cannot contain its own blocker), and nothing moves. - Given a bundle's shared spec is closed, when the close-hook runs, then every member with that
bundle:ships together. - Given
abcd intent reclassify <itd-N> --kind <standalone|bundle-member>or--kind superseded --by <itd-M|adr-N> --reason "…", when it runs, then the record's kind, shelf and links change in one write, withsuperseded_byon the record andsupersedeson the successor written together; a shipped intent asked to become a discipline is refused and told to file a discipline that supersedes it. - Given one member of a bundle is superseded, when the reclassify completes, then the surviving member stays
bundle-memberand its record states that the bundle now has one member. - Given the record lint runs, when a planned intent's
kinddoes not match its shelf, or abundle-membernames a bundle whose other members do not exist, then the lint refuses naming the record.
Dependencies
- Coordinated with: the itd-1 discipline — itd-1 is the first intent reclassified to
kind: disciplineunder this framework. itd-1's content rewrite and itd-34's lifecycle changes ship in the same brief revision. - Coordinated with: the itd-5 discipline — second discipline reclassified.
- Coordinated with: itd-48 — itd-48 owns the cross-document role (Role 2) and the shape-classification role (Role 3) on
intent-fidelity-reviewer, superseding itd-31 which originally introduced the cross-document concept. The agent's three-role architecture is documented uniformly across the brief and intent surfaces. - Coordinated with: itd-48 (cross-document role) and [itd-34's own shape-classification role] — these are the second and third roles on
intent-fidelity-reviewer(the first being single-document fidelity per itd-1). Each role has its own user-facing verb under/abcd:intent(consistency, shape, review respectively). The earliertier-0-audit-substratebundle (itd-31 + itd-32) was dissolved on 2026-05-07 when the unified-/abcd:audit-surface premise no longer held; itd-31 promoted to standalone (later superseded by itd-48 on 2026-05-27), itd-32 superseded. An even earlier attempted bundle (intent-capture-discipline, itd-27 + itd-30) was retired on the same day because itd-27 and itd-30 are scoped to different phases — bundles cannot span phases (one shared spec shipped together is the invariant). Both intent-capture intents reclassified to standalone.
Decisions
Ruled by the product thinker on 2026-09-21, in the interview that gave this intent its spec:
- Both remainders are built: the bundle command and the
reclassifyverb. - You name the bundle; the command asks for a short name.
- A survivor stays. When one member is superseded the other stays a bundle-member of a bundle of one, and says so.
- A shipped intent never changes kind. A rule discovered after the fact is filed as a discipline that supersedes it.
- No phase rule (ruled 2026-09-21, adr-2609212115255771): phases are retired, so the same-phase invariant this record carried is replaced by the blocker check above.
Noted on 2026-09-26, not a ruling: row 1 of the closed spec spc-2609211859391533's steps table ("bundle plan, named, refused across phases") predates decision 5 and is left as written; it means refused across shelves.
Open Questions
None open; decisions 2 to 4 settle the three this record carried.
Audit Notes
Fidelity review — receipt rcp-03d2e3b295e8 (verifier intent-auditor claude-fable-5-1).
Provenance: intent-auditor@claude-fable-5-1 · rubric_hash sha256:effa65b3e9e88ff29433b443ec2be159522a8b0b71cf1434526514aa61edb13e · prompt_hash sha256:fffb8fec06cee1e4ff5bd2c1aab90e8fa48c762816ffcae3ee131aef637e1524 Input attestations: diff:f91708205..4ce401c5f (internal/core/intent/{bundle,reclassify}.go, internal/core/intent/lifecycle.go, internal/core/lint/schema_bundle.go, internal/core/spec, internal/surface/cli/cli.go, commands/intent.md at BASE 4ce401c5; tree 376356ce669156f45b423eb7858a952ffeb0f9d6)@-;
Acceptance rollup: MET 4 · MET_WITH_CONCERNS 1 · NOT_MET 0 · INCONCLUSIVE 0
Per-criterion verdicts:
- ac-1 — MET_WITH_CONCERNS: PlanBundle mints one shared spec listing every member, stamps kind: bundle-member and bundle: < name>, moves all under the mint lock, and refuseBundleBlocker refuses a member naming another in blocked_by naming the edge with nothing moved (tests at bundle_test.go:61,95,124 green); concern: the CLI does not ASK for the bundle name, it refuses without --bundle, and the ask is delegated to the plugin page's interview text, as spc-2609211859391533 scope 1 records evidence: internal/core/intent/bundle.go:82 — "PlanBundle plans several drafts as one bundle (criterion 1)" evidence: internal/core/intent/bundle.go:264 — "a bundle cannot contain its own blocker, since its members ship together — plan %s first, or drop the edge (nothing moved)" evidence: internal/surface/cli/cli.go:2200 — "several intents are planned as one bundle, and --bundle < name> names it; re-run with --bundle (nothing moved)" evidence: commands/intent.md:384 — "Ask the human for the bundle's name" evidence: internal/core/intent/bundle_test.go:61 — "TestPlanBundleMintsOneSharedSpecAndMovesBothMembers" evidence: internal/core/intent/bundle_test.go:95 — "TestPlanBundleRefusesAMemberBlockedByAnother" evidence: internal/core/intent/bundle_test.go:124 — "TestPlanBundleRefusalMovesNothing"
- ac-2 — MET: Reconcile dispatches a spec carrying bundle: and an intents: list to reconcileBundle, which ships every member whose bundle matches together and rolls every move back on a failure; TestReconcileShipsEveryBundleMemberTogether and TestSpecCloseShipsABundleCLI green evidence: internal/core/intent/lifecycle.go:766 — "if sp.Bundle != "" && len(sp.Intents) > 0 { return reconcileBundle(" evidence: internal/core/intent/bundle.go:398 — "reconcileBundle is Reconcile for a bundle's shared spec (criterion 2)" evidence: internal/core/intent/bundle.go:593 — "if it.Bundle != sp.Bundle { skipped = append(skipped, it.ID)" evidence: internal/core/intent/bundle_test.go:189 — "TestReconcileShipsEveryBundleMemberTogether" evidence: internal/surface/cli/intent_bundle_cli_test.go:105 — "TestSpecCloseShipsABundleCLI"
- ac-3 — MET: Reclassify runs under the intent mint lock, sets kind and shelf, writes superseded_by on the record and appends supersedes on the successor (intent or ADR) as pending writes applied together with rollback, and refuses --kind discipline on a shipped record with the file-a-discipline-that-supersedes-it remedy; tests at reclassify_test.go:30,70,93,112 green evidence: internal/core/intent/reclassify.go:340 — "recFields := map[string]string{"superseded_by": succID, "kind_at_supersession": kindAt, "kind": kindAt}" evidence: internal/core/intent/reclassify.go:368 — "appendFrontmatterListItem(string(succData), "supersedes", it.ID)" evidence: internal/core/intent/reclassify.go:152 — "a shipped intent never changes kind; a rule found after the fact is filed as a new discipline — file a discipline that supersedes it" evidence: internal/core/intent/reclassify_test.go:30 — "TestReclassifySupersededWritesBothDirectionsAndMoves" evidence: internal/core/intent/reclassify_test.go:70 — "TestReclassifySupersededByAnADRAppendsToItsList" evidence: internal/core/intent/reclassify_test.go:93 — "TestReclassifyRefusesAShippedIntentBecomingADiscipline" evidence: internal/surface/cli/cli.go:2481 — "reclassify < itd-N> --kind < standalone|bundle-member --bundle < name>|superseded --by < itd-M|adr-N> --reason"
- ac-4 — MET: supersede finds the lone other member and appends a reclassification_history line 'bundle < name> now has one member' keeping its kind bundle-member; TestReclassifySupersedingABundleMemberLeavesASurvivorThatSaysSo asserts both evidence: internal/core/intent/reclassify.go:380 — "line := intentbundle.OneMember(it.Bundle) + ": " + it.ID + " was superseded by " + succID" evidence: internal/core/intent/reclassify.go:381 — "historyEntry(date, KindBundleMember, KindBundleMember, line)" evidence: internal/core/intent/reclassify_test.go:200 — "TestReclassifySupersedingABundleMemberLeavesASurvivorThatSaysSo" evidence: internal/core/intent/reclassify_test.go:226 — "the survivor's record must state the bundle now has one member"
- ac-5 — MET: intent_lifecycle refuses a planned or shipped kind other than standalone/bundle-member and a disciplines/ record not of kind discipline, and record_schema's checkIntentBundles refuses a bundle-member whose bundle no other record names unless its history says it now has one member; both tests green evidence: internal/core/lint/lint.go:2214 — "planned: kind must be standalone or bundle-member (non-null)" evidence: internal/core/lint/schema_bundle.go:67 — "bundle-member names bundle '" + name + "', which no other record names and whose history does not say it now has one member" evidence: internal/core/lint/schema_bundle_test.go:11 — "TestRecordSchemaBundleMemberNamesABundleOthersName" evidence: internal/core/lint/schema_bundle_test.go:73 — "TestIntentLifecycleRefusesAKindThatDoesNotMatchItsShelf"
Gap audit:
- honoured:
- multi-arg plan mints one shared spec and moves every member drafts/ to planned/ together, refusing a member that names another in blocked_by evidence: internal/core/intent/bundle.go:82 — "PlanBundle plans several drafts as one bundle" evidence: internal/core/intent/bundle_test.go:61 — "TestPlanBundleMintsOneSharedSpecAndMovesBothMembers"
- a bundle's members ship together on the shared spec's close evidence: internal/core/intent/lifecycle.go:766 — "return reconcileBundle("
- reclassify writes the two-way supersession link in one command and moves the shelf evidence: internal/core/intent/reclassify.go:368 — "appendFrontmatterListItem(string(succData), "supersedes", it.ID)"
- a shipped intent never changes kind (decision 4) evidence: internal/core/intent/reclassify.go:152 — "a shipped intent never changes kind"
- a survivor stays a bundle-member of a bundle of one and says so (decision 3) evidence: internal/core/intent/reclassify.go:380 — "intentbundle.OneMember(it.Bundle)"
- lint refuses a kind off its shelf and a bundle-member naming a bundle nobody else names evidence: internal/core/lint/schema_bundle.go:31 — "func checkIntentBundles(" evidence: internal/core/lint/lint.go:2214 — "planned: kind must be standalone or bundle-member"
- both verbs reachable from the CLI and the plugin page evidence: internal/surface/cli/cli.go:2194 — "plan < itd-N> [< itd-N>…] [--bundle < name>]" evidence: commands/intent.md:390 — "intent plan < itd-A> < itd-B> [< itd-C>…] --bundle < name>"
- diverged:
- the command 'asks for a bundle name': the CLI refuses without --bundle rather than prompting, and the ask lives in the plugin page's interview text, as the spec's scope 1 records evidence: internal/surface/cli/cli.go:2200 — "re-run with --bundle (nothing moved)" evidence: commands/intent.md:384 — "Ask the human for the bundle's name"
- the press release's capture-time kind classifier, disciplines/< itd-N>.json gate registry and shape-classification role are read through the 2026-09-21 re-scope, which limits this record's remainder to the bundle command and reclassify; they are not part of this delivery
evidence: .abcd/development/intents/shipped/itd-34-three-intent-kinds.md:15 — "what remains, and what this record now plans, is the bundle command and the
reclassifyverb"
- missing: (none)
References
brief/01-product/03-mental-model.md— three intent kinds in the three-layer model.brief/04-surfaces/05-intent.md— § 1 (kinds + discipline format + revisit triggers); § 2 (subcommands includingreclassifyand multi-argplan); § 5 (lint rules); § 6 (reviewer's three roles).brief/05-internals/01-agents.md—intent-fidelity-reviewer's three roles documented; agent count stays 15.README.md— top-level "What is intent-driven development?" section gains a paragraph on the three kinds;/abcd:intentplanned-commands table gainsreclassifyand multi-argplanrows.- 2026-05-07 audit conversation that surfaced the structural finding: ~40% of intents have non-1:1 relationships with at least one other intent.
- The discipline-kind framing is consistent across project types (framework projects produce more disciplines than application projects, but both produce some). Cross-project taxonomy revisit: see "Discipline subtypes are deferred" above.
Grounds
- pursued: the autonomous run supersedes and re-plans records unattended and has no verb to do it with; we expect the reclassify verb and the bundle command to be what it calls, and the hand moves with their one-way links to stop; shown wrong if a record superseded after this ships still carries a one-way link, or if the run never calls either
Frontmatter
| id | itd-34 |
|---|---|
| type | intent |
| lifecycle | shipped |
| kind | standalone |
| severity | major |
.abcd/development/intents/shipped/itd-34-three-intent-kinds.md
open on GitHub ↗ · commit history ↗
References1
- itd-1Every Intent Has Acceptance Criteria; Every Audit Verifies Thembuilds on
Referenced by38
- adr-2Three intent kinds (standalone / bundle-member / discipline)related
- adr-3Directory location is the source of truth for lifecycle staterelated
- adr-2609212115255771Phases and milestones are retired: sequencing is dependencies rendered as status, the checkpoint is the derived releaserelated
- iss-2610262032015266The mental model says planning several intents onto one spec (itd-34) is planned; itd-34 is shipped and records the bundle command as built.related
- iss-2610262032018111The agent holding the shape-classification third role is `intent-auditor` in the mental model and `intent-fidelity-reviewer` in itd-34.related
- iss-2610262032022112The intent's back-link to its spec is the scalar `spec_id` in invariant 17 and `epic_id` in itd-34.related
- iss-2610262032024089Invariant 17 makes the intent-to-spec relation 1:n; itd-34 says a standalone intent maps 1:1 to a spec.related
- iss-2610262032024609The dependencies page says flow-next is not a dependency and is not built; itd-34's lifecycle paths call `/flow-next:plan`.related
- iss-2610262032031758The naming register retires `.abcd/logbook/`; itd-34 puts the shape-classification findings under `.abcd/logbook/audit/`.related
- iss-2610262032038666The press release says `/abcd:intent shape` (Role 3) is designed and not yet built; the shipped itd-34 has that role in scope, running from the pre-commit hook and on demand.related
- iss-2610262032044265The scope page counts eighteen agents; itd-34 says the agent count in the catalog stays at 15.related
- iss-2610262034513980itd-34 has the reclassify verb move a draft into disciplines/; the intent surface page says no reclassify writes a discipline and a move into disciplines/ is refused.related
- iss-2610262034520240itd-34 calls the three-role fidelity agent intent-fidelity-reviewer; the intent surface page calls the same agent intent-auditor.related
- iss-2610262034528274itd-34 links a bundle member to its shared spec through epic_id and an epic.intent list; the intent surface page links it through spec_id and the spec's intents list.related
- iss-2610262037533417itd-34 names the fidelity-auditing agent intent-fidelity-reviewer and gives it a third role; the build chapter names the same agent intent-auditor.related
- iss-2610262039443223itd-34 calls the three-role audit agent `intent-fidelity-reviewer`; 01-agents calls the same agent `intent-auditor`.related
- iss-2610262039451705itd-34 ships a shape-classification role that runs from the pre-commit hook and `/abcd:intent shape`; 01-agents says the role is a design target with no `shape` sub-verb.related
- iss-2610262039463304itd-34 files shape findings under `.abcd/logbook/`, a name 04-universal-patterns retired and says must not be re-minted.related
- iss-2610262039476904itd-34 maps a standalone intent one-to-one to a flow-next spec; the surfaces register says an intent owns one or more specs in the native spec store.related
- iss-2610262039572342itd-34 says its subtype deferral mirrors the lint-code namespace pattern in 06-lint; 06-lint says the engine has no code catalogue.related
- iss-2610262041499021In the glossary a voyage is the operations namespace of lifeboat runs; itd-34 calls an application project a voyage.related
- iss-2610262041516427The internals index calls the fidelity agent intent-auditor; itd-34 calls the same agent intent-fidelity-reviewer.related
- iss-2610262041521807The verification matrix marks the capture-time kind classifier and the shape role as staged; shipped itd-34 claims both.related
- iss-2610262041529246The build sequence says .abcd/logbook/ is retired, with a detector that fails the build on it; itd-34 writes shape findings under .abcd/logbook/audit/.related
- iss-2610262041532193In the glossary a spec lives in abcd's native spec store; itd-34 maps each intent to a flow-next spec planned through /flow-next:plan.related
- iss-2610262041545005The spec glossary entry forbids 'epic' as a synonym; itd-34 has bundle members share an epic_id that holds a spec id.related
- iss-2610262043221489itd-1 calls the single-document fidelity auditor intent-auditor; itd-34 calls the same agent intent-fidelity-reviewerrelated
- iss-2610262043232891itd-34 routes a standalone intent to a flow-next spec, while itd-37 places the spec template in abcd's native Go binaryrelated
- iss-2610262045327872itd-34 says shape classification runs continuously in the pre-commit hook; itd-48 defers continuous pre-commit shape scanningrelated
- iss-2610262045336833itd-34 has bundle members share an epic_id field; itd-43 says the intent field is spec_id and epic is gonerelated
- iss-2610262045357230itd-34 maps a standalone intent to a flow-next spec made by /flow-next:plan; itd-80 has intent plan mint a native spc-N recordrelated
- itd-30Design Fictions As An Alternative Capture Format For Intentsbuilt on by
- itd-44A Capture-Time `decision` Verdict That Routes Infrastructure Choices Into The Existing ADR Storeblocks
- itd-48`intent-fidelity-reviewer` Gains Its Cross-Doc And Kind-Classification Rolesbuilt on by
- itd-80An Intent Ships Itself: `planned → shipped` Follows Its Spec Closing, With A Fidelity Audit Attachedbuilt on by
- itd-2609211913453478One page maps the record families, and phase, milestone and roadmap are retiredbuilt on by
- itd-2609291923559186The consistency pass runs where records are written and names each finding the same way every timebuilt on by
- spc-2609211859391533three-intent-kindsimplemented by
mentions24
- 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-26100200000000022026-10-02 — The consistency pass follow-ups are planned as one intent (itd-2609291923559186, spc-2610021456200324, impact additive) after two adversarial reviews and a planning interview with the product thinker and technical facilitator, asked one at a time. Rulings: A3 stays in this intent, though iss-2609260926323349's body had routed it to the shipped itd-34; A4 stays and builds its own overflow signal; the pre-commit gate runs the rule checks on every commit and the model pass only where the owner's personal settings provide a route, marking it owed otherwise, and never refuses a commit on a judgement it could not obtain; what the gate does on a finding (warn, stop, or automatic: fix the obvious and file the rest) is asked at setup; the rule checks cover the whole corpus and the model pass covers the staged records and their links; the gate waits for the core-owned managed pre-commit gates (iss-84 with itd-62, ruling J23); G1 lands first; the new A1 codes are warnings, and the 136 one-way `builds_on` edges that exist when the rule lands are baselined, so only new ones are flagged. The 10 acceptance criteria are the product thinker's. Grounds: "pursued: contradictions get into the records unnoticed and are answered twice, and unattended runs write records with no one checking them for contradictions; wrong if, after it ships, the same contradiction is still filed twice, a rule-catchable one still gets in, or an unattended run still lands a contradiction the check covers."
- iss-239Dangling pre-rebuild spec ids in the draft corpus: itd-44 (spc-56), itd-51 (spc-33/37), itd-57 (spc-48/60/62), itd-61 (spc-75) cite specs from the numbering adr-21/adr-26 reset (live store is spc-1..spc-22). Worse, intents/README.md and itd-34 assert the itd-44 lineage 'landed as itd-44 (spc-56 thin adoption)' — no such spec or decision-verdict code exists, so the record claims a delivery the tree cannot back.
- iss-2609091956001547The iss-35 brief-surface crosscheck does not converge on a clean run. Three
- iss-2609251617091944The record-families page's Moved by column names verbs the binary does not have: intent reclassify, abcd build, intent plan --bundle and drain are not in go run ./cmd/abcd --help, and the bundle glossary entry claims abcd intent plan itd-A itd-B --bundle <name> as present; itd-34 (multi-intent plan) and itd-2609212103565953 (steps and the build) are both planned. The page every glossary entry points at teaches a reader commands that refuse.
- iss-2609260926323349itd-48 shipped the consistency pass (Role 2) and nothing tracks the five spc-33 deferrals it was the routed home for: spc-33:A1 (Role-2 mechanical half, cross-doc lint codes), spc-33:A2 (Role-2 pre-commit hook, blocking-vs-advisory policy), spc-33:A3 (Role-3 pre-commit scheduling, whose shape role now belongs to the kinds lint in itd-34), spc-33:A4 (chunked corpus review, dormant until a report shows bundle_overflow: true) and spc-33:G1 (a stable reconciliation key for consistency findings across re-runs). This record is their home until one is planned; A3 goes with itd-34, the rest are follow-ups of the shipped pass.
- iss-261025221421111205-intent.md:304-310, :334, :624-648 and :657 still stage an on-demand shape verb with a flock contract; itd-48:147 gave the shape role to itd-34's kinds lint, itd-34:241 leaves it out of delivery, and :639 cites the superseded itd-33. 05-internals/01-agents.md:175 and 04-universal-patterns.md:124 repeat it.
- iss-261025221517445803-mental-model.md labels itd-2609212103568351, itd-2609212103565953 and itd-34 as 'planned', but all three are in intents/shipped/, and abcd intent plan <itd-N> [<itd-N>…] --bundle ships.
- iss-261026203119546303-mental-model says planning several intents onto one spec in one act (itd-34) is planned; the verification matrix records the --bundle plan as shipped behaviour.
- iss-261026203119644003-mental-model says a bundle's shared spec carries intent: [itd-A, itd-B]; the verification matrix says it carries intents: and bundle:.
- iss-2610262033434648The out-of-scope page says itd-27 (the grill sub-verb) is scoped into the planned phases; the intent chapter says itd-27 is superseded by itd-94 and no grill sub-verb ships.
- iss-2610262035033556itd-48's press release says the shape role went live as a working verb; the intent chapter says itd-48 did not build the shape role
- itd-5Every Agent Prompt Carries Its Version, Earns Its Lock, And Survives Injection
- itd-14Prompts Are Versioned Like Code
- itd-27Domain Experts Get Their Intents Grilled Before Anyone Codes Them
- itd-31The Brief and Every Intent Stay Consistent — Or Abcd Tells You Why They Don't
- itd-32Every Audit In Abcd Knows What It Audits, By What, And Against What
- itd-47Oracle-Backed Gates Pass Honestly Without A Human In The Loop
- itd-2609111003026787A gate catches the intent whose work is live while its spec is still open
- spc-8epic-to-spec-terminology
- spc-56Origin and production-mode keys, stamped by the command
- spc-2609211921272106intent-fidelity-reviewer-roles-2-3
- spc-2609211924346308loop-toward-acceptance
- spc-2610021456200324The consistency pass at commit time: a stable finding key, cross-document lint codes, chunked review, and a pre-commit gate