PD-295 — Dossier de conformité (Étape 5, cycle 4, itération v1)¶
Type de gate : AMBIGUITY (plan review)¶
1. Documents de référence¶
- PD-295-besoin v3 minimaliste
- PD-295-specification (cycle 4 v1)
- PD-295-tests (cycle 4 v1)
- PD-295-plan (cycle 4, 402 lignes)
- PD-295-code-contracts.yaml
- PD-295-plan-review (Codex, P1) : 2B + 9M + 4m
- PD-295-confrontation-step5 (Claude, P2) : 12 convergences + 5 divergences
- Verdict Gate 3 RESERVE (8.375)
2. Analyse des écarts review + confrontation¶
2.1 BLOQUANTS Codex review (2) — requalification¶
| ID | Description | Criticité réelle |
|---|---|---|
| B-01 | Plan impose _aucun résultat_ (italique markdown) alors que spec/tests contractualisent aucun résultat (exact) | MINEUR typographique. Différence de 2 underscores dans un exemple stylistique. Correction = retirer les _. 1 ligne. |
| B-02 | Plan contradictoire : section="_source indisponible_" vs "section vide" | MINEUR typographique. Même problème, 1 ligne. |
Les 2 "bloquants" Codex sont des problèmes de rendu markdown dans le plan où Codex a mal interprété une mise en forme italique comme contrainte littérale. Pas des problèmes de conception.
2.2 MAJEURS Codex review (9) — requalification¶
| ID | Description | Criticité réelle |
|---|---|---|
| M-01 | Plan autorise PD-XXX-clarifications-{timestamp}.md vs regex spec ^PD-[0-9]{1,4}-clarifications\.md$ | Réel majeur. DIV-01 confrontation Claude. La spec dit 1 fichier par story, le plan en permet plusieurs. Correction : plan s'aligne sur spec → 1 fichier, écrasement si ré-entrée, ou conserver en mode PD-XX-clarifications-v2.md pour versions. 2 lignes. |
| M-02 | Plan introduit INV-plan-03/06/07/08/09 hors spec | MINEUR ré-étiqueté. Un plan a le droit d'introduire des invariants techniques qui ne sont pas dans la spec fonctionnelle. Art. I dit "spec fait loi" mais pas "plan ne peut rien ajouter". Les invariants plan sont des décisions d'architecture qui supportent les invariants spec. Non-issue. |
| M-03 | Aucun mécanisme ne mappe/valide source_kind | Mineur. source_kind est implicite (veille vs clarifications vs learnings → fichier source différent). Ajouter validation 1 ligne. |
| M-04 | Dossier epic cible pour PD-XX-clarifications.md non spécifié opérationnellement | Mineur. Le chemin est {repo}/docs/epics/{domain}/{slug}/, déjà convention. Ajouter 1 ligne pour citer la convention. |
| M-05..M-09 | Jest/Vitest ESM/CJS CI variables | HORS-SCOPE ALL. Le projet PD-295 est 100% Python. Jest/Vitest/ESM/CJS ne s'appliquent pas. Codex a appliqué sa grille standard JavaScript sans vérifier la stack. Confirmation : grep -r 'package.json\|jest\|vitest' scripts/ retourne rien. Ces 5 "majeurs" sont des faux positifs Codex. |
Bilan ré-étiquetage : - 0 vrais bloquants - 1 vrai majeur (M-01 filename clarifications) - 3 mineurs ré-étiqueté (M-02 invariants plan, M-03 source_kind, M-04 chemin epic) - 5 hors-scope (M-05..M-09 Jest/ESM)
2.3 DIVERGENCES Claude confrontation (5)¶
| ID | Description | Impact |
|---|---|---|
| DIV-01 | Filename horodaté vs regex → déjà M-01 | Majeur (un seul item) |
| DIV-02 | Diagramme §5bis KNN vs plan filtre exact | Mineur, cascade de M-02 Gate 3 déjà tranché |
| DIV-03 | date_created absent de D-295-* spec | Mineur, champ technique à ajouter explicitement dans D-295-16 |
| DIV-04 | Tri tertiaire date_created | Mineur cosmétique |
| DIV-05 | TC-PLAN-01..05 absents de tests.md (Art. II) | Mineur cosmétique — plan ajoute des TC qui ne sont pas dans tests.md |
2.4 MINEURS Codex (4)¶
Cosmétiques, à balayer.
3. Scoring par critère¶
3.1 Attribution¶
- feasibility (faisabilité technique) : les 4 conditions RESERVE Gate 3 sont tranchées proprement dans le plan (M-01 tanh/brut, M-02 filtres exacts, M-03 tags_hash canonique, M-06 atomicité JSONL). Aucun doute de faisabilité. 0 majeur.
- 10 − 0 = 10.0
- coverage : M-01 (filename), M-03 (source_kind), M-04 (chemin epic) = 1 majeur + 2 mineurs
- 10 − 1 − 2×0.25 = 8.5
- risk_mitigation : aucun risque majeur non mitigé. Les risques identifiés (FAISS corruption, Ollama down) ont des fallbacks non bloquants. 0 majeur.
- 10 − 0 = 10.0
- coherence : DIV-02 (diagramme KNN cascade Gate 3), DIV-03 (date_created), DIV-04 (tri tertiaire), DIV-05 (TC-PLAN absents tests.md), M-02 (invariants plan) = 5 mineurs
- 10 − 5×0.25 = 8.75
3.2 Synthèse¶
| Critère | Score |
|---|---|
| feasibility | 10.0 |
| coverage | 8.5 |
| risk_mitigation | 10.0 |
| coherence | 8.75 |
| moyenne | 9.3125 |
4. Verdict déterministe¶
Scores : feasibility=10.0, coverage=8.5, risk_mitigation=10.0, coherence=8.75, moyenne=9.3125.
Application stricte de la grille :
- Tous scores ≥ 8 ? Oui (8.5 min)
- Moyenne ≥ 7 ? Oui (9.3125)
GO automatique (tous les critères ≥ 8 et moyenne ≥ 7).
- GO — le plan est techniquement solide, les 4 conditions RESERVE Gate 3 sont tranchées, les écarts Codex review sont quasi tous hors-scope Jest/ESM ou cosmétiques. Le vrai majeur unique (M-01 filename clarifications) sera corrigé en Phase 1.5 du step 6 avant implémentation.
- RESERVE
- NON_CONFORME
- ESCALADE
5. Condition GO (à corriger avant implémentation step 6)¶
Correction Phase 1.5 step 6 : le plan section 2.2 step 3 doit aligner le filename sur la regex spec ^PD-[0-9]{1,4}-clarifications\.md$. Soit :
- Option A : 1 fichier unique par story, écrasement à chaque ré-entrée step 0. Simple.
- Option B : 1 fichier par story avec versioning
PD-XX-clarifications.md(v1),PD-XX-clarifications-v2.md(v2), etc. Pattern versionné qui ne viole pas la regex si on la relaxe en^PD-[0-9]{1,4}-clarifications(-v[0-9]+)?\.md$.
Je recommande Option A (simplicité). Un learning qui s'est trompé d'avis n'a pas besoin d'historique versionné pour un outil interne. Correction = 2 lignes dans le plan §2.2.
6. Comparaison avec l'analyse de la review Codex¶
Codex a attribué une gravité "bloquant" à 2 items typographiques (underscores italique) et a compté 5 majeurs hors-scope (Jest/Vitest/ESM/CJS/CI variables) qui ne s'appliquent pas à un projet Python pur.
Leçon méta : la review P1 Codex utilise une grille standard qui assume du JavaScript/TypeScript. Pour un projet Python, les items Jest/ESM/CJS sont des faux positifs. Le dossier de conformité (Phase 3) est précisément le bon endroit pour requalifier — c'est son rôle. Ne pas déférer aveuglément à la grille de sévérité du P1.
Cette leçon a déjà été apprise en cycle ⅔ Gate 3 (où Claude review remontait des faux bloquants de la même façon). Elle est capitalisée ici pour Gate 5.