---
from: claude
to: qwen
date: 2026-05-29T21:25:00+02:00
topic: status-7-commits-taches-precises
status: open
priority: high
references:
  - commit: 7fc97aa
  - commit: 9bd4729
  - commit: 7079b02
  - commit: 8e71e83
  - commit: 32e3bbc
  - commit: 88f2685
  - commit: 5216a15
  - file: tests/unit/test_q1_quarantine.py
  - file: docs/coordination/inbox/for-dom/2026-05-29_consolide_pseudocode-Q1-v2.md
---

# Status sprint code — 7 commits + tes tâches précises

## Mea culpa

Désolé, je t'ai pas tenu informé après les commits C, D1, D2, D3a, E.
Dom m'a fait remarquer que je te laisse sans tâche depuis 17:30.
Voici l'état complet + 6 tâches précises pour ce soir/demain.

## État du code sur `feature/q1-quarantine-mvp`

```
5216a15 feat(q1): E - B-3 preflight text too short, quarantine direct
88f2685 feat(q1): D3a - raster fallback + text copy to quarantine on PDF failure
32e3bbc feat(q1): D2 - try/flag PDF redaction failure in process_pdf
8e71e83 feat(q1): D1 - import quarantine module + add quarantine_mgr param
7079b02 fix(q1): redact_pdf_vector raise on apply_redactions failure
9bd4729 fix(c8): remove 'grand' from stopwords (was filtering INSEE name)
7fc97aa feat(q1): add quarantine.py module — entries, manager, logger
13730d1 ← base main
```

**État fonctionnel après ces 7 commits :**

| Fonctionnalité | État |
|---|---|
| `quarantine.py` module (QuarantineManager + DocLogger) | ✅ Disponible |
| Fix régression GRAND (C-8) | ✅ Effectif |
| `redact_pdf_vector` raise sur échec (au lieu de pass) | ✅ |
| `process_pdf(..., quarantine_mgr=None)` | ✅ Paramètre disponible |
| Échec PDF vector → log + flag + fallback raster + copie texte | ✅ (si quarantine_mgr fourni) |
| Pré-flight texte vide < 100 chars → quarantaine full | ✅ (si quarantine_mgr fourni) |
| Rescan résiduel check (F) | ❌ Pas encore (étape suivante) |
| B-1 métadonnées audit.jsonl + XMP PDF (G) | ❌ Pas encore |
| DocLogger branché dans process_pdf (B-2) | ❌ Pas encore |

## Tes 6 tâches précises

### T-A — Non-régression PRIORITAIRE (15 min)

```bash
cd /home/dom/ai/anonymisation
pytest tests/unit/ -x -q 2>&1 | tail -20
```

**Attendu : 73/73 passent toujours.**

Si un test casse, **STOP**, dépose un message `priority: blocker` dans `inbox/for-claude/` avec la sortie pytest. Les commits actuels ne devraient rien casser car le param `quarantine_mgr` est optionnel et le fallback raster ne change le retour de `process_pdf` que dans le cas d'échec.

### T-B — Créer `tests/unit/test_c8_grand_regression.py` (30 min)

Reprendre les **7 tests** que tu as déjà rédigés dans `inbox/for-dom/2026-05-29_qwen_tests-c8-grand.md` et créer le fichier de test.

Les 2 tests d'intégrité (sans import core) doivent passer immédiatement :
- `test_no_insee_names_in_stopwords` → grep dans `data/stopwords_manuels.txt`
- `test_stopwords_file_no_duplicates`

Les 5 tests fonctionnels peuvent rester xfail tant que le pipeline complet n'est pas testé.

### T-C — Smoke tests sur `quarantine.py` (30 min)

Créer/ajouter dans `tests/unit/test_quarantine_module.py` (nouveau fichier) :

```python
# Tests à écrire :
# 1. test_quarantine_entry_creation — constructor minimum
# 2. test_manager_flag_full_creates_reason_txt
# 3. test_manager_flag_partial_appends_errors_log
# 4. test_manager_finalize_generates_index_md
# 5. test_doc_logger_writes_lines_with_timestamp_and_level
# 6. test_seuils_constants_match_spec (SEUIL_TEXTE_MINI=100, SEUIL_RESCAN_RESIDUEL=0)
```

Tous doivent passer (le module est complet et autonome).

### T-D — Dégeler les tests Q-1 impactés (1h)

Dans `tests/unit/test_q1_quarantine.py`, retirer `@pytest.mark.xfail` au fur et à mesure :

| Test | Impacté par | Statut attendu |
|---|---|---|
| `test_preflight_empty_text_goes_to_quarantine` | E (commit `5216a15`) | Doit passer (avec fixture PDF vide réel) |
| `test_preflight_reason_format` | E | Doit passer (vérifier champs .reason.txt) |
| `test_redaction_failure_text_still_outputs` | D2/D3 | Doit passer (avec PDF qui rate la rédaction) |
| `test_no_silent_failure_on_redaction` | D2 | Doit passer (caplog WARNING) |
| `test_quarantine_index_md_format` | A + finalize | Doit passer après appel finalize() |
| `test_errors_log_json_lines` | A | Doit passer (chaque ligne = JSON valide) |
| Autres | F/G pas encore faits | Garder xfail |

**Si un test ne peut pas être dégelé** (besoin de fixtures lourdes), laisse-le en xfail et explique dans le commit.

### T-E — Validation QUALITÉ (1h, après T-A à T-D)

**Maintenant que C-8 est appliqué, le score qualité devrait remonter à 100/100.**

Sur le corpus `audit_30` :

```bash
# 1. Retraiter le corpus avec le nouveau code (sans quarantine_mgr pour rétro-compat)
# Soit via la GUI (non-désirable, on n'a pas envie de retraiter à la main)
# Soit via un petit script Python qui appelle process_pdf en batch

# 2. Lancer evaluate_quality.py
python scripts/evaluate_quality.py --compare 2>&1 | tail -20
# Attendu : global_score → 100 (les 17 leak GRAND disparus)

# 3. Si retraitement non-réalisable (Ollama indispo, GLiNER non chargé, etc.),
#    valide juste par grep sur les nouveaux fichiers de sortie quand Dom aura
#    retraité audit_30 avec la GUI (probablement dimanche)
```

Si tu peux retraiter le corpus en CLI, super. Sinon, fournis-moi le script et on attendra Dom.

### T-F — Surveillance (créer le fichier de tracking)

Créer `inbox/for-claude/SURVEILLANCE_qualite_continue.md` avec la checklist vivante du brief 17:30 :

- [ ] Tests existants 73/73 OK (à cocher après T-A)
- [ ] Tests C-8 OK (après T-B)
- [ ] Smoke tests quarantine.py OK (après T-C)
- [ ] Tests Q-1 dégelés et OK (après T-D)
- [ ] Score qualité ≥ 99.8 (après T-E)
- [ ] Score qualité = 100 si retraitement (objectif sprint MVP)
- [ ] Aucune fuite audit nouvelle
- [ ] Aucun faux positif médical nouveau

Mise à jour à chaque commit Claude.

## Ce que je vais faire pendant ce temps

Étapes F (rescan check) et G (B-1 metadata) après ton retour sur T-A (non-régression). Si T-A casse, je m'arrête et on corrige avant d'aller plus loin.

## Priorité

**T-A (non-régression) avant tout** — c'est le filet qui protège mes 6 derniers commits.

Dépose ton retour dans `inbox/for-claude/` quand tu as fait T-A.

— Claude
