Skip to content

Beta stability slice: device-loss recovery, truthful lifecycle, encoder probe, output supervisor, take telemetry - #420

Merged
iamfatness merged 26 commits into
mainfrom
codex/beta-stability-slice
Sep 10, 2026
Merged

iamfatness merged 26 commits into
mainfrom
codex/beta-stability-slice

Conversation

@iamfatness

Copy link
Copy Markdown
Owner

The beta-stability half of #419, split out so it can merge on its own. #419 stays open as the architecture draft; nothing from its Wave 1/2 foundations is included here.

What's in it (26 commits, cherry-picked in order from #419)

Live-show fixes (2026-09-08/09)

  • Live routing transitions and stale frames
  • Each SRT ingest pipe gets a single owning reader thread
  • ISO video submitted on the video tick (arrival-driven), audio sample loss published
  • Orphaned egress encoders are killed with the core process (job object)

Beta slice (docs/production-realtime-completion-plan.md §7 on #419)

  • D3D device loss is recovered by generation with a bounded ladder, never permanent CPU fallback
  • Destination lifecycle is truthful: Stop no longer claims completion before finalize
  • Fault-injection seams for device loss, blocked present and blocked monitor render
  • Encoder capacity is probed per machine; software spill is loud; ISO admission refuses before the show
  • Output destination supervisor: health from accepted units, 5-10-20-40-60s restart ladder, loud give-up, NDI in-process risk published

Observability

  • GET /snapshot serves the core's own sessionState (49 nodes), redacted, with staleness
  • Worker evidence counters (realtimeEvidence), lifecycle contracts, and the Wave 0 qualification judge input
  • Rendered scene id attribution is honest (was stuck on the pre-take scene)
  • One structured record per Take, and per-source Zoom subscription churn
  • Fake engine delivers exactly one video stream per participant; drill names evidence instead of asserting a cause

Tiles

  • A settled wall is cut to, not rebuilt, on Program (partial: the full fix is the persistent-source redesign in codex/persistent-sources)

Verification

  • Native: 781/781 (MonitorRenderFaultInjection.* are real-GPU timing tests, opt-in)
  • Shell: Control 74/74, MediaCore 2158/2158, WinUI 1289/1289
  • Live: ran on the 2026-09-09 8-source show and this morning's 7-participant test meeting from the Establish production realtime architecture foundations #419 branch (Program 59.7 fps + 8 ISO, encoder probe measured 7 sessions on the 4090)

Split notes

  • One conflict resolution: the take-telemetry commit's ZoomEngineRuntime hunk was bundled with Establish production realtime architecture foundations #419's source-authority code; only the subscription-churn parts are kept here.
  • The evidence/contracts commit (85dd7d8) is included because the beta fixes depend on its worker counters and lifecycle enum. It wires no architecture classes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SAB8v62BEV8ihmaeGhhtY9

iamfatness and others added 26 commits September 10, 2026 08:14
(cherry picked from commit dbf6edc)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 13545fb)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 10a1a99)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 523a295)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit f06d6fb)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 2881bb7)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 4527e1f)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 8a53ac8)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit aa17c10)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit c044320)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit e6ac97a)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit a268fee)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit a54e7b3)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 5f7b0e5)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit b6b3a5c)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit a305391)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 62e19da)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit 0056b0f)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YASnsbX3oQRZRxUNroqjY5
(cherry picked from commit b437b61)
programFrame.sceneId stuck on the pre-take scene because the buffered
render path attributed it from a peek of the latest delivered frame, with
no else branch when nothing new came back. Attribution now keys on the
delivery sequence and publishes live/holding/unknown. Each take writes one
structured record (scene, plan, layers, wall adoption, background
continuity, subscription churn), and Zoom subscription churn is counted
per source with a reason.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAB8v62BEV8ihmaeGhhtY9
(cherry picked from commit 329e33c)
A supervisor sits outside each protocol's async writer, judges health from
accepted units advancing, restarts on the house 5-10-20-40-60s ladder, gives
up loudly after five failures, and bypasses the ladder for terminal
configuration errors. NDI's in-process residual risk is published, not hidden.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAB8v62BEV8ihmaeGhhtY9
(cherry picked from commit ceb334c)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAB8v62BEV8ihmaeGhhtY9
(cherry picked from commit 46b07ff)
The core published subscription churn as "zoomSubscriptions", an object,
but the shell already binds that name to a list of spine subscriptions.
Every snapshot failed to deserialize, leaving the shell blind to the core
(engine status showed the JSON error, program frame count stuck at 0).
Caught on the first live launch; the core suite cannot see shell parsing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAB8v62BEV8ihmaeGhhtY9
(cherry picked from commit 1d164b7)
Splitting the beta slice off the architecture branch dropped the
findChurnSource helper along with the authority tests that shared its
conflict hunk, and left two doc links pointing at plans that only exist
on the #419 branch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SAB8v62BEV8ihmaeGhhtY9
@iamfatness
iamfatness merged commit 52e061c into main Sep 10, 2026
18 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant