LearnNewsExamplesServices
Frontmatter
id15166
titleExpose Workstation splitters and unify dock pane chrome
stateClosed
labels
enhancementdesignaitesting
assigneesneo-gpt-emmy
createdAt10:13 AM
updatedAt11:19 AM
githubUrlhttps://github.com/neomjs/neo/issues/15166
authorneo-gpt-emmy
commentsCount0
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAt11:19 AM

Expose Workstation splitters and unify dock pane chrome

Closed Backlog/active-chunk-6 enhancementdesignaitesting
neo-gpt-emmy
neo-gpt-emmy commented on 10:13 AM

Context

The standalone Workstation document already contains two split nodes (split-main and split-right). Source and live inspection prove that dock layouts do bake real splitters into projection:

  • DockLayoutAdapter.createSplitterAffordance() emits one Neo.dashboard.DockSplitter per split boundary, wired to resizeSplit;
  • the live Workstation contains exactly two splitter components, matching the two one-boundary split nodes;
  • horizontal splitter: 6px wide, full-height, cursor: ew-resize;
  • vertical splitter: 6px high, full-width, cursor: ns-resize.

They are functionally present but visually absent. Neural Link get_computed_styles reports both splitters as transparent with border: 0, border-radius: 0, box-shadow: none, and opacity 1. A user only discovers them after accidentally hovering the six-pixel hit target.

The same computed-style pass exposed a second dock-chrome mismatch around every pane:

Surface Border Radius Background
Workstation grid pane 1px solid #262f3d 8px Workstation panel
wrapping tab body generic 1px solid #454b42 0px opaque #0e0f0d

The square gray tab-body frame surrounds and clips the rounded pane, nullifying the pane's app-owned boundary language.

Live latest-open plus all-state A2A sweep at 2026-07-14T08:13:00.271Z: no equivalent ticket or overlapping claim found. Exact/all-state GitHub and Knowledge Base searches found the docking epic and historical contracts, but no Workstation splitter-visibility / tab-body-chrome leaf.

The Problem

Workstation proves docking semantics without communicating the core resize affordance. The layout contains correct, draggable splitters, yet their only visible state is a cursor change over a 6px transparent strip. The generic tab-body border then adds a competing square gray frame around app-owned rounded panes.

For a Qt-grade flagship this is not cosmetic trivia: the user cannot discover that areas resize, and the chrome hierarchy makes panes look embedded in an unrelated generic tab skin.

The Architectural Reality

  • src/dashboard/DockLayoutAdapter.mjs:163 is already the source of truth for projecting split boundaries; no model or adapter feature is missing.
  • src/dashboard/DockSplitter.mjs owns drag-to-resizeSplit behavior and the 6px interaction extent.
  • resources/scss/src/dashboard/Container.scss:91 intentionally owns only non-shrinking/touch behavior and orientation cursors; it does not paint a global splitter.
  • resources/scss/src/tab/Container.scss:30 applies the generic tab-body border token.
  • resources/scss/src/apps/workstation/Workspace.scss owns the flagship palette and is the narrow owner for visible splitter and tab-body integration.
  • apps/workstation/tour/denseWorkstation.mjs currently demonstrates splitNode and addTab but no resizeSplit, despite the flagship demo ticket's shipped-operation bar.

The Fix

  1. Paint Workstation's already-projected splitter components as clear resize affordances using app tokens: a restrained resting track/handle plus stronger hover/active feedback in both themes. Preserve the real 6px draggable component and orientation cursors.
  2. Remove the generic opaque/square tab-body frame inside Workstation (transparent background, no competing generic border) so each pane's own border and radius are the visible boundary.
  3. Add a deterministic resizeSplit beat to the Workstation tour, with a visible size change and a stable final topology. The beat must use the real semantic operation, not directly set flex styles.
  4. Add a user-drag whitebox witness over one real splitter: sizes and DOM extents change, pane/store identity remains stable, and the splitter count still equals the document boundary count.
  5. Pin the computed style contract for splitters, tab bodies, and rounded pane boundaries in dark and light skins.

Acceptance Criteria

  • Every projected split boundary in Workstation has one live Neo.dashboard.DockSplitter; the opening document therefore has exactly two.
  • Both splitters have a visible resting affordance and distinct hover/active feedback in dark and light skins while retaining ew-resize / ns-resize cursors.
  • Dragging a real splitter commits resizeSplit, changes adjacent DOM extents, and preserves pane plus Store identities.
  • The scripted tour visibly demonstrates resizeSplit through the semantic operation path and remains deterministic across consecutive runs.
  • Workstation tab bodies compute to transparent with no generic content border.
  • App-owned pane borders/radii remain the visible boundary; the scale grid retains its 8px radius without a square gray wrapper.
  • Focused whitebox coverage pins boundary count, computed styles, drag behavior, tour receipt, and both themes.

Out of Scope

Changing the dock model or adapter projection contract · globally painting all Neo dashboard splitters · changing generic tab-container theme tokens · redesigning tabs/overflow · touch-specific splitter sizing.

Avoided Traps

  • Do not add duplicate decorative DOM beside the real splitter; style the component already baked into projection.
  • Do not prove resizing by directly changing child flex values; commit through resizeSplit.
  • Do not solve the pane-frame mismatch by removing the pane's own radius/border.
  • Do not introduce hardcoded colors outside the Workstation token layer.

Related

Origin Session ID: adddb25d-fc36-4b08-b9a3-3a62a108cda1

Retrieval Hint: Workstation two live DockSplitter transparent 6px cursor resizeSplit tour tab body #454b42 radius 0 grid #262f3d radius 8

tobiu referenced in commit 14922eb - "feat(workstation): expose live dock splitters (#15166) (#15168)" on 11:19 AM
tobiu closed this issue on 11:19 AM