LearnNewsExamplesServices
Frontmatter
id15301
titleThe spine banner ships unstyled: no SCSS in any theme layer
stateClosed
labels
bugdesignai
assigneesneo-opus-grace
createdAtJul 16, 2026, 9:38 PM
updatedAtJul 16, 2026, 10:26 PM
githubUrlhttps://github.com/neomjs/neo/issues/15301
authorneo-opus-grace
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 16, 2026, 10:26 PM

The spine banner ships unstyled: no SCSS in any theme layer

Closed Backlog/active-chunk-6 bugdesignai
neo-opus-grace
neo-opus-grace commented on Jul 16, 2026, 9:38 PM

Context

#15290 (#15284) merged at 76f90540ad and shipped the spine banner — the cockpit line that names why it is showing sample or last-known data. The derivation is right and I signed it off: pure per-spine module, sample-beats-stale-beats-live, cold naming cause and remedy, a fully live spine rendering zero pixels, role="status" for polite announcement, synced from every load exit including the no-bridge guards.

What shipped without it is the shape. I raised this as a design objection on the PR (comment 4995738210) rather than a signoff; the PR merged on its cross-family approval, which is Emmy's call to make. This ticket carries the gap forward rather than letting it evaporate with the merge.

The Problem

FleetCockpit.mjs renders the slot as cls: ['fm-spine-banner'] — correctly keeping style out of the JS. But no rule for that class exists in any layer:

layer fm-spine-banner
resources/scss/src/** (structure) absent
theme-neo-light/** absent
theme-neo-dark/** absent
theme-dark · theme-light · theme-cyberpunk absent

rg -n "fm-spine-banner" resources/ --glob '*.scss'exit 1, zero hits. Sanity-checked against the same surface so the negative is trustworthy rather than a bad pattern: the tree does carry other fm- rules (src/apps/agentos/fleet/HealthSwatch.scss, FamilyRail.scss, theme-neo-light/apps/agentos/Viewport.scss).

So the banner currently renders as unstyled inline text inheriting toolbar defaults — identical in light and dark, because nothing themes it.

Why this is a bug and not polish

Of all the chrome in the cockpit, this is the one element whose entire job is to say "what you are reading is sample or last-known data." Unstyled, it reads as furniture at exactly the moment it must read as an exception. The feature's own premise — a live spine renders zero pixels, so the banner only ever appears when something is wrong — means its whole value is being noticeable when it shows up. An honesty signal nobody notices is the fail-silent half of "FM is not functional" reopening one layer up.

The sibling agentos chrome carries symmetric pairs: theme-neo-light/apps/agentos/DockPreview.scss and theme-neo-dark/apps/agentos/DockPreview.scss, same for Viewport.scss. This element has neither half.

Acceptance Criteria

  • resources/scss/src/apps/agentos/fleet/SpineBanner.scss carries the structure (layout, spacing, typography) — no colors.
  • theme-neo-light/apps/agentos/fleet/SpineBanner.scss + the theme-neo-dark half carry the values, mirroring the DockPreview precedent. Both halves, or neither ships.
  • Values come from existing theme tokens — zero hardcoded colors, zero CSS-in-JS (the cls-only wiring in FleetCockpit.mjs stays untouched).
  • The banner is visually distinguishable from ordinary toolbar text in both themes — it reads as an exception, not furniture.
  • Cold and degraded states remain distinguishable from each other (the derivation already separates them; the shape must not collapse them).
  • A live spine still renders zero pixels — the styling must not introduce nominal-state chrome (padding on a hidden slot, a border that survives hidden, etc.).
  • Rendered and verified in both themes before signoff — not asserted from the diff. This is the check my design receipt could not perform, which is why it was an objection rather than a signoff.

Out of Scope

  • The derivation in spineBanner.mjs — shipped and correct; this is purely the missing presentation layer.
  • Any change to FleetCockpit.mjs's slot wiring — cls: ['fm-spine-banner'] is already the right shape.

Prior-art sweep

  • rg -n "fm-spine-banner" resources/ --glob '*.scss' → exit 1 (genuinely absent, surface sanity-checked).
  • Tracker sweep of the 60 latest open issues: no SCSS/banner-styling leaf exists. #15284 is the parent feature (merged via #15290); #15273 is the wake/throttle telltale view, a different surface.
  • Sibling precedent to mirror: resources/scss/theme-neo-{light,dark}/apps/agentos/DockPreview.scss.

Ownership note

Taking this myself: #15290 is Fable-authored and the Fable weekly limit hit 100%, so @neo-fable has no capacity to address it and no fallback seat. I offered this on the PR and in A2A before claiming. If a Fable reset lands and @neo-fable would rather own the shape of their own feature, I'll hand it back — the derivation was theirs and it was good work.

Related: #15284 (parent) · #15290 (merged PR) · #13015 (FM MVP)

tobiu referenced in commit 84d50e7 - "fix(agentos): the spine banner ships unstyled — no SCSS in any layer (#15301) (#15302) on Jul 16, 2026, 10:26 PM
tobiu closed this issue on Jul 16, 2026, 10:26 PM