fix: onboarding feedback follow-ups: root files warning, pins, help texts, docs (#446) #475

Open
maximus wants to merge 5 commits from issue-446-review-followups into issue-384-onboarding-followups
Owner

Resolves #446
Generated autonomously by /autopilot run of 2026-10-18

Résumé

Maillon 8 sur 8 (dernier) de la pile planned-2026-10-16-lot-v018, basé sur issue-384-onboarding-followups (PR #474, tête 08c2f57). Suivis non bloquants des revues de la pile #438 à #445, selon la section « Plan d'exécution » du corps, qui prime :

  1. Avertissement des fichiers à la racine : SET_IMPORT_FOLDER vide rootFiles, et seulement lui. Entre le choix d'un autre dossier et la fin de son scan (ou pour de bon si ce scan échoue), l'avertissement nommait les fichiers de l'ancien dossier sous le nom du nouveau. scannedSources n'est pas touché : la liste des sources du dernier scan reste affichée jusqu'au scan suivant, comportement antérieur, épinglé par le test et ajouté aux vérifications manuelles.
  2. Épingles : reorderRows (sous-groupe replié suivi d'une feuille sœur, puis d'une racine sœur) et le point du bandeau de démarrage (absent tant que le total n'est pas connu, présent entre le compteur et l'étape suivante ensuite).
  3. Textes validés par Max le 2026-10-16 : docs.dashboard.features[6], reports.help.tips[2], reports.help.tips[3], FR mot pour mot, EN mot pour mot pour les deux puces de l'aide, EN aligné pour la carte d'accueil (le corps dit « EN aligné »).
  4. Documentation : composants recomptés (138), 5 cartes de navigation du hub /reports, note sur le Ctrl+clic de la carte Tendances, ligne useImportWizard à jour ; CHANGELOG FR et EN.

Hors portée : la garde des clés i18n FR/EN, faite par #453 (maillon 1, src/i18n/locales.keys.test.ts sur la base) ; aucune seconde garde. Aucune migration (v1→v17), aucun appel réseau, aucun fichier Rust.

Fichiers

  • src/hooks/useImportWizard.ts : SET_IMPORT_FOLDER vide rootFiles ; commentaire du reducer et doc de WizardState.rootFiles à jour.
  • src/hooks/useImportWizard.test.ts : deux tests à côté de « a scan error leaves the root files of the last scan in place » : un changement de dossier vide rootFiles et garde scannedSources (même référence) jusqu'au scan suivant, qui pose les nouveaux fichiers ; une erreur de scan après un changement de dossier ne nomme aucun fichier de l'ancien.
  • src/utils/reorderRows.test.ts : deux tests ([sub("A",0), sub("Vide",1), leaf("z",1)] → Vide, z, A ; le même bloc suivi d'une racine groupe → Vide, z, A, b, B, ou d'une racine feuille → Vide, z, A, R).
  • src/components/onboarding/OnboardingBanner.render.test.tsx : helper dots (span dont les classes contiennent h-1 et w-1) ; absence du point dans les cas visitStepsInitialized: false et budgetReady: false ; nouveau test de présence (un seul point, aria-hidden="true", entre le compteur et « Étape suivante » dans le balisage).
  • src/i18n/locales/fr.json, src/i18n/locales/en.json : les trois textes.
  • docs/guide-utilisateur.md : la ligne des fonctionnalités du tableau de bord suit docs.dashboard.features[6] (même texte FR).
  • docs/architecture.md, CLAUDE.md, CHANGELOG.md, CHANGELOG.fr.md.

Textes

Clé FR EN
docs.dashboard.features[6] Carte d'accueil d'un profil sans transaction, avec la liste de démarrage : huit étapes, cochées selon vos données ou par « J'ai compris » pour les visites, et un bouton « Masquer » Welcome card for a profile without transactions, with the getting-started checklist: eight steps, checked from your data or with "Got it" for the visit steps, and a "Hide" button
reports.help.tips[2] Tendances montre vos revenus et dépenses mois par mois sur 12 mois Trends shows your income and expenses month by month over 12 months
reports.help.tips[3] Analyse par catégorie suit l'évolution d'une catégorie dans le temps Category Analysis tracks how a single category evolves over time

Les cinq textes donnés par le corps ont été comparés par script au corps de l'issue (espaces simples, apostrophes droites) : identiques. DocsContent.locales.test.ts, locales.keys.test.ts et les tests de pages qui montent PageHelp restent verts (même nombre d'éléments par liste, mêmes clés).

Décisions

  • [HIGH] Ordre de reorderRows établi en exécutant le cas d'abord (sonde jetable, supprimée) : [sub("A",0), sub("Vide",1), leaf("z",1)] avec subtotalsOnTop=false donne Vide, z, A, l'ordre présumé par le corps ; il est donc épinglé, avec la variante suivie d'une racine sœur, groupe et feuille.
  • [MEDIUM] Mutation du point du bandeau : la mutation nommée par le corps (totalKnown = budgetReady) rougit, mais d'abord sur l'assertion préexistante du compteur dans le même test. Pour prouver la nouvelle assertion seule, la mutation M6 la restreint au point (budgetReady && nextStep) : rouge avec les nouveaux tests, verte avec le fichier de test de la base (45/45, rc 0). Les deux sont dans le tableau.
  • [HIGH] Point absent aussi quand budgetReady est faux : l'autre moitié de totalKnown, une assertion d'une ligne (mutation M8).
  • [HIGH] scannedSources inchangé (décision de planification) et épinglé comme comportement antérieur (toBe(before.scannedSources), mutation M2) : vider aussi les sources ferait clignoter l'état vide de la page Import pendant le scan, ce qu'aucun worker sans écran ne peut juger.
  • [MEDIUM] CHANGELOG : en plus de l'entrée Modifié/Changed des textes, une entrée Corrigé/Fixed pour l'avertissement, parce qu'il change ce que l'utilisateur voit après le choix d'un autre dossier (règle CHANGELOG de CLAUDE.md, règle de zone « Un changement visible ajoute une entrée » de REVIEW.md). Écarté : l'entrée Modifié seule, qui laisserait un correctif visible sans trace.
  • [HIGH] Texte EN de docs.dashboard.features[6] (« EN aligné ») : « Got it » est onboarding.checklist.acknowledge en anglais, « visit steps » le terme de la note anglaise docs.gettingStarted ; « tick themselves » remplacé comme en français.
  • [HIGH] Guide : docs/guide-utilisateur.md porte la même ligne que docs.dashboard.features[6] ; elle suit (règle de documentation de CLAUDE.md), bien qu'absente de la liste de fichiers du corps.
  • [HIGH] Comptes des composants, recalculés sur la tête de ce maillon (voir plus bas) ; la liste de noms de balance/ corrigée avec le compte (elle nommait BalanceOnboardingCard, supprimé par 82550d6), la ligne categories-migration/, absente, ajoutée.
  • [HIGH] Note Ctrl+clic : faits vérifiés dans react-router 7.18.4 (Link appelle onClick puis shouldProcessLinkClick ignore un clic modifié) ; le « sans effet visible » du corps n'est pas écrit comme un fait (ce que fait le webview d'un clic modifié n'est pas observable ici) mais comme « jugé théorique : documenté, pas corrigé ».

Comptes des composants

Commande, sur la tête 08e6f04 (fichiers .tsx hors tests, sous-dossiers compris) :

find src/components -name '*.tsx' ! -name '*.test.tsx' | wc -l                                  # 138
find src/components -name '*.tsx' ! -name '*.test.tsx' | awk -F/ '{print $3}' | sort | uniq -c

adjustments 3, balance 12, budget 5, categories 8, categories-migration 5, dashboard 7, import 18, layout 2, onboarding 3, profile 3, reports 35 (dont 7 sous cards/), settings 17, shared 14, transactions 6. Le corps disait 135 au 2026-10-16 ; s'y ajoutent SplitButton et UpsellDialog (#369) et HierarchyCheckModal (#393).

  • docs/architecture.md : total 61 → 138 (avec la définition), balance 8 → 12, categories 5 → 8, reports ~25 → 35, ligne categories-migration/ (5) ajoutée ; les autres lignes étaient justes.
  • CLAUDE.md : 53 → 138, import 14 → 18. La ligne des hooks est celle du maillon 7, non touchée.

Preuves

Implémentation commitée avant la première mutation ; une mutation à la fois, restaurée par git checkout -- <fichier>, git status --short vide après chacune.

# Fichier Mutation Tests rouges Code de sortie
M1 useImportWizard.ts rootFiles: [] retiré de SET_IMPORT_FOLDER 2 (les deux nouveaux tests) 1
M2 useImportWizard.ts scannedSources: [] ajouté à SET_IMPORT_FOLDER 1 (comportement antérieur épinglé) 1
M3 reorderRows.ts bloc vide traité à part : currentParent && currentChildren.length > 0 && depth <= parentDepth 2 sur 2503, suite complète : seules les deux nouvelles épingles le voient 1
M5 OnboardingBanner.tsx totalKnown = budgetReady (mutation du corps) 1 (rouge d'abord sur le compteur) 1
M6 OnboardingBanner.tsx point sur budgetReady && nextStep 1 ; 0 avec le test de la base (45/45) 1 ; 0 avec la base
M7 OnboardingBanner.tsx point jamais rendu (false && …) 1 (test de présence) 1
M8 OnboardingBanner.tsx point sur visitStepsInitialized && nextStep 1 (cas budgetReady: false) 1

Les textes et la documentation n'ont pas de comportement à muter. M7 rejouée après le commit de relecture 08e6f04 (test de présence qui ne lit plus les points qu'une fois) : toujours rouge (1 test, rc 1).

Tests

  • Sonde : src/zz_tmp_probe.test.ts (un expect faux), npx vitest run → sonde rc=1, puis supprimée.
  • npm run build : vert (tsc + vite).
  • npm test : 155 fichiers, 2503 tests, verts (2498 sur la base, plus 5 nouveaux cas), rejoué sur la tête 08e6f04 avec npm run build.
  • Rust : aucun fichier src-tauri/** touché, cargo test non lancé (check-rust ne tournera pas sur cette PR).

Restes connus (hors portée)

  • Arborescence de CLAUDE.md : la ligne commands/ (« 3 modules, 17 commandes ») est périmée, comme pages/ (« 11 pages »), services/ (« 14 services métier », 27 fichiers aujourd'hui) et contexts/ (ProfileContext seul, trois contextes aujourd'hui) ; laissées, la consigne du maillon ne portant que sur les composants. docs/architecture.md a les comptes à jour des commandes et des hooks (maillon 7).
  • docs/architecture.md, ligne pages/ : « 14 pages (dont 4 sous-pages rapports) », alors que src/pages compte 25 fichiers .tsx hors tests, dont 5 sous-pages rapports et 5 fichiers sous settings/ ; non recompté ici (hors consigne), à reprendre dans un suivi.

Vérifications manuelles dues (prochaine release)

  1. Textes, l'application en français puis en anglais : Paramètres → Utilisateurs → guide d'utilisation, section Tableau de bord, dernière puce des fonctionnalités : « huit étapes, cochées selon vos données ou par « J'ai compris » pour les visites » / « eight steps, checked from your data or with "Got it" for the visit steps ». Page Rapports, bouton d'aide (?) à côté du titre : troisième puce « Tendances montre vos revenus et dépenses mois par mois sur 12 mois » / « Trends shows your income and expenses month by month over 12 months », quatrième « Analyse par catégorie suit l'évolution d'une catégorie dans le temps » / « Category Analysis tracks how a single category evolves over time ».
  2. Point du bandeau : sur un profil au parcours en cours, le bandeau de démarrage montre « Démarrage n/N », un petit point, puis « Étape suivante : … ». Le point n'apparaît jamais seul devant « Étape suivante » sans le compteur, y compris juste après l'ouverture ou la création d'un profil.
  3. Avertissement des fichiers à la racine après un changement de dossier : dossier A avec un CSV posé à sa racine (avertissement affiché), puis « Parcourir » vers un dossier B sans fichier à la racine : l'avertissement disparaît dès le choix et ne revient pas ; vers un dossier C avec ses propres fichiers à la racine : l'avertissement nomme ceux de C, jamais ceux de A ; si possible, un dossier B illisible : message d'erreur, aucun avertissement nommant les fichiers de A.
  4. Comportement antérieur de scannedSources pendant le nouveau scan : la liste des sources de A reste affichée jusqu'à la fin du scan de B (puis est remplacée par celle de B) ; noter si cela se voit (scan lent, dossier réseau) ou si l'état vide clignote. Si le scan de B échoue, la liste de A reste sous le nom de B : à juger, hors de cette PR.

À regarder

  • M3 (suite complète) : sans ces épingles, un refactor qui traite à part le bloc vide d'un sous-groupe replié passait les 2501 autres tests.
  • Le cas d'échec du point 4 ci-dessus (sources de l'ancien dossier sous le nom du nouveau après un scan raté) est antérieur et volontairement laissé : il dépend d'un choix d'affichage (vider la liste ferait apparaître l'état vide).

🤖 Generated with Claude Code

Resolves #446 Generated autonomously by /autopilot run of 2026-10-18 ## Résumé Maillon 8 sur 8 (dernier) de la pile `planned-2026-10-16-lot-v018`, basé sur `issue-384-onboarding-followups` (PR #474, tête `08c2f57`). Suivis non bloquants des revues de la pile #438 à #445, selon la section « Plan d'exécution » du corps, qui prime : 1. **Avertissement des fichiers à la racine** : `SET_IMPORT_FOLDER` vide `rootFiles`, et seulement lui. Entre le choix d'un autre dossier et la fin de son scan (ou pour de bon si ce scan échoue), l'avertissement nommait les fichiers de l'ancien dossier sous le nom du nouveau. `scannedSources` n'est pas touché : la liste des sources du dernier scan reste affichée jusqu'au scan suivant, **comportement antérieur**, épinglé par le test et ajouté aux vérifications manuelles. 2. **Épingles** : `reorderRows` (sous-groupe replié suivi d'une feuille sœur, puis d'une racine sœur) et le point du bandeau de démarrage (absent tant que le total n'est pas connu, présent entre le compteur et l'étape suivante ensuite). 3. **Textes validés par Max le 2026-10-16** : `docs.dashboard.features[6]`, `reports.help.tips[2]`, `reports.help.tips[3]`, FR mot pour mot, EN mot pour mot pour les deux puces de l'aide, EN aligné pour la carte d'accueil (le corps dit « EN aligné »). 4. **Documentation** : composants recomptés (138), 5 cartes de navigation du hub `/reports`, note sur le Ctrl+clic de la carte Tendances, ligne `useImportWizard` à jour ; CHANGELOG FR et EN. Hors portée : la garde des clés i18n FR/EN, faite par #453 (maillon 1, `src/i18n/locales.keys.test.ts` sur la base) ; aucune seconde garde. Aucune migration (v1→v17), aucun appel réseau, aucun fichier Rust. ## Fichiers - `src/hooks/useImportWizard.ts` : `SET_IMPORT_FOLDER` vide `rootFiles` ; commentaire du reducer et doc de `WizardState.rootFiles` à jour. - `src/hooks/useImportWizard.test.ts` : deux tests à côté de « a scan error leaves the root files of the last scan in place » : un changement de dossier vide `rootFiles` et garde `scannedSources` (même référence) jusqu'au scan suivant, qui pose les nouveaux fichiers ; une erreur de scan après un changement de dossier ne nomme aucun fichier de l'ancien. - `src/utils/reorderRows.test.ts` : deux tests (`[sub("A",0), sub("Vide",1), leaf("z",1)]` → `Vide, z, A` ; le même bloc suivi d'une racine groupe → `Vide, z, A, b, B`, ou d'une racine feuille → `Vide, z, A, R`). - `src/components/onboarding/OnboardingBanner.render.test.tsx` : helper `dots` (span dont les classes contiennent `h-1` et `w-1`) ; absence du point dans les cas `visitStepsInitialized: false` et `budgetReady: false` ; nouveau test de présence (un seul point, `aria-hidden="true"`, entre le compteur et « Étape suivante » dans le balisage). - `src/i18n/locales/fr.json`, `src/i18n/locales/en.json` : les trois textes. - `docs/guide-utilisateur.md` : la ligne des fonctionnalités du tableau de bord suit `docs.dashboard.features[6]` (même texte FR). - `docs/architecture.md`, `CLAUDE.md`, `CHANGELOG.md`, `CHANGELOG.fr.md`. ## Textes | Clé | FR | EN | |---|---|---| | `docs.dashboard.features[6]` | Carte d'accueil d'un profil sans transaction, avec la liste de démarrage : huit étapes, cochées selon vos données ou par « J'ai compris » pour les visites, et un bouton « Masquer » | Welcome card for a profile without transactions, with the getting-started checklist: eight steps, checked from your data or with "Got it" for the visit steps, and a "Hide" button | | `reports.help.tips[2]` | Tendances montre vos revenus et dépenses mois par mois sur 12 mois | Trends shows your income and expenses month by month over 12 months | | `reports.help.tips[3]` | Analyse par catégorie suit l'évolution d'une catégorie dans le temps | Category Analysis tracks how a single category evolves over time | Les cinq textes donnés par le corps ont été comparés par script au corps de l'issue (espaces simples, apostrophes droites) : identiques. `DocsContent.locales.test.ts`, `locales.keys.test.ts` et les tests de pages qui montent `PageHelp` restent verts (même nombre d'éléments par liste, mêmes clés). ## Décisions - **[HIGH] Ordre de `reorderRows` établi en exécutant le cas d'abord** (sonde jetable, supprimée) : `[sub("A",0), sub("Vide",1), leaf("z",1)]` avec `subtotalsOnTop=false` donne `Vide, z, A`, l'ordre présumé par le corps ; il est donc épinglé, avec la variante suivie d'une racine sœur, groupe et feuille. - **[MEDIUM] Mutation du point du bandeau** : la mutation nommée par le corps (`totalKnown = budgetReady`) rougit, mais d'abord sur l'assertion préexistante du compteur dans le même test. Pour prouver la nouvelle assertion seule, la mutation M6 la restreint au point (`budgetReady && nextStep`) : rouge avec les nouveaux tests, **verte avec le fichier de test de la base** (45/45, rc 0). Les deux sont dans le tableau. - **[HIGH] Point absent aussi quand `budgetReady` est faux** : l'autre moitié de `totalKnown`, une assertion d'une ligne (mutation M8). - **[HIGH] `scannedSources` inchangé** (décision de planification) et épinglé comme comportement antérieur (`toBe(before.scannedSources)`, mutation M2) : vider aussi les sources ferait clignoter l'état vide de la page Import pendant le scan, ce qu'aucun worker sans écran ne peut juger. - **[MEDIUM] CHANGELOG** : en plus de l'entrée Modifié/Changed des textes, une entrée Corrigé/Fixed pour l'avertissement, parce qu'il change ce que l'utilisateur voit après le choix d'un autre dossier (règle CHANGELOG de `CLAUDE.md`, règle de zone « Un changement visible ajoute une entrée » de `REVIEW.md`). Écarté : l'entrée Modifié seule, qui laisserait un correctif visible sans trace. - **[HIGH] Texte EN de `docs.dashboard.features[6]`** (« EN aligné ») : « Got it » est `onboarding.checklist.acknowledge` en anglais, « visit steps » le terme de la note anglaise `docs.gettingStarted` ; « tick themselves » remplacé comme en français. - **[HIGH] Guide** : `docs/guide-utilisateur.md` porte la même ligne que `docs.dashboard.features[6]` ; elle suit (règle de documentation de `CLAUDE.md`), bien qu'absente de la liste de fichiers du corps. - **[HIGH] Comptes des composants**, recalculés sur la tête de ce maillon (voir plus bas) ; la liste de noms de `balance/` corrigée avec le compte (elle nommait `BalanceOnboardingCard`, supprimé par `82550d6`), la ligne `categories-migration/`, absente, ajoutée. - **[HIGH] Note Ctrl+clic** : faits vérifiés dans `react-router` 7.18.4 (`Link` appelle `onClick` puis `shouldProcessLinkClick` ignore un clic modifié) ; le « sans effet visible » du corps n'est pas écrit comme un fait (ce que fait le webview d'un clic modifié n'est pas observable ici) mais comme « jugé théorique : documenté, pas corrigé ». ## Comptes des composants Commande, sur la tête `08e6f04` (fichiers `.tsx` hors tests, sous-dossiers compris) : ``` find src/components -name '*.tsx' ! -name '*.test.tsx' | wc -l # 138 find src/components -name '*.tsx' ! -name '*.test.tsx' | awk -F/ '{print $3}' | sort | uniq -c ``` adjustments 3, balance 12, budget 5, categories 8, categories-migration 5, dashboard 7, import 18, layout 2, onboarding 3, profile 3, reports 35 (dont 7 sous `cards/`), settings 17, shared 14, transactions 6. Le corps disait 135 au 2026-10-16 ; s'y ajoutent `SplitButton` et `UpsellDialog` (#369) et `HierarchyCheckModal` (#393). - `docs/architecture.md` : total 61 → 138 (avec la définition), balance 8 → 12, categories 5 → 8, reports ~25 → 35, ligne `categories-migration/` (5) ajoutée ; les autres lignes étaient justes. - `CLAUDE.md` : 53 → 138, import 14 → 18. La ligne des hooks est celle du maillon 7, non touchée. ## Preuves Implémentation commitée avant la première mutation ; une mutation à la fois, restaurée par `git checkout -- <fichier>`, `git status --short` vide après chacune. | # | Fichier | Mutation | Tests rouges | Code de sortie | |---|---|---|---|---| | M1 | `useImportWizard.ts` | `rootFiles: []` retiré de `SET_IMPORT_FOLDER` | 2 (les deux nouveaux tests) | 1 | | M2 | `useImportWizard.ts` | `scannedSources: []` ajouté à `SET_IMPORT_FOLDER` | 1 (comportement antérieur épinglé) | 1 | | M3 | `reorderRows.ts` | bloc vide traité à part : `currentParent && currentChildren.length > 0 && depth <= parentDepth` | 2 sur 2503, **suite complète** : seules les deux nouvelles épingles le voient | 1 | | M5 | `OnboardingBanner.tsx` | `totalKnown = budgetReady` (mutation du corps) | 1 (rouge d'abord sur le compteur) | 1 | | M6 | `OnboardingBanner.tsx` | point sur `budgetReady && nextStep` | 1 ; **0 avec le test de la base** (45/45) | 1 ; 0 avec la base | | M7 | `OnboardingBanner.tsx` | point jamais rendu (`false && …`) | 1 (test de présence) | 1 | | M8 | `OnboardingBanner.tsx` | point sur `visitStepsInitialized && nextStep` | 1 (cas `budgetReady: false`) | 1 | Les textes et la documentation n'ont pas de comportement à muter. M7 rejouée après le commit de relecture `08e6f04` (test de présence qui ne lit plus les points qu'une fois) : toujours rouge (1 test, rc 1). ## Tests - Sonde : `src/zz_tmp_probe.test.ts` (un `expect` faux), `npx vitest run` → **sonde rc=1**, puis supprimée. - `npm run build` : vert (tsc + vite). - `npm test` : **155 fichiers, 2503 tests**, verts (2498 sur la base, plus 5 nouveaux cas), rejoué sur la tête `08e6f04` avec `npm run build`. - Rust : aucun fichier `src-tauri/**` touché, `cargo test` non lancé (`check-rust` ne tournera pas sur cette PR). ## Restes connus (hors portée) - Arborescence de `CLAUDE.md` : la ligne `commands/` (« 3 modules, 17 commandes ») est périmée, comme `pages/` (« 11 pages »), `services/` (« 14 services métier », 27 fichiers aujourd'hui) et `contexts/` (ProfileContext seul, trois contextes aujourd'hui) ; laissées, la consigne du maillon ne portant que sur les composants. `docs/architecture.md` a les comptes à jour des commandes et des hooks (maillon 7). - `docs/architecture.md`, ligne `pages/` : « 14 pages (dont 4 sous-pages rapports) », alors que `src/pages` compte 25 fichiers `.tsx` hors tests, dont 5 sous-pages rapports et 5 fichiers sous `settings/` ; non recompté ici (hors consigne), à reprendre dans un suivi. ## Vérifications manuelles dues (prochaine release) 1. **Textes, l'application en français puis en anglais** : Paramètres → Utilisateurs → guide d'utilisation, section Tableau de bord, dernière puce des fonctionnalités : « huit étapes, cochées selon vos données ou par « J'ai compris » pour les visites » / « eight steps, checked from your data or with "Got it" for the visit steps ». Page Rapports, bouton d'aide (?) à côté du titre : troisième puce « Tendances montre vos revenus et dépenses mois par mois sur 12 mois » / « Trends shows your income and expenses month by month over 12 months », quatrième « Analyse par catégorie suit l'évolution d'une catégorie dans le temps » / « Category Analysis tracks how a single category evolves over time ». 2. **Point du bandeau** : sur un profil au parcours en cours, le bandeau de démarrage montre « Démarrage n/N », un petit point, puis « Étape suivante : … ». Le point n'apparaît jamais seul devant « Étape suivante » sans le compteur, y compris juste après l'ouverture ou la création d'un profil. 3. **Avertissement des fichiers à la racine après un changement de dossier** : dossier A avec un CSV posé à sa racine (avertissement affiché), puis « Parcourir » vers un dossier B sans fichier à la racine : l'avertissement disparaît dès le choix et ne revient pas ; vers un dossier C avec ses propres fichiers à la racine : l'avertissement nomme ceux de C, jamais ceux de A ; si possible, un dossier B illisible : message d'erreur, aucun avertissement nommant les fichiers de A. 4. **Comportement antérieur de `scannedSources`** pendant le nouveau scan : la liste des sources de A reste affichée jusqu'à la fin du scan de B (puis est remplacée par celle de B) ; noter si cela se voit (scan lent, dossier réseau) ou si l'état vide clignote. Si le scan de B échoue, la liste de A reste sous le nom de B : à juger, hors de cette PR. ## À regarder - M3 (suite complète) : sans ces épingles, un refactor qui traite à part le bloc vide d'un sous-groupe replié passait les 2501 autres tests. - Le cas d'échec du point 4 ci-dessus (sources de l'ancien dossier sous le nom du nouveau après un scan raté) est antérieur et volontairement laissé : il dépend d'un choix d'affichage (vider la liste ferait apparaître l'état vide). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
maximus added 4 commits 2026-10-19 01:06:32 +00:00
SET_IMPORT_FOLDER now empties rootFiles. Until the new folder's scan
landed, or for good when that scan failed, the warning about files
placed directly in the import folder named the previous folder's files
under the new folder's name. scannedSources is left as it was: the
source list of the last scan stays until the new one, as before.

Reducer tests next to "a scan error leaves the root files of the last
scan in place": a folder change empties the root files and keeps the
sources until the next scan, and a scan error after a folder change
names no root file of the previous folder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
reorderRows: a collapsed sub-group (a subtotal with no child row)
followed by a sibling leaf gives Vide, z, A, the order read by running
the case first; then the same block followed by a sibling root, a group
(Vide, z, A, b, B) or a leaf (Vide, z, A, R).

OnboardingBanner: the decorative h-1 w-1 dot is absent while the visit
steps are not initialized and while the Budget entitlement is unknown,
and present, between the counter and the next step, once the total is
known.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
reports.help.tips[2] and [3] named "Monthly Trends" and "Category Over
Time" ("Tendances mensuelles", "Catégories dans le temps"), tabs that
no longer exist: they now name the Trends and Category Analysis cards
of the hub. docs.dashboard.features[6] said the eight steps tick
themselves from the data; the two visit steps are checked with "Got it".
French texts as validated by Max on 2026-10-16, English aligned; the
guide's line of the dashboard features follows docs.dashboard.features.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: components recounted, five report cards, Ctrl+click on Trends (#446)
All checks were successful
PR Check — Frontend / frontend (pull_request) Successful in 2m2s
52e005ef92
architecture.md: 138 components, counted as the .tsx files of
src/components outside tests (find src/components -name '*.tsx'
! -name '*.test.tsx' | wc -l), was 61; per domain, balance 12 with its
actual names (BalanceOnboardingCard is gone), categories 8, reports 35,
and the missing categories-migration/ line (5). The /reports hub has 5
navigation cards, named. The useImportWizard row says SET_IMPORT_FOLDER
empties rootFiles and keeps the scanned sources until the next scan.
"La mise en évidence" notes that a Ctrl+click on the Trends card fires
onClick, so it checks the "Browse the reports" step while the router
does not navigate; judged theoretical without tabs in the webview.

CLAUDE.md: 138 components (was 53), import 18 (was 14).

CHANGELOG (EN, FR): Changed for the help texts, Fixed for the root
files warning after choosing another import folder.

Resolves #446

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
maximus added the
autopilot:pending-human
label 2026-10-19 01:06:49 +00:00
maximus added 1 commit 2026-10-19 01:10:08 +00:00
test: read the banner's dots once in the presence test (#446)
All checks were successful
PR Check — Frontend / frontend (pull_request) Successful in 2m2s
08e6f045ae
Self-review tidy-up: the presence test looked the dots up twice; it now
keeps the one list it asserts on. No assertion changed.

Resolves #446

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

Niveau : normal
Verdict : APPROVE

Auto-revue de l'auteur (worker /autopilot), pas une revue indépendante : checklist de /pr-review appliquée au diff complet de la PR contre sa base (issue-384-onboarding-followups), niveau calculé avec REVIEW.md de main.

Niveau, fichier par fichier

  • CHANGELOG.md, CHANGELOG.fr.md, docs/guide-utilisateur.md : bas (**/*.md, docs/**, hors exceptions).
  • CLAUDE.md, docs/architecture.md : normal (liste « Restent au moins normaux »).
  • src/hooks/useImportWizard.ts, les trois fichiers de test, src/i18n/locales/{fr,en}.json : normal. Ligne Haut « code livré » non remplie : aucun appel réseau ajouté ni modifié, aucune URL portant une donnée, aucun consentement touché.

La PR est de niveau normal.

Résumé

SET_IMPORT_FOLDER vide rootFiles (et seulement lui) ; épingles reorderRows (sous-groupe replié) et point du bandeau ; trois textes validés par Max, FR et EN ; composants recomptés (138), 5 cartes du hub, note Ctrl+clic, ligne useImportWizard ; CHANGELOG Modifié + Corrigé dans les deux fichiers.

Checklist

  • Sécurité : aucun secret, aucune entrée externe nouvelle, aucune ligne du Journal ajoutée ; rootFiles reste affiché seulement, jamais écrit au Journal.
  • Exactitude : SET_IMPORT_FOLDER n'est envoyé qu'au montage (rootFiles y est déjà vide) et par browseFolder, suivi du scan du nouveau dossier ; reprendre le même dossier vide puis repose les fichiers au scan ; RESET, « Actualiser » et le dossier d'exemple ne passent pas par cette action, donc inchangés. reorderRows reçoit bien les lignes visibles (groups.visible(...) dans BudgetTable, BudgetVsActualTable, ComparePeriodTable) : le cas « replié » épinglé est celui de l'application. Note Ctrl+clic vérifiée dans react-router 7.18.4 (Link appelle onClick avant shouldProcessLinkClick, qui ignore un clic modifié).
  • Tests : 5 cas nouveaux ; mutations M1 à M8 toutes rouges (tableau du corps), dont M3 sur la suite complète (seules les 2 nouvelles épingles la voient sur 2503) et M6 verte avec le fichier de test de la base (le trou existait) ; sonde rc=1 ; npm run build et npm test (155 fichiers, 2503 tests) verts sur 08e6f04 ; aucun only/skip.
  • Qualité / i18n : les trois clés changent en FR et en EN (mêmes indices, garde de #453 verte), textes comparés par script au corps de l'issue ; la ligne du guide suit docs.dashboard.features[6].
  • Données : aucune migration, aucun SQL.
  • Fermeture : timeline de #446, une seule entrée pull_ref en closes, venant de cette PR ; le mot-clé de fermeture est en première ligne du corps et dans le dernier commit, nulle part ailleurs.
  • Zones de REVIEW.md : i18n et documentation (FR et EN, CHANGELOG des deux côtés pour les deux changements visibles, guide et docs.* alignés, architecture.md à jour du comportement du hook) ; Vie privée (rien de nouveau ne part ni n'est journalisé) ; Règles de revue (aucun fait cité par REVIEW.md ne change).

Constats

  1. Corrigé (08e6f04) : src/components/onboarding/OnboardingBanner.render.test.tsx, test de présence du point, la liste des points était lue deux fois ; une seule lecture, aucune assertion changée, M7 rejouée rouge.

Aucun constat bloquant.

Suggestions (non bloquantes)

  1. Comptes restants : l'arborescence de CLAUDE.md garde des lignes périmées (commands/ « 3 modules, 17 commandes », pages/ « 11 pages », services/ « 14 services métier », contexts/), et docs/architecture.md dit « 14 pages (dont 4 sous-pages rapports) » pour 25 fichiers .tsx hors tests sous src/pages (5 sous-pages rapports, 5 fichiers sous settings/). Hors consigne de ce maillon : une issue de suivi.
  2. Sources après un scan raté : après le choix d'un dossier illisible, la liste des sources de l'ancien dossier reste affichée sous le nom du nouveau (comportement antérieur, gardé par décision de planification). Vérification manuelle 4 du corps ; à trancher par Max.
  3. Ctrl+clic : la note de architecture.md ne dit pas ce que fait le webview d'un clic modifié (non observable ici) ; un Ctrl+clic sous Windows (WebView2) dirait si une fenêtre s'ouvre, ce qui toucherait tous les liens de l'application, pas seulement cette carte.
Niveau : normal Verdict : APPROVE **Auto-revue de l'auteur (worker `/autopilot`), pas une revue indépendante** : checklist de `/pr-review` appliquée au diff complet de la PR contre sa base (`issue-384-onboarding-followups`), niveau calculé avec `REVIEW.md` de `main`. ### Niveau, fichier par fichier - `CHANGELOG.md`, `CHANGELOG.fr.md`, `docs/guide-utilisateur.md` : bas (`**/*.md`, `docs/**`, hors exceptions). - `CLAUDE.md`, `docs/architecture.md` : normal (liste « Restent au moins normaux »). - `src/hooks/useImportWizard.ts`, les trois fichiers de test, `src/i18n/locales/{fr,en}.json` : normal. Ligne Haut « code livré » non remplie : aucun appel réseau ajouté ni modifié, aucune URL portant une donnée, aucun consentement touché. La PR est de niveau normal. ### Résumé `SET_IMPORT_FOLDER` vide `rootFiles` (et seulement lui) ; épingles `reorderRows` (sous-groupe replié) et point du bandeau ; trois textes validés par Max, FR et EN ; composants recomptés (138), 5 cartes du hub, note Ctrl+clic, ligne `useImportWizard` ; CHANGELOG Modifié + Corrigé dans les deux fichiers. ### Checklist - **Sécurité** : aucun secret, aucune entrée externe nouvelle, aucune ligne du Journal ajoutée ; `rootFiles` reste affiché seulement, jamais écrit au Journal. - **Exactitude** : `SET_IMPORT_FOLDER` n'est envoyé qu'au montage (`rootFiles` y est déjà vide) et par `browseFolder`, suivi du scan du nouveau dossier ; reprendre le même dossier vide puis repose les fichiers au scan ; `RESET`, « Actualiser » et le dossier d'exemple ne passent pas par cette action, donc inchangés. `reorderRows` reçoit bien les lignes visibles (`groups.visible(...)` dans `BudgetTable`, `BudgetVsActualTable`, `ComparePeriodTable`) : le cas « replié » épinglé est celui de l'application. Note Ctrl+clic vérifiée dans `react-router` 7.18.4 (`Link` appelle `onClick` avant `shouldProcessLinkClick`, qui ignore un clic modifié). - **Tests** : 5 cas nouveaux ; mutations M1 à M8 toutes rouges (tableau du corps), dont M3 sur la suite complète (seules les 2 nouvelles épingles la voient sur 2503) et M6 verte avec le fichier de test de la base (le trou existait) ; sonde rc=1 ; `npm run build` et `npm test` (155 fichiers, 2503 tests) verts sur `08e6f04` ; aucun `only`/`skip`. - **Qualité / i18n** : les trois clés changent en FR et en EN (mêmes indices, garde de #453 verte), textes comparés par script au corps de l'issue ; la ligne du guide suit `docs.dashboard.features[6]`. - **Données** : aucune migration, aucun SQL. - **Fermeture** : timeline de #446, une seule entrée `pull_ref` en `closes`, venant de cette PR ; le mot-clé de fermeture est en première ligne du corps et dans le dernier commit, nulle part ailleurs. - **Zones de `REVIEW.md`** : i18n et documentation (FR et EN, CHANGELOG des deux côtés pour les deux changements visibles, guide et `docs.*` alignés, `architecture.md` à jour du comportement du hook) ; Vie privée (rien de nouveau ne part ni n'est journalisé) ; Règles de revue (aucun fait cité par `REVIEW.md` ne change). ### Constats 1. Corrigé (`08e6f04`) : `src/components/onboarding/OnboardingBanner.render.test.tsx`, test de présence du point, la liste des points était lue deux fois ; une seule lecture, aucune assertion changée, M7 rejouée rouge. Aucun constat bloquant. ### Suggestions (non bloquantes) 1. **Comptes restants** : l'arborescence de `CLAUDE.md` garde des lignes périmées (`commands/` « 3 modules, 17 commandes », `pages/` « 11 pages », `services/` « 14 services métier », `contexts/`), et `docs/architecture.md` dit « 14 pages (dont 4 sous-pages rapports) » pour 25 fichiers `.tsx` hors tests sous `src/pages` (5 sous-pages rapports, 5 fichiers sous `settings/`). Hors consigne de ce maillon : une issue de suivi. 2. **Sources après un scan raté** : après le choix d'un dossier illisible, la liste des sources de l'ancien dossier reste affichée sous le nom du nouveau (comportement antérieur, gardé par décision de planification). Vérification manuelle 4 du corps ; à trancher par Max. 3. **Ctrl+clic** : la note de `architecture.md` ne dit pas ce que fait le webview d'un clic modifié (non observable ici) ; un Ctrl+clic sous Windows (WebView2) dirait si une fenêtre s'ouvre, ce qui toucherait tous les liens de l'application, pas seulement cette carte.
Author
Owner

CI lue par l'orchestrateur du run /autopilot du 2026-10-18 : check-frontend vert sur la tête 08e6f04 (run 592).

  • vitest : 155 fichiers et 2503 tests, tous verts. Ont notamment tourné reorderRows.test.ts (7 tests), OnboardingBanner.render.test.tsx (15), useImportWizard.test.ts (26), DocsContent.locales.test.ts (6) et la garde locales.keys.test.ts (8).
  • Cette tête porte toute la pile (#468 → #475) : ce run valide donc la partie frontend de la pile cumulée. Pour Rust, c'est le dernier maillon qui touche à Rust qui fait foi, ici #474 (run 590 vert).
  • check-rust ne s'applique pas à ce maillon (aucun chemin Rust touché).
CI lue par l'orchestrateur du run `/autopilot` du 2026-10-18 : `check-frontend` **vert** sur la tête `08e6f04` (run 592). - vitest : 155 fichiers et 2503 tests, tous verts. Ont notamment tourné `reorderRows.test.ts` (7 tests), `OnboardingBanner.render.test.tsx` (15), `useImportWizard.test.ts` (26), `DocsContent.locales.test.ts` (6) et la garde `locales.keys.test.ts` (8). - Cette tête porte toute la pile (#468 → #475) : ce run valide donc la partie frontend de la pile cumulée. Pour Rust, c'est le dernier maillon qui touche à Rust qui fait foi, ici #474 (run 590 vert). - `check-rust` ne s'applique pas à ce maillon (aucun chemin Rust touché).
All checks were successful
PR Check — Frontend / frontend (pull_request) Successful in 2m2s
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-446-review-followups:issue-446-review-followups
git checkout issue-446-review-followups

Merge

Merge the changes and update on Forgejo.
git checkout issue-384-onboarding-followups
git merge --no-ff issue-446-review-followups
git checkout issue-384-onboarding-followups
git merge --ff-only issue-446-review-followups
git checkout issue-446-review-followups
git rebase issue-384-onboarding-followups
git checkout issue-384-onboarding-followups
git merge --no-ff issue-446-review-followups
git checkout issue-384-onboarding-followups
git merge --squash issue-446-review-followups
git checkout issue-384-onboarding-followups
git merge --ff-only issue-446-review-followups
git checkout issue-384-onboarding-followups
git merge issue-446-review-followups
git push origin issue-384-onboarding-followups
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#475
No description provided.