3.2.6 Maintenance Brief

Snapshot for the maintenance team. main@HEAD = 6104c4c80. The 3.2.6 cycle is open (nothing tagged yet).


1. Where main stands right now

3.2.6 is not releasable yet — main's CI Quality is red on one test, and red CI blocks release. Red CI as release authority is by design (ADR 2026-07-17-1); CI (not "is main green?") gates the tag.

  • Recently cleared (#2910): the two P0 red-first reproductions — #2804 (merge clobbers gate artifacts) and #2876 (non-interactive hang) — now pass; #2910 landed their fixes (merge commit 269e37246, in main@HEAD).
  • The one remaining red — triaged (#2917), root-caused by a 3-lens squad: test_dogfood_corpus_backfilled. It is corpus drift, not a code regression. The seed events + meta.json status_phase=1 that mark a mission "cut over" (#2816) are written only by the one-time migrate backfill-runtime-state migrationcreate / finalize / merge never stamp them. The 12 flagged missions all merged after the one-time cutover batch (ecb6b452c/5aff7d0e8, 2026-07-20/22), so they were simply never backfilled. The runtime reader works fine for them; only the backfill-parity verify_backfill fails. Severity is P2 / mechanical (status_phase only gates the legacy lane mirror; the runtime-slot snapshot authority is unconditional) — it blocks the tag solely via the red-CI==no-release policy, not because anything is functionally broken.
  • Fix — being handled as a dedicated mission (#2917). Given the recurring cause (no birth-time cutover seam) and the latent-invariant impact, the team is addressing the structural root — stamping the cutover at create / finalize / merge so missions are born reconciled — rather than a standalone band-aid. The mechanical spec-kitty migrate backfill-runtime-state (seeds the 12, ~136 events + status_phase flips; deterministic, idempotent) may be front-loaded within that mission to clear the CI red and unblock the 3.2.6 tag while the durable seam is built.
  • Net: the tag stays blocked until the #2917 mission lands (or front-loads the re-backfill to green CI) — a mechanical unblock wrapped in a structural fix, not a runtime-correctness defect.

2. What shipped in 3.2.6 so far

Grouped by what it means operationally, technical refs after.

Doctrine is now shippable and forkable

Orgs and forks can customize governance, docs standards, and packaging without patching our source tree. Doctrine packs can ship arbitrary supporting files (scripts, blobs) to consumer repos — the first built-in asset is a docs structural-lint wired into docs-freshness CI (#2905, #2302). New first-class TEMPLATE + ASSET doctrine kinds (#2495, #2469). The charter bundle consolidated into an authoritative charter.yaml with opt-in eager --resynthesize (#2773, #2761). Fork packaging hooks let renamed / private-index forks own CLI identity, upgrade providers, and index URLs via entry points (DistributionProfile) — stock public-PyPI installs unchanged. The for_review pre-review gate is now declared by the repo's active doctrine (layout-agnostic ScopeSource port), not hardcoded to our repo shape (#2595/#2596/#2598).

Lifecycle gates stopped guessing

Gates no longer emit confident-but-wrong verdicts, and accepted evidence survives the merge. Every lifecycle gate now receives an explicit execution context (tree / ref / phase) and refuses rather than inheriting the caller's working directory (#2906, closing #1834/#2885/#2882/#2795). Merging an accepted mission no longer discards its filled acceptance-matrix.json / issue-matrix.md — scored merge drivers keep whichever side carries real evidence (#2804, #2709). Off-axis status emits resolve their write target from stored topology, never Path.cwd() (#2647).

WP state is a single event-sourced authority

Work-package state has one source of truth, and backfill can't be silently tampered. Runtime state was evicted into the append-only event log and the phase-1 dual-write flag deleted; the corpus cutover is complete (#2684, #2093, #2816, #2848). Backfill verify is genuinely fail-closed on value tampering.

Automation / non-interactive robustness

Agents, CI, and piped-stdin runs don't hang or strand any more. Non-interactive runs honor the contract — interviews take defaults and record deferrals instead of prompting (#2876, extended by #2912). Sync batch-400 poison isolation means one bad event no longer strands its whole batch (#2736, closes #2755). --json output is plain regardless of terminal color.

Coordination / merge integrity

Coord-topology missions merge and roll back reliably. Coord-shadows follow-ups closed the primary read/gate arm; safe_commit no longer misfires on a coordination-husk identity read; merge rollback and --resume stay coherent after a failed target advance (#2711); Windows tree-path backslashes no longer misreport committed specs as uncommitted (#2836).

Docs & dashboard

Docs structure is enforced by a shippable gate instead of a brittle ratchet, and the dashboard shows more. The docs anti-sprawl structure ratchet (R1) is retired in favor of the per-PR structural-lint asset (#2851); dashboard WP cards show subtask progress (#2504); artifact viewers no longer render empty for in-flight missions.


3. Work in flight

Ready-to-merge / open PRs (operator merges)

  • #2916 (ours) — 3.2.6 follow-up: docs prose-ref sweep + DRG rationale fix + the impact-first changelog pass. Closes #2915. Locally verified; awaiting merge.
  • #2890 — opt-in local event webhook (SPEC_KITTY_EVENT_WEBHOOK). Team is adopting this in-house (rewire through the SaaS fanout, cover MissionCreated).
  • #2884sync import-history (materialize local history).
  • #2719 — doctrine org init from a local/git template.
  • #2766 — fix stale WP topology embedded in the review handoff.
  • #2606 / #2587 (rayjohnson) — dashboard mission lifecycle status + selector; #2492 — second auto-commit pass captures post-repair upgrade writes.
  • CLI ergonomics (zohar) — autocompletion (#2233), -h short help (#2237), alphabetical command listing (#2238), copyable version output (#2239).
  • #2611 — route remaining datetime stamp sites onto now_utc.
  • #1065 (draft) — enable hosted sync by default.

Internal work lines (roadmap context — not all PR-backed yet)

  • Coord-trust structural mission (#2841) — the write-side complement to #2906: enforce write-placement so a coord-homed fact can never silently land on / be trusted from the primary partition. #2906 shipped the read-side guard (gates refuse a substituted surface); #2841 closes the source. Pre-spec.
  • DRG completeness (#2843) — relation-parity + activation-gate for the doctrine reference graph.
  • Doctrine extensibility & pack ecosystem (3.2.x → 3.3.x) — mission-types-as-doctrine, the mission-step model epic (#2652), asset/template validator maturation. 3.2.6's asset/template kinds are the first slice.
  • Runtime/state overhaul continuation (#1619, #2816) — unify mission execution context on the event-sourced model.
  • Open follow-up issues from this week's landings: #2909 (lifecycle-gate coverage nits — detached-HEAD sentinel + accept-gate branch-flow e2e), #2915 (docs prose-ref residue — being closed by #2916).

4. What this means for the stabilization partial code freeze

We're in a partial freeze until 3.2.6 tags — merge only what stabilizes the release; hold net-new features.

  • Merge OK (stabilization / low-risk): anything that resolves the one release-blocker (test_dogfood_corpus_backfilled) — top priority; #2916 (docs-only); targeted bug fixes like #2766 / #2492; any security fix.
  • Hold until after tag (features / non-critical): #2890 (local event webhook), #2884 (sync import-history), #2719 (doctrine org init), #2606 / #2587 (dashboard), the CLI ergonomics batch (#2233 / #2237 / #2238 / #2239), #1065 (draft — hosted sync default).
  • 🛠️ Internal missions (#2841 / #2843 / runtime overhaul): keep developing on branches — don't land on main unless it clears the release-blocker.
  • Rule of thumb: if a PR doesn't move us toward a green release gate or fix a real bug, it waits. The operator confirms the final in/out call per PR.

5. What a maintainer should know

  • Don't "fix" main's red CI Quality by editing the test's assertion. test_dogfood_corpus_backfilled is a valid, stay-green acceptance lock guarding a real un-seeded-state invariant — resolve #2917 by re-running the backfill (corpus maintenance), never by relaxing the predicate (ADR 2026-07-17-1; failing-test-remediation discipline).
  • Release readiness for 3.2.6 = the #2917 mission clears the sole CI red (a runtime-state re-backfill of the 12 missions, likely front-loaded) and closes the birth-time cutover gap so it stays green; then the normal tag flow.
  • Landing contributor PRs follows docs/development/pr-landing.md (claim → isolated worktree → rebase → classify reds → fold → squad → hand off; the operator merges, never gh pr merge).
  • The coord read/write split-brain is half-closed: read-side guard shipped (#2906), write-side prevention (#2841) still open — worth knowing when triaging any "coord fact read off primary" report.