LearnNewsExamplesServices
Frontmatter
id17244
titleExtend the dashboard theme layer to dark, light and cyberpunk
stateClosed
labels
enhancementdesignai
assigneesneo-gpt
createdAtAug 16, 2026, 9:27 PM
updatedAtAug 23, 2026, 4:00 PM
githubUrlhttps://github.com/neomjs/neo/issues/17244
authorneo-opus-grace
commentsCount1
parentIssue13158
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[x] 17242 Dashboards render unthemed: no `theme-neo-*/dashboard` layer exists
blocking[]
closedAtAug 23, 2026, 4:00 PM

Extend the dashboard theme layer to dark, light and cyberpunk

Closed Backlog/active-chunk-16 enhancementdesignai
neo-opus-grace
neo-opus-grace commented on Aug 16, 2026, 9:27 PM

Context

Follow-up to #17242, split off at operator direction (2026-08-16): the dashboard theme layer lands for theme-neo-dark and theme-neo-light first; the remaining three themes come later. Covering all five in one pass would have made #17242 an epic.

The governing invariant is #17242's, unchanged:

Dock layouts (dashboards) MUST work standalone — they can get dropped into any container.

That invariant is only fully satisfied when a dashboard renders correctly in every theme the engine ships. #17242 satisfies it for the two primary themes; this ticket closes the remainder.

Filed rather than deferred informally on purpose. "The other themes can come later" with no ticket is the state where work quietly stops existing — there is no third state between filed and dropped.

The Problem

resources/scss/theme-*/dashboard/ exists in no theme today. After #17242 it exists in two. theme-dark, theme-light and theme-cyberpunk will still render src/dashboard/'s 29 components — rails, splitters, previews, drop indicators, reveal overlays, tabs, panels — with no theme-supplied values.

This is deliberately blocked on #17242, and the dependency is what keeps it small. #17242 owns the design decisions: the --dock-* token contract it consumes (from #17241), the file granularity, and the standalone proof. Once those are settled, extending to a further theme is replication against an established contract rather than new design.

The Architectural Reality

Neo's SCSS two-layer split — resources/scss/src/<pkg>/ for structure, resources/scss/theme-*/<pkg>/ for values — means a new theme's dashboard layer is a values file set against tokens that already exist. The sibling precedents show the expected asymmetry: theme-dark and theme-light carry 19 package directories against theme-neo-*'s 22, and packages like grid run 10 files in neo-* against 5 in dark/light. So parity with the primary themes is not automatically the bar.

theme-cyberpunk is the open question. It carries only 4 package directories in total and is a specialty theme; whether it warrants dashboard coverage at all is a real decision, not an oversight to fill silently. A reasoned "no" is an acceptable outcome for cyberpunk — recorded on this ticket, which is precisely what a filed ticket buys over an informal deferral.

The Fix

For each of theme-dark and theme-light, add dashboard/ values against the token contract #17242 establishes, at a granularity consistent with how those themes already cover their siblings. Then make an explicit, recorded decision on theme-cyberpunk.

Decision Record impact

aligned-with ADR 0029 — inherits #17242's classification; this ticket introduces no new authority.

Acceptance Criteria

  • theme-dark/dashboard/ and theme-light/dashboard/ supply values for the same dock chrome #17242 covers.
  • The standalone proof from #17242 passes in theme-dark and theme-light: a dashboard in a host with zero app-local dock CSS renders fully themed.
  • Mutation control: deleting either new theme layer makes that theme's proof fail.
  • theme-cyberpunk decision recorded on this ticket — covered, or declined with a stated reason.
  • #17242's baselined theme-coverage guard is updated if this changes what it asserts.
  • No regression in theme-neo-dark / theme-neo-light, verified against the visual baseline.

Out of Scope

  • The primary-theme layer and all of its design decisions (#17242).
  • The structure half — dock paint currently living in apps/ (#17241).
  • Theme coverage for the other zero-coverage packages (filter, global, layout, plugin, sitemap). #17242's baseline records them; their disposition is separate work.
  • Dock behavior, drag mechanics, component APIs.

Avoided Traps

  • Starting before #17242 lands. Writing values against a token contract that does not exist yet produces files that have to be rewritten when it does.
  • Assuming parity with theme-neo-* is the bar. theme-dark/theme-light already cover their siblings more thinly by design; matching neo-* file-for-file would be inventing a standard this repo does not hold.
  • Treating cyberpunk as an obligation. It is a 4-directory specialty theme; a recorded decline is a legitimate close.

Related

#17242 (blocks this — the primary-theme layer and the design decisions) · #17241 (the structure half) · #13158 (QT-parity docking polish epic) · ADR 0029

Live latest-open sweep: checked immediately before creation 2026-08-16T19:2xZ; the only adjacent tickets are #17242 (explicitly split from) and #17241 (the complementary structure layer). A2A in-flight claim sweep: 30 most recent messages, newest 2026-08-16T14:10Z; no claim on this scope.

Origin Session ID: b17338dd-b474-494f-b08c-683044de2ddb Retrieval Hint: "dashboard theme layer remaining themes dark light cyberpunk follow-up to 17242"

tobiu referenced in commit ef80271 - "feat(dashboard): extend dock theming to every shipped theme (#17244) (#17613)" on Aug 23, 2026, 4:00 PM
tobiu closed this issue on Aug 23, 2026, 4:00 PM