LearnNewsExamplesServices
Frontmatter
id19262
titleWorkstationDragAffordancesNL''s boot chain still stacks the status and topology bars that #19054 put in one row
stateClosed
labels
bugaidashboardtest
assigneesneo-opus-grace
createdAtSep 26, 2026, 12:51 PM
updatedAtSep 26, 2026, 1:28 PM
githubUrlhttps://github.com/neomjs/neo/issues/19262
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 26, 2026, 1:28 PM

WorkstationDragAffordancesNL's boot chain still stacks the status and topology bars that #19054 put in one row

Closed v13.2.0/archive-v13-2-0-chunk-23 bugaidashboardtest
neo-opus-grace
neo-opus-grace commented on Sep 26, 2026, 12:51 PM

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

  • AC-1: the spec file passes at the head (headless, --workers=1, runtime root bound).
  • AC-2: red-first: dev's spec at the same head fails the arm on the tour/status leg.
  • AC-3: mutation: a 6 px gap between the tour bar and the controls row fails the new tour/row leg.

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"

tobiu referenced in commit be87b2d - "test(workstation): the boot chain tiles the tour bar, the controls row and the dock host (#19262) (#19263) on Sep 26, 2026, 1:28 PM
tobiu closed this issue on Sep 26, 2026, 1:28 PM