Context
Found closing out #14984 (2026-07-10): with an honest any-match reveal detector, the Demo-A tour's reveal beat measures zero visible frames across 3,102 rAF samples — the overlay's single instance stays display:none/-hidden through the entire scripted reveal, on current dev (which includes PR #14975). The app-worker log carries the engine's own diagnostic, emitted TODAY on dev:
vdom update wedged: "neo-component-16" has been in-flight for over 5000ms. Its reply was likely
lost — the component will not update again, and ancestor updates will yield to it. See #12946
#12946 ("Vdom update wedge: in-flight flag sticks; vnode fakes applied deltas") is CLOSED — the class is back, or its fix never covered this surface.
The Problem
A lost update reply wedges a component permanently; every later update in its yield-scope starves. Observed downstream casualties on the dockdemo (SharedWorker) surface, all with CORRECT worker truth and stale DOM:
- The tour reveal beat never paints — worker machine flips
revealed-focused, overlay cls loses -hidden worker-side, DOM keeps display:none for the whole tour (histogram: {"none/visible": 3102} samples, maxOverlays: 1).
- The tour FLIP sampler intermittently records zero motion — independent exact-head repeats of
DemoATourNL alternate between reveal-red, flipSamples === 0, or both in the same run while the rest of the 18-beat tour completes. This is the second observed victim of the same lost-update/starvation family; it is an acceptance witness, not a shielded pass.
- Intermittent overlay delta non-application — the
#14970 gate observations (dismiss deltas silently dropped while one earlier reveal applied; clean NL reproducer on the dock example). PR #14975 fixed the genuine CSS/focus defects there; the delta-loss half matches THIS wedge signature.
- The wedge fires under this surface's normal operating pattern: rapid committed operations → wholesale re-projections + FLIP + tour beat cadence — exactly the reply-loss conditions.
Reproducer
apps/agentos/childapps/dockdemo (dev mode, SharedWorker), drive several committed dock operations (drops/tour beats) in quick succession.
- Watch the app-worker console for
vdom update wedged.
- Run
test/playwright/e2e/dashboard/DemoATourNL.spec.mjs repeatedly. Post-wedge, the reveal assertion and/or the flipSamples > 0 assertion is the standing red: exact-head evidence has observed reveal-red, FLIP-zero, and both together while the tour otherwise reaches its finale.
The Fix
Engine-tier investigation against the #12946 fix: why does the in-flight reply still get lost on this surface (SharedWorker routing? re-projection destroying the reply target mid-flight — the destroy-wedge family of #14923?), and why does the yield-scope starve permanently instead of recovering via the documented fail-safe. The #14984 tour reds + the NL reproducer are the acceptance witnesses.
Acceptance Criteria
Out of Scope
- The detector fix itself (
#14984, PR in flight — correct regardless).
- The
#14980 early-gesture deafness race (separate lifecycle gap).
Decision Record impact
none — engine defect investigation.
Related: predecessor #12946 (closed) · #14970 / PR #14975 (the CSS half of the same gate lineage) · #14923 (destroy-wedge family) · #14984 (the honest detector whose reds track this) · parent surface #13158.
Live latest-open sweep: latest-15 checked 2026-07-10T19:35Z + re-checked at create; no equivalent open wedge ticket. A2A herd window: no competing claim.
Origin Session ID: 183ac080-2f24-4837-8f63-69bfc536af0d
Retrieval Hint: "vdom update wedge recurrence dockdemo reveal FLIP zero lost reply yield starvation"
Context
Found closing out
#14984(2026-07-10): with an honest any-match reveal detector, the Demo-A tour's reveal beat measures zero visible frames across 3,102 rAF samples — the overlay's single instance staysdisplay:none/-hiddenthrough the entire scripted reveal, on current dev (which includes PR#14975). The app-worker log carries the engine's own diagnostic, emitted TODAY on dev:#12946("Vdom update wedge: in-flight flag sticks; vnode fakes applied deltas") is CLOSED — the class is back, or its fix never covered this surface.The Problem
A lost update reply wedges a component permanently; every later update in its yield-scope starves. Observed downstream casualties on the dockdemo (SharedWorker) surface, all with CORRECT worker truth and stale DOM:
revealed-focused, overlay cls loses-hiddenworker-side, DOM keepsdisplay:nonefor the whole tour (histogram:{"none/visible": 3102}samples,maxOverlays: 1).DemoATourNLalternate between reveal-red,flipSamples === 0, or both in the same run while the rest of the 18-beat tour completes. This is the second observed victim of the same lost-update/starvation family; it is an acceptance witness, not a shielded pass.#14970gate observations (dismiss deltas silently dropped while one earlier reveal applied; clean NL reproducer on the dock example). PR#14975fixed the genuine CSS/focus defects there; the delta-loss half matches THIS wedge signature.Reproducer
apps/agentos/childapps/dockdemo(dev mode, SharedWorker), drive several committed dock operations (drops/tour beats) in quick succession.vdom update wedged.test/playwright/e2e/dashboard/DemoATourNL.spec.mjsrepeatedly. Post-wedge, the reveal assertion and/or theflipSamples > 0assertion is the standing red: exact-head evidence has observed reveal-red, FLIP-zero, and both together while the tour otherwise reaches its finale.The Fix
Engine-tier investigation against the
#12946fix: why does the in-flight reply still get lost on this surface (SharedWorker routing? re-projection destroying the reply target mid-flight — the destroy-wedge family of#14923?), and why does the yield-scope starve permanently instead of recovering via the documented fail-safe. The#14984tour reds + the NL reproducer are the acceptance witnesses.Acceptance Criteria
#12946fix (regression vs uncovered path), with delta/reply-stream evidence.Out of Scope
#14984, PR in flight — correct regardless).#14980early-gesture deafness race (separate lifecycle gap).Decision Record impact
none— engine defect investigation.Related: predecessor
#12946(closed) ·#14970/ PR#14975(the CSS half of the same gate lineage) ·#14923(destroy-wedge family) ·#14984(the honest detector whose reds track this) · parent surface#13158.Live latest-open sweep: latest-15 checked 2026-07-10T19:35Z + re-checked at create; no equivalent open wedge ticket. A2A herd window: no competing claim.
Origin Session ID: 183ac080-2f24-4837-8f63-69bfc536af0d Retrieval Hint: "vdom update wedge recurrence dockdemo reveal FLIP zero lost reply yield starvation"