File size: 8,810 Bytes
1b4c2d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2b782d0
1b4c2d1
 
 
 
 
 
 
ee838b2
 
 
 
 
 
 
2b782d0
ee838b2
 
 
 
 
2b782d0
ee838b2
 
 
 
052fb51
 
2b782d0
052fb51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b4c2d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# Backlog post-livraison

> **Garde-fou de discipline du rewrite ciblé** (cf. `docs/roadmap/rewrite-2026.md`).
>
> Tout ce qui apparaît ici est **explicitement hors scope** des sprints
> S1–S26. Ces items pourront revenir dans le scope après la livraison à
> la BnF, pas avant.
>
> La règle d'or : "à chaque doute pendant le sprint en cours, l'item va
> ici et le sprint continue."

---

## 1. Promesses retirées du README

Items historiquement présentés comme acquis et qui ne sont en réalité
pas tenus au niveau qui justifierait leur affirmation publique.

### 1.1 Scientific publication track

- `CITATION.cff` au format Citation File Format 1.2.
- DOI Zenodo (snapshot release).
- Soumission JOSS (Journal of Open Source Software) avec article
  technique.
- BibTeX généré automatiquement par release.

**Pourquoi retiré du README pour l'instant** : la posture éditoriale
sera difficile à tenir tant que le rewrite ciblé n'est pas livré et
qu'on ne peut pas pointer vers une version 2.0 stable.

**Quand revoir** : après S26.

### 1.2 Conformité RGPD opérationnelle

- Audit DPO interne ou externe.
- Registre des traitements documenté.
- Politique de rétention enforced (pas seulement documentée).
- Mécanisme d'exercice des droits (export, suppression).

**État actuel** : `docs/operations/data-retention-rgpd.md` existe mais
n'a jamais été validé par un DPO ni testé sur un workflow réel BnF.

### 1.3 Gouvernance et COI policies

- Constitution explicite du comité de pilotage.
- Politique de gestion des conflits d'intérêts exercée sur ≥ 1 PR
  externe.
- Processus de release reviews documenté et appliqué.

**État actuel** : `GOVERNANCE.md` et `CONTRIBUTING.md` sont en place
comme documents de référentiel mais aucun de ces processus n'a été
exercé en pratique.

### 1.4 Accessibilité WCAG 2.1 AA

- Audit RGAA externe.
- Tests automatisés axe-core sur la SPA.
- Navigation complète clavier validée par utilisateur empêché.

**État actuel** : `ACCESSIBILITY.md` documente l'intention. Les
améliorations Sprint 25 (extraction du JS inline vers
`web-app.js`) sont un pas dans la bonne direction mais ne suffisent
pas à revendiquer la conformité.

### 1.5 Sécurité — pentest externe

- Pentest opérationnel sur un déploiement institutionnel (pas un
  Space HF public).
- Validation de la CSP sans `'unsafe-inline'`.
- Validation de la sandbox `validated_path` / `compute_workspace_roots`
  par un attaquant compétent.

**État actuel** : Sprint A14-S1 a comblé les 6 P0 connus mais
l'absence d'audit externe nous interdit d'affirmer l'absence d'autres
vecteurs.

---

## 2. Features attendues mais reportées

### 2.1 Features fonctionnelles

- Reprise de benchmark hashée par contenu+config (pas seulement par
  `corpus_name + engine_name`).
- Backpressure réelle dans le runner (limite de futures en vol,
  timeout depuis le début d'exécution réelle).
- Annulation propre qui tue les workers OCR/LLM en cours
  (actuellement `cancel_futures` ne ferme pas un Tesseract en train
  de tourner).
- ZIP upload qui préserve l'arborescence (sans flatten qui écrase).
- Détection des paires `(image, GT)` qui supporte tous les patterns
  réels (`.gt.alto.xml`, `.alto.xml`, `.page.xml`, etc.).

→ Couverts par les Sprints S8, S9, S20 du rewrite ciblé.

### 2.2 Vues d'évaluation explicites

- `TextView` — la vue qui projette toute sortie textuelle vers du
  texte brut comparable.
- `AltoView` — fidélité documentaire ALTO/PAGE.
- `SearchView` — recherchabilité fuzzy plein-texte.
- `LayoutView` — coordonnées et ordre de lecture.
- `HallucinationView` — contrôle d'invention par le modèle.
- `CostView` — coût/temps/CO₂.

→ Sprints S13–S18 du rewrite. Au minimum les 3 premières doivent
exister à la livraison BnF.

### 2.3 Couche service applicative

- `app/services/benchmark_service.py` — orchestration séparée des
  routers FastAPI.
- `app/services/path_security.py``WorkspaceManager` qui crée un
  dossier isolé par session/run.
- Schemas DTO (Pydantic) séparés des modèles de domaine.

→ Sprint S19 du rewrite.

### 2.4 Suppression de la dette d'imports magiques

- Plus de `import picarones.evaluation.metrics as _trigger_metric_registration`
  dans `picarones/__init__.py`.
- Registres construits explicitement par un service au démarrage.
- Entry points Python pour les modules tiers (`picarones.metrics`,
  `picarones.adapters`).

→ Sprint S5 + S20 du rewrite.

### 2.5b Migration des adapters restants

Le Sprint S11 a migré 5 LLM (base + openai/mistral/anthropic/ollama)
+ 2 corpus importers (htr_united, huggingface) + 1 helper privé
(_fallback_log).  L'ancien emplacement est un re-export.

**Adapters OCR** (5 fichiers : tesseract, pero_ocr, mistral_ocr,
google_vision, azure_doc_intel) restent dans `picarones/adapters/ocr/`.
Tous importent `engines/base.py` qui hérite de `core.modules.BaseModule`.
Migration différée jusqu'au S20 quand `core.modules` aura disparu
(remplacé par le protocole `StepExecutor` du S6).

**Importers patrimoniaux** (3 fichiers : iiif, gallica, escriptorium)
restent dans `picarones/evaluation/metrics/importers/`.  Tous importent
`core.corpus.{Corpus, Document}`.  Migration différée jusqu'au
déplacement de `core.corpus` vers `domain/` (sprint dédié).

### 2.5c Migration des fichiers `measurements/*.py` restants vers `evaluation/metrics/`

Le Sprint S10 a migré 23 fichiers de calcul autonomes.  17 fichiers
restent dans `picarones/evaluation/metrics/` à migrer.

**Catégorie B — utilisent `@register_metric`** (singleton global
`core.metric_registry` à supprimer au S20) :
  `mufi`, `abbreviations`, `unicode_blocks`, `roman_numerals`,
  `early_modern_typography`, `modern_archives`, `reading_order`,
  `ner`, `readability`, `searchability`, `numerical_sequences`.

→ Migrés au S20 quand le `MetricRegistry` instancié explicitement
(S5) deviendra le seul registre.

**Catégorie C — dépendances vers `core.corpus` / `engines.base` /
`measurements.metrics`** :
  `robustness`.

→ Migré après S11 (déplacement des adapters) et S12 (équivalence
numérique).

**Catégorie D — dépendances inter-fichiers à orchestrer** :
  `cost_projection` (→ pricing, déjà migré),
  `equivalence_profile` (→ formats.text.normalization, déjà migré),
  `specialization` (→ inter_engine, déjà migré),
  `taxonomy_intra_doc` (→ taxonomy),
  `taxonomy` (→ char_scores).

→ Trois de ces fichiers (cost_projection, equivalence_profile,
specialization) peuvent être migrés dès le S11+ puisque leurs deps
sont déjà migrées.

**Fichiers d'orchestration legacy** (à NE PAS migrer en l'état,
remplacés par `pipeline/executor` + `pipeline/runner` au S22) :
  `runner/` (sous-package), `pipeline_benchmark`,
  `pipeline_comparison`, `pipeline_spec_loader`,
  `builtin_hooks`, `builtin_metrics`, `philological_hooks`,
  `readability_hooks`, `searchability_hooks`,
  `numerical_sequences_hooks`, `ner_backends`,
  `metrics`, `history`, `structure`, `difficulty`,
  `char_scores`, `alto_metrics`, `narrative/`, `statistics/`.

### 2.5 Suppression des références "Sprint X" dans le code

Le repo contient ~679 références à "Sprint N" dans les fichiers
Python (commentaires, docstrings, justifications de seuils
éditoriaux). C'est de la stratigraphie archéologique qui rend le
code illisible pour un nouveau contributeur.

→ Nettoyage progressif au fil des Sprints S10–S22 du rewrite (à
chaque déplacement de fichier, on supprime les commentaires de
sprint qui n'apportent plus rien à un lecteur de la version
courante). Pas un sprint dédié.

---

## 3. Idées qui ressortent mais qu'on ne traite pas

À valider après la livraison.

- Cache d'artefacts intermédiaires côté pipeline executor.
- Parallélisation inter-étapes au sein d'une même pipeline.
- Vue HTML drag-and-drop pour composer un pipeline (le DAG render
  Sprint 95 est de l'inspection, pas de la construction).
- Score composite personnel persisté côté serveur (pour l'instant
  uniquement URL state côté client).
- Plugin system PyPI pour modules contribués (`picarones-module-X`).
- Extension corpus levels au-delà de TEXT/ALTO/PAGE/ENTITIES/READING_ORDER
  (par exemple : tableaux, mathématiques, partitions).

---

## 4. Convention d'usage de ce document

- **Ajouter** un item dès qu'on identifie une promesse / feature qui
  doit attendre.
- **Ne pas retirer** un item juste parce qu'on a envie de le faire ;
  attendre que le rewrite l'absorbe officiellement (auquel cas il
  apparaîtra dans `docs/roadmap/rewrite-2026.md`).
- **Référencer** ce fichier dans les PRs qui retirent du scope du
  README ou de la documentation utilisateur.

Dernière revue : Sprint A14-S2 (rewrite ciblé, étape 0).