4.0.0 Milestone — Roadmap
Planner synthesis, first written 2026-09-14 against the old 4.0.0 milestone (GitHub
milestone 8, since renamed 4.x Work). Re-synthesized 2026-10-06 against the GA gate,
the 4.0.0 release scope milestone
(read with gh api repos/spec-kitty/spec-kitty/milestones/11 and its issue list), the
2026-10-01 direction update below, and the CI debrief of 2026-10-05. The durable "why" is the
declaration of intent, 4.0.0.md. This roadmap is the authority for
the active 4.0.0 cycle; the prior 3.2.x milestone roadmap
points here (see its
Addendum 2026-09-14).
A summary for decision owners is in the 4.x Executive Overview.
Intent of 4.0.0
4.0.0 was declared on 2026-09-04 as the hosted-collaboration + structural-finish cycle: G1 hosted collaboration (Team Kitty), G2 next-generation product capabilities, and G3 the open-core structural strangler finish. The 2026-10-01 direction update made GA a local CLI integrity release. The 2026-10-12 direction update (below) expands the GA gate beyond local integrity to also gate on two pieces of the open-core structural finish: charter modular extraction (#645) and the mission-status API backend (the open-core producer surface). GA now ships "done when done" — it is not date-gated (see "Release posture"). The four operator-stated goal themes keep their numbering:
- Stability. The CLI never reports success while it loses, overwrites or strands local work. Failures are named, not swallowed.
- Maturity. One canonical local event store, honestly reported; large modules split into owned seams.
- Extensibility. A governed front door and a stable, versioned application API, so CLI, UI, MCP and SDK consumers build against one surface. Two of its pieces — charter modular extraction and the mission-status API backend — are now on the GA gate (Theme 3, below).
- Team Kitty enablers. Re-framed 2026-10-12 as "Multiplayer Mode" — the consumer side of the open-core producer API. The hosted backend lane stays frozen, but consumer-side UI/multiplayer on the mission-status API and the produce/drain adapter seam are no longer blocked (see "Direction update (2026-10-12)").
Same discipline as the prior cycles: no new shadow paths. Route or extract onto an existing authority; never build a parallel one.
Direction update (2026-10-12): GA is done-when-done, and the gate expands
The operator ratified six adjustments on 2026-10-12. They extend the 2026-10-01 update below (which still holds where this one is silent); where the two differ, this one wins.
- 4.0.0 GA is no longer date-gated. GA ships "done when done." Release candidates
keep shipping to early adopters off
mainin the meantime, and red-CI-no-release (charter Standing Order #9) still holds per release candidate. The milestone-11 identity of the gate is unchanged; only the fixed due date is dropped. (The GitHub milestone object's own due date is handled outside this roadmap.) - The GA gate expands beyond local integrity. It is now local CLI integrity plus (a) charter modular extraction and (b) the mission-status API backend. The "re-synthesized to local-integrity-only" framing from 2026-10-06 is superseded: those two structural pieces move from "4.x after GA" onto the gate.
- Charter modular extraction → its own repository, and it is GA-gating. The charter
(
src/charter/offering/, or all ofsrc/charter/) becomes an independently-released unit consumed through its public surface, likespec-kitty-events/spec-kitty-tracker. Its precondition, #645 (move the ~129specify_cli → charterimports onto the stable API), is now GA-gating. Grounded in #3101, ADR 2026-08-02-1 and ADR 2026-04-25-1. The repository extraction itself is recorded in ADR 2026-10-12-2; the extraction mechanics ride with a dedicated epic (to be filed). Superseded 2026-10-19 (operator ruling): the Python charter stays in core until it is retired and nothing Python moves tospec-kitty-charter; offering reads cut over to thespec-kitty-charterservice throughcharter.offering.api, and the GA leg is a frozen seam plus a green conformance corpus, not an extraction. ADR 2026-10-12-2 is superseded byspec-kitty-charterADR-0008 and ADR-0010; see ADR 2026-10-16-1, Amendment 2026-10-19. - The mission-status read API is the open-core producer surface (internally "Build
Kitty"), not a Team Kitty surface. Its Java implementation (
services/mission-status-api/, epic #5528) is to start in-repo as a modular component and be extracted as needed as an open-core surface — never into a Team Kitty repository (the service directory is in-repo and the read service is substantially built).contracts/mission-status/and the conformance fixtures already ship and stay canonical beside the Python reducer (ADR 2026-10-01-2, Accepted). Its backend is the GA-gating piece from rule 2. - Team Kitty = "Multiplayer Mode," the consumer side. UI/multiplayer surfaces
(mission-ui, the pack composer) consume the open-core producer
API across its contract boundary. The "do not build toward Team Kitty" rule is
scoped-lifted for (i) consumer-side UI/multiplayer built on that API and (ii) the
event-dispatch / produce-drain adapter seam (
status/adapters.py). Everything else hosted (zeitgeist auth, the hosted backend, the SaaS surface) stays frozen unless the operator asks (ADR 2026-10-06-1, Amendment 2026-10-12). - The packs source home moves to
spec-kitty-open-packs.packs/internal/andpacks/built-in/here are fetched, pinned copies (pins inpacks/<pack>.source.yaml, placed bymake sync-packs); the source is authored inspec-kitty-open-packs. This is a source-location move only: the no-bundle invariant is unchanged and ADR 2026-08-16-3 is not reversed.
Direction update (2026-10-01): hosted collaboration is off the critical path
The CEO, CPO and CTO froze Team Kitty / SaaS work and deprioritised it while the commercial vision is reviewed. This section overrides anything below that treats hosted collaboration, auth or Zeitgeist as release-gating. Four rules follow for the rest of the 4.x line:
- 4.0.0 GA is the 4.0.0 release scope milestone and nothing else. No Team Kitty, Zeitgeist or hosted-auth item gates it. The hosted-facing epics (#3892 zeitgeist-client auth, and the auth P1 residuals) stay on 4.x Work and wait for the freeze to lift. The retired sync transport stays retired.
- All external interaction flows through the adapter module. The CLI core writes its
events and does not know where they go. The status fan-out in
src/specify_cli/status/adapters.pyis that seam, and it is the starting point for the envisioned publish/subscribe system. Zeitgeist is one possible consumer; a local UI is another. No other module talks to an external system directly. - Producing and draining are two separate concerns, each behind its own toggle.
Producing an event (writing it to the bus) never depends on whether a drain is enabled,
and a producer never knows which system a drain feeds. Today the code couples them: the
fan-out functions check
drain_posture()before any handler runs, and the hosted-posture contract (kitty-specs/hosted-opt-in-drain-ledger-01M3FFEV/contracts/hosted-posture.md) silences producers when drain is off. Decoupling them amends ADR 2026-09-26-3 and needs a 4.x ADR of its own. - The charter ships on its own, in its own repository. Charter content that tells users
to run the CLI is acceptable. The strangler blocker is code coupling:
specify_cliimportscharterinternals directly (129 files at8a581be1), and those imports must move onto a stable API (#645) before the charter can be packaged separately. As of the 2026-10-12 update, #645 is GA-gating and the charter becomes an independently-released external contract package in its own repository (not just "shippable alone"). Superseded 2026-10-19: the charter does not ship from its own repository as a Python package; see the note under direction item 3 above.
Theme 4's hosted backend lane is frozen; its consumer side was re-scoped on 2026-10-12 (Team Kitty = "Multiplayer Mode," above). The Stability and Maturity themes apply to the local CLI.
Release posture
Read 2026-10-06. Verify live state with gh issue view <n> --repo spec-kitty/spec-kitty
before acting; milestones and counts move between release candidates.
Five release candidates have shipped; rc6 is open on main. PyPI upload dates: rc1
2026-09-13, rc2 09-14, rc3 09-17, rc4 09-21, rc5 10-02. main carries the unreleased
4.0.0rc6 ([Unreleased] in CHANGELOG.md, version in
pyproject.toml).
rc5 shipped under a waiver. The release workflow requires a green nightly on the release
commit (#5034). No nightly has been green since 2026-09-15, so on 2026-10-02 a skip_nightly
input was added to manual release runs and rc5 was published with the gate skipped and the
waiver logged. rc5 also carried defects in consolidate; their fixes are on main and reach
users only with rc6.
The GA gate, milestone 11: 14 open, 210 closed (201 issues, 119 of them P0). GA is done-when-done — no fixed due date (see the 2026-10-12 direction update); the milestone object's own date field is managed outside this roadmap. Of the 16 issues open on 2026-10-01, every one except #5419 has closed. 58 issues closed on the milestone from 2026-10-01 to 2026-10-06, 29 of them P0. This milestone is local integrity; the two other GA-gating pieces (charter modular extraction #645, and the mission-status API backend) are tracked on their own epics — see the dependency spine.
The 14 open issues, by kind:
| Kind | Issues | Gates GA because |
|---|---|---|
| Nightly | #5419 (P0, performance suite) | The 2026-10-06 nightly passed 56 of 57 jobs; this is the one red. rc6 needs it green or another waiver. |
| Correctness residuals | #5638 (rollback leaves coordination status files dirty), #5704 (protected single_branch create leaves a scaffold without meta.json), #5726 (timing-dependent error code when specify re-runs) |
P2 bugs in the landing and create paths. |
| Agent integration | #702 (P1, Codex .agents/skills drift) |
The one open P1. |
| Docs | #5428 (P2) | Docs cleanup after the 4.x re-anchor; this re-synthesis is part of it. |
| Structural hygiene | #2560, #2561, #2562 (runtime_bridge strangler slices), #3732 (doctrine packs → charter packs rename), #4836 (doctrine→charter drift in operator surfaces), #5538 (residual kind-vocabulary mirror), #5629 (tasks_move_task.py split), #5715 (last CLI import in the lanes seam) |
P2/P3 debt. Each is a candidate to move to CLI 4.x stable if it does not land before GA. |
Not on milestone 11, but raised as GA questions (2026-10-06):
- #5780 and #5758 (P0, no milestone, no owner).
consolidateandagent action reviewread only local branches, so a teammate's pushed rejection of a work package is ignored in a multi-clone team. - #5722 and #5603 (P1, no milestone).
orchestrator-api consolidate-missionhas no reconciliation gate and no rollback, and it force-deletes the mission or coordination branch. Automation that lands work through the API does not get the protectionsconsolidatehas.
Milestone routing. Milestone 11 is the local-integrity leg; the charter-extraction (#645) and mission-status API legs are tracked on their epics.
- 4.0.0 release scope (11): the GA gate.
- CLI 4.x stable (12): stable 4.x work after GA, including deferrals out of the gate (229 open).
- 4.x Work (8): the former
4.0.0milestone; hosted and product work planned beyond the stabilization release, including the frozen hosted lane (81 open). - Infra & Enablers 4.x (15): CI, tooling and quality-debt work, including #1928 and the CI follow-ups #5652 and #5624 (76 open).
- Live Work NOW (post-launch) (13): five open, including the auth residual #2941.
Drift since the declaration
The 4.0.0 declaration was written on 2026-09-04, two days before the
Convergence (#3881) retired the local sync transport and made this repository a client of
spec-kitty/zeitgeist and spec-kitty/saas
(ADR 2026-09-06-1),
and four weeks before hosted work was frozen. Every epic it names has since moved:
| Declared advance (2026-09-04) | State (2026-10-06) |
|---|---|
| #1800 SaaS sync & event-envelope hardening | Closed. |
| #1091 Team Kitty launch gate | Closed 2026-09-13 (milestone 3.2.7). |
| #3322 CLI auth & token lifecycle | Closed; the client-side successor #3892 is open on 4.x Work and frozen. |
| #3549 event-log integrity | Closed; the local successor #3893 is open on 4.x Work. |
| #3278 P0 sync false success | Closed as not planned (the sync transport is gone). |
| #3178 P0 wrong-authority egress | Closed as completed. |
| #2519 charter authoring & lifecycle | Open on CLI 4.x stable. |
| #2173 infrastructure-to-logic ports | Closed 2026-09-27 on milestone 11. |
| #1619 one execution context | Open on CLI 4.x stable (31 of 44 sub-issues closed on 2026-10-01). |
| #1797 degod / unshim delivery | Closed as not planned. |
Never design against or "re-enable" the old sync path; see
docs/context/team-kitty.md.
The dependency spine
Re-anchored 2026-10-12. GA is done-when-done; the gate now has three legs.
THE GA GATE (done when done — red CI == no release, per release candidate)
┌ LOCAL INTEGRITY (milestone 11)
│ green nightly (#5419, 1 of 57 jobs red) · landing+create residuals (#5638 #5704 #5726)
│ agent integration (#702) · docs (#5428) · structural hygiene (#2560-2 #3732 #4836 #5538 ...)
│ UNDECIDED: pushed-rejection P0s (#5780 #5758), orchestrator-api gate+rollback (#5722 #5603)
├ CHARTER SEAM (offering reads — ADR 2026-10-16-1, Amendment 2026-10-19)
│ #6188 imports onto charter.offering.api (DONE) ──▶ #6099 frozen seam + green conformance corpus
│ ──▶ offering stays in core, replaced in place by the spec-kitty-charter service (no extraction)
└ MISSION-STATUS API BACKEND + READ SURFACE (open-core producer surface, "Build Kitty")
#5528 Mission Status Read API (contract `1.0.0-SNAPSHOT` in-repo, unreleased; services/mission-status-api/ in-repo, read service substantially built)
──▶ #957 mission detail (GA) ; #5532 readers re-point / #5533 routes rehome (OFF-GATE, CLI 4.x stable)
──▶ 4.0.0 GA
OFF-GATE 4.x STRUCTURAL (continues after GA)
produce / drain decoupling (ADR tbd) ──▶ adapter seam as pub/sub (consumer side unblocked 2026-10-12)
charter.activation drain (236 reaches) + activation rework (CLI 4.x stable — ADR 2026-10-16-1)
#2519 later Java charter writes (CLI 4.x stable) · #1619 one execution context (CLI 4.x stable)
Team Kitty = "Multiplayer Mode": consumer UI/multiplayer on the producer API
FROZEN (hosted backend — waits for the commercial review)
#3892 zeitgeist-client auth · auth residual #2941 · hosted backend · SaaS surface
QUALITY DEBT (Infra & Enablers 4.x, OUTSIDE the blocking graph)
#1928 ──▶ #4304 #4305 #2970 (security and BLOCKER findings still open)
Reading order:
- The nightly closes the release. Every consolidation-safety and coordination-status P0 that was open on 2026-10-01 has closed. #5419 is the only P0 left on the gate, and a green nightly is also what rc6 needs without a waiver.
- Two decisions sit outside the gate. The pushed-rejection P0s (#5780, #5758) and the unguarded API landing path (#5722, #5603) are in the same "says success, did the wrong thing" class as the defects the cycle fixed. Either pull them onto milestone 11 or record why GA ships without them.
- Two structural pieces are now on the GA gate (2026-10-12). Charter modular extraction —
scoped to
charter.offering(ADR 2026-10-16-1) — is GA-gating via epic #6099 (four offering-extraction phases). Its import-move precondition #6188 is done and #645 is closednot_planned; thecharter.activationdrain is post-GA (CLI 4.x stable). The mission-status API backend — the open-core producer surface (ADR 2026-10-01-2, Accepted) — is also GA-gating: the bundled dashboard is already removed (#5530) and the contract is in-repo as1.0.0-SNAPSHOT, unreleased (contracts/mission-status/). The Java read serviceservices/mission-status-api/is in-repo and substantially built (read-only, loopback). The value-bearing read surface (epic #5528 + #957 mission detail) is GA-gating; the ledger already has live readers, so the reader-consolidation refactors #5532/#5533 stay off-gate (CLI 4.x stable), per ADR 2026-10-16-1. What stays off the GA gate and continues on the 4.x line: produce/drain decoupling (the precondition for any external consumer), the consumer-side UI/multiplayer ("Multiplayer Mode"), the charter read/write service strangler (ADR 2026-10-03-1, Proposed; starts only after callers move onto #645), and #1619. - The hosted backend is frozen, not cancelled. Nothing on that lane is deleted; it waits. Its consumer side (UI/multiplayer on the producer API) and the produce/drain adapter seam were scoped back in on 2026-10-12 — see the direction update.
- Quality debt is a standing campsite epic, outside the blocking graph. It burns down per touched file and never gates a release candidate.
Per-theme progress and scope
State read 2026-10-06. An issue can serve more than one theme; it is listed under its primary theme.
Theme 1 — Stability (local integrity)
The bulk of the cycle, and nearly done for GA. 119 of the 201 closed milestone-11 issues were P0. The recurring defect was a command that exited 0 while it deleted, overwrote or dropped something.
- Landing work (
consolidate). Since rc5: canceled work no longer lands through a dependent lane (#5569); a resumed run no longer drops a lane (#5571); commits made after approval are refused until the work package is approved again (#5668, ADR 2026-10-04-5); a rollback keeps a teammate's commit (#5666);--abortreports what it could not restore (#5686); approved code missing from the target fails and rolls back (#5788). Before rc5: ignored local files are no longer overwritten or deleted (#5392, #5400) and every exit after the first mutation rolls back through one authority (#5385). - Workflow and coordination status. Status and decision events no longer split between
two checkouts (#5519, #5513, #5440); a work package prompt no longer contradicts
move-task(#3931); a copied project no longer moves the original's cursor (#5390);single_branchmissions have no lanes (#5100). - Open on the gate: #5638, #5704, #5726 (P2).
- Open off the gate: #5780, #5758 (P0), #5722, #5603 (P1). See "Release posture".
- Record: the sync-era reliability items closed before 2026-09-14 (#3723, #3700, #2736, #2665, #2264 and others) belong to the retired transport.
Progress: heavy. The new behaviour adds refusals: a mission approved before rc5 stops at
consolidate with APPROVAL_STAMP_MISSING until each work package is reviewed again or
attested. The rc6 upgrade notes must say so.
Theme 2 — Maturity (one honest local store, owned seams)
- Done: six of the largest modules were split after rc5 (
mission_finalize.py5,145 → 1,454 lines,consolidation/executor.py4,145 → 833,orchestrator_api/commands.py4,097 → 511,tasks_move_task.py3,786 → 1,887,cli/commands/implement.py2,304 → 443,core/mission_creation.py2,173 → 742). - Open: #3893 (local event-log integrity, 4.x Work), #3887 (
doctor.pyresidue, 4.x Work), and on the gate #5629 (finish thetasks_move_task.pysplit) and #2560–#2562 (runtime_bridge). - Closed as not planned: #2955 (the Team Kitty envelope producers it would have folded are frozen).
Theme 3 — Extensibility (governed front door + stable API)
Two of its pieces are now GA-gating (2026-10-12).
- GA-gating (2026-10-12): #645 (stable application API) as the precondition for
charter modular extraction into its own externally-released repository; and the
mission-status API backend — the open-core producer surface (ADR
2026-10-01-2,
Accepted), epic #5528,
services/mission-status-api/slated to start in-repo (direction; the directory does not exist yet —contracts/mission-status/does), extracted when its contract freezes (never into a Team Kitty repo). - Open (off-gate, 4.x line): #901 (governed front door, 4.x Work), #5532 and #5533 (reader re-point / route rehome, CLI 4.x stable), and the consumer-side "Multiplayer Mode" UI/multiplayer that consumes the producer API.
- Done: the bundled dashboard is removed (#5530); the Mission Status contract is in-repo as
1.0.0-SNAPSHOT(unreleased), with lint, breaking-change checks and a test against every mission in the repository; teams can share agent commands as pack skills (ADR 2026-09-27-1); org packs carry their own built-in override sanction (ADR 2026-10-05-3). - On milestone 11: #3732 and #4836 (the doctrine → charter vocabulary), #5538.
Progress: the producer API has a contract in-repo (unreleased) and a planned in-repo service build; its backend and the charter extraction are now gate items, and the governed front door and the consumer UI remain 4.x-line work.
Theme 4 — Team Kitty = "Multiplayer Mode" (consumer side; backend frozen)
Re-scoped 2026-10-12. Team Kitty is the consumer side of the open-core producer API
(mission-ui, the pack composer). The backend lane stays frozen and
nothing on it gates GA; the consumer side (UI/multiplayer on the mission-status API) and
the produce/drain adapter seam (status/adapters.py) are no longer blocked (ADR
2026-10-06-1,
Amendment 2026-10-12). Everything hosted below stays frozen unless the operator asks.
- Open (frozen backend): #3892 (zeitgeist-client auth, 4.x Work), #2941 (widen bypasses renewable CLI auth, Live Work NOW), #4195 (review of the #4121 charter forward-port, 4.x Work).
- Closed: #1091, #3322, #3233, #3980, #3277, #1621.
- Closed as not planned: #3196, #3197, #3198 (sync consent and identity, retired with the transport), #2520 (charter events to SaaS; a hosted charter signal would need a new issue built on Zeitgeist).
Cross-cutting — Sonar / quality debt
Parent #1928 is on Infra & Enablers 4.x. The finding-class children #4299–#4303 were closed as not planned (the charter's Sonar standing orders handle them per touched file), and #2969 was fixed.
| Issue | Finding class | State |
|---|---|---|
| #4304 | S6350 ×17 and other src/ security findings |
Open, P1 |
| #4305 | S3516 constant-return BLOCKER in core/file_lock.py |
Open, P1 |
| #2970 | 4 BLOCKER S2083 path-injection findings (≥1 likely false positive) | Open, P2 |
Progress: deliberately post-GA. Adjudicate the security children before remediating, and record false-positive rulings.
Exit criteria for 4.0.0
Re-anchored 2026-10-12. GA is done-when-done; the gate has three legs (criteria 1, 5, 6).
- Local integrity: milestone 11 is closed. Every issue on 4.0.0 release scope is closed or re-milestoned with a rationale.
- The nightly is green on the release commit. Red CI means no release (charter Standing
Order 9), per release candidate. A
skip_nightlywaiver is an operator decision, recorded each time; rc5 used one. - The CLI never reports success while losing or stranding local work. This is what the consolidation, status and workflow P0s test. #5780 and #5758 are in this class and need an explicit in-or-out decision.
- No new shadow path. Every landing routes onto an existing authority. No re-introduction of the retired sync transport, and no module other than the adapter seam talks to an external system.
- Charter seam — offering leg (GA-gating; ADR 2026-10-16-1, Amendment 2026-10-19). The
import move (#6188) is done and #645 is closed
not_planned. The GA leg is a frozencharter.offering.apiseam and a green conformance corpus (epic #6099, re-scoped), not an extraction: the Python offering stays in core and is replaced in place by thespec-kitty-charterservice (spec-kitty-charterADR-0008, ADR-0010). Thecharter.activationdrain/rework is post-GA (CLI 4.x stable). - Mission-status API backend + read surface (GA-gating; ADR 2026-10-01-2, 2026-10-16-1).
The open-core producer surface ships its backend (contract canonical beside the Python reducer,
services/mission-status-api/in-repo) and the value-bearing read surface that realizes event value (epic #5528 + #957 mission detail). The ledger already has live readers; the reader-consolidation refactors #5532/#5533 stay off-gate (CLI 4.x stable). - (Post-GA) Off-gate structural dispositioned. The produce/drain decoupling, #901, #1619 and the consumer-side "Multiplayer Mode" UI land or are re-milestoned on the 4.x line with a rationale.
- (Post-GA) Security debt adjudicated. #4304, #4305 and #2970 close or carry recorded false-positive rulings.
Risks / watch items
- rc5 is the newest release and has known landing defects. Users get the fixes only with
rc6. Four rc5 fixes were found not to hold one day after release; the window between a fix
on
mainand a release is user exposure. - The nightly has not been green since 2026-09-15. The 2026-10-06 run had one red job of 57. Most reds came from suites only the nightly runs, which fell behind changes that merged green; the commit-recipe check now runs per PR (#5708), but the performance, Python 3.13 and integration suites have not moved. Tests that no CI job runs (#5652) hide pinned reds.
- The release gate depends on a token. It fails closed without
RELEASE_NIGHTLY_DISPATCH_TOKEN; the new dedicated token's scope is not yet written down (seeRELEASE_CHECKLIST.md). - The gate refills. Milestone 11 went from 11 open (2026-09-30) to 16 (2026-10-01) to 14 (2026-10-06) while 58 issues closed. 159 issues were opened in the four days after rc5 against 90 closed, 33 of them new open P1s. With GA now done-when-done (no fixed due date), the cut-off is a judgment call at each release candidate, not a calendar date: a P2/P3 hygiene item that is not GA-gating moves to CLI 4.x stable with a one-line rationale rather than holding the release.
- Review depends on one person. 60 of the 66 PRs merged after rc5 have one author.
- The API landing path is unguarded.
orchestrator-api consolidate-missionlacks the reconciliation gate and rollback (#5722, #5603). - Client-repo inversion. Auth and event work for the hosted path is authored upstream in
spec-kitty/zeitgeistandspec-kitty/saas. A PR that edits a retired local-sync surface is designing against a dead subsystem; flag it. doctor.pyresidue (#3887). #1623 closed without shrinking the module; keep the follow-up tracked.
Immediate next steps
- Green the nightly (#5419), then cut rc6 without a waiver.
- Decide #5780 and #5758: on milestone 11, or GA ships without them with the reason recorded.
- Decide #5722 and #5603: fix the API landing path for GA, or document that automation
must use
consolidateuntil it is. - Judge the cut-off per release candidate, not by calendar date (GA is done-when-done). Move any non-GA-gating P2/P3 hygiene item to CLI 4.x stable with a one-line rationale.
- Write the produce/drain ADR (4.x), amending ADR 2026-09-26-3, then split the toggles in
status/adapters.pyandcore/hosted_posture.py. The adapter seam is now unblocked for the consumer side (2026-10-12). - Move the
specify_cli→charterimports onto #645 so the charter can be extracted into its own externally-released repository — this is now GA-gating. Per ADR 2026-09-30-1, drain them rather than holding them in an allowlist. File the charter-repo-extraction epic/ADR. - Ratified 2026-10-12: ADR 2026-10-01-2 is now Accepted (open-core producer surface; the service is to start in-repo and be extracted when frozen). ADR 2026-10-03-1 (charter read/write service strangler) remains Proposed and off-gate.
- Re-run this synthesis at each rc bump. Read
gh api repos/spec-kitty/spec-kitty/milestones/11and the milestone's open issues before acting.
Links
- Milestones: 4.0.0 release scope (GA gate) · CLI 4.x stable · 4.x Work · Infra & Enablers 4.x
- Declaration of intent:
4.0.0.md· Convention:release-goals.md· Summary: 4.x Executive Overview - Prior cycle roadmap: 3.2.x Milestone Roadmap
- Convergence / client-repo inversion:
ADR 2026-09-06-1 ·
hosted context:
docs/context/team-kitty.md - Durable domain plans: Doctrine & Charter · API & Dashboard