---
name: v0360-published
description: "v0.36.0 PUBLISHED counter 63 — REDISPATCH-STALL W1 (fast-follow, with replay-order fix), 5th release on private BigscreenVR/spt-bs-releases"
metadata:
  node_type: memory
  type: project
  originSessionId: 89cc9038-e5d9-429e-b4a9-40fba8af71ee
---

**v0.36.0 PUBLISHED — counter 63** @fa3e474 (merge PR #20, tag v0.36.0), 2026-07-16.
REDISPATCH-STALL W1 fast-follow (the counter-62 MESH-RECOVERY sibling; P0 transport
fixes for hertz's v0.34 field-regression = recurrent 20-62s PTY/RC stalls).
**5th release on private `BigscreenVR/spt-bs-releases`** (59-63).

URL: https://github.com/BigscreenVR/spt-bs-releases/releases/tag/v0.36.0
Signed rel-primary-2026 (54188f12). Platforms: windows-msvc, linux-gnu, linux-musl.
Live update-set: counter 63, product 0.36.0, channel stable. 11 assets. isDraft=false,
releases/latest → v0.36.0.

## What shipped (surfaces, census v0.35.0..v0.36.0)
- **Fixed — 20-62s remote-PTY/RC freezes** after a daemon refresh/update when a
  viewer connection wedged: one poisoned subscriber serially re-triggered 15s
  write-deadline windows under the stream lock. Replay halts at first failed write,
  drops the failed subscriber, subscriber I/O off the lock, recovery paced by a
  circuit breaker.
- **Fixed — controller theft across restart**: a stale replayed attach can no
  longer silently steal/clear a live controller across a brain restart (attach
  generation validation; additive wire fields, N-1 compatible).
- **Fixed — stream dead-end**: one poisoned subscriber no longer permanently
  dead-ends a stream (serve-lease renewal on the next healthy attach).
- **Added — dispatch telemetry** `DISPATCH_EV` (generation/stream/family/endpoint/
  attempt/conn + breaker-trip + worker-outcome) binding a stalled stream to its
  endpoint for field diagnosis.
- Internal: bounded dispatch worker pool; sessions-lock I/O discipline.

## Ceremony — the HELD-then-fixed saga (KEY LESSON)
- First cut (base 0c70253) hit a REAL WAVE BUG mid-ceremony: **W1 Amendment fix 3
  moved the attach-replay enqueue OUTSIDE the StreamLog mutex → a concurrent
  producer append interleaves a LIVE frame mid-replay → seq gap (got 134 want 6) →
  brain strict-gap check kills the serve.** todlando self-caught it via main-push CI
  red on 0c70253.
- **My PR #19 CI Linux/kitsubito red (`resume_mode_brain_spawning_new_sessions_
  delivers_each`, UnexpectedEof 62s) was NOT a flake — it was SUSPECT-KIN to that
  race** (re-attach + concurrent producer = same window, different symptom). I
  grounded the red (outside the change surface, green on Windows same run,
  byte-identical to gate), reran as discriminator (went GREEN — intermittent =
  race signature, clears nothing), and LOOPED doyle instead of publishing on
  rerun-green. doyle initially read flake-likely, then WITHDREW it when todlando's
  RCA landed. **LESSON: an intermittent-green on a heavy-int red is a race
  signature, NOT a flake-clear — loop the gater, never publish through it.**
- doyle issued HOLD (do not merge/tag/publish regardless of rerun). Fix rode
  `fix/redispatch-stall-w1-replay-order` (writer-thread drains replay before live
  queue = ordering by construction) + a round-1 must-fix (lease-generation: rider
  shared a lease Arc across displacement).
- **Lane composition: the fix branch was cut from MY release branch**, so PR #20 =
  my b677030 bump (authorship preserved) + the fix, merged as THE release PR
  (fix-rides-release, v0.30.3 precedent). PR #19 CLOSED superseded — shows MERGED
  not closed = benign GitHub reachability bookkeeping (b677030 is an ancestor of
  fa3e474 via PR #20; main HEAD cleanly PR #20, no dup merge). NO rebase my side.
- Gate closed @f4727cd CI green both runners; heavy leg 59/59 (D1/D1b + T1-T7 +
  xfer push_survives 10/10 [was 1/10 red on broken shape, red-on-revert proven] +
  resume 5/5 [kitsubito kin cleared, same race fixed together]).
- My b677030 CHANGELOG rode as-is (fix pre-release, no new user entry). Ladder
  self-check PASSED. Signed from isolated worktree of the tag; merge+tag from main
  HEAD. GitHub 'Partially Degraded Service' TLS residue in poll loops = API flake,
  not CI (timeout-tolerant watcher pattern).
- OPEN SEED (doyle seeding): global INJECT_ECHO_ENV_VARS scrub at shared test-rig
  init (all daemon-spawning rigs) or CI workflow env: block — NOT a release rider,
  folds at next test-harness wave (wedge-rig precedent).

## Post-publish
2026-07-16 deployah (operator-directed, notes-only): release notes rewritten to
end-user language — PR #21 (CHANGELOG + runbook step-2, NO bump/re-tag) + published
GitHub body edited to match (body-only, signed bytes untouched, counter 63 unchanged).
Internal vocab (replay/subscriber/serve-lease/DISPATCH_EV) removed from public notes;
DISPATCH_EV collapsed to one Internal line. Voice standard codified in
RELEASE-RUNBOOK.md step-2. Fix substance above unchanged.

Publish-confirm SENT to doyle → his hertz field-verify GO fires on it. Counter 63
verified from published metadata (v0.35.0=62), never memory. Seed pre-seated (len 64).

**✅ REDISPATCH-STALL MILESTONE CLOSED (doyle 2026-07-17) — hertz field PASS on
v0.36 counter 63**: poison fingerprint dead, refresh calm, attach census O(active),
all discriminators green; one passive residual (first natural worker failure
confirms the production endpoint key). doyle: "Release lane clean this cycle despite
two mid-flight holds — zero bad bytes ever shipped." The two holds (the 0c70253
replay-order wave bug + my suspect-kin kitsubito red) never reached a published byte
— the HOLD-then-fix-then-fresh-GO discipline held the line. Nothing further
deployah-side; DAEMON-LIFECYCLE cluster next per [[spt-core-findings-backlog]].

Related: [[v0350-published]], [[v0340-published]], [[redispatch-stall-progress]], [[hfenduleam-disk-full-ci]], [[release-counter-from-published]], [[check-branch-before-commit-shared-checkout]], [[worktrees-under-project-root]].
