docs(collapse) : ADR 0016 persistance UI par-profil + guide utilisateur + architecture #295

Open
maximus wants to merge 1 commit from issue-291-collapse-docs into issue-290-categories-unify
Owner

Resolves #291

Autopilot — generated autonomously by the /autopilot run of 2026-07-15.

Documentation-only. Documents the final multi-level category collapse behavior (shipped in #288/#289/#290) and the structural decision behind it:

  • ADR 0016 (accepted): profile-specific UI state (category collapse) is persisted in the profile's own SQLite user_preferences, not localStoragedeleteProfile drops the .db but purges no localStorage, so a per-profile localStorage key would be a residue surviving profile deletion (privacy leak). The ADR states the boundary explicitly: profile-specific → user_preferences; machine-global (theme, subtotals position, Cartes period mode) → localStorage.
  • guide-utilisateur.md sections 8 (Budget) + 9 (Reports) + matching in-app docs.* i18n keys (FR and EN): multi-level collapse, collapsed-by-default, "Expand all / Collapse all", memory per profile.
  • architecture.md: user_preferences line names the 4 collapse keys, useCollapsibleGroups hook note, ADR index row.

No DB migration, no behavior change. npm run build clean (0 TS errors), 828 vitest pass, cargo check clean.


Stacked PR: stacks on #294 (issue #290) and is the top of the 4-PR chain (#288 socle → #289 budget → #290 trees → #291 docs). Base is issue-290-categories-unify; review/merge the chain bottom-up.

Resolves #291 **Autopilot** — generated autonomously by the /autopilot run of 2026-07-15. Documentation-only. Documents the final multi-level category collapse behavior (shipped in #288/#289/#290) and the structural decision behind it: - **ADR 0016** (accepted): profile-specific UI state (category collapse) is persisted in the profile's own SQLite `user_preferences`, not `localStorage` — `deleteProfile` drops the `.db` but purges no `localStorage`, so a per-profile localStorage key would be a residue surviving profile deletion (privacy leak). The ADR states the boundary explicitly: profile-specific → `user_preferences`; machine-global (theme, subtotals position, Cartes period mode) → `localStorage`. - **guide-utilisateur.md** sections 8 (Budget) + 9 (Reports) + matching in-app `docs.*` i18n keys (FR **and** EN): multi-level collapse, collapsed-by-default, "Expand all / Collapse all", memory per profile. - **architecture.md**: `user_preferences` line names the 4 collapse keys, `useCollapsibleGroups` hook note, ADR index row. No DB migration, no behavior change. `npm run build` clean (0 TS errors), 828 vitest pass, `cargo check` clean. --- **Stacked PR**: stacks on #294 (issue #290) and is the **top of the 4-PR chain** (#288 socle → #289 budget → #290 trees → #291 docs). Base is `issue-290-categories-unify`; review/merge the chain bottom-up.
maximus added 1 commit 2026-07-16 01:44:16 +00:00
Document the final multi-level category collapse behavior (shipped in
#288/#289/#290) and the structural decision to persist per-profile UI
state in user_preferences rather than localStorage.

- ADR 0016 (accepted): profile-specific UI state (category collapse) lives
  in the profile's own SQLite user_preferences table, not localStorage.
  deleteProfile drops the .db but purges no localStorage, so a per-profile
  localStorage key would be a residue surviving profile deletion, leaking
  which categories a (possibly PIN-protected) profile explored. States the
  boundary: profile-specific -> user_preferences; machine-global (theme,
  subtotals position, Cartes period mode) -> localStorage.
- guide-utilisateur.md sections 8 (Budget) + 9 (Reports): multi-level
  collapse, collapsed-by-default, "Expand all / Collapse all" button,
  memory per profile.
- docs.* i18n keys (fr + en): mirror the guide additions in the in-app help
  page (docs.budget + docs.reports features/tips).
- architecture.md: user_preferences line now names the 4 collapse keys,
  useCollapsibleGroups cross-cutting hook note, ADR index row.

No DB migration, no behavior change (docs only). Build clean, 828 vitest.

Resolves #291

Generated autonomously by /autopilot run of 2026-07-15
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
maximus added the
autopilot:pending-human
label 2026-07-16 01:44:33 +00:00
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin issue-291-collapse-docs:issue-291-collapse-docs
git checkout issue-291-collapse-docs

Merge

Merge the changes and update on Forgejo.
git checkout issue-290-categories-unify
git merge --no-ff issue-291-collapse-docs
git checkout issue-290-categories-unify
git merge --ff-only issue-291-collapse-docs
git checkout issue-291-collapse-docs
git rebase issue-290-categories-unify
git checkout issue-290-categories-unify
git merge --no-ff issue-291-collapse-docs
git checkout issue-290-categories-unify
git merge --squash issue-291-collapse-docs
git checkout issue-290-categories-unify
git merge --ff-only issue-291-collapse-docs
git checkout issue-290-categories-unify
git merge issue-291-collapse-docs
git push origin issue-290-categories-unify
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/Simpl-Resultat#295
No description provided.