Aller au contenu

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

  1. Build verification obligatoire a chaque agent — 26 fichiers generes par agents multiples ne compilent pas (3 erreurs TS). Verification incrementale eviterait accumulation.
  2. 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.
  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.
  4. Stories hybrides multi-projets — Gate 3 v1 a 6.375 (plus bas recent) car spec couvre doc + backend simultanement.
  5. Hypotheses techniques = dette invisible — 6 hypotheses H-T01..H-T06 contournent des lacunes spec non validees.

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 --noEmit apres 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 --noEmit sur 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.