LearnNewsExamplesServices
Frontmatter
id18659
titleThe topology bar's hidden readout still takes space and wraps the bar
stateClosed
labels
bugairegressiondashboard
assigneesneo-opus-grace
createdAtSep 13, 2026, 1:45 PM
updatedAtSep 13, 2026, 4:31 PM
githubUrlhttps://github.com/neomjs/neo/issues/18659
authorneo-opus-grace
commentsCount0
parentIssue18456
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtSep 13, 2026, 4:31 PM

The topology bar's hidden readout still takes space and wraps the bar

Closed v13.2.0/archive-v13-2-0-chunk-20 bugairegressiondashboard
neo-opus-grace
neo-opus-grace commented on Sep 13, 2026, 1:45 PM

Context

#17844's census at dev@cce07cdade (2026-09-13) lists five Workstation Neural Link arms red that were green or skipped at dev@22c183ccf9 on the same host. All five follow from one layout change. In the census's 800×600 headless window, where the Workstation's inner size is 756×469, the topology bar now wraps onto a second row and takes 40px from the dock.

head topology bar dock host readout box
22c183ccf9 43px 328px none
f9709716ad 83px, two rows 288px 20×12px, hidden

The Problem

At this width the bar's content box is 732px: 756px less --toolbar-padding: 6px 12px (#18560). The row needs 746px: Save 159, Close 165, Reset 175, readout 20, Undo 96 and Redo 95, plus six 6px gaps (the action spacer has no basis). So Redo wraps.

26px of that row is the readout, which has nothing to say at boot. It hides by toggling neo-hidden (apps/workstation/view/Workspace.mjs:475), and neo-hidden is visibility: hidden (resources/scss/src/Global.scss:116), so its 20px padding box and its gap stay in the flex line. Without them the row needs 720px and fits.

Two one-row controls ran at dev@5dc6b80fef on the same host, each running the three spec files whole plus a bar probe. The only change between f9709716ad and that head is #18649, which touches comments, a guide and the docs SEO script.

arm 22c183ccf9 f9709716ad bar wrap: 'nowrap' readout hidden
WorkstationHumanPopupOverlapNL large-over-small ×2 (:1585) skipped failed skipped skipped
WorkstationPopOutSparklinesNL (:68) passed failed passed passed
WorkstationTearOutSourceContinuityNL film and plain pace (:1017, :1022) passed failed passed passed
bar / dock host 43 / 328px 83 / 288px 45 / 326px 45 / 326px

nowrap gets its row by shrinking every button (Save 159→155px). Hiding the readout keeps every button at its natural width. This is the defect #18016 fixed for the toolbar rail: a withdrawn element takes no space.

The Architectural Reality

  • The readout is a view-owned component in the view-declared bar (Workspace.createTopologyBar). Its cls and html bindings both go through Workspace.topologyStateText, so visibility and text cannot disagree.
  • Hiding belongs to Neo.component.Base: hidden with the default hideMode_: 'removeDom' (src/component/Base.mjs:148) keeps the vdom node and removes its DOM, while 'visibility' is the opt-in that keeps the box. The class toggle reproduces that opt-in by accident.
  • WorkspaceController.syncTopologyBar inserts two recovery buttons per popup ahead of the action spacer, so at narrow widths the bar needs wrap: 'wrap'. The wrap is not the defect.

The Fix

Bind hidden to the same formatter, hidden: data => !Workspace.topologyStateText(lineState(data)), keep workstation-topology-state as a static cls, and drop the neo-hidden toggle.

Acceptance Criteria

  • With nothing to say, the readout is hidden and its DOM removed; with text, it renders that text.
  • A unit arm pins both states and fails on dev.
  • The three spec files, run whole at the PR head with the Brain runtime, report the 22c results above. The #16756 arm (:669) stays red on its 1200px display requirement, as it is at both heads.
  • #17844's current-state block attributes the five arms to this fix.

Out of Scope

  • Once the readout shows text, its box alone exceeds the 12px the row has left, so at this width the bar still wraps while the readout speaks. Truncating the readout instead is a separate design question.
  • wrap: 'wrap' itself, and the #16756 display requirement.

Decision Record impact: none.

Related

#17844 (census) · #18553 / #18595 (the readout) · #18560 (the padding token) · #18015 / #18016 (the rail precedent) · #18456 (parent epic)

Live latest-open sweep: checked the latest 20 open issues at 2026-09-13T11:40:20Z (newest #18658); no equivalent. A2A claim sweep (30 most recent, all read-states, 11:40Z): no claim on the bar or its readout. Memory Core sweep: no hit on the bar wrapping or the readout's box. Own-assignment sweep: #17844 is the census owner; nothing else of mine on the bar. Content sweep: the local mirror (resources/content/issues) was last synced 2026-08-28, stops at #17800 and holds no topology-bar ticket, so an all-state GitHub title search stands in: #18545 and #18558, neither about the bar's width.

Origin Session ID: d010413d-0559-4755-b8f7-34cbcdc8d0b3 Retrieval Hint: "Workstation topology bar wraps to two rows at 756px: the hidden readout keeps its visibility:hidden box, dock host 328→288px, five NL arms red"