feat(paper): reachable in-app Appearance theme toggle (off/paper/paper-night/auto)#1221
feat(paper): reachable in-app Appearance theme toggle (off/paper/paper-night/auto)#1221Chris0Jeky wants to merge 12 commits into
Conversation
…pressed, setMode, auto, off-restores-legacy)
There was a problem hiding this comment.
Code Review
This pull request introduces a new Appearance settings view allowing users to choose between four theme options (Legacy, Light, Dark, and Auto), along with corresponding sidebar navigation items, routing, and unit tests. The reviewer recommended using a unique glyph/icon (such as 'U') for the navigation item to avoid a conflict with the existing 'Today' item, utilizing CSS Grid instead of flexbox wrapping for the theme segment buttons to ensure a consistent layout on smaller screens, and adding custom focus styles to the buttons to improve keyboard accessibility.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 45245374a0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…y, data-mode hook, Legacy-token note (review)
…ith Today) — PaperSidebar (review)
…th Today) — ShellSidebar (review)
Self-review (2 independent adversarial lenses + verification) — all findings fixedRan two independent adversarial reviews (Lens A: correctness / a11y / Vue-TS idiom / CSS-token validity; Lens B: integration / route-guard parity / conventions / scope / test quality), then an adversarial verification pass that re-checked every finding against the actual codebase. The highest-value check passed: all 12 Findings (by severity) → fixes
Verification after fixes
No out-of-scope findings to seed. Awaiting CI + bot reviews (Gemini/Codex/Copilot); will address any. |
…sible ring (Gemini)
… so default-off users can discover Paper (Codex) + scope Settings active-match to /profile
Bot review round — all 6 findings addressedRead and addressed every Gemini + Codex thread (replied in-thread + resolved):
The Codex discoverability catch was the most valuable — the original PR would have left the theme reachable only via command-palette search for a default- Verification (post-fixes)
|
Summary
Adds a real, reachable in-app theme toggle at
/workspace/settings/appearance— a new Settings page with a 4-mode control (Off (Legacy / Obsidian) · Paper (Light) · Paper Night (Dark) · Auto (match system)) bound to the existingpaperThemeStore.This is the Wave-2 archive-pivot straggler that un-gates the later default-flip: today the only way to turn Paper on is the unlinked
/styleguide/paperroute, so a default-offuser has no reachable switch. The new Appearance page lives in the Legacy shell (the current default) and is also linked from the Paper sidebar, so the theme is reachable from either shell. It is also the Legacy escape hatch ADR-0038 requires before the canonical default can flip topaper.What changed
views/AppearanceSettingsView.vue— segmented control;Offis labelled "Off (Legacy / Obsidian)" to make clear it swaps the whole shell, not just colours. Pure UI on the store (setMode/mode); a live hint line describes the active mode./workspace/settings/appearance(workspace-settings-appearance,requiresShell, breadcrumb "Appearance"), slotted beside the existing/workspace/settings/*cluster.ShellSidebar(Legacy) andPaperSidebarmeta nav.tests/views/AppearanceSettingsView.spec.ts— renders 4 options, reflects current mode viaaria-pressed, click →setMode+ localStorage + body class,AutostaysAuto,Offrestores Legacy (no paper body class).Explicitly OUT of scope (deferred to Wave 3)
paperThemeStorefallback stays'off'.'td.paper.mode'; ADR-0038'std.paper.mode.v2is not introduced here.setMode/modeAPI.paperThemeStore.spec,AppShell.spec, and the.td-*-coupled E2E specs are untouched because the default is unchanged.Design was reviewed maintainer-first (location chosen: dedicated Appearance view). Top-bar gear shortcut deferred to a follow-up.
Verification
npm run typecheck— cleannpx vitest --run --maxWorkers=2on the new spec +PaperSidebar+ShellSidebar+paperThemeStore— 70 passednpx eslinton all changed files — cleanRefs ADR-0038 (Paper UI canonical / Legacy frozen); archive-pivot Wave 2 (theme-toggle activation prerequisite).