---
name: v0304-published
description: v0.30.4 counter 55 PUBLISHED — update-wedge round-2 resume-as-observer (no controller-steal); operator ruled B publish-then-verify
metadata: 
  node_type: memory
  type: project
  originSessionId: 41b1b5f7-6040-4af3-9d83-9336ab847866
---

v0.30.4 PUBLISHED — counter **55** @ merge SHA `b0d7719` (tag → merge commit). Latest on SaberMage/spt-releases, isDraft=false, 10 assets, update-set `version:55 product_version:0.30.4`.

**Shape (patch):** round-2 followup to v0.30.3's seamless-swap fix. Same ride-in-PR pattern as #72 — fix branch `uwedge2-resume-viewer` (2 commits: fix `fb499db` + doc `7782bda`, NOT yet on main) + clean bump `6bf4ee4` on top → PR #73 base=main merged fix+bump together @ `b0d7719`. See [[update-wedge-2-resume-steal]] [[v0303-published]].

**Fix:** REQ-BRAIN-RESUME-NO-CONTROL-STEAL [doc,impl,int]. `fetch --apply` no longer seizes control of live sessions across the brain swap — resume re-attaches as **Viewer** instead of stealing the session's controller. Open sessions + `spt rc` keep working. Diff: brain.rs +50/-5, new int test resume_no_control_steal_e2e.rs +507, traceable +5, CONTEXT +2. No deferred seeds changed.

**CHANGELOG surface (observable voice, zero internal codes):** in-place update could freeze/seize control of live sessions across daemon restart → resumed sessions now re-attach as observers, sessions + `spt rc` keep working across the swap.

**CI:** all green — n1-gate ×2 (kitsubito/hfenduleam) + test ×2 + traceability; twohost SKIPPED. Clean, no flakes.

**KEY PROCESS RULING — operator ruled B (publish-then-verify):** doyle held publish first ("no repeat of v0.30.3 premature ship"), then operator ruled **B = publish + flip Latest, THEN run supervised multi-session `fetch --apply` field-verify on the live box** (the resume-steal fix ONLY manifests in a real multi-session apply, which needs published bytes). So the flow was: assemble draft → doyle stages field-verify → operator go → publish+flip → operator-supervised field-verify. NOT publish-then-forget: doyle coordinates the live field-verify before we call it done.

**STATUS as of 2026-07-09:** PUBLISHED + flip-verified. Operator-supervised multi-session field-verify on the live box is the real regression test and was PENDING doyle's verdict at publish time. Pass ⇒ finalize; fail ⇒ re-cut. Counter re-confirmed from published update-set metadata (54→55) at cut time.
