Context
#17844's census lists WorkstationDragAffordancesNL › the flagship chrome tiles the window, and every affordance child stays contained by component-id truth red at dev a9abb6c1dc and at 08a84ef3be:
tour bar and status bar must tile without gap or overlap
Expected: <= 1 Received: 5 (test/playwright/e2e/utils/dockGeometry.mjs:102)
Bisected on the unmodified spec file (headless, --workers=1): 5 passed at 7c1c7cbbec^, the arm red from 7c1c7cbbec (#19054, Resolves #18680).
The Problem
#19054 composes the Workstation chrome as two rows: the tour bar, then one .workstation-controls row holding the status bar (flex: 1) beside the topology bar (layout: flexbox, direction: row, align: center, wrap: wrap). assertBootContainmentChain still asserts the pre-#19054 vertical stack tour → status → topology → host. The status bar is shorter than the topology bar and centred in their shared row, so its top sits 5 px below the tour bar, and the next leg (status.bottom ≈ topology.top) cannot hold for side-by-side bars at all.
The Architectural Reality
- The layout is the #18680 design, not a regression.
- The chain guards against chrome bands that gap or overlap and push the dock host off the window's remaining height (the 2026-07-26 chip-into-tourbar regression is family 2's; family 1 is the band tiling). That guarantee is about bands, and the controls row is now one band.
assertBootContainmentChain has one caller, this spec.
The Fix
assertBootContainmentChain tiles three bands: the tour bar, the controls row read as the union of the status and topology rects, and the dock host. It also asserts the two bars do not overlap, which holds whether they sit side by side or wrap onto two lines. The JSDoc names the row. No app change.
Acceptance Criteria
Out of Scope
- #19054's layout, which is correct.
- The other families in
dockGeometry.mjs.
Related
#17844 (census) · #18680 / #19054 (the two-row composition)
Origin Session ID: 81d1894c-d8fd-4192-8350-42e32eb0101e
Retrieval Hint: "WorkstationDragAffordancesNL assertBootContainmentChain tour bar status bar tile 5px workstation-controls row #19054"
Context
#17844's census lists
WorkstationDragAffordancesNL › the flagship chrome tiles the window, and every affordance child stays contained by component-id truthred at deva9abb6c1dcand at08a84ef3be:Bisected on the unmodified spec file (headless,
--workers=1): 5 passed at7c1c7cbbec^, the arm red from7c1c7cbbec(#19054, Resolves #18680).The Problem
#19054 composes the Workstation chrome as two rows: the tour bar, then one
.workstation-controlsrow holding the status bar (flex: 1) beside the topology bar (layout: flexbox, direction: row, align: center, wrap: wrap).assertBootContainmentChainstill asserts the pre-#19054 vertical stack tour → status → topology → host. The status bar is shorter than the topology bar and centred in their shared row, so its top sits 5 px below the tour bar, and the next leg (status.bottom ≈ topology.top) cannot hold for side-by-side bars at all.The Architectural Reality
assertBootContainmentChainhas one caller, this spec.The Fix
assertBootContainmentChaintiles three bands: the tour bar, the controls row read as the union of the status and topology rects, and the dock host. It also asserts the two bars do not overlap, which holds whether they sit side by side or wrap onto two lines. The JSDoc names the row. No app change.Acceptance Criteria
--workers=1, runtime root bound).Out of Scope
dockGeometry.mjs.Related
#17844 (census) · #18680 / #19054 (the two-row composition)
Origin Session ID: 81d1894c-d8fd-4192-8350-42e32eb0101e Retrieval Hint: "WorkstationDragAffordancesNL assertBootContainmentChain tour bar status bar tile 5px workstation-controls row #19054"