Aller au contenu

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