Labels
No labels
autopilot:pending-human
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-clarification
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#437
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Contexte
Restes non bloquants des quatre revues de la milestone
planned-2026-10-10-fiabilite-tests(PRs #433 à #436, mergées le 2026-10-13,mainc17bf5d). Les suivis applicables ont été appliqués en tête de pile (commits74fae14,a1c31a1,ac3a981,86eff9b,c17bf5d), sans nouvelle relecture (commentaires 23535 et 23550).Analyse (2026-10-16,
maind8037be)src/services/db.tsnisrc-tauri/src/database/profile_db.rsdepuis les cinq commits.\r: présent dansPATH_STOP(db.ts~l. 332,/[\n\r";|]/) mais absent de l'it.each« ends the folders at %j » (db.test.ts~l. 742, qui liste",;,|, l'accent grave et\n`). Trou confirmé, déjà admis par 23535.backup_to(profile_db.rs:474-504) écrit.tmp,sync_all, puisrenamesur la copie finale (« never deleted first », l. 470) ;remove_backupsn'est appelé qu'après uncatch_up_intoréussi (l. 598-610). La mutation R2 du relecteur (élagage avant le renommage) a rougi 3 tests. Décision de Max (2026-10-16) : pas de test nommé en plus, limite documentée.db.ts:187-191) ; aucune mutation ne la vise (23535). Reste non couverte, par choix.common.nextdansWizardNavigation) n'existe pas. Aucune des six n'est assertée :TransactionTable.render.test.tsxasserte 2 clés,LicenseKeyForm.render.test.tsx2,PriceFetchControl.test.tsx5,DashboardPage.render.test.tsx1. Le fauxtmarqué (src/test/i18nMock.ts) rendt(key), doncexpect(html).toContain(">t(dashboard.kpiSectionTitle)<")ouplaceholder="t(license.keyPlaceholder)"suffit.useState».hookHarness.ts:192-205attribue un slot par appel de hook, tous types confondus ;PriceFetchConsentToggle.test.tsx:230-236prérègleslots[0..2](hasConsent,showConfirm,loading, déclarésPriceFetchConsentToggle.tsx:59-61) etuseOnboardingChecklist.wiring.test.ts:74-76prérègleslots[0](le reducer). Tout hook ajouté avant décale les slots en silence.best-effort: décision de Max (2026-10-16) : garder « non garanti » (cohérent avec « Source non garantie » de la notice voisine).Travail à faire
1. Relecture des cinq commits de suivi (intégrée au fix)
Lire les diffs de
74fae14(closeUnlocked: état vidé et génération incrémentée avantclose(), échec enlogWarn,closeDb()résolu quand même),a1c31a1(harnais :useReducergarde le réducteur du premier rendu, cas M1 et M8),ac3a981(gardei18n-mock-guard:t = (,t = vi.fn(,t: vi.fn(),86eff9b(withoutFoldersréécrit pour les chemins avec espaces) etc17bf5d(badge). Tout défaut trouvé devient une sous-tâche de cette issue ; sinon le noter « relu, rien à signaler » dans la PR, commit par commit.2. Épingles
db.test.ts: ajouter\rà l'it.eachdes arrêts de chemin (~l. 742). Mutation : retirer\rdePATH_STOPdoit rougir.tmarqué, une par clé survivante :TransactionTable.render.test.tsx:transactions.table.transferIcon.ariaLabel(ou le chemin exact de la clé) ettransactions.table.notes.placeholderLicenseKeyForm.render.test.tsx:license.activateetlicense.keyPlaceholder(chemins exacts à lire dans le composant)PriceFetchControl.test.tsx:balance.priceFetching.consent.accept, le dialogue de consentement rendu ouvertDashboardPage.render.test.tsx:dashboard.kpiSectionTitleMutation : retirer le
t(...)de chaque appel (valeur brute à la place) doit rougir le test du composant.3. Limites documentées (commentaires, pas de code)
PriceFetchConsentToggle.test.tsx(près de l. 230) et demountWith(useOnboardingChecklist.wiring.test.ts:74) : un commentaire qui nomme la dépendance à l'ordre des hooks du composant (tout hook ajouté avant décale les slots), avec le renvoi àhookHarness.ts:192-205.docs/architecture.md, section tests : trois limites connues : ordre des hooks pour les slots préréglés ;withoutFoldersgarde l'ancien repli (séparateurs en-) pour un chemin relatif sans début reconnu (dir/sub dir/x.db) ; la mesure du rattrapage (306 ms, 100 001 transactions) vient d'un NVMe, disque lent ou antivirus restent le risque écrit dans l'ADR 0021. Vérifier d'abord si l'ADR 0021 §7 ouarchitecture.mdles portent déjà, ne pas dupliquer.Fichiers concernés
src/services/db.test.ts(arrêt\r)src/components/transactions/TransactionTable.render.test.tsx,src/components/settings/LicenseKeyForm.render.test.tsx,src/components/balance/PriceFetchControl.test.tsx,src/pages/DashboardPage.render.test.tsxsrc/components/settings/PriceFetchConsentToggle.test.tsx,src/hooks/useOnboardingChecklist.wiring.test.ts(commentaires)docs/architecture.mdSurface de test
db.test.tsl. 315-372 (fermetures, génération des handles sérialisés) et les 12 tests de rétention deprofile_db.rs(l. 1356-1618).Critères d'acceptation
\rtesté comme arrêt de chemin ; mutation citée.tretiré » citées rouges.Complexité
Simple.
Revues sources : commentaires 23505 (#433), 23495 (#434), 23499 (#435), 23511 (#436) ; suivis : 23535, 23550.
Plan d'exécution — milestone lot-v018 (planifié le 2026-10-16)
Les sections ci-dessous viennent de la séance
/plan-rundu 2026-10-16 (revue/review-specSécurité, Architecture, Technique comprise). En cas de conflit avec le corps au-dessus, elles priment.Consignes communes
v0.17.2existe (git ls-remote --tags origin v0.17.2). Sinon, arrêt sans rien écrire.main065f580; #369, #419 et #421 les ont déplacés depuis. Repérer chaque site par son contenu (symbole, chaîne), jamais par son numéro.STATE.md: le report dansSTATE.mdse fait au/merge-stack.Depends on
Note : dépendance d'ordre de la pile, pas de dépendance de code.
Décisions prises en planification
065f580) :transactions.transferIcon.ariaLabelettransactions.notes.placeholder, pastransactions.table.*. Le placeholder de la zone de notes n'est rendu qu'avec une ligne dépliée (état interne). Épingler la même clé sur letitledu bouton des notes, toujours rendu.PriceFetchControl: le dialogue de consentement dépend d'un état interne. Épinglerbalance.priceFetching.consent.accepten préréglant les slots du harnais (src/test/hookHarness.ts). Si le composant ne s'y prête pas, déclarer la clé non épinglable dans la PR, avec la raison, et passer aux cinq autres.TransactionTable.tsx: lire les clés sur la base du maillon.Spec source
spec-plan-lot-v018.md