feat(categories): dashboard v1 discovery banner (#118) #130
No reviewers
Labels
No labels
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/Simpl-Resultat#130
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-118-dashboard-discovery-banner"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #118
Summary
Adds a non-destructive, dismissable Dashboard banner that invites profiles still on the legacy v2 category seed to discover the new v1 IPC taxonomy guide shipped in #117.
src/components/dashboard/CategoriesV1DiscoveryBanner.tsxsrc/pages/DashboardPage.tsxuser_preferenceskey/value table viagetPreference/setPreference(no schema change, no new migration)dashboard.categoriesBanner.*(FR + EN)[Unreleased]in bothCHANGELOG.mdandCHANGELOG.fr.mdBehaviour
src/components/dashboard/CategoriesV1DiscoveryBanner.tsxcreatedcategories_schema_version='v2'ANDcategories_v1_banner_dismissed != '1'user_preferences(categories_v1_banner_dismissed)/settings/categories/standard(guide page from #117)Test plan
npx tsc --noEmitcleannpx vitest run— 168/168 tests passnpm run buildsucceedsSelf-review — APPROVE
Security
=== "v2",!== "1") and i18n strings.userPreferenceService.setPreference) — no SQL injection surface introduced./settings/categories/standard.Correctness
"loading"avoids a flash of the banner on first mount before prefs are read.cancelledflag inuseEffectcorrectly preventssetStateafter unmount.schemaVersion === "v2" && dismissed !== "1"— new v1-seeded profiles never see it.Quality
TokenStoreFallbackBannerpattern (icon + title + description + dismiss).var(--primary),var(--foreground),var(--muted-foreground)) — matches the rest of the app.role="status"on the container,aria-labelon the dismiss button.Data / migrations
user_preferenceskey/value table. Migration v8 already exists (INSERT OR IGNORE … categories_schema_version) and is the authoritative source the banner reads from.categories_v1_banner_dismissedmatches the spec exactly.i18n
dashboard.categoriesBanner.*(title / description / cta / dismiss).Changelog
[Unreleased] / ### Addedin bothCHANGELOG.mdandCHANGELOG.fr.md, referencing(#118).Build / tests
npx tsc --noEmit— clean.npx vitest run— 168/168 pass.npm run build— succeeds.Verdict: APPROVE.