Development record
One page maps the record families, and phase, milestone and roadmap are retired
Press Release
One glossary page maps abcd's record families and how they relate, and three words leave the vocabulary.
"I kept asking which word to use, and every answer named a different document," said a product thinker who had just approved bundles and wondered whether phases still meant anything. "Now there is one page: intent, spec, step, bundle, issue, release, status. Phase and milestone are on it too, marked superseded, with what replaced them. I read it in five minutes."
Why This Matters
On 2026-09-21 the product thinker asked, mid-interview, whether abcd has an intent that sorts out its vocabulary and whether phases survive bundles. A glossary existed with phase, intent, spec, roadmap, record and ledger defined in prose and adr-9 making the phase the product layer; nothing drew the map, bundle had no entry, and the autonomous run had added a third grouping, the batch. The research pass and the discussion that followed retired phase, milestone and roadmap and named their successors (adr-2609212115255771); this page is where a reader learns that.
Mechanism
We expect one page that every glossary entry points at to stop new second names for one concept, because a name that must earn a row on a map is a name someone has to justify; shown wrong if a new record family or grouping word appears in the next release without a row on the page.
Scope Conditions
None stated.
What's In Scope
- One page,
glossary/core/record-families.md: one row per family, intent, spec, step, bundle, issue, release, status (Now / Next / Later), with the definition, what it groups, what groups it, its lifecycle folders and the verb that moves it; every other glossary entry'snot_to_be_confused_withmay name only a family on the page. - Superseded terms:
phase,milestoneandroadmapmarkedstatus: supersededwith the successor named (dependencies and the status block; the derived release and each intent's criteria; the status block); the phase documents under the roadmap folder carry a retirement line and stay as history. - New entries:
bundle(itd-34) andstep(itd-2609212103565953);batchdefined on the page as the run's internal order, not a term. - The lint: a glossary entry whose
not_to_be_confused_withnames nothing on the page is refused; a record frontmatter key naming a family the page does not define is reported. - The brief's mental-model chapter reads brief → intent → spec (→ steps), with the bundle as a delivery grouping and the derived release as the checkpoint; adr-9 is superseded by adr-2609212115255771.
What's Out of Scope
- Renaming any family or folder.
- The dependency graph between intents (itd-78).
- A release press release at the phase's old granularity (named in the decision record's consequences, not ruled).
Decisions
Ruled by the product thinker on 2026-09-21, in the interview that filed and planned this intent (adr-2609212115255771 records the vocabulary rulings it rests on):
- Phases and milestones are retired; sequencing is dependencies plus the lifecycle shelves; the checkpoint is the derived release plus each intent's criteria (adr-2609212115255771).
- Now / Next / Later is a rendered status, never stored, and the word roadmap goes with the phase documents.
- The unit below a spec is the step, a section, not a record family; an issue carries no spec by design; the batch is the run's internal order.
- One term per concept: the page is the map every entry points at.
Open Questions
None open.
Acceptance Criteria
- Given the glossary, when the page is read, then it holds one row per family (intent, spec, step, bundle, issue, release, status) with the definition, what it groups, what groups it, its lifecycle folders and the verb that moves it, and every other entry points at it.
- Given
phase,milestoneandroadmap, when their entries are read, then each is marked superseded with its successor named, and the phase documents carry a retirement line. - Given
bundleandstep, when the glossary is read, then each has an entry, andbatchis defined on the page as the run's internal order. - Given an entry whose
not_to_be_confused_withnames nothing on the page, or a record frontmatter key naming a family the page does not define, when the record lint runs, then the first is refused and the second reported. - Given the brief's mental-model chapter, when it is read, then it reads brief → intent → spec (→ steps) with the bundle and the derived release named, and adr-9 reads superseded by adr-2609212115255771.
Audit Notes
Fidelity review — receipt rcp-682701bb01e2 (verifier intent-auditor claude-fable-5-1).
Provenance: intent-auditor@claude-fable-5-1 · rubric_hash sha256:effa65b3e9e88ff29433b443ec2be159522a8b0b71cf1434526514aa61edb13e · prompt_hash sha256:b3006e36f460db1927e2db0503ab0b44f581b25aadd02659b68d50f555152295 Input attestations: diff:.abcd/development/brief/glossary, internal/core/lint/recordfamilies*.go, .abcd/record-lint.json, brief/01-product/03-mental-model.md, .abcd/development/roadmap and adrs/0009 at chore/audit-run-a-1 5b4a43b6 (git ls-tree -r; spc-2609212131112235 closed, itd-2609211913453478 shipped)@sha256:8f1ef1edbee75c5fa4f3c7acf46fd2b0aff390b29511582fd7212eaaaa3e0008;
Acceptance rollup: MET 4 · MET_WITH_CONCERNS 1 · NOT_MET 0 · INCONCLUSIVE 0
Per-criterion verdicts:
- ac-1 — MET_WITH_CONCERNS: the page's table holds exactly the seven rows intent, spec, step, bundle, issue, release, status with definition, groups, grouped-by, lifecycle and moved-by columns, and the glossary_family_pointer rule (blocker in record-lint.json) refuses any entry whose not_to_be_confused_with names nothing on the page; the concern is that the rule is satisfied by naming any family row rather than the page itself and admits other terms beside it, looser than the scope's 'may name only a family on the page'
evidence: .abcd/development/brief/glossary/core/record-families.md:20 — "| Family | What it is | Groups | Grouped by | Lifecycle | Moved by |"
evidence: .abcd/development/brief/glossary/core/record-families.md:22 — "| intent | one user-facing capability, press release first | its specs | a bundle (delivery) | drafts → planned → shipped (superseded; disciplines) |
intent plan,spec close|" evidence: .abcd/development/brief/glossary/core/record-families.md:28 — "| status | Now / Next / Later, rendered from the shelves, the gate and the build's state | nothing (a view) | nothing | none: computed | nothing |" evidence: .abcd/record-lint.json:440 — ""glossary_family_pointer": { "enabled": true, "severity": "blocker"," evidence: internal/core/lint/recordfamilies.go:196 — "onPage := func(member string) bool {" evidence: internal/core/lint/recordfamilies.go:229 — "name the family it is confused with (" + families + "), or the page itself as core/" + page.term +" - ac-2 — MET: phase, milestone and roadmap carry status: superseded and each body names its successor with the ADR (dependencies plus shelves rendered as the status block; the derived release plus acceptance criteria; the rendered status block); all ten phase documents and the roadmap README open with the dated retirement line
evidence: .abcd/development/brief/glossary/core/phase.md:7 — "status: superseded"
evidence: .abcd/development/brief/glossary/core/phase.md:18 — "> Superseded on 2026-09-21 (adr-2609212115255771): the sequencing layer is dependencies plus the lifecycle shelves, rendered as the Now / Next / Later status block; the phase documents stay as history."
evidence: .abcd/development/brief/glossary/core/milestone.md:18 — "> Superseded on 2026-09-21 (adr-2609212115255771). The word never had an entry of its own"
evidence: .abcd/development/brief/glossary/core/roadmap.md:18 — "the rendered Now / Next / Later status block on the
abcdboard and the site's Status page replaces the roadmap document and the word." evidence: .abcd/development/roadmap/phases/phase-0-substrate.md:1 — "> Retired on 2026-09-21 (adr-2609212115255771): phases and milestones are no longer units of the record." evidence: .abcd/development/roadmap/README.md:73 — "> Retired on 2026-09-21 (adr-2609212115255771)" - ac-3 — MET: bundle.md and step.md exist as stable entries, and the page defines the batch as the autonomous run's internal order and not a term of the record evidence: .abcd/development/brief/glossary/core/bundle.md:2 — "term: bundle" evidence: .abcd/development/brief/glossary/core/step.md:2 — "term: step" evidence: .abcd/development/brief/glossary/core/record-families.md:32 — "a batch is the autonomous run's internal order, derived from dependencies and the pick, and is not a term of the record."
- ac-4 — MET: glossary_family_pointer emits at the configured severity, blocker in this repo's record-lint.json, so it refuses; record_family_key emits at severityWarn and its message says 'reported, not refused'; both are armed in Lint and pinned by their tests, which pass at BASE evidence: internal/core/lint/recordfamilies.go:227 — "File: filepath.FromSlash(e.rel), Line: line, RuleID: ruleGlossaryFamilyPointer, Severity: cfg.Severity," evidence: .abcd/record-lint.json:442 — ""severity": "blocker"," evidence: internal/core/lint/recordfamilies.go:350 — "File: r.rel, Line: r.fields[k].line, RuleID: ruleRecordFamilyKey, Severity: severityWarn," evidence: internal/core/lint/lint.go:563 — "if gfCfg, ok := cfg.Rules[ruleGlossaryFamilyPointer]; ok && gfCfg.Enabled {" evidence: internal/core/lint/recordfamilies_test.go:71 — "func TestGlossaryFamilyPointerRefusesAnEntryNamingNothingOnThePage(t *testing.T) {" evidence: internal/core/lint/recordfamilies_test.go:128 — "func TestRecordFamilyKeyReportsAKeyNamingAFamilyThePageDoesNotDefine(t *testing.T) {"
- ac-5 — MET: the mental-model chapter opens with brief, intent, spec and the spec's steps, names the bundle as the delivery grouping and the derived release as the checkpoint, cites adr-2609212115255771 as superseding adr-9, and adr-9's frontmatter reads superseded_by that ADR evidence: .abcd/development/brief/01-product/03-mental-model.md:3 — "the brief (what is this project?), the intent (why does this user-facing change matter?) and the spec (how do we build it?), with the spec's steps below it" evidence: .abcd/development/brief/01-product/03-mental-model.md:56 — "Steps, bundles and the release." evidence: .abcd/development/decisions/adrs/0009-phase-as-product-layer.md:4 — "status: superseded" evidence: .abcd/development/decisions/adrs/0009-phase-as-product-layer.md:7 — "superseded_by: adr-2609212115255771"
Gap audit:
- honoured:
- one page maps the seven families with their lifecycle and verb evidence: .abcd/development/brief/glossary/core/record-families.md:20 — "| Family | What it is | Groups | Grouped by | Lifecycle | Moved by |"
- phase, milestone and roadmap leave the vocabulary with successors named evidence: .abcd/development/brief/glossary/core/phase.md:18 — "Superseded on 2026-09-21 (adr-2609212115255771)"
- a family word with no row is reported by the lint evidence: internal/core/lint/recordfamilies.go:352 — "which the record-families page (" + page.rel + ") does not define"
- diverged:
- every other entry's not_to_be_confused_with may name only a family on the page evidence: internal/core/lint/recordfamilies.go:230 — "beside any other term it names — every entry points at the one map"
- missing: (none)
Grounds
- pursued: three terms are retired today and the map is where a reader learns what replaced them; we expect no new grouping word to appear without a row; shown wrong if one does in the next release
Frontmatter
| id | itd-2609211913453478 |
|---|---|
| type | intent |
| lifecycle | shipped |
| kind | standalone |
| severity | minor |
.abcd/development/intents/shipped/itd-2609211913453478-one-page-in-the-glossary-maps-abcd-s.md
open on GitHub ↗ · commit history ↗
References6
- itd-24Completed Releases Get A Retrospectiverelated
- itd-34Intents Promote In Three Flavours — Standalone, Bundle-Member, Disciplinebuilds on
- itd-42Grill Reads an Intent Against the Brief and Its Siblings, Not Just the Glossaryrelated
- itd-78abcd Knows What to Build First — Even When It's Something Smallrelated
- itd-172Every record has a short title and a one-line summary a non-engineer can readrelated
- itd-2609212103565953A spec lists its steps, and the build lands them one at a timebuilds on
Referenced by29
- adr-2609212115255771Phases and milestones are retired: sequencing is dependencies rendered as status, the checkpoint is the derived releaserelated
- adr-2609292012006845Now, Next and Later list an intent in a lane under Now only; phases stay retiredrelated
- iss-2610262032061118The naming register still schedules reserved commands by 'a later phase'; itd-2609211913453478 retired the phase as a unit of sequencing.related
- iss-2610262032072943Invariant 8 requires an Acceptance block in 'every brief phase'; phase is a superseded term.related
- iss-2610262032073819The press release's open question moves work 'into an earlier phase'; phases are retired.related
- iss-2610262033167999itd-2609211913453478 retires phase, milestone and roadmap; the launch chapter still says the repo organises work by phase (adr-9) and uses roadmap as a live recordrelated
- iss-2610262034508480The intent surface page names the roadmap phase plan as the canonical build order; itd-2609211913453478 retires phases and puts sequencing in dependencies and the lifecycle shelves.related
- iss-2610262038029972The glossary intent makes status the Now / Next / Later record family; the announce chapter's abcd status is the reader of announcements.related
- iss-261026203958198003-configuration schedules work 'in a later phase'; itd-2609211913453478 retired phases as the unit of sequencing.related
- iss-2610262041427822The spec glossary entry says a spec breaks down into numbered tasks; the vocabulary intent made the step the unit below a spec.related
- iss-2610262041438494The vocabulary intent says not_to_be_confused_with may name only families; the glossary README requires only that at least one member name a family.related
- iss-2610262042040605The out-of-scope chapter says intents enter work by being scoped into a phase; the vocabulary intent retired phases in favour of dependencies and the lifecycle shelves.related
- iss-2610262042051056The build sequence is organised around 'milestones' as a live term; the vocabulary intent marks milestone superseded.related
- iss-2610262043161268itd-196 makes the phase its unit of rehearsal, while itd-2609211913453478 retired the phase as a sequencing unitrelated
- iss-2610262043165117itd-192 decides a verdict by whether 'this phase' wires a criterion, a unit itd-2609211913453478 retiredrelated
- iss-2610262043179497itd-2609292107351737 cites 'the roadmap' as an authority after itd-2609211913453478 retired the wordrelated
- iss-2610262043188086The cold-reading glossary entry names ledger/warm in not_to_be_confused_with, which itd-2609211913453478 restricts to record familiesrelated
- iss-2610262044146391The phase negotiator drafts phases, milestones and phase acceptance, but the shipped glossary intent retired phases and milestonesrelated
- iss-2610262044159830The dependency-graph draft lints phase ordering, but phase is a superseded termrelated
- iss-2610262044295915`status` names the Now/Next/Later record family in the glossary and the people's view of announcements and reservations in the planned verbrelated
- iss-2610262045286894itd-3 names a ROADMAP rule domain and teaches 'draft a milestone'; itd-2609211913453478 retires roadmap and milestone as superseded termsrelated
- iss-2610262045465811itd-60 is sequenced as Phase 8; itd-2609211913453478 retires phases as the sequencing devicerelated
- iss-2610262045557535itd-2609211913453478's record-families page has a row for step; itd-2609212103565953 says a step is a section, not a record familyrelated
- itd-2609212103565953A spec lists its steps, and the build lands them one at a timerelated
- itd-2609212103568351The status board shows Now, Next and Later, computed from the recordbuilt on by
- itd-2609212103572513An intent names the release it must land by, and the cut says whether it didbuilt on by
- itd-2609212137129937abcd's text names the product thinker or the technical facilitator, never the maintainerrelated
- spc-2609212131112235one-page-in-the-glossary-maps-abcd-s-record-families-and-howimplemented by
- spc-2609230613206890Glossary pointers, the family lint and the mental modelimplemented by
mentions4
- adr-9Phase as a product-reflection layer between brief and intent
- 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-26092500000000312026-09-25 — itd-2609211913453478's acceptance criterion 4 ships under two readings the intent's scope line does not state. A glossary entry's `not_to_be_confused_with` passes when at least one member names a family row on the record-families page or the page itself, where the scope line says the field "may name only a family on the page"; the stricter reading would force nonsense pairs such as warm against intent, and the entries keep their real confusion pairs. The family-key rule (`record_family_key`, warn) reports a record frontmatter key only when the glossary already marks that word superseded or forbidden, so a brand-new grouping word with no row (the intent's own Mechanism case, e.g. an `initiative:` key) is not detected by construction, and the stores the page does not row (adr, rdi, dsp, rdg, adm, srp) are not reported. The six `grandfathered_at_phase` warnings on itd-20, 27, 28, 63, 69 and 72 are history and stay. Recorded for the product thinker to confirm or widen (autonomous run A, glossary lane review, orchestrator abcd-39).
- iss-2609251618079479After adr-2609212115255771 retired the phase, the milestone and the word roadmap, the brief outside the mental-model chapter still describes the phase as the live sequencing unit: 59 files under .abcd/development/brief mention it, among them 01-product/04-scope.md (bounded by the planned phases), and the glossary entries release, version, loop, plan and spec, whose prose says a phase sequences the work and a release falls out of completing one. itd-2609211913453478 rewrote only the mental-model chapter and repointed each entry's not_to_be_confused_with; no record carries the rest of the sweep.