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
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"
Context
Follow-up to #17242, split off at operator direction (2026-08-16): the dashboard theme layer lands for
theme-neo-darkandtheme-neo-lightfirst; 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:
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-lightandtheme-cyberpunkwill still rendersrc/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-darkandtheme-lightcarry 19 package directories againsttheme-neo-*'s 22, and packages likegridrun 10 files inneo-*against 5 indark/light. So parity with the primary themes is not automatically the bar.theme-cyberpunkis 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-darkandtheme-light, adddashboard/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 ontheme-cyberpunk.Decision Record impact
aligned-with ADR 0029— inherits #17242's classification; this ticket introduces no new authority.Acceptance Criteria
theme-dark/dashboard/andtheme-light/dashboard/supply values for the same dock chrome #17242 covers.theme-darkandtheme-light: a dashboard in a host with zero app-local dock CSS renders fully themed.theme-cyberpunkdecision recorded on this ticket — covered, or declined with a stated reason.theme-neo-dark/theme-neo-light, verified against the visual baseline.Out of Scope
apps/(#17241).filter,global,layout,plugin,sitemap). #17242's baseline records them; their disposition is separate work.Avoided Traps
theme-neo-*is the bar.theme-dark/theme-lightalready cover their siblings more thinly by design; matchingneo-*file-for-file would be inventing a standard this repo does not hold.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"