Development record
Launch phase ownership is tiered; the phase index is the sole ownership source
Context
The record disagreed about which phase owns /abcd:launch. The roadmap
(phases/phase-1-ahoy.md, phases/README.md) and the brief's build sequence
(06-delivery/01-build-sequence.md) make install + launch the first
milestone — Phase 1 cuts a curated single-repo release. But
brief/04-surfaces/04-launch.md opened with "builds in Phase 5 (round-trip and
ship)", and 05-internals/01-agents.md anchored launch agents to "Phase 5".
"Phase 5 (round-trip and ship)" is the pre-rebuild six-phase numbering, in
which the final phase bundled the lifeboat round-trip and the release flow.
The current roadmap has seven phases (0–6): the round-trip is Phase 6, and the
release cut moved forward to Phase 1 as the MVP proof of the packaging path. The
stale banner survived the copy of the design record; an implementer reading only
the brief would schedule launch five phases late. (Captured as iss-1; the
sibling six-vs-seven-phase and disembark/embark-banner findings are iss-4 and
iss-5.)
There is also a real distinction the stale banner was gesturing at: the full launch flow (pre-flight gate suite, render parity, tier-b publishing, retention, derived versioning) is deliberately not Phase 1 work.
Decision
- The roadmap phase index is the sole source of phase numbering and phase
ownership.
roadmap/phases/README.md(Phases 0–6) and each phase doc's## Scopeown the mapping (per adr-9). A brief file states phase ownership only by pointing at the owning phase doc — never with its own phase number that can drift. The six-phase "Phase 0–5, round-trip-and-ship last" numbering is superseded.
- Launch ownership is tiered. Phase 1 owns the curated-release cut:
packaging from the one repo with
.abcd/**excluded, the secret/PII scan gate, and the bootstrap release path (adr-28). The launch deepenings are separately scheduled intents — the full pre-flight gate suite (itd-65), payload render parity (itd-66), release retention (itd-70), tier-b publishing (itd-72), and derived versioning (itd-73) — each entering a phase's## Scopewhen sequenced, unscheduled until then (adr-9's unscheduled-intent rule).
- Deepened behaviour is attributed to its intent, not a phase number.
Where
04-surfaces/04-launch.mddescribes behaviour beyond the Phase 1 cut, it names the owning intent (e.g. "the gate suite is itd-65's"), so the doc stays correct however those intents are sequenced.
Alternatives Considered
- Keep launch whole and late (the banner's reading). Rejected: it contradicts the first-milestone MVP logic — install + launch is what proves the Go core, adapter seams, and packaging path end to end (build sequence, phase-1 doc), and the packaging boundary is the highest-risk privacy surface, so it ships first, not last.
- Make Phase 1 own the full launch flow. Rejected: the gate suite and versioning automation depend on stores and machinery from later phases (the native spec store for intent-impact derivation, adr-31), and pinning them to Phase 1 would either stall the milestone or ship them hollow.
- Renumber the brief's banners to "Phase 6". Rejected: it repairs the number but keeps duplicated phase ownership in the brief, which is the drift mechanism itself. Ownership statements live once, in the phase index.
Consequences
04-surfaces/04-launch.mdloses its "builds in Phase 5" banner in favour of a phase-ownership pointer (Phase 1 cut + intent-attributed deepenings); in-body "Phase-5ship" references become intent attributions.05-internals/01-agents.mdanchorslaunch-gatekeeperto itd-65 rather than a phase number.- The six-vs-seven phase count and the disembark/embark banners (
iss-4,iss-5) now have their canonical basis: seven phases, ownership per the phase index. - Future phase renumbering touches exactly one file, the phase index.
Frontmatter
| id | adr-33 |
|---|---|
| type | adr |
| status | accepted |
| date | 2026-07-08 |
.abcd/development/decisions/adrs/0033-launch-phase-ownership-tiered.md
open on GitHub ↗ · commit history ↗
References8
- adr-9Phase as a product-reflection layer between brief and intentrelated
- adr-28One repository, a curated release artifact — no dev→public mirrorrelated
- adr-31The release version is derived from the intents in it, never authoredrelated
- itd-65abcd Refuses To Publish A Payload Until The Full Ship-Time Pre-Flight Gate Suite Passes, Not Just The Secret Scanrelated
- itd-66abcd Renders The Exact Public Payload, Proves The Excludes Never Leak, And Smoke-Tests The Installed Surface Before Any Snapshotrelated
- itd-70Drawn-out intentrelated
- itd-72Publishing A Release Is One Atomic, Refusable `ship`related
- itd-73abcd Cuts the Version — You Never Type Onerelated
Referenced by2
mentions4
- dcn-26070800000000142026-07-08 — itd-37's itd-36 edge downgraded blocked_by → builds_on: the
- iss-1launch phase ownership contradicts across the record: phase-1-ahoy.md and build-sequence.md make install plus launch the first milestone, but 04-surfaces/04-launch.md says full launch builds in Phase 5. ADR-bound.
- iss-4phase count mismatch: 04-scope.md, 03-out-of-scope.md and 06-delivery README say six phases (Phase 0-5), but roadmap phases README has Phase 0-6 with Phase 6 as lifeboat round-trip.
- iss-5disembark and embark status banners point to the wrong phase: 02-disembark.md says Phase 4, 03-embark.md says Phase 5, but phase-6-lifeboat.md owns both.