PD-251 — Rétrospective¶
1. Patterns récurrents identifiés¶
P1 — Corrections sécurité proactives = Gate 8 GO en v1¶
Stories concernées : PD-251 (GO v1), PD-250 (RESERVE v1) Pattern : Appliquer TOUTES les corrections issues des reviews LLM (code + tests + sécurité) AVANT Gate 8 réduit le nombre d'itérations.
| Story | Corrections pré-Gate 8 | Résultat Gate 8 |
|---|---|---|
| PD-251 | 16 (v1: 10, v2: 6) | GO v1 (8.75) |
| PD-250 | 8 (partielles) | RESERVE v1 (7.875) |
Recommandation : Systématiser 2 cycles de review LLM en acceptabilité (v1 + v2 minimum) avant de soumettre à Gate 8.
P2 — Stubs inter-PD documentés = facteur atténuant systématique¶
Stories concernées : PD-251, PD-250, PD-63, PD-55 Pattern : Les écarts MAJEUR en Gate 8 sont systématiquement atténués quand le stub est documenté avec une story de destination.
Recommandation : Exiger dans le code contract un champ stub_for avec le PD de destination pour chaque stub.
P3 — Mapping TC↔CA incorrect en Gate 3¶
Stories concernées : PD-251, PD-250, PD-86 Pattern : Les mappings TC (test cases) vers CA (critères d'acceptation) sont fréquemment incorrects dans le cahier de tests produit par ChatGPT. Gate 3 le détecte systématiquement.
Recommandation : Ajouter une étape de validation automatique du mapping TC↔CA dans le script assemble-prompt.sh pour la Gate 3, en vérifiant que chaque TC référence un CA existant.
P4 — timingSafeEqual obligatoire¶
Stories concernées : PD-251, PD-38, PD-24 Pattern : Toute comparaison de hashes (même non secrète) signalée comme MAJEUR si timingSafeEqual n'est pas utilisé.
Recommandation : Ajouter comme règle dans le CLAUDE.md du backend : timingSafeEqual obligatoire pour toute comparaison de buffer/hash. Linter ESLint custom si faisable.
P5 — Journal avant action (audit trail)¶
Stories concernées : PD-251, PD-250 Pattern : Le journal d'audit doit être écrit AVANT l'action qu'il trace. Pattern inversé dans l'implémentation initiale de PD-251 (corrigé en S-05).
Recommandation : Intégrer comme invariant dans les specs futures : INV-XX: Le journal d'audit est écrit AVANT toute transition d'état.
2. Signaux CLAUDE.md¶
Signal 1 — timingSafeEqual (backend CLAUDE.md)¶
### timingSafeEqual obligatoire (2026-02-25)
**Issu du REX PD-251** : Utiliser `timingSafeEqual` pour TOUTE comparaison de hashes ou buffers.
Les reviewers sécurité le signalent comme MAJEUR systématiquement.
Signal 2 — Journal avant transition (backend CLAUDE.md)¶
### Journal audit AVANT transition (2026-02-25)
**Issu du REX PD-251** : Dans tout service avec journal d'audit signé, écrire le journal
AVANT d'exécuter l'action (transition, suppression, restauration). Si l'action échoue
après le journal, la trace orpheline est rattrapable. L'inverse (action sans trace) ne l'est pas.
Signal 3 — Stubs documentés obligatoire (governance CLAUDE.md)¶
### Stubs inter-PD avec story destination (2026-02-25)
**Issu des REX PD-251, PD-250** : Tout stub inter-PD DOIT être documenté avec la story
de destination (ex: `// stub PD-37: signature PDF probante`). Les stubs sans destination
sont des écarts MAJEUR non atténuables en Gate 8.
3. Métriques de la rétrospective¶
| Métrique | Valeur |
|---|---|
| Patterns identifiés | 5 |
| Signaux CLAUDE.md | 3 |
| Stories analysées | PD-251 + 4 stories comparées |
| Learnings PD-251 | 7 (gates) + 5 (REX) = 12 |
4. Actions de suivi¶
| Action | Priorité | Responsable |
|---|---|---|
| Ajouter timingSafeEqual au CLAUDE.md backend | Haute | PO (validation) |
| Ajouter journal-avant-transition au CLAUDE.md backend | Haute | PO (validation) |
| Ajouter stubs-documentés au CLAUDE.md governance | Moyenne | PO (validation) |
| Valider mapping TC↔CA automatique dans assemble-prompt.sh | Basse | Prochaine story legal-compliance |
Investiguer test PD-250 destruction-audit.integration.spec.ts | Haute | Bug pré-existant |