From 26896bbf032029bc973a51187619c574a3e5486b Mon Sep 17 00:00:00 2001 From: le king fu Date: Sat, 11 Jul 2026 16:42:56 -0400 Subject: [PATCH] state: sync after M1 filtres-fondation merged (#272-#276) Co-Authored-By: Claude Opus 4.8 (1M context) --- STATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/STATE.md b/STATE.md index b86173c..f29625a 100644 --- a/STATE.md +++ b/STATE.md @@ -1,6 +1,6 @@ # STATE — Simpl'Résultat -> Derniere MAJ : 2026-07-07 (suite epic #260 planifiée : 2 milestones `overnight-2026-07-08-filtres-fondation` #272-#276 + `overnight-2026-07-08-rapports-parite` #277-#279 via `/plan-overnight`+`/review-spec` ; filtre **multi-comptes** tranché ; exécuter M1→merge→M2. 1re slice tendances déjà mergée `fe87313`, 728 vitest) +> Derniere MAJ : 2026-07-08 (suite epic #260 : **M1 « filtres-fondation » #272-#276 mergée** sur `main` `fe9ae01` via /autopilot 5 workers + /pr-review APPROVE ×5 + merge local ff ; **M2 « rapports-parite » #277-#279 prête** à lancer. Build + suite vitest verte, 0 échec) ## Position actuelle @@ -16,7 +16,7 @@ Audit critique de la page Bilan livré (`docs/audit-bilan-2026-05.md`, revue CPA ## Decisions recentes -- 2026-07-07 : **Suite de l'epic #260 planifiée** (`/plan-overnight` + `/review-spec`) — 2 milestones séquentielles pour les 4 chantiers restants. **M1 `overnight-2026-07-08-filtres-fondation`** (5 issues #272-#276) : filtre compte partagé — **multi-comptes** (`accountIds[]`, `IN(...)` paramétré) tranché par Max après analyse coût/valeur (révise le « sourceId singulier » initial : débloque le sous-ensemble cohérent, pertinent pour un état de résultat) ; hook **additif** (pas de rename `useReportsPeriod` → 6 consommateurs), `` à **slot temporel injecté** (pas d'enum `temporalMode` — évite le mélange de sources d'état). **M2 `overnight-2026-07-08-rapports-parite`** (3 issues #277-#279, **après merge M1**) : BVA + grille budget income-first + lignes Résultat (modules purs par issue, unification générique des 4 roll-ups = follow-up #265) ; dashboard `/` convergé sur le modèle Cartes (barres classées, tuile valeur nette via `getSnapshotTotalsByDate` + empty-state `deriveLandingState`). `/review-spec` 3 experts → 3 🔴 résolus dans le plan (contrat pluriel, `getCartesSnapshot` inclus dans I2, hook additif au lieu du rename). ⚠️ Exécution : `/autopilot` M1 → merge → M2 (l'autopilot ne merge pas → **ne pas** lancer no-arg qui tenterait les 2 sans merge intermédiaire). (ref #260, #272-#279) +- 2026-07-08 : **Suite #260 — M1 « filtres-fondation » mergée** (`main` `fe9ae01`), M2 prête. Planifiée via `/plan-overnight`+`/review-spec` (filtre **multi-comptes** `accountIds[]`/`IN(...)` tranché après analyse, révise le « sourceId singulier » initial). **M1 livrée** via `/autopilot` (5 workers séquentiels en worktree → PRs #280-#284 en **pile linéaire**) + `/pr-review` **APPROVE ×5** + **merge local fast-forward** : hook `useReportsPeriod` additif (+`accountIds` URL `sources` + type `ReportFilters`, #272), 7 services en `accountIds[]` via helper paramétré `sqlFilters.inPlaceholders` (#273), `` slot temporel + multi-select « sources d'import » (libellé distinct du Bilan, #274), adoption Tendances (#275) + Compare/Budget (#276 — incl. `CompareBudgetView` ; câblage budget via `getActualTotalsForYear`, le body citait à tort `getBudgetVsActualData`). Aucune migration DB. Build + suite vitest verte (**277 fichiers, 0 échec** ; ⚠️ le compteur STATE historique « 728 » est un sous-total périmé — les deltas workers +63 sont réels, le `vitest run` complet compte ~4676, à réconcilier). Réconciliation Forgejo complète (5 issues auto-fermées via `Resolves #N`, 5 PRs fermées, milestone fermée, branches supprimées ; worktrees nettoyés). **M2 `overnight-2026-07-08-rapports-parite` (#277-#279) prête** → `/autopilot` (BVA + grille budget income-first + dashboard Cartes). Notes review pour M2 : séries `getCartesSnapshot` (`fetchMonthlyFlows`/`fetchSeasonality`) non filtrées (I7/#279) ; grille budget câblée via `getActualTotalsForYear`. (ref #260, #272-#276, PRs #280-#284) - 2026-07-07 : **Tendances hiérarchiques livrées** (1re slice de l'epic #260 « rapports uniformes »). Préparée via `/plan-overnight` (13 décisions drainées ; `/review-spec` 3 experts → 3 critiques résolus par l'approche **sidecar** : garder le pivot par mois pour chart **+ dashboard** (`DashboardPage:142` = consommateur partagé oublié), ajouter un arbre **clé-par-id** pour le tableau — pivot clé-par-nom aurait faussé le Résultat net sur homonymes une fois le `LIMIT 50` retiré), puis exécutée **le même jour** via `/autopilot` (session interactive, ciblée par nom de milestone **hors fenêtre horaire** — cf. mémoire [[feedback-plan-execute-temporal-decoupling]]). 4 workers en worktree → issues **#262-#265**, `/pr-review` **APPROVE ×4**, merge local de la pile (#266 standalone + chaîne #267→#268→#269 ; CHANGELOG **auto-résolu par section**, vérifié) ; tip cumulé validé build + **728 vitest** → push `main` `fe87313`, réconciliation Forgejo (4 PRs fermées, 4 issues auto-fermées via `Resolves #N`, milestone `overnight-2026-07-08-tendances-hierarchiques` fermée, branches supprimées). Contenu : tendance par catégorie → tableau income-statement **hiérarchique + collapse replié-par-défaut** (défaut byCategory+table = fix « paie invisible »), `getCategoryOverTime` en **arbre id-keyed sidecar** via `buildLeafDrivenTree` générique extrait de `buildCompareTree` (behavior-preserving), Résultat avant transferts interleavé. Aucune migration DB, non taggé ([Unreleased]). 2 polish non bloquants : perf dashboard (arbre construit non lu, #264), DRY `typeOf` dupliqué (#265). Reste de #260 (BVA-au-standard, budget, dashboard, filtres partagés) différé. (ref #260, #262-#265, PRs #266-#269) - 2026-07-07 : #254 (collapse/expand des sous-catégories) livré + #258 (db-locked) fermé. **#254** : chevron par catégorie parente + « tout replier/déplier » sur les 2 rapports comparables hiérarchiques (`ComparePeriodTable` réel-vs-réel, `BudgetVsActualTable` réel-vs-budget) ; **repli par défaut** (contrainte remontée de #260), état persisté par rapport en localStorage. Repli purement visuel — sous-totaux/totaux/résultats calculés sur les lignes brutes, jamais les visibles (tracé en /pr-review). Module `collapsibleRows.ts` (pur) + hook `useCollapsibleGroups.ts` + 12 tests → **713 vitest**, aucune migration DB. `CategoryOverTimeTable` exclu (liste plate top-N, rien à replier) → relève de l'epic #260. Livré via sous-agent en worktree isolé + /pr-review APPROVE + merge API (single PR, pas de conflit i18n/CHANGELOG) → PR #261, #254 auto-fermée. **#258** fermé comme déjà corrigé en v0.10.1 (`8cb7e53`, présent v0.11.0/v0.12.0) : la piste « BEGIN imbriqué » du body était une mauvaise lecture — `withTransaction` (`db.ts`) n'émet aucun BEGIN, `proposeStarterAccountsInTransaction:720` est le seul (même pattern que `saveSnapshotAtomic`/`upsertSnapshotLines` qui ne deadlockent jamais) ; smell latent noté (garde `inTransaction` = booléen global, pas un compteur → requête simple concurrente pendant une transaction bypasse le verrou). Prochaine étape : /plan-overnight de l'epic #260. (ref #254/#258, PR #261) - 2026-07-05 : **v0.12.0 shippée** (tag `v0.12.0` → CI release #311). Compare réel-vs-réel (#253) + tableau de tendance par catégorie (#256) refondus en **analyse de résultat** : revenu affiché, **Résultat avant transferts** (revenus − dépenses) + **Résultat net** (après transferts), sections revenu→dépense→transfert ; rapports comparables par défaut au **mois complet précédent** (#253). Origine : #243 (montants de transfert inclus dans le comparable) recadré par Max en « voir si je suis over/under ». Livré en 2 issues/PRs stackées #255→#257 (merge local + réconciliation Forgejo, PRs fermées, branches supprimées). Modules purs `compareResults.ts`/`overTimeResults.ts` testés ; 2 blocages `/pr-review` corrigés (fuite du revenu dans les top-movers Cartes via `COMPARE_DELTA_SQL` élargi income+transfer → filtre expense-only + régression ; garde StrictMode value-change sur le sync mois-réf, `syncReferenceOnPeriodChange` pur). 701 vitest verts, aucune migration DB. Ouvert au passage : #258 (db-locked `proposeStarterAccounts`, probable BEGIN imbriqué dans `withTransaction`), #259 (mapping manuel compte sans similaire), #254 (collapse/expand). Suivi différé : aligner le placement « Résultat avant transferts » de `CategoryOverTimeTable` (bas) sur le compare (interleavé). (ref #253/#256, PRs #255/#257)