LearnNewsExamplesServices
Frontmatter
id15945
titleVessel pane is dark but UNSKINNED — pane rules still scoped to .workstation-workspace
stateOpen
labels
bugaicore
assigneesneo-opus-grace
createdAtJul 26, 2026, 12:40 AM
updatedAtJul 26, 2026, 12:49 AM
githubUrlhttps://github.com/neomjs/neo/issues/15945
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Vessel pane is dark but UNSKINNED — pane rules still scoped to .workstation-workspace

neo-opus-grace
neo-opus-grace commented on Jul 26, 2026, 12:40 AM

Context

Operator verdict on the v0.5 cut: "popup content NOT styled." @neo-fable frame-proved it from take-15 d2 (both legs, t13.0 + t18.2): the vessel shows a dark background — the token bridge from #15928 delivered — while the pane content renders as raw stacked text ("LIVE METRICS / 99.9 / System Metrics / system envelope stableLIVE"), no panel layout, no typography, no sparkline canvas, against a fully-skinned sibling pane in the main room in the same frame.

This is my incomplete fix, and my own evidence was mis-scoped. #15928 moved the design-token bridge from .workstation-workspace to .workstation-viewport and its commit asserted: "what remains below is workspace-only presentation the vessel must not inherit — the gradient backdrop belongs to the dense composition, not to a bare pane host." I never enumerated the remaining selectors to check that claim. Several are pane skin, not workspace chrome.

Two prior falsifications of mine were also mis-scoped, which is why this survived review:

  • I probed the vessel's stylesheet set (67 sheets, hasGrid: true, hasTab: true) and declared "incomplete stylesheet set" falsified — but I measured a vessel with no pane torn into it, so the probe never tested the travelling pane's needs.
  • @neo-fable's earlier "vessel styled" note in the handback was a thumbnail misread (owned in their verdict); dark ≠ skinned, and my token measurement proved only the former.

The Problem

resources/scss/src/apps/workstation/Workspace.scss keeps pane-affecting rules inside the .workstation-workspace block. Verified against the built CSS:

.workstation-workspace .neo-tab-container > .neo-tab-body-container
.workstation-workspace .neo-tab-header-toolbar
.workstation-workspace .neo-grid-header-button
.workstation-workspace .neo-grid-header-button .neo-button-glyph
… 7 pane-affecting rules total

Workstation.view.Viewport#onConstructed adds workstation-popout-host and returns without mounting Workspace — by design. So a vessel-hosted pane has no .workstation-workspace ancestor and loses its header toolbar background/border, its tab-body frame treatment, and its grid-header skin. It keeps the tokens (hence the dark ground) and Neo's default component CSS, which is exactly "dark but unskinned."

Why the #15928 fix looked complete: the token bridge genuinely was the cause of the first symptom (cells resolving to the ground colour). Fixing it changed the frame — dark background appeared — which made the remaining defect look like a different, smaller thing rather than the same defect one layer up.

The Architectural Reality

  • resources/scss/src/apps/workstation/Workspace.scss — the .workstation-workspace block; 7 pane-affecting selectors nested inside workspace chrome (.neo-dashboard-dock-* correctly belongs there).
  • resources/scss/src/apps/workstation/Viewport.scss — where #15928 moved the token bridge; the scope both boot modes carry.
  • apps/workstation/view/Viewport.mjs?popout= returns before mounting Workspace.
  • PR #15928 / #15923 — the partial fix and its mis-scoped falsification.
  • Frame receipts: take-15 d2, t13.0 + t18.2 (@neo-fable, available on request).

The Fix

Split the block by consumer, not by convenience. Rules that style the pane and its primitives move to .workstation-viewport alongside the token bridge; rules that style the dense composition (.neo-dashboard-dock-edge-*, splitters, rails, the gradient backdrop, tourbar/statusbar) stay on .workstation-workspace.

The discriminator is mechanical, not aesthetic: would this rule need to apply to a pane that has been torn out of the workspace? If yes it is pane skin; if no it is workspace chrome.

Not "move everything up" — the vessel must not inherit the gradient backdrop or dock-zone chrome; that would make a bare pane host pretend to be a workspace.

Acceptance Criteria

  • Every pane-affecting selector currently under .workstation-workspace is enumerated in the PR body with its verdict (pane skin → viewport / workspace chrome → stays), so the split is reviewable as a list rather than as a claim.
  • A vessel-hosted pane renders its header toolbar, body frame, and grid-header skin identically to the same pane in the main room — asserted by computed style, not by class presence (a class check passed through the entire #15923 defect).
  • The workspace keeps its gradient backdrop and dock chrome; a vessel does not acquire them.
  • Headed frame confirmation from the film lane: the vessel pane is visually skinned, not merely dark. Operator-visible symptom, so a computed-style assertion is necessary but not sufficient.
  • The sparkline canvas is separately triaged: if it is still absent once skin lands, that is a canvas-worker-per-window question and gets its own ticket rather than being folded here.

Out of Scope

  • The flicker/blank census#15927, @neo-gpt-emmy.
  • Choreography and the showcase beat#15933, film lane.
  • The sparkline canvas, unless skin alone restores it (see AC5). Canvas-per-window is a different subsystem from CSS scope, and bundling them would repeat exactly the mistake this ticket exists to correct.

Avoided Traps

  • Measuring the vessel's stylesheet set again. That probe is what falsely cleared this in #15923: the sheets are present; the selectors do not match. Any re-check must assert on computed style of a vessel-hosted pane, not on which files loaded.
  • Moving the whole block to the viewport. Fast, and it would give a bare pane host the dense composition's backdrop and dock chrome.
  • Treating "dark background" as "styled." The verdict, the earlier handback misread, and my own token measurement all made this error from different directions.

Related

#15923 / PR #15928 (the token bridge — partial fix), #15252 (film lane), #15927 (flicker census), #15933 (showcase beat), #15906 (cross-window docking).

Live latest-open sweep: latest 12 open plus a targeted vessel skin styled popout search at 2026-07-25T22:45Z; no equivalent — #15927 is flicker, #15933 is choreography.

Origin Session ID: 26e73986-66fa-4d28-9b02-6053541a5671

Retrieval Hint: "vessel pane unskinned workstation-workspace scoped tab-header-toolbar grid-header-button popout"