Retrospective — PD-254¶
Resume story¶
- Story : PD-254 — Protocole migration probatoire
- Domaine : legal-compliance
- Date : 2026-03-13
- Gates : G3 RESERVE (v2) | G5 RESERVE (v1) | G8 RESERVE (v1)
Learnings de cette story¶
Depuis les gates¶
| Gate | Verdict | Score | Tags | Note |
|---|---|---|---|---|
| G3 | RESERVE | 7.625 | #migration, #nfz42013, #integrity, #manifest | Separation codes erreur metier vs etats FSM ameliore la review (+1.25 delta) |
| G5 | RESERVE | 8.0 | #migration, #nfz42013, #plan, #code-contracts | Confrontation reduit ⅘ MAJEURS a MINEUR grace au contexte projet |
| G8 | RESERVE | 7.75 | #migration, #nfz42013, #closure | Regex simplifiee accepte valeurs hors domaine — toujours utiliser la regex contractuelle |
Depuis le REX¶
- Build verification obligatoire a chaque agent — 26 fichiers generes par agents multiples ne compilent pas (3 erreurs TS). Verification incrementale eviterait accumulation.
- Codes metier dans la spec, pas dans le plan — MANIFEST_STALE, PRECHECK_EXPIRED emergent au plan alors qu'ils devraient etre dans la spec §3.
- Check implemente ≠ check integre — ManifestService.revalidate() parfaitement implemente et teste, mais jamais appele dans le flux principal. Pattern roundtrip applicable aux flux de verification.
- Stories hybrides multi-projets — Gate 3 v1 a 6.375 (plus bas recent) car spec couvre doc + backend simultanement.
- Hypotheses techniques = dette invisible — 6 hypotheses H-T01..H-T06 contournent des lacunes spec non validees.
Patterns recurrents (domaine legal-compliance)¶
Pattern 1 : Validation format ≠ validation fonctionnelle (5 stories)¶
Stories : PD-254, PD-283, PD-282, PD-265, PD-253 Description : Un champ de securite valide par schema (regex, longueur) n'est jamais utilise fonctionnellement (compare, verifie, applique). PD-254 : regex readability_pass_rate trop permissive. PD-283 : integrityHash jamais compare. PD-282 : trustedRoots optionnel. Impact : RESERVE recurrent (3x), regression test (1x) Recommandation : Deja documente dans CLAUDE.md (learnings.md). Renforcer l'injection dans les prompts agents step 6b avec un check explicite : "Pour chaque champ de securite, verifier qu'il est aussi utilise fonctionnellement."
Pattern 2 : Erreurs TypeScript post-generation multi-agents (5+ stories)¶
Stories : PD-254, PD-282, PD-265, PD-283, PD-85 Description : Les agents multi-fichiers ne valident pas le build final. Erreurs TS (types generiques, imports incorrects, literals non contraints) decouvertes seulement en step 7. Impact : BLOQUANT en Gate 8 (E-01 PD-254), corrections post-acceptabilite systematiques Recommandation : Ajouter npx tsc --noEmit dans la checklist de sortie de chaque agent step 6b. Verifier le build apres chaque agent, pas seulement en step 7.
Pattern 3 : Machine a etats — codes metier non definis dans la spec (6 stories)¶
Stories : PD-254, PD-265, PD-279, PD-282, PD-80, PD-82 Description : Les codes de reponse/erreur metier emergent au plan ou a l'implementation. La spec definit les etats formels mais pas les codes metier associes (ex: MANIFEST_STALE, PRECHECK_EXPIRED). Impact : Gate 3 score bas (completeness), hypotheses techniques dans le plan Recommandation : Ajouter section "Codes metier" obligatoire dans le template spec (templates/prompts/1 Specification.md).
Pattern 4 : NF Z42-013 — complexite des invariants d'integrite (5 stories)¶
Stories : PD-254, PD-244, PD-249, PD-253, PD-278 Description : Les stories legal-compliance NF Z42-013 ont des invariants complexes (hash, signature, WORM, clearing) qui se combinent. La couverture de test est elevee mais la verification fonctionnelle (pattern roundtrip) est souvent partielle. Impact : RESERVE moyen sur le domaine (Gate 8 mean 7.9/10) Recommandation : Pour chaque story NF Z42-013, ajouter un test d'integration roundtrip qui valide le flux complet (pas seulement les composants individuels).
Pattern 5 : Audit fail-closed (#fail-closed — 5 stories)¶
Stories : PD-250, PD-262, PD-265, PD-63, PD-85 Description : Les implementations d'audit (auditLog, emitAudit) sont systematiquement encapsulees dans des catch qui absorbent l'erreur. Le fail-closed n'est pas garanti. Impact : MAJEUR en Gate 8 (2x), MINEUR (3x) Recommandation : Deja documente dans CLAUDE.md (anti-catch-absorb). Pattern consolide.
Recommandations¶
Priorite haute (≥ 5 stories ou NON_CONFORME recurrent)¶
- Verification TypeScript incrementale : ajouter
npx tsc --noEmitapres chaque agent step 6b dans le template de decomposition. 5+ stories avec erreurs TS post-generation. - Section "Codes metier" dans template spec : ajouter une section obligatoire distincte des etats FSM formels dans
templates/prompts/1 Specification.md. 6 stories avec codes emergents au plan.
Priorite normale¶
- Test roundtrip pour flux de verification : generaliser le pattern roundtrip (learning PD-282 crypto) aux flux de verification (pas seulement sign/verify mais aussi check→engine→rapport).
- Stories hybrides multi-projets : pour les stories couvrant 2+ projets, recommander une decomposition en 2 specs liees plutot qu'une spec monolithique. PD-254 = premier cas, Gate 3 v1 a 6.375.
Signal CLAUDE.md¶
Section procedures.md > Etape 6¶
Suggestion d'ajout :
Verification TypeScript incrementale (issu des REX PD-254, PD-282, PD-265, PD-283, PD-85) : Apres chaque agent step 6b, executer
npx tsc --noEmitsur le projet cible. Si le build casse, corriger avant de passer a l'agent suivant. Ne pas attendre l'etape 7 pour decouvrir les erreurs TS.
Section templates/prompts/1 Specification.md¶
Suggestion d'ajout :
Section "Codes metier" (OBLIGATOIRE pour stories avec machine d'etats) : Definir exhaustivement les codes de reponse/erreur metier dans un paragraphe dedie, distincts des etats formels de la machine. Exemples : INVALID_INPUT, CONCURRENT_EXECUTION_DENIED, MANIFEST_STALE.