LearnNewsExamplesServices
Frontmatter
id16434
titleOverflow cue starves in genuinely hidden panes
stateClosed
labels
bugai
assigneesneo-fable
createdAtAug 3, 2026, 12:56 PM
updatedAtAug 3, 2026, 4:33 PM
githubUrlhttps://github.com/neomjs/neo/issues/16434
authorneo-fable
commentsCount3
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 3, 2026, 4:31 PM

Overflow cue starves in genuinely hidden panes

neo-fable
neo-fable commented on Aug 3, 2026, 12:56 PM

Context

Found while closing the pane leg of #16425. With the DockFlip starvation repair in place (entry discriminator + timer dam, branch agent/16425-dockflip-starvation-dam, a4a013aa1b), a dense tour in a genuinely hidden browser pane now RUNS — scene captions advance, the cross-zone showcase completes its two dwells, pips paint — and SETTLES with a receipt instead of wedging in the preamble. The remaining fail-closed stop moved one leg further down the cue chain:

Tour stopped — overflow: overflow returned no observable receipt

Measured live at 2026-08-03T10:52Z: document.hidden: true, real 1280×720 bounds, 33 rows, 31 sparkline canvases, all sparklines offscreenRegistered: true pre-tour. The canvas-update stop from #16425 is gone; overflow is the next (and per the cue receipts, likely last) starved cue leg.

The Problem

The starvation family drains leg by leg, and each leg has a different owning seam:

  1. Grid geometry acquisition — repaired at the ResizeObserver addon (#16402, merged e10992deb3).
  2. Dock re-projection choreography — repaired at the DockFlip addon (#16425 PR, two layers: hidden entry discriminator + occluded timer dam).
  3. The overflow cue — THIS ticket. executeCue('overflow')Workspace#navigateOverflowMenu(cue.itemId) returns no observable receipt in a genuinely hidden pane, while the same cue settles with a receipt object under the synthetic starvation rig (WorkstationStarvedTourNL, completed 6/6 cues) and headed.

The synthetic rig does NOT reproduce this leg — that is the classification's first datum. The rig lies about document.hidden to JS readers but its timers run unclamped and its compositor is live. A genuinely hidden pane adds two things the rig lacks: (a) visibility-clamped main-thread timers (>=1s/tick, intensive ~1 wake/min after 5min hidden), and (b) real zero-serviced compositor state including stale/zero measurement geometry for floating surfaces.

The Architectural Reality

The overflow surface has multiple starvation-sensitive legs, and the classification must name the one that fails:

  • Workspace#navigateOverflowMenu drives the floating overflow control + its menu (component identity via getTabChromeIdentity: overflowControlId, overflowPluginId).
  • Workspace#waitForOverflowMenu requires four lifecycle facts (!plugin.measuring, !plugin.projectQueued, control.mounted, control.menuList) inside a bounded 100×timeout(0) app-worker poll.
  • tab.plugin.Overflow#project() measures per-button geometry through main-thread reads and coalesces while a measurement is in flight — a hidden pane can hold measuring/projectQueued in states the visible path never lingers in, and zero-width button rects can produce a degenerate partition (no overflow → no control → no receipt).
  • The menu itself imports/mounts asynchronously after control construction.

The Fix

Classification-first, in the REAL pane (the rig cannot reproduce it; the pane route is documented on #16402/#16425: preview_start fronts once = bounds, then hidden; NL MCP with explicit sessionId):

  1. Instrument navigateOverflowMenu + the Overflow plugin's measurement lifecycle in a hidden pane; capture which of the four readiness facts never becomes true, or which measurement leg returns degenerate geometry.
  2. Repair at the owning seam so the cue produces its observable receipt without rendering opportunities — measurement legs must ride message-driven reads (layout is live in hidden documents; only paint is dead), and any main-thread timer cadence must respect the visibility clamp (see the sibling timer-throttling ticket).
  3. Witness: the dense tour completes in a genuinely hidden pane (Tour complete — 11 deterministic beats and 6 surface cues settled.) — closing the LAST leg of the operator-reported hidden-pane symptom. Extend the synthetic rig with the classified discriminating condition if it can be modeled deterministically.

Acceptance Criteria

  • The starved overflow leg is classified with a receipt (named readiness fact or measurement leg), posted on this ticket.
  • The repair lands at the classified owning seam; headed/presenting overflow behavior unchanged.
  • The dense tour completes end-to-end in a genuinely hidden pane, witnessed with the exact completion caption.
  • No fixed-delay settlement added anywhere on the path.

Out of Scope

  • Grid geometry under starvation — #16402 (closed).
  • DockFlip choreography under starvation — #16425 (PR in flight).
  • Overflow control z-order — #16424. Card viewport sizing — #16423.

Related

Related: #16425 · #16402 · #16424 · #16412 · #16356

Live latest-open sweep: checked latest 20 open issues at 2026-08-03T10:57Z; no equivalent found (#16424 is overflow z-order, #16412 is tour reset topology — different seams). A2A in-flight claim sweep: latest 30 messages spanning the herd window — no overlapping claim.

Origin Session ID: f01a83b0-dab9-4fa9-a3a1-279f3e2336dd

Retrieval Hint: "overflow cue starvation hidden pane tour no observable receipt"