Development record
Phases and milestones are retired: sequencing is dependencies rendered as status, the checkpoint is the derived release
Context
adr-9 (2026-05-16) made the phase the product layer between the brief and the
intent: an ordered stretch of work bundling intents, ending in a milestone, a
checkable end condition, recorded as a document under roadmap/phases/. Four
months on, the record shows the layer thinned to a document nobody anchors to:
no spec carries a phase: field (0 of 93), phase membership is recorded
editorially in the phase document, and the roadmap rule "each phase ends in a
milestone" names a unit no verb reads. Meanwhile three other groupings arrived
with verbs behind them: the bundle (several intents sharing one spec because
they ship as one change, itd-34), the derived release (the version computed
from the impact of what shipped, the changelog composed from the records), and
the autonomous run's batch. On 2026-09-21 the product thinker asked, in the
interview that planned the fourteen specless intents, whether phases survive
bundles and milestones survive releases.
An independent research pass over the field (Shape Up, Linear, GitHub,
GitLab, SAFe, the Kanban Guide 2025, DORA, Firefox's trains, Kubernetes
enhancement proposals, Now/Next/Later roadmaps, Cagan, release-please and
changesets) found: every surviving sequencing unit is a timebox whose job is
to carry a date, which this repository's roadmap rule forbids; the undated
lineages run on priority, readiness and dependencies and name no sequencing
unit; where a planned checkpoint survives beside derived releases it collapses
into the release (Kubernetes' "milestone" is the release version, and the end
condition sits on the record as graduation criteria, the role acceptance
criteria play here); and Now/Next/Later, offered as a replacement, is already
present under the names planned/ and drafts/ plus priority, so adding it
as a stored unit would be a second name for one concept.
Decision
We retire the phase and the milestone as units of the record, and the word roadmap with them.
- Sequencing is dependencies plus the shelves.
blocked_byandbuilds_onon the records (itd-78 derives a priority from them; the pick inabcd build nextfilters on them) and the lifecycle shelvesdrafts/ → planned/ → shipped/carry the order. No stored unit sits above the intent for sequence. - Now / Next / Later is a rendered status, never stored. The bare
abcdboard and the site's Status page compute it: Now is every intent in a lane (from the build's state file) plus the head of the pick order; Next is every planned intent the gate reports READY; Later is the rest of planned and the drafts. A started state comes from the state file and is rendered (itd-2609212103568351). Nothing is called a roadmap. - The checkpoint is the derived release plus each intent's acceptance
criteria. No planned end condition exists apart from them. An intent
may carry an optional
target_release:that the cut reports and moves forward, never refuses on (itd-2609212103572513); that field is the one forward-looking line the derived release keeps. - The unit below a spec is the step: an ordered
## Stepssection in the spec, each step landable as one lane and one pull request; a spec with no steps is one step; the loop'simplement stepand the section share the word (itd-2609212103565953). No fourth record family. - Two axes, kept apart. The lifecycle (what has been decided about a
record) lives in the folders and gates; the position (how soon) is
rendered from it.
planned/is not renamed Now, because sixty planned intents are not all being worked on and the word would lie. - Issues carry no spec by design. An issue's design record is its
remedy:field and the failing test its lane writes first; an issue that needs design is an intent in disguise and is promoted. - The batch is the run's internal order, derived from dependencies and the pick, and is not a term of the record.
- One term per concept. The glossary marks
phase,milestoneandroadmapsuperseded with their successors named, gainsbundleandstep, and one page maps the families (itd-2609211913453478). The phase documents stay in the tree as history with a retirement line; the ROADMAP rule domain is replaced by this decision's statement.
Alternatives Considered
- Keep phases as the sequencing document, retire milestones only. Rejected: the document had already drifted to editorial membership with no anchor, the failure mode the research pass names for every hand-maintained sequencing unit; a unit no verb reads is a unit nobody keeps current.
- Rename the folders to now/next/later/done. Rejected: the folders are
a lifecycle the gates read (
planmints the spec on enteringplanned/), and the roadmap words are a position that changes without a decision; conflating them would either make Now lie or move the spec mint to lane start. - Now/Next/Later as a stored bucket on each record. Rejected: a second
name for
planned/,drafts/and priority; the rendered form carries the same information and cannot drift. - A task record family below the spec. Rejected in favour of a section: a fourth family with folders and verbs adds the kind of vocabulary this decision trims; Shape Up's scopes and Kubernetes' in-record graduation criteria are the precedents for keeping the pieces inside the record.
- Keep the word roadmap for the rendered view. Rejected on the repository's own documentation rule: a roadmap promises, this view reports; the docs are present tense, and the status board is where a reader already looks.
Consequences
- adr-9 is superseded; 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 (itd-2609211913453478 makes the edit).
- itd-24 becomes release retrospectives: the release boundary is real and the changelog is a ready seed; itd-34 drops the rule that bundle members share a phase.
- The run file's batches stay internal; its pull rule is priority plus dependency-readiness plus the ceiling.
- The
target_release:field, the## Stepssection, the status block and the glossary page are four intents planned on 2026-09-21 and built by the run; until they ship the folders are the only sequencing signal, which is the state the record was in already. - What is lost: the phase's
## Expectation, a working-backwards paragraph at release granularity. Its nearest home is a release press release composed from the shipped intents' press releases; the changelog composer is one step from it, and that step is not ruled here.
Frontmatter
| id | adr-2609212115255771 |
|---|---|
| type | adr |
| status | superseded |
| date | 2026-09-21 |
.abcd/development/decisions/adrs/2609212115255771-phases-and-milestones-are-retired.md
open on GitHub ↗ · commit history ↗
References12
- adr-1Three-layer mental model (brief / intent / spec)related
- adr-9Phase as a product-reflection layer between brief and intentrelated
- adr-9Phase as a product-reflection layer between brief and intentsupersedes
- adr-45Record ids are timestamp-numeric, capture-stable, and never allocated by looking at the maximumrelated
- adr-2609292012006845Now, Next and Later list an intent in a lane under Now only; phases stay retiredrelated
- itd-24Completed Releases Get A Retrospectiverelated
- itd-34Intents Promote In Three Flavours — Standalone, Bundle-Member, Disciplinerelated
- itd-78abcd Knows What to Build First — Even When It's Something Smallrelated
- itd-2609211913453478One page maps the record families, and phase, milestone and roadmap are retiredrelated
- 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 recordrelated
- itd-2609212103572513An intent names the release it must land by, and the cut says whether it didrelated
Referenced by10
- adr-2609292012006845Now, Next and Later list an intent in a lane under Now only; phases stay retiredsuperseded by
- itd-146abcd's help renders in labelled command groups, and the grouping is gated like every other surface claimrelated
- itd-2609061543533170One verb takes a managed repository's site from the checkout to a live addressrelated
- 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
- itd-2609212130146198The status-line badge is true at every stoprelated
- itd-2609212137116617A new capture or draft is matched against the record before it is writtenrelated
- itd-2609212137128014abcd lab mechanises the lab conventions three hand-run experiments provedrelated
- itd-2609212137129937abcd's text names the product thinker or the technical facilitator, never the maintainerrelated
- itd-2609231013154443Every release arrives with a press release composed from what shippedrelated
mentions25
- adr-2609300107513982A provider adapter's allowlist alone decides which models it serves, and abcd bundles no vendor denylist
- 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).
- 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.
- iss-2609292011569133The product thinker's rulings BV1 and BV2 of 2026-09-29 change what the shipped status block promises: the text board gives Later as a count alone (--json and the site keep its rows), and an intent in a lane is listed under Now only, never also under Next or Later. That makes itd-2609212103568351 criteria 1 and 3 and adr-2609212115255771 decision 2 (Next is every planned intent the gate reports READY; Later is the rest) false as written.
- iss-2609300848016421itd-2609201916056194 (the CLI runner) and itd-2609201916151817 (the implement loop) each declare builds_on the other, so the dependency graph that sequences work (adr-2609212115255771) holds a two-node cycle and neither can be ordered first. The loop's record states its edge (it calls the runner for each lane, decision 5 and its builds_on note); the runner's record gives no reason for its edge on the loop. Found by a read-only sweep of planned and draft edges; record-lint has no cycle rule, so the gate passes it.
- iss-2610030807157970The bundled ROADMAP rule domain still teaches retired phases and milestones. internal/core/rules/defaults/rules.json:34 injects 'The roadmap is intent-driven; each phase ends in a milestone.' into every managed repository on a prompt that names a roadmap, milestone or phase, although adr-2609212115255771 retired the phase, the milestone and the word roadmap (decision 8 replaces this domain with the decision's statement) and adr-2609292012006845 carries that forward. abcd's own repository masks the defect with a repo override (.abcd/rules.json:127-131), so its own sessions never see it; a sibling session's user test of an adopted repository on v0.9.0 reported it on 2026-10-03. The brief-wide sweep iss-2609251618079479 does not name the defaults file.
- iss-2610262030354678The naming register still files commands under 'later phases'; the scope page says the phase is retired as a unit of the record
- iss-2610262031228119Invariant 8 says every brief phase has an ## Acceptance block; the glossary records the phase as superseded.
- iss-2610262031429165The mental model retires the phase and the milestone, but itd-41 builds a negotiator that proposes phases and their Phase Acceptance under adr-9.
- iss-2610262032214284Launch says the repo organises work by phase; disembark says sequence is dependencies plus the lifecycle shelves, with phases retired
- iss-2610262033041268itd-41 builds a negotiator over ordered phases with Expectation, Milestone and Phase Acceptance; the disembark page says sequence is dependencies plus the lifecycle shelves, and phases and milestones are retired.
- iss-2610262033096678The launch chapter says the repo organises work by phase; itd-24 records that phases are retired and the release is the unit
- iss-2610262033444397The out-of-scope page frames the brief as the work of eight planned phases; the reflect chapter says adr-2609212115255771 retired the phase.
- iss-2610262033596296itd-196 keys its cumulative and closing rehearsals on the phase; the reflect surface says the phase was retired and the release is the grain
- iss-2610262034220886itd-41 proposes ordered phases with Milestone and Phase Acceptance sections; the intent chapter says phases are retired.
- iss-2610262034479574The intent chapter names the phase plan as the canonical build order; itd-24 records that phases are retired.
- iss-2610262040267270The out-of-scope page says a later intent enters work by being scoped into a phase; the build sequence says phases are retired and their documents are history.
- iss-2610262040466411itd-192 decides a fidelity verdict by whether 'this phase' wires a criterion; the phase glossary entry says the phase is superseded.
- iss-2610262041140753The phase-negotiator draft depends on authoring new phase docs; the glossary retires the phase, keeping its documents as history.
- iss-2610262044017905The phase negotiator (itd-41) proposes and argues over roadmap phases; itd-24 records that phases are retired
- iss-2610262045198472itd-67 picks the release bump by phase-completion detection; itd-24 records that phases are retired and the release is the unit
- itd-41abcd Tells You, Honestly, What a Phasing Choice Costs
- itd-2610070550516046On the dashboard, a product thinker sees the brief and their ideas together, and puts the ideas in order
- spc-2609211751376504reflect-command
- spc-2609212131112235one-page-in-the-glossary-maps-abcd-s-record-families-and-how