Onglet Corpus
- Organisation par classes (créer, supprimer, déplacer fichiers)
- Détection statut par fichier : règles, version pseudo, export final
- Destination des exports finaux configurable : vault / à côté / dossier externe
- Option miroir de la structure de classes dans les exports
- FolderSuggest : autocomplete dossiers vault dans settings, onboarding et corpus
Exceptions dans la modale de scan
- MappingScanReviewModal : modale de contexte par occurrence (✓/✗/⚠)
- Initialisation des décisions depuis ignoredOccurrences persistées
- Bouton 'Enregistrer les exceptions' séparé d'Appliquer
- IgnoredOccurrence persistée dans mapping.json
- Surlignage rouge positionnel (context-aware, par occurrence précise)
- Exceptions exclues du moteur de remplacement (findSpansForRule)
- Section Exceptions dans l'onglet Mappings
- Clic droit 'Déclarer une exception' sur terme orange
Exports
- Re-export SRT/CHA depuis Markdown pseudonymisé (markdownToSrt, markdownToCha)
- resolveExportPath : mirroring de classes depuis le mapping pour les fichiers pseudonymisés
- writeExport : vault / next-to-source / external
- Onglet Exports : bouton adapté selon dossier exports vs source
Renommage en cascade
- vault.on('rename') : cascade automatique vers mapping, words, exports, audio, source
- renameFileAndRelated : bannière de warning dans le panneau
- Mise à jour pseudobs-source et pseudobs-audio dans le frontmatter
- moveFileToClass : déplacement audio (basename + pseudobs-audio)
Warnings
- Bannière au-dessus des onglets si le nom contient un terme pseudonymisable
- Bouton ✏ (saisie libre) + ✨ (suggestion transcript_N)
- Statuts clarifiés : Actif/Ignoré/Partiel/Suggéré
- getValidatedFor inclut 'partial'
CSS : esbuild copie styles.css en mode dev via plugin onEnd
- i18n: all UI strings externalized in locales/en.json + fr.json;
language selectable in wizard (new Language step) and settings
- Wizard: new Storage step with 1-vault-per-corpus recommendation
- Settings: reorganized in 6 sections ordered by frequency of use;
language dropdown at the top
- Corpus organization: CorpusModal + ClassSelectModal;
named classes with mirrored transcriptions/mappings/exports folders;
class selection prompt on import
- Broad-scope warning for name rules (RuleModal + EditRuleModal):
warning callout for folder/vault scope; success callout for file scope
- Mappings tab: grouped by scope (File/Folder/Vault);
active-file-only filter checkbox (checked by default);
getAllRulesWithLocation() added to ScopeResolver
- EditRuleModal, QuickPseudonymizeModal fully migrated to t()
- README, CHANGELOG, ROADMAP translated to English;
French versions archived as *.fr.md
- esbuild: dev mode outputs directly to test_vault for hot reload
- Format DictionaryFile v1.1 : roles, configSchema, config, author, doi
- DictionaryLoader : index de détection, résolution de classes, scanText (n-grammes), nextReplacement
- Repo dédié pseudobsidian-dictionaries + fr-communes.dict.json (34 957 communes GeoAPI INSEE)
- Wizard : catalogue de dictionnaires téléchargeables depuis le repo dédié (icônes cloud-download/check)
- scripts/build-cities.mjs : génération du dictionnaire communes
- DictScanReviewModal : modale de révision en cards (contexte, préfixe éditable, index calculé)
- MappingScanReviewModal : modale de révision pour le scan par règles existantes
- Onglet Dictionnaires : mini cards avec checkbox, scan individuel, scan groupé
- Suppression onglet Candidats : scan règles → Mappings, scan NER → NER
- RuleModal : suggestions dictionnaire séparées de Coulmont
- docs : README, CHANGELOG, ROADMAP, SPECS §6 mis à jour
Floating promises: add `void` to all unhandled refreshHighlightData() calls
in callbacks and event listeners; extract processFilePicker() to fix the async
event listener returning a Promise where void was expected.
Inline styles: replace all style.cssText and setAttribute('style') with CSS
classes (pseudobs-hidden-input, pseudobs-legend-*, pseudobs-suggestions-*,
pseudobs-occ-*, pseudobs-disabled-input) across OccurrencesModal, RuleModal,
QuickPseudonymizeModal, EditRuleModal, and main.ts.
Settings headings: replace all createEl('h2'/'h3') with new Setting().setHeading()
in PseudObsSettingTab (5 headings).
Sentence case: fix linter-flagged occurrences (placeholder text, legend labels,
button text); 4 residual occurrences on legitimate proper nouns (Baptiste Coulmont,
Jefferson, ICOR, Synology Drive) left for human reviewer.