docs: wording of the read paragraph and of the write errors (#384)
All checks were successful
PR Check — Frontend / frontend (pull_request) Successful in 2m4s
PR Check — Rust / rust (pull_request) Successful in 3m41s

Self-review findings, no behaviour change. architecture.md: the mount reads
paragraph no longer plays on "compte" (count and account). fs_commands.rs:
the doc comment of create_sample_import_folders said a write error carries
"never a path", while it names the sample folder and its file; it now says
it never carries the import folder's path.

Resolves #384

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
le king fu 2026-10-18 20:47:57 -04:00
parent 1ed6a67af0
commit 08c2f57559
2 changed files with 6 additions and 5 deletions

View file

@ -352,7 +352,7 @@ Phase 1 de l'accueil des nouveaux profils (#351-#357 ; analyse d'origine dans `d
| Transactions `/transactions` | `showsEmptyState(state)` = `totalInDb === 0`, `totalInDb` via `getTransactionCount`, lu au montage : la carte vient dès que le compte est lu, sans attendre la première page (#384, D1) | `EmptyState` dans la page | « Importer des transactions » → `/import` |
| Budget `/budget` | `showsEmptyState(state)` = `totalInDb === 0`, même compteur | `EmptyState` dans la page | « Importer des transactions » → `/import` |
Sur ces deux pages, le compte se lit au montage à côté des autres lectures de la page (catégories et sources de Transactions, comptes du filtre de Budget), chacune pour son compte (`Promise.allSettled`, #384) : un compte en échec laisse `totalInDb` à `null`, donc la mise en page normale, jamais l'état vide, sans priver la page de ses filtres ; le premier échec devient l'erreur de la page. Le compte n'est relu qu'au montage, aucun abonnement au canal d'événements de données : un import se fait sur `/import`, et revenir sur la page la remonte (un changement de profil remonte toutes les routes, `BrowserRouter key={refreshKey}`).
Sur ces deux pages, le compte se lit au montage à côté des autres lectures de la page (catégories et sources de Transactions, comptes du filtre de Budget), chaque lecture indépendante des autres (`Promise.allSettled`, #384) : un compte en échec laisse `totalInDb` à `null`, donc la mise en page normale, jamais l'état vide, sans priver la page de ses filtres ; le premier échec devient l'erreur de la page. Le compte n'est relu qu'au montage, aucun abonnement au canal d'événements de données : un import se fait sur `/import`, et revenir sur la page la remonte (un changement de profil remonte toutes les routes, `BrowserRouter key={refreshKey}`).
**La liste de démarrage** (`OnboardingChecklist`, dans la carte d'accueil du tableau de bord vide, et dépliée en place par « Voir la liste » du bandeau de démarrage `OnboardingBanner`, que `AppShell` pose en haut de chaque page, #397) a huit lignes dans un ordre fixe (#425). Les six étapes de données se cochent par une **donnée**, jamais par un clic ; les deux étapes de visite par « J'ai compris » (et, pour Rapports, l'ouverture de la carte Tendances mise en évidence). La source de vérité est `computeChecklist(counters, { importFolderSet, budgetAllowed, skipped, acknowledged, visitStepsInitialized })` (`utils/onboardingChecklist.ts`, pur) :

View file

@ -244,10 +244,11 @@ const SAMPLE_ERROR_INVALID_DATE: &str = "invalid_date";
/// `import_folder` is not a directory (`import_folder_missing`, without the
/// path), and when either sample folder already exists
/// (`sample_folder_exists:<name>`) — checked BEFORE anything is written, so an
/// existing folder is never touched. A write error keeps its text: the sample
/// folder's name, the file name and the OS error, never a path. The command
/// only ever receives the import folder and a date: the names of what it
/// writes are fixed here. Returns the two folder NAMES (not paths).
/// existing folder is never touched. A write error keeps its English text: the
/// sample folder's name (with the file's for a write) and the OS error, never
/// the import folder's path. The command only ever receives the import folder
/// and a date: the names of what it writes are fixed here. Returns the two
/// folder NAMES (not paths).
#[tauri::command]
pub fn create_sample_import_folders(
import_folder: String,