mirror of
https://github.com/core-hn/pseudobsidian-ization.git
synced 2026-07-22 06:57:06 +00:00
16 KiB
16 KiB
Changelog
Previous entries in French: CHANGELOG.fr.md
[prod] v0.1.7 — 10 June 2026
New features
i18n
- Russian (ru) and Spanish (es) locales added (~240 keys each), alongside French and English
Exports
markdownToNoScribeHtml()— reconstruct pseudonymized noScribe HTML with word-levelts_timestamp anchors, via proportional index mapping onwords.json; new export-as-HTML command and panel buttonmarkdownToEaf()— export to ELAN.eaf(FORMAT 3.0): per-speaker tiers, deduplicated/sortedTIME_SLOTs, optionalMEDIA_DESCRIPTOR, XML escaping; new export-as-EAF command and panel button (shown for VTT/HTML-sourced files)
Settings
- Settings tab rewritten using the Obsidian 1.13.0 declarative
getSettingDefinitions()API minAppVersionraised to1.13.0
Fixes
autoConvertnow skips files created inside the exports/mappings folders, preventing re-import of freshly written exportspseudonymizeActiveFilerespectsexportMirrorClasses— the intermediate.pseudonymized.mdis written into the correct class subfolder (new shared helpergetClassSub())- "New class" button in the Corpus tab now opens
CorpusModalinstead ofwindow.prompt(blocked in Electron);window.confirm/window.promptreplaced throughout byConfirmModal/TextInputModal - Removed the "next to source" export destination option
- Various fixes from the Obsidian community plugin review (no
require(), no unnecessary type assertions, no floating promises,setDestructive()instead of deprecatedsetWarning())
[prod] v0.1.6 — 17 May 2026
New features
Corpus tab
- New Corpus tab (last in the panel) — transcription files organized by class with status badges: rule count, pseudonymized version, final export format
- Class management: create, rename (coming), delete classes (moves files to root)
- Move files between classes: dropdown per file — moves
.md+.mapping.json+.words.json+ audio + source files in sync - Export destination settings (inline in the tab): vault folder (with optional class-structure mirroring), next to source, or external folder;
FolderSuggestautocomplete on all folder fields FolderSuggestcomponent — folder autocomplete in Settings and Onboarding wizard
Scan modal — per-occurrence candidates
MappingScanReviewModal: occurrence count column is now a clickable button showingN / totalwhen some are ignoredOccurrencesContextModal: per-occurrence cards (✓ / ✗ / ⚠) with context, "Confirm selection" callback, no immediate application- "Save exceptions" button: persists ignored decisions in
mapping.jsonwithout pseudonymizing - Pre-fills decisions from existing
ignoredOccurrenceson re-open MappingRuleResultnow carriesoccurrences: Occurrence[]
Exceptions
IgnoredOccurrence {text, contextBefore, contextAfter}onMappingRule.ignoredOccurrences- Persisted in
mapping.json, loaded at startup — red highlighting without re-scanning - Red highlighting: context-aware, position-based via
findByContext()— only the specific ignored occurrence is red, not all occurrences of the word findSpansForRule()skips ignored occurrences — they are not pseudonymized on export- Right-click "Declare as exception here" on orange terms (captures 30-char context)
- Exceptions section in Mappings tab with context cards and delete button
Exports
markdownToSrt()andmarkdownToCha()— re-export pseudonymized Markdown back to SRT/CHATresolveExportPath()— mirroring class structure from mapping folder when file is in exportswriteExport()— vault, next-to-source, or external (Node.js fs); ensures parent folder- Exports tab: button adapts based on whether active file is source or pseudonymized export; hides pseudonymize button for files already in exports folder
Filename warning
- Banner above the tab bar when active file's name contains a pseudonymizable term
- Two buttons: ✏ manual rename prompt · ✨ apply neutral suggestion (
transcript_N) suggestCorrectedFilename()— neutral naming, auto-incremented, no replacement leak- Status labels clarified: "Active / Partial / Ignored / Suggested"
getValidatedFor()includespartialas active
Rename cascade
vault.on('rename')listener — automatic cascade when user renames via Obsidian explorercascadeRelatedRename()— updates: frontmatter (app.fileManager.processFrontMatter),.mapping.json(store scope + rule scopes),.words.json, pseudonymized exports, audio (same basename +pseudobs-audioreference), source files (.srt/.vtt/.cha/.html/.yml)- Audio strategy: renames audio with same basename AND audio referenced by
pseudobs-audio(noScribe, different basename) - Guard flag
_renamingRelatedprevents cascade loops moveFileToClass()also moves audio and updates both store-level and rule-level scope paths
Fixes
renameFileAndRelated: captureoldFilePathbeforevault.rename()(TFile mutated in-place)- Audio rename: capture
oldAudioNamebefore rename (same mutation issue) processFrontMatterfor all frontmatter updates (regex was unreliable)- Both store-level
scope.pathand individual rulescope.pathupdated on move/rename esbuild:copyStylesPlugincopiesstyles.cssto test vault on each dev rebuild
[prod] v0.1.5 — 17 May 2026
New features
noScribe integration
VttParser— standard WebVTT with Whisper word-level timestamps (<00:00:01.240><c>word</c>), speaker tags<v Name>, round-trip guaranteeNoScribeHtmlParser— Qt Rich Text HTML produced by noScribe:ts_START_END_SXXanchors (ms), speaker labels (S00:,S01:), display timestamps filtered, HTML entities decoded;extractAudioSource()reads<meta name="audio_source">NoScribeVttParser— noScribe VTT v0.7: split cues (label / display timestamp / text), speaker detection fromSXX:prefix, HTML entity decoding, audio source fromNOTE media:- noScribe Markdown format —
**S00** [HH:MM:SS] : textper turn;pseudobs-format: html|vttand optionalpseudobs-audioin frontmatter; word timestamps in<basename>.words.json - Audio import — automatic on HTML import (via
audio_sourcemeta) and on VTT import via file picker (single audio file in source folder) Redaction.ts— syllable-count redaction with🀫;generateRedaction()andisRedaction()- VTT re-export (
Export as VTTcommand) — clean WebVTT from pseudonymized.md+.words.json
Scan modal — per-occurrence candidates
MappingScanReviewModal— occurrences column is a clickable button (count updated live toN / totalwhen some are ignored)OccurrencesContextModal— per-occurrence cards (✓ / ✗ / ⚠) with context, "Confirm selection" callback, no immediate application- "Save exceptions" button — saves ignored decisions to
mapping.jsonwithout pseudonymizing MappingRuleResultnow carriesoccurrences: Occurrence[]
Exceptions
IgnoredOccurrencetype ({text, contextBefore, contextAfter}) onMappingRule.ignoredOccurrences- Persisted in
mapping.json, loaded at startup — red highlighting without re-scanning - Red highlighting (
pseudobs-exception, case-sensitive, priority 0) - Exceptions section in Mappings tab — context cards with delete button
Changes
- Status labels:
validated→ "Active",ignored→ "Ignored",partial→ "Partial",suggested→ "Suggested"; column renamed "State" getValidatedFor()now includespartialas active (alongsidevalidated)PseudonymizationViewscan button fixed (missingoccurrencesinMappingRuleResult)
Tests
149 tests · 10 suites · VttParser, NoScribeHtmlParser, NoScribeVttParser, markdownToVtt, extractWordData covered; fixtures: fight_club.vtt, juste-leblanc.html
[prod] v0.1.4 — 16 May 2026
Branch: main | Tag: upcoming
New features
- Internationalization (i18n) — all UI strings externalized into
src/i18n/locales/en.jsonandfr.json; language switchable from wizard and settings without restart - Language step in wizard — first step after welcome; bilingual display before a language is chosen
- Storage step in wizard — folder configuration + "one vault per corpus" recommendation
- Settings reorganization — 6 sections in order of usage frequency: General · Text detection · Pseudonymization · NER · Storage · Security; language dropdown at the top
- Corpus organization (
Organize corpuscommand) — named classes (sub-folders) mirrored across transcriptions/, mappings/ and exports/; class selection on import - Broad-scope warning for name rules — dynamic callout in
RuleModalandEditRuleModalwhen a first name/surname rule is set to folder or vault scope; green success callout for file scope - Mappings tab — grouped by scope — three sections (File / Folder / Vault) with "Active file only" checkbox (checked by default)
Changes
- README, CHANGELOG, ROADMAP now in English; French versions archived as
*.fr.md EditRuleModal,QuickPseudonymizeModalfully migrated tot()
[prod] v0.1.3 — 14 mai 2026
Branche : main | Tag : 0.1.3
Nouvelles fonctionnalités
- Système de dictionnaires structurés — format
DictionaryFilev1.1 : champsroles(détection / remplacement / classes),configSchema(variables configurables avec valeurs possibles),config(valeurs actives),author,doi DictionaryLoader— service de chargement, index de détection normalisé, résolution de classes par conditions/regex/word-to-word, calcul d'index incrémental par portée- Repo dédié
pseudobsidian-dictionaries— catalogue de dictionnaires téléchargeables, premier dictionnaire : communes françaises GeoAPI INSEE (34 957 entrées, classes Village → Métropole) - Wizard — catalogue de dictionnaires : tableau scrollable avec bouton icône
cloud-download→refresh-cw(spin) →cloud-check; installation depuis le repo dédié sans quitter Obsidian scripts/build-cities.mjs— script one-shot de génération du dictionnaire communes depuis GeoAPI INSEE- Scan par dictionnaire (
Onglet Dictionnaires → Scanner) : fenêtre glissante de n-grammes, filtre par dictionnaires cochés, commande Ctrl+P disponible DictScanReviewModal— modale de révision en cards : terme source, catégorie (tiny), extrait de contexte avec terme surligné, préfixe éditable + index calculé en lecture seule (recalcul dynamique si décoché), checkbox par cardMappingScanReviewModal— modale de révision pour le scan par règles : tableau source → remplacement · occurrences, application directe dans le fichier source- Onglet Mappings — bouton "Scanner le fichier" ouvre
MappingScanReviewModal - Onglet NER — bouton "Identifier des candidats" en haut de l'onglet
RuleModal— suggestions de remplacement par classe (dictionnaire) séparées des suggestions Coulmont ; modal Coulmont n'affiche plus les suggestions dictionnaire (prénoms ≠ lieux)
Suppressions
- Onglet "Candidats" supprimé — le scan par règles est maintenant dans Mappings, le scan NER dans NER
Corrections
DictScanReviewModal: l'index n'est plus modifiable manuellement — seul le préfixe l'est, l'index se recalcule quand on coche/décoche des items- CSS : animation spin sur l'icône de téléchargement en cours, mini cards dictionnaires dans le panneau
[prod] v0.1.2 — 13 mai 2026
Branche : main | Tag : 0.1.2
Corrections
setInterval/clearIntervalremplacés par partage de Promise dansOnnxNerScanner— plus de polling, appels concurrents correctement gérés
[prod] v0.1.1 — 13 mai 2026
Branche : main | Tag : 0.1.1
Nouvelles fonctionnalités
- Onglet Dictionnaires — liste les
.dict.jsondu vault avec nombre d'entrées, import et suppression
Corrections portail communautaire Obsidian
onunload: suppression dedetachLeavesOfTypeeslint-disableetany: typeTransformersModuleexplicite dansOnnxNerScannerwindow.setInterval/clearInterval,window.setTimeout,activeDocumentFileManager.trashFile()à la place deVault.delete()activeLeafdéprécié →getActiveViewOfType(ItemView)- Imports inutilisés supprimés (
Setting,RuleLocation,fs) - Promises dans les event listeners wrappées avec
void (async () => {})() - CSS
text-decoration-color→border-bottom(support partiel) - Workflow
.github/workflows/release.yml— attestations GitHub Actions - Régénération
package-lock.json(erreur CIconcat-map404)
[prod] v0.1.0 — 13 mai 2026
Branche : main | Tag : 0.1.0
[dev] v0.1.0 — en cours
Branche : dev | Publié : non
Nouvelles fonctionnalités
- Panneau latéral (
PseudonymizationView) — 5 onglets : Candidats, Mappings, Dictionnaires, Exports, NER - Détection NER (
OnnxNerScanner) — modèle BERT-NER multilingue viatransformers.js(WASM, 100 % local)- Surlignage bleu des candidats dans l'éditeur
- Filtrage des sous-termes de règles composées (Saint-Jean-de-Luz filtre Jean/Luz)
- Paramètres ajustables : seuil de confiance, mots fonctionnels exclus (onglet NER)
- Wizard onboarding — 3 étapes : bienvenue, setup NER (téléchargement WASM ~19 Mo), import dictionnaires
- Marqueurs
{{...}}activés par défaut dans les remplacements en direct et les exports - Clic droit → Annuler la pseudonymisation — restaure le terme original (sur termes verts)
- Surlignage : vert + souligné pour les remplacements en direct ; fichiers
*.pseudonymized.*surlignés avec les règles du fichier source - Import de dictionnaires
.dict.jsondepuis le wizard - Paramètres NER :
nerBackend,nerMinScore,nerFunctionWordsdans les settings - eslint_violations.md — référence du lint Obsidian et commande de test local
Corrections
style.marginLeft→ classe CSS (no-static-styles-assignment)- Icônes UI (✓ ✗ ← → +) déplacées en CSS
::before/::after getActiveFile()polyfill pour le panneau latéral (garde le dernier fichier connu)import.meta.urlpolyfill dans esbuild pour@xenova/transformers/src/env.js- Alias
onnxruntime-node → ort-web.node.jspour éviter les binaires natifs non bundlables env.cacheDirfixé avantpipeline()(évitepath.join(null, ...))- Références institutionnelles incorrectes supprimées (ICAR, CNRS)
Technique
@xenova/transformersv2.17.2 ajouté comme dépendance- esbuild :
target: es2020,platform: browserretiré, banner polyfillimport.meta.url tsconfig.json: target ES2020, lib ES2020
[prod] v0.0.4 — 12 mai 2026
Branche : main | Tag : 0.0.4 | Publié : GitLab + GitHub (core-hn/pseudobsidian-ization)
Corrections bot Obsidian
- Suppression du heading "Pseudonymizer tool" en tête des settings (
settings-tab/no-manual-html-headings)
[prod] v0.0.3 — mai 2026
Branche : main | Tag : 0.0.3
Corrections bot Obsidian (Required)
style.cssTextetsetAttribute('style')→ classes CSS (no-static-styles-assignment)- Headings
<h2>/<h3>dans les settings →new Setting().setHeading()(settings-tab/no-manual-html-headings) - Promesses flottantes → opérateur
void(no-floating-promises) - Sentence case sur les labels UI
[prod] v0.0.2 — mai 2026
Branche : main | Tag : 0.0.2
Changements
- Rename du plugin :
pseudobsidianization→pseudonymizer-tool(exigence répertoire communautaire) - Description
manifest.jsonen anglais
[prod] v0.0.1 — mai 2026
Branche : main | Tag : 0.0.1
Première release
- Parsers SRT et CHAT/CHA avec round-trip garanti
- Moteur de pseudonymisation (spans, priorité z-index, protection chevauchements)
- Portées fichier / dossier / vault
- Surlignage CM6 (orange = sources, vert = remplacements)
- Validation sélective par occurrence (OccurrencesModal)
- Import de transcriptions avec conversion automatique
- Intégration Coulmont (suggestions de prénoms sociologiquement équivalents)
- Soumission PR #12766 au répertoire communautaire Obsidian