Turn label sync

The tray and the board now share the presented turn. A 3D ring landing updates the label during the effect, without waiting for the animation to finish.

Capture f5186986 · Final head a9bd4eae · Apple M1 / ANGLE Metal · 2026-11-04
Real table and FX with controlled delivery fixtures. The final delta only inlines an equivalent legacy fallback for the isolated board test harness; the captured app path is unchanged. Online/offline clock rules are covered by targeted tests and the full gate. Tap any frame for its original PNG.

390 × 844

Pass / ordinary handoff

Pass / ordinary handoff: Before delivery, Biscuit's turn
Before deliveryLabel: Biscuit's turnLive: Biscuit · Presented: Biscuit3D ring: Not parked · FX: idle
Pass / ordinary handoff: Handoff complete, Mochi's turn
Handoff completeLabel: Mochi's turnLive: Mochi · Presented: Mochi3D ring: Not parked · FX: idle
Recorded frame changes (JSON)

Reverse

Reverse: Before delivery, Biscuit's turn
Before deliveryLabel: Biscuit's turnLive: Biscuit · Presented: Biscuit3D ring: Not parked · FX: idle
Reverse: Live turn advanced, card still reading, Biscuit's turn
Live turn advanced, card still readingLabel: Biscuit's turnLive: Mochi · Presented: Biscuit3D ring: Not parked · FX: idle
Reverse: Effect playing, Biscuit's turn
Effect playingLabel: Biscuit's turnLive: Mochi · Presented: Biscuit3D ring: Not parked · FX: playing
Reverse: Ring landing, Mochi's turn
Ring landingLabel: Mochi's turnLive: Mochi · Presented: Mochi3D ring: You · FX: idle
Reverse: Handoff complete, Mochi's turn
Handoff completeLabel: Mochi's turnLive: Mochi · Presented: Mochi3D ring: You · FX: idle
Recorded frame changes (JSON)

Redirect

Redirect: Before delivery, Biscuit's turn
Before deliveryLabel: Biscuit's turnLive: Biscuit · Presented: Biscuit3D ring: Not parked · FX: idle
Redirect: Live turn advanced, card still reading, Biscuit's turn
Live turn advanced, card still readingLabel: Biscuit's turnLive: Mochi · Presented: Biscuit3D ring: Not parked · FX: idle
Redirect: Effect playing, Biscuit's turn
Effect playingLabel: Biscuit's turnLive: Mochi · Presented: Biscuit3D ring: Not parked · FX: playing
Redirect: Ring landing, Mochi's turn
Ring landingLabel: Mochi's turnLive: Mochi · Presented: Mochi3D ring: Mochi · FX: playing
Redirect: Handoff complete, Mochi's turn
Handoff completeLabel: Mochi's turnLive: Mochi · Presented: Mochi3D ring: Mochi · FX: idle
Recorded frame changes (JSON)

Market Crash

Market Crash: Before delivery, Biscuit's turn
Before deliveryLabel: Biscuit's turnLive: Biscuit · Presented: Biscuit3D ring: Not parked · FX: idle
Market Crash: Live turn advanced, card still reading, Biscuit's turn
Live turn advanced, card still readingLabel: Biscuit's turnLive: Mochi · Presented: Biscuit3D ring: Not parked · FX: idle
Market Crash: Effect playing, Biscuit's turn
Effect playingLabel: Biscuit's turnLive: Mochi · Presented: Biscuit3D ring: Not parked · FX: playing
Market Crash: Ring landing, Mochi's turn
Ring landingLabel: Mochi's turnLive: Mochi · Presented: Mochi3D ring: Not parked · FX: idle
Market Crash: Handoff complete, Mochi's turn
Handoff completeLabel: Mochi's turnLive: Mochi · Presented: Mochi3D ring: Not parked · FX: idle
Recorded frame changes (JSON)

Reaction window

Reaction window: Before delivery, Biscuit's turn
Before deliveryLabel: Biscuit's turnLive: Biscuit · Presented: Biscuit3D ring: Not parked · FX: idle
Reaction window: Live turn advanced, card still reading, Biscuit's turn
Live turn advanced, card still readingLabel: Biscuit's turnLive: Biscuit · Presented: Biscuit3D ring: Not parked · FX: idle
Reaction window: Reaction window open, Biscuit's turn
Reaction window openLabel: Biscuit's turnLive: Biscuit · Presented: Biscuit3D ring: Not parked · FX: idle
Reaction window: Handoff complete, Mochi's turn
Handoff completeLabel: Mochi's turnLive: Mochi · Presented: Mochi3D ring: Not parked · FX: idle
Recorded frame changes (JSON)

All capture metadata · Candidate branch