Journal : un nom de dossier contenant « ) » suivi d'un mot, un accent grave, « ; » ou « | » reste en partie dans les lignes du rattrapage des profils #478
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#478
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
Relevé par la revue indépendante de la PR #473 (#437, commentaire 25443), en relisant le commit
86eff9bde #395. Décision de Max (2026-10-19) : issue de suivi, priorité basse.Constat
withoutFolders(src/services/db.ts) retire les dossiers d'un chemin avant d'écrire une ligne au Journal. Un caractère d'arrêt à l'intérieur d'un nom de dossier (accent grave,;,|, ou)non suivi d'un séparateur) termine le chemin à cet endroit : le nom de ce dossier, ou son début, reste dans la ligne. Sondes de la revue sur la tête de #473 :C:\Users\Jean (Work) Smith\AppData\x.db→Jean (Work) x.dbC:\Users\jean\My;Docs\x.db→My;Docs-x.dbLe Journal part avec une rétroaction si l'utilisateur coche l'envoi des journaux. Le cas est documenté comme seconde limite dans l'ADR 0021 §7 par la PR #473, sans correction : #437 excluait tout changement de comportement.
Pourquoi priorité basse
withoutFoldersest la seconde barrière :scrub, côté Rust, remplace déjà le dossier des profils par<profile folder>. Un nom de compte local Windows ne peut contenir ni;, ni|, ni,, ni:. Le cas réaliste est un nom de compte avec des parenthèses suivies d'un autre mot, dans un chemin quescrubn'a pas remplacé.Piste, à trancher par
/analyzeDistinguer une parenthèse qui ferme une phrase (« (see /x/y.db) and ») d'une parenthèse dans un nom de dossier (
Jean (Work) Smith\) demande une autre heuristique. Autre voie : ne garder que le dernier segment quand un séparateur suit le caractère d'arrêt.Critères d'acceptation
db.test.tsrestent verts (arrêts de chemin, chemins avec espaces).Liens : #395, #437, PR #473 (commentaire 25443), ADR 0021 §7.
Analyse (
/analyze, 2026-10-20,main45d8493)Prémisse confirmée par une sonde sur le code de
main(helpers dewithoutFoldersrejoués tels quels) :C:\Users\Jean (Work) Smith\AppData\x.dbJean (Work) x.dbC:\Users\jean\My;Docs\x.dbMy;Docs-x.dbC:\Users\jean\My|Docs\x.dbMy|Docs-x.dbC:\Users\jean\My`Docs\x.dbMy`Docs-x.dbunable to open C:\Users\Jean (Work) Smith\AppData\x.db: disk I/O errorunable to open Jean (Work) x.db: disk I-O errorC:\Program Files (x86)\App\x.db,/home/jean (work)/x.dbx.db(déjà juste :)suivi d'un séparateur)Les arrêts de
lastSeparator(src/services/db.ts) sont de deux natures. Les arrêts durs ne peuvent pas être dans un nom de dossier Windows ou n'y sont jamais : saut de ligne,",,ou:suivis d'un blanc, blanc suivi d'un autre chemin. Les arrêts mous le peuvent :;,|, accent grave,)suivi d'autre chose qu'un séparateur. Quand rien n'arrête le chemin, la règle actuelle est déjà prudente : la coupe va au dernier séparateur de la ligne.Options examinées
db.test.ts:(see /x/y.db) and I/Oporte un séparateur après), dansI/O; distinguerI/OdeSmith\AppData\x.dbdemande une heuristique qu'aucune règle propre ne fournit.x.db;path=/a/x.db;nextrestepath=x.db;next(aucun séparateur après) ;(see /x/y.db) and C:\Users\Bob\z.dbreste(see y.db) and z.db(le blanc suivi d'un chemin arrête toujours). Coût :/a/x.db; I/OdevientOet(see /a/x.db) and I/Odevient(see O; ce motif n'est pas un message SQLite réel (: disk I/O errorpasse par l'arrêt dur:+ blanc).scrubcôté Rust remplace déjà le dossier des profils, seul chemin qui atteint le Journal aujourd'hui.Décision de Max (2026-10-20, réponse à
/analyze) : option B. Une ligne d'erreur moins lisible dans un cas théorique vaut mieux qu'un nom d'utilisateur dans une rétroaction (Loi 25).Travail à faire
src/services/db.ts:PATH_STOPréduit à/[\n\r"]/et la branche)delastSeparatorretirée ;BEFORE_START,LAST_SEGMENT,PATH_RUNetnewPathAfterinchangés. Docblock dewithoutFoldersmis à jour (liste des arrêts, coût de la règle prudente).src/services/db.test.ts: les deux exemples du corps, plus|et l'accent grave, attendus àx.dbsans aucun mot du dossier (mêmenot.toMatchque la table existante) ;path=/home/marie claire/x.db;nexttoujourspath=x.db;next; leit.each« ends the folders at %j » perd;,|et l'accent grave (ils donnent désormaisO, à épingler dans un test nommé « drops more text rather than a folder ») ; la ligne(see /home/marie claire/x.db) and I/Ode la table passe à(see O.;dansPATH_STOPfait rougir le casMy;Docs; remettre la branche)fait rougir le casJean (Work) Smith.; I/Oaprès un chemin perd son suffixe).;,|, un accent grave ou une parenthèse fermante.Fichiers concernés
src/services/db.ts—PATH_STOP,lastSeparator, docblock.src/services/db.test.ts— cas de régression et deux attentes réécrites.docs/adr/0021-migrations-profils-secondaires.md§7.CHANGELOG.md,CHANGELOG.fr.md.Surface de test
src/services/db.test.ts(lignes ~700-760,withoutFolders),describePreparationdans le même fichier.type:bug), les quatre entrées du tableau ci-dessus.db.tsreste normal même sur le verrou, décision de Max du 2026-10-18).Complexité
Simple. Prochaine étape :
/fix-issue 478.