Skip to content

feat(settings): functional persisted settings — theme, accent, branding, thresholds, data (epic #29)#39

Merged
xt0n1-t3ch merged 1 commit into
mainfrom
feat/epic-29-settings
Jun 14, 2026
Merged

feat(settings): functional persisted settings — theme, accent, branding, thresholds, data (epic #29)#39
xt0n1-t3ch merged 1 commit into
mainfrom
feat/epic-29-settings

Conversation

@xt0n1-t3ch

Copy link
Copy Markdown
Owner

A real Settings area — every control persists and visibly takes effect across the app.

  • Theme light / dark / system (no-flash inline script sets data-theme).
  • Recolorable accent (preset palette) injected as a validated --accent override; works in light and dark. Proven: dark + indigo applied app-wide after save.
  • Branding product name — Brand now reads RuntimeSettings, so the rail/titles/headers follow.
  • Confidence tiers thresholds drive the Low/Medium/High colours (CockpitFormat reads them).
  • Default export template — surfaced first in the review Export menu.
  • Data management — reseed the demo corpus, clear all documents (guarded confirm).

Architecture: one RuntimeSettings holder is the in-memory source; the store loads it at startup and on every save. Single-row AppSettingsRecord + migration. Accent hex is sanitized server-side and re-validated before injection (no untrusted content reaches the page).

Proof

  • build 0 warnings · dotnet format clean · 25 unit + 12 integration + 3 e2e green.
  • Browser 1440px: Settings renders; saving Dark + Indigo reloads the whole app dark with an indigo accent; zero console errors.

Refs #29

…ng, thresholds, data

A real Settings area where every control persists and visibly takes effect across the app.

- Core: AppTheme + AppSettings + a RuntimeSettings holder (the single in-memory source the
  layout, branding, and confidence tiers read).
- Persistence: single-row AppSettingsRecord + migration; loaded into RuntimeSettings at startup.
- Infrastructure: ISettingsStore (get/save, sanitizes accent hex + clamps/orders thresholds)
  and IDataMaintenance (clear all documents, reseed the demo corpus).
- Web: Settings page (theme light/dark/system, recolorable accent palette, product name,
  confidence tiers, default export template, data management) + rail nav. App.razor applies
  the theme (no-flash inline script) and injects the validated accent; Brand and CockpitFormat
  now read RuntimeSettings, so renaming the product and retuning the tiers take effect app-wide.
  The review Export menu surfaces the default template first.
- Tests: settings store (defaults, persistence, sanitize), confidence-tier wiring, and clear-all.
  25 unit + 12 integration + 3 e2e green.

Refs #29
@xt0n1-t3ch xt0n1-t3ch merged commit a80aaec into main Jun 14, 2026
2 checks passed
@xt0n1-t3ch xt0n1-t3ch deleted the feat/epic-29-settings branch June 14, 2026 19:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant