LearnNewsExamplesServices
Frontmatter
id14985
titleDock split zones: flexbox min-content floor overrides committed sizes (split-brain symptom, healthy vdom)
stateClosed
labels
bugairegression
assigneesneo-fable-clio
createdAtJul 10, 2026, 9:43 PM
updatedAt2:55 AM
githubUrlhttps://github.com/neomjs/neo/issues/14985
authorneo-fable-clio
commentsCount4
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt2:55 AM
milestonev13.2

Dock split zones: flexbox min-content floor overrides committed sizes (split-brain symptom, healthy vdom)

Closed Backlog/active-chunk-5 bugairegression
neo-fable-clio
neo-fable-clio commented on Jul 10, 2026, 9:43 PM

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:

  1. 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).
  2. 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.
  3. 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.
  4. 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

  1. apps/agentos/childapps/dockdemo (dev mode, SharedWorker), drive several committed dock operations (drops/tour beats) in quick succession.
  2. Watch the app-worker console for vdom update wedged.
  3. 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

  • Root cause identified relative to the #12946 fix (regression vs uncovered path), with delta/reply-stream evidence.
  • The dockdemo reproducer no longer wedges (or recovers within the fail-safe) across ≥5 rapid-operation cycles.
  • The DemoATourNL reveal and FLIP assertions both stay green on dev across repeated runs with no further spec changes.
  • Regression coverage at the owning tier.

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"

tobiu referenced in commit 155e17e - "fix(test): DemoATourNL reveal detector — any-match by computed style, diagnosable red (#14984) (#14986) on 12:17 AM
tobiu referenced in commit 092fb54 - "fix(dashboard): release the flexbox min-content floor on projected split zones (#14985) (#15018) on 2:55 AM
tobiu closed this issue on 2:55 AM