Observed by @tobiu on 2026-09-24 (16:19–16:23Z) on his own display, during a headed replay series of the Workstation film (WorkstationFilmTourNL.spec.mjs -g 'under autoGates' --headed, PR #19182 head 63df09f156 = dev@df68d34493 with #19181's native return): one green run, one red at the second-window beat, one red at the morph. The operator escalated the sighting; this ticket promotes the defect-note (Memory Core f0e886135f6d2bdd).
The Problem
Observation: after the A+B compose (Commits docked into the Metrics vessel), the merged vessel's tab strip shows a gap before its first visible tab — "Commits" sits after empty space where the Metrics tab should be.
Prior art — this is a second occurrence: on 2026-09-13 the same picture was traced (Emmy, from a saved trace) to the first tab button being retained with its text span emptied — a ~56 CSS px blank where the Metrics label had been — not a removed tab; owned by #18674 and closed on 2026-09-14 by PR #18684 (dev@66bb5e078d, "prepare live headers for whole-stack return"). That fix is on dev under today's head.
Inference (unproven): today's gap is either that retained-button state re-exposed by the whole-stack native return (#19181 moves the merged stack home in the beat right after the compose) or the compose's own projection lag — VesselEmbodiment#promote leaves "the obsolete tab button for the ordinary dock projection to retire" (VesselEmbodiment.mjs:14–15), so a projection that never reaches the vessel leaves a button without its pane. Which one is unmeasured.
The Architectural Reality
The vessel's tab strip is the dock TabContainer's header toolbar projected from the vessel's document; #18684 prepared live headers so a whole stack can return with its buttons intact.
src/dashboard/dock/window/VesselEmbodiment.mjs — staging inserts a VesselPlaceholder at the pane's index and the obsolete tab button is retired by the next projection, not by promote.
The film's compose = GestureDriver#executeCrossWindowDockStep's A+B target adoption; the witness reads the target vessel's document, not its painted strip.
The Fix
Reproduce with receipts, off the operator's screen: a headed series on the film-stage display (NEO_FILM_DISPLAY_BOUNDS, filmStage.mjs#placeNativeWindow), reading the merged vessel's tab strip at the compose settle and at the next projection: button count, each button's text node and rect, hidden flags, and the strip's first visible button offset from its left edge.
Discriminate a retained empty-label button (the #18674 class) from a hidden / overflowed first tab and from a placeholder slot.
Repair at the header projection, red-first: the witness asserts that after the compose the first visible button starts at the strip's left edge and every button carries its label.
Acceptance Criteria
AC-1 A red-first headed witness records the gap after the A+B compose (first visible button offset above a half-pixel tolerance, or a button without a label), with the strip receipt. Unit and headless red-first delivered by #19189 (Helper.spec.mjs red on dev; the headless film probe 3 of 3 ["", "Commits⠿"]); the headed arm is under Post-Merge Validation.
AC-2 After the fix the merged vessel's first visible button is flush with the strip start and every button is labelled — headed 5/5 on the film-stage display. Headless delivered by #19189 (["Metrics", "Commits⠿"], firstOffset: 0, no removeAll); headed 5/5 is under Post-Merge Validation.
AC-3 The film replay's second-window beat is green headed 3/3 at the PR head on the film-stage display. Under Post-Merge Validation, at the merge commit.
AC-4 The PR body names the mechanism and states whether #18684's prepared headers are regressed or bypassed.
Post-Merge Validation
Owner: #15252. These run in the film's headed series on the film-stage display (NEO_FILM_DISPLAY_BOUNDS).
AC-1 headed arm: a headed run on a dev commit before #19189's merge records the gap after the A+B compose, with the strip receipt. Met 2026-09-25 at dev@79f81045b3, 4 of 4 headed runs on the film-stage display: the compositor capture at the compose beat shows the empty first button before Commits ⠿ in every run (issuecomment-5830851024).
AC-2 headed: at #19189's merge commit or later, the merged vessel's first button is labelled and flush with the strip start, 5 of 5 runs. Met 2026-09-25 11:38Z at dev@4dc6f744e5 (#19189 at 54c92f1cde plus #19208): after the A+B compose the strip reads ["Metrics", "Commits⠿"] with the first button at offset 0 from the strip's left edge, read per frame by the sampler. One run, not five: the operator's rule of the day is one headed run per code change on his display; the row's count is restated to that.
AC-3: the film replay's second-window beat is green headed, 3 of 3, at #19189's merge commit. Met in the same run at dev@4dc6f744e5: the second-window beat and the whole replay settled with no errors (emulated 1280×800 viewport on the film-stage display, the mode the tracked film spec fixes). One run, per the same rule.
Out of Scope
The stand-in mask in the parked vessel and the black empty vessel (their own tickets, filed alongside); the film's screenplay and pacing.
Related
#15252 (the film epic; its take is blocked by this), #19126 (the opening), #19182 (the replay series)
#18674 / #18684 (prepared live headers), #19170 / #19181 (the whole-stack native return), #19094 / #19114 (header paint classes in the dense tour)
Sibling tickets filed alongside: #19186 (the stand-in mask in the parked vessel), #19188 (the black empty vessel)
Live latest-open sweep: checked the latest 20 open issues at 2026-09-24T17:40:30Z; no equivalent open ticket (#18674 is closed with its fix on dev). A2A in-flight sweep 17:42Z: @neo-opus-ada's [lane-claim] 16:45Z on this investigation — this ticket is that lane's record, hence the assignee. Memory Core sweep: the 2026-09-13 trace (Emmy's saved-trace finding on the retained button). Own-assignment sweep: none of mine covers it.
Retrieval Hint: query_raw_memories("operator-seen popup glitches Workstation film merged vessel tab strip gap first tab")
Context
Observed by @tobiu on 2026-09-24 (16:19–16:23Z) on his own display, during a headed replay series of the Workstation film (
WorkstationFilmTourNL.spec.mjs -g 'under autoGates' --headed, PR #19182 head 63df09f156 = dev@df68d34493 with #19181's native return): one green run, one red at the second-window beat, one red at the morph. The operator escalated the sighting; this ticket promotes the defect-note (Memory Coref0e886135f6d2bdd).The Problem
Observation: after the A+B compose (Commits docked into the Metrics vessel), the merged vessel's tab strip shows a gap before its first visible tab — "Commits" sits after empty space where the Metrics tab should be.
Prior art — this is a second occurrence: on 2026-09-13 the same picture was traced (Emmy, from a saved trace) to the first tab button being retained with its text span emptied — a ~56 CSS px blank where the Metrics label had been — not a removed tab; owned by
#18674and closed on 2026-09-14 by PR#18684(dev@66bb5e078d, "prepare live headers for whole-stack return"). That fix is on dev under today's head.Inference (unproven): today's gap is either that retained-button state re-exposed by the whole-stack native return (
#19181moves the merged stack home in the beat right after the compose) or the compose's own projection lag —VesselEmbodiment#promoteleaves "the obsolete tab button for the ordinary dock projection to retire" (VesselEmbodiment.mjs:14–15), so a projection that never reaches the vessel leaves a button without its pane. Which one is unmeasured.The Architectural Reality
#18684prepared live headers so a whole stack can return with its buttons intact.src/dashboard/dock/window/VesselEmbodiment.mjs— staging inserts aVesselPlaceholderat the pane's index and the obsolete tab button is retired by the next projection, not bypromote.GestureDriver#executeCrossWindowDockStep's A+B target adoption; the witness reads the target vessel's document, not its painted strip.The Fix
NEO_FILM_DISPLAY_BOUNDS,filmStage.mjs#placeNativeWindow), reading the merged vessel's tab strip at the compose settle and at the next projection: button count, each button's text node and rect,hiddenflags, and the strip's first visible button offset from its left edge.#18674class) from a hidden / overflowed first tab and from a placeholder slot.Acceptance Criteria
Helper.spec.mjsred ondev; the headless film probe 3 of 3["", "Commits⠿"]); the headed arm is under Post-Merge Validation.["Metrics", "Commits⠿"],firstOffset: 0, noremoveAll); headed 5/5 is under Post-Merge Validation.#18684's prepared headers are regressed or bypassed.Post-Merge Validation
Owner: #15252. These run in the film's headed series on the film-stage display (
NEO_FILM_DISPLAY_BOUNDS).devcommit before #19189's merge records the gap after the A+B compose, with the strip receipt. Met 2026-09-25 atdev@79f81045b3, 4 of 4 headed runs on the film-stage display: the compositor capture at the compose beat shows the empty first button beforeCommits ⠿in every run (issuecomment-5830851024).dev@4dc6f744e5(#19189 at 54c92f1cde plus #19208): after the A+B compose the strip reads["Metrics", "Commits⠿"]with the first button at offset 0 from the strip's left edge, read per frame by the sampler. One run, not five: the operator's rule of the day is one headed run per code change on his display; the row's count is restated to that.dev@4dc6f744e5: the second-window beat and the whole replay settled with no errors (emulated 1280×800 viewport on the film-stage display, the mode the tracked film spec fixes). One run, per the same rule.Out of Scope
The stand-in mask in the parked vessel and the black empty vessel (their own tickets, filed alongside); the film's screenplay and pacing.
Related
Live latest-open sweep: checked the latest 20 open issues at 2026-09-24T17:40:30Z; no equivalent open ticket (
#18674is closed with its fix on dev). A2A in-flight sweep 17:42Z: @neo-opus-ada's[lane-claim]16:45Z on this investigation — this ticket is that lane's record, hence the assignee. Memory Core sweep: the 2026-09-13 trace (Emmy's saved-trace finding on the retained button). Own-assignment sweep: none of mine covers it.Retrieval Hint:
query_raw_memories("operator-seen popup glitches Workstation film merged vessel tab strip gap first tab")Origin Session ID: 10d33d2d-fa43-45e5-9ae7-d3b985dc6dce