Spaces:
Running
docs: remove sprint narrative from root files (Phase 2 L1)
Browse filesReformulation des mentions « Sprint XX » en prose dans les fichiers
de la racine : README.md, GOVERNANCE.md, SECURITY.md, CODE_OF_CONDUCT.md,
CONTRIBUTING.en.md.
Pattern de remplacement : on retire l'identifiant sprint et on
conserve l'intention sous-jacente. Exemples :
- "Pettitt change-point analysis, Sprint 92" → "Pettitt change-point analysis"
- "Sprint A10 du plan de remédiation institutionnelle" → "Politique
de gouvernance institutionnelle. Contexte historique : [...]"
- "depuis le Sprint 24" (SECURITY) → mention supprimée
- "## CSRF — déploiement institutionnel (Sprint A4)" → "## CSRF
— déploiement institutionnel"
Aucun contenu technique perdu — seul le tag sprint disparaît.
L'historique reste accessible via git log et CHANGELOG / docs/archive/.
Ratchet : ACTIVE_NARRATIVE_BASELINE 88 → 75 (-13).
- CODE_OF_CONDUCT.md +1 -1
- CONTRIBUTING.en.md +2 -2
- GOVERNANCE.md +6 -7
- README.md +6 -6
- SECURITY.md +5 -5
- tests/architecture/test_doc_governance.py +1 -1
|
@@ -1,6 +1,6 @@
|
|
| 1 |
# Code de conduite — Picarones
|
| 2 |
|
| 3 |
-
>
|
| 4 |
> [Contributor Covenant version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
|
| 5 |
|
| 6 |
## Notre engagement
|
|
|
|
| 1 |
# Code de conduite — Picarones
|
| 2 |
|
| 3 |
+
> Adoption du
|
| 4 |
> [Contributor Covenant version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
|
| 5 |
|
| 6 |
## Notre engagement
|
|
@@ -12,7 +12,7 @@ accessibility audits.
|
|
| 12 |
|
| 13 |
## Pre-requisites
|
| 14 |
|
| 15 |
-
- Python 3.11 or 3.12 (3.13 informational
|
| 16 |
- Git, GitHub account.
|
| 17 |
- A working Picarones dev install:
|
| 18 |
```bash
|
|
@@ -60,7 +60,7 @@ accessibility audits.
|
|
| 60 |
- **Hardcoded UI strings** — use the i18n mechanism (see
|
| 61 |
`docs/developer/extending-i18n.md` — French canonical).
|
| 62 |
- **Commits with `--no-verify`** — bypassing pre-commit hooks is
|
| 63 |
-
detected by the CI `precommit.yml` workflow
|
| 64 |
|
| 65 |
## Reviewing
|
| 66 |
|
|
|
|
| 12 |
|
| 13 |
## Pre-requisites
|
| 14 |
|
| 15 |
+
- Python 3.11 or 3.12 (3.13 informational).
|
| 16 |
- Git, GitHub account.
|
| 17 |
- A working Picarones dev install:
|
| 18 |
```bash
|
|
|
|
| 60 |
- **Hardcoded UI strings** — use the i18n mechanism (see
|
| 61 |
`docs/developer/extending-i18n.md` — French canonical).
|
| 62 |
- **Commits with `--no-verify`** — bypassing pre-commit hooks is
|
| 63 |
+
detected by the CI `precommit.yml` workflow.
|
| 64 |
|
| 65 |
## Reviewing
|
| 66 |
|
|
@@ -1,7 +1,7 @@
|
|
| 1 |
# Gouvernance — Picarones
|
| 2 |
|
| 3 |
-
>
|
| 4 |
-
>
|
| 5 |
>
|
| 6 |
> Ce document explicite **comment Picarones est maintenu et fait
|
| 7 |
> évoluer** : qui décide, à quelle cadence, avec quels engagements de
|
|
@@ -135,7 +135,7 @@ Si aucun successeur n'est trouvé en 6 mois, le projet entre en
|
|
| 135 |
sécurité, README enrichi d'un encart « projet en cherche d'un
|
| 136 |
nouveau mainteneur — fork bienvenu ».
|
| 137 |
|
| 138 |
-
## Conflicts of interest
|
| 139 |
|
| 140 |
Picarones benchmarke des fournisseurs cloud commerciaux (OpenAI,
|
| 141 |
Anthropic, Mistral, Google, Microsoft Azure). Pour qu'un papier ou
|
|
@@ -159,8 +159,7 @@ Les valeurs dans `picarones/data/pricing.yaml` :
|
|
| 159 |
|
| 160 |
- proviennent **exclusivement** des tarifs publics affichés sur les
|
| 161 |
sites des fournisseurs (sans NDA, sans accord commercial) ;
|
| 162 |
-
- sont datées explicitement (`meta.last_updated`, `meta.valid_until`
|
| 163 |
-
depuis Sprint A8) ;
|
| 164 |
- peuvent être surchargées par l'utilisateur via
|
| 165 |
`ReportGenerator(..., pricing=...)` pour refléter ses propres
|
| 166 |
tarifs négociés.
|
|
@@ -171,7 +170,7 @@ doit ouvrir une PR publique avec source vérifiable.
|
|
| 171 |
|
| 172 |
### Indépendance éditoriale du moteur narratif
|
| 173 |
|
| 174 |
-
Le moteur narratif
|
| 175 |
d'entrée. Aucune logique privilégie un fournisseur sur un autre :
|
| 176 |
|
| 177 |
- les seuils des détecteurs sont éditoriaux (publics dans
|
|
@@ -202,4 +201,4 @@ sera publiquement refusée et déclenchera l'annulation du sponsoring.
|
|
| 202 |
|
| 203 |
---
|
| 204 |
|
| 205 |
-
*Dernière mise à jour : 2 mai 2026
|
|
|
|
| 1 |
# Gouvernance — Picarones
|
| 2 |
|
| 3 |
+
> Politique de gouvernance institutionnelle. Contexte historique :
|
| 4 |
+
> [`docs/archive/2026-audits/remediation-plan.md`](docs/archive/2026-audits/remediation-plan.md).
|
| 5 |
>
|
| 6 |
> Ce document explicite **comment Picarones est maintenu et fait
|
| 7 |
> évoluer** : qui décide, à quelle cadence, avec quels engagements de
|
|
|
|
| 135 |
sécurité, README enrichi d'un encart « projet en cherche d'un
|
| 136 |
nouveau mainteneur — fork bienvenu ».
|
| 137 |
|
| 138 |
+
## Conflicts of interest
|
| 139 |
|
| 140 |
Picarones benchmarke des fournisseurs cloud commerciaux (OpenAI,
|
| 141 |
Anthropic, Mistral, Google, Microsoft Azure). Pour qu'un papier ou
|
|
|
|
| 159 |
|
| 160 |
- proviennent **exclusivement** des tarifs publics affichés sur les
|
| 161 |
sites des fournisseurs (sans NDA, sans accord commercial) ;
|
| 162 |
+
- sont datées explicitement (`meta.last_updated`, `meta.valid_until`) ;
|
|
|
|
| 163 |
- peuvent être surchargées par l'utilisateur via
|
| 164 |
`ReportGenerator(..., pricing=...)` pour refléter ses propres
|
| 165 |
tarifs négociés.
|
|
|
|
| 170 |
|
| 171 |
### Indépendance éditoriale du moteur narratif
|
| 172 |
|
| 173 |
+
Le moteur narratif émet des `Fact` traçables au JSON
|
| 174 |
d'entrée. Aucune logique privilégie un fournisseur sur un autre :
|
| 175 |
|
| 176 |
- les seuils des détecteurs sont éditoriaux (publics dans
|
|
|
|
| 201 |
|
| 202 |
---
|
| 203 |
|
| 204 |
+
*Dernière mise à jour : 2 mai 2026.*
|
|
@@ -112,7 +112,7 @@ Composable chains: `tesseract -> gpt-4o`, `pero_ocr -> claude-sonnet`,
|
|
| 112 |
zero-shot VLM, etc. Three pipeline modes: text-only post-correction,
|
| 113 |
image+text post-correction, and zero-shot. **Over-normalisation
|
| 114 |
detection** flags LLMs that silently modernise historical spellings.
|
| 115 |
-
A composed-pipeline benchmarking layer
|
| 116 |
pipelines on the same corpus and ranks them by a chosen metric.
|
| 117 |
|
| 118 |
### Corpus import
|
|
@@ -160,10 +160,10 @@ French/English UI. Deployable on HuggingFace Spaces (Docker, port
|
|
| 160 |
|
| 161 |
Optional SQLite database recording benchmark history across runs.
|
| 162 |
CER evolution curves per engine, automatic regression detection
|
| 163 |
-
between consecutive runs (Pettitt change-point analysis
|
| 164 |
**Robustness analysis** measures engine resilience to noise, blur,
|
| 165 |
rotation, resolution and binarization, projected on the real corpus
|
| 166 |
-
quality profile
|
| 167 |
|
| 168 |
---
|
| 169 |
|
|
@@ -227,7 +227,7 @@ or fail.
|
|
| 227 |
|
| 228 |
| Command | Description |
|
| 229 |
|---------|-------------|
|
| 230 |
-
| `picarones compare` | Compare two benchmark JSON runs and flag regressions
|
| 231 |
| `picarones demo` | Generate a demo report with synthetic data (no engine required) |
|
| 232 |
| `picarones diagnose` | Pre-wired workflow: bench + improvement levers + factual recommendations |
|
| 233 |
| `picarones economics` | Pre-wired workflow: bench + effective throughput + cost projection |
|
|
@@ -314,7 +314,7 @@ diplomatic tables and `exclude_chars` sets. See
|
|
| 314 |
[`docs/reference/normalization-profiles.md`](docs/reference/normalization-profiles.md).
|
| 315 |
|
| 316 |
A traceability table mapping each profile to its source standard
|
| 317 |
-
(MUFI v4.0, TEI P5, DEAF)
|
| 318 |
|
| 319 |
---
|
| 320 |
|
|
@@ -364,7 +364,7 @@ GOOGLE_APPLICATION_CREDENTIALS=
|
|
| 364 |
AZURE_DOC_INTEL_ENDPOINT=
|
| 365 |
AZURE_DOC_INTEL_KEY=
|
| 366 |
|
| 367 |
-
# RGPD retention
|
| 368 |
PICARONES_UPLOAD_RETENTION_DAYS=7
|
| 369 |
```
|
| 370 |
|
|
|
|
| 112 |
zero-shot VLM, etc. Three pipeline modes: text-only post-correction,
|
| 113 |
image+text post-correction, and zero-shot. **Over-normalisation
|
| 114 |
detection** flags LLMs that silently modernise historical spellings.
|
| 115 |
+
A composed-pipeline benchmarking layer runs N candidate
|
| 116 |
pipelines on the same corpus and ranks them by a chosen metric.
|
| 117 |
|
| 118 |
### Corpus import
|
|
|
|
| 160 |
|
| 161 |
Optional SQLite database recording benchmark history across runs.
|
| 162 |
CER evolution curves per engine, automatic regression detection
|
| 163 |
+
between consecutive runs (Pettitt change-point analysis).
|
| 164 |
**Robustness analysis** measures engine resilience to noise, blur,
|
| 165 |
rotation, resolution and binarization, projected on the real corpus
|
| 166 |
+
quality profile.
|
| 167 |
|
| 168 |
---
|
| 169 |
|
|
|
|
| 227 |
|
| 228 |
| Command | Description |
|
| 229 |
|---------|-------------|
|
| 230 |
+
| `picarones compare` | Compare two benchmark JSON runs and flag regressions |
|
| 231 |
| `picarones demo` | Generate a demo report with synthetic data (no engine required) |
|
| 232 |
| `picarones diagnose` | Pre-wired workflow: bench + improvement levers + factual recommendations |
|
| 233 |
| `picarones economics` | Pre-wired workflow: bench + effective throughput + cost projection |
|
|
|
|
| 314 |
[`docs/reference/normalization-profiles.md`](docs/reference/normalization-profiles.md).
|
| 315 |
|
| 316 |
A traceability table mapping each profile to its source standard
|
| 317 |
+
(MUFI v4.0, TEI P5, DEAF) is planned (see backlog item B-6).
|
| 318 |
|
| 319 |
---
|
| 320 |
|
|
|
|
| 364 |
AZURE_DOC_INTEL_ENDPOINT=
|
| 365 |
AZURE_DOC_INTEL_KEY=
|
| 366 |
|
| 367 |
+
# RGPD retention
|
| 368 |
PICARONES_UPLOAD_RETENTION_DAYS=7
|
| 369 |
```
|
| 370 |
|
|
@@ -11,8 +11,8 @@ Picarones est conçu pour être déployé dans trois contextes très différents
|
|
| 11 |
visiteur peut atteindre l'API ; les clefs serveur (OpenAI, Anthropic,
|
| 12 |
Mistral, Azure…) ne doivent **pas** être exposées au DoS-financier.
|
| 13 |
|
| 14 |
-
Ce document décrit les contrôles disponibles
|
| 15 |
-
|
| 16 |
|
| 17 |
---
|
| 18 |
|
|
@@ -31,7 +31,7 @@ configuration recommandée pour chaque cas.
|
|
| 31 |
|
| 32 |
---
|
| 33 |
|
| 34 |
-
## CSRF — déploiement institutionnel
|
| 35 |
|
| 36 |
L'application embarque un middleware CSRF **désactivé par défaut**
|
| 37 |
(rétrocompat HuggingFace Space où il n'y a pas de session
|
|
@@ -83,8 +83,8 @@ picarones serve --port 8000
|
|
| 83 |
- Tous les moteurs OCR sont disponibles.
|
| 84 |
- `/api/corpus/browse` voit `cwd`, `./uploads/`, `/workspaces`, `tempdir`.
|
| 85 |
- Pas de rate limit.
|
| 86 |
-
- CSP appliquée mais permissive (`unsafe-inline` toléré tant que
|
| 87 |
-
|
| 88 |
|
| 89 |
### 🏛 Serveur d'institution
|
| 90 |
|
|
|
|
| 11 |
visiteur peut atteindre l'API ; les clefs serveur (OpenAI, Anthropic,
|
| 12 |
Mistral, Azure…) ne doivent **pas** être exposées au DoS-financier.
|
| 13 |
|
| 14 |
+
Ce document décrit les contrôles disponibles et la configuration
|
| 15 |
+
recommandée pour chaque cas.
|
| 16 |
|
| 17 |
---
|
| 18 |
|
|
|
|
| 31 |
|
| 32 |
---
|
| 33 |
|
| 34 |
+
## CSRF — déploiement institutionnel
|
| 35 |
|
| 36 |
L'application embarque un middleware CSRF **désactivé par défaut**
|
| 37 |
(rétrocompat HuggingFace Space où il n'y a pas de session
|
|
|
|
| 83 |
- Tous les moteurs OCR sont disponibles.
|
| 84 |
- `/api/corpus/browse` voit `cwd`, `./uploads/`, `/workspaces`, `tempdir`.
|
| 85 |
- Pas de rate limit.
|
| 86 |
+
- CSP appliquée mais permissive (`unsafe-inline` toléré tant que
|
| 87 |
+
des handlers inline subsistent dans les templates).
|
| 88 |
|
| 89 |
### 🏛 Serveur d'institution
|
| 90 |
|
|
@@ -339,7 +339,7 @@ def test_mkdocs_nav_excludes_archive_subdirs() -> None:
|
|
| 339 |
#: - quelques fichiers à la racine (README, GOVERNANCE, SECURITY).
|
| 340 |
#:
|
| 341 |
#: Cible : 0 (Phase 2 — convergence narrative, lot D9 à prévoir).
|
| 342 |
-
ACTIVE_NARRATIVE_BASELINE =
|
| 343 |
|
| 344 |
|
| 345 |
def test_no_active_doc_contains_sprint_narrative() -> None:
|
|
|
|
| 339 |
#: - quelques fichiers à la racine (README, GOVERNANCE, SECURITY).
|
| 340 |
#:
|
| 341 |
#: Cible : 0 (Phase 2 — convergence narrative, lot D9 à prévoir).
|
| 342 |
+
ACTIVE_NARRATIVE_BASELINE = 75
|
| 343 |
|
| 344 |
|
| 345 |
def test_no_active_doc_contains_sprint_narrative() -> None:
|