Aller au contenu

PD-277 — Rétrospective

1. Résumé de la story

Métrique Valeur
Story PD-277 — Anti-rejeu nonce et PKI certificate binding
Durée ~3.5h (session unique)
Gate 3 GO v2 (8.25/10) — 2 itérations
Gate 5 GO v3 (8.75/10) — 3 itérations (convergence)
Gate 8 GO v1 (9.125/10) — 1 itération
Tests 174/174 legal-pre (coverage 92.89%)
Corrections sécurité 2 (S-01 regex, S-02 TOCTOU)

2. Patterns récurrents confirmés

P-01 — Review croisée ChatGPT détecte des vulnérabilités que les tests unitaires ne couvrent pas

  • Fréquence : PD-277 (S-01 regex /i, S-02 includes TOCTOU)
  • Impact : MAJEUR — 2 vulnérabilités corrigées avant Gate 8
  • Action : Conserver la review sécurité ChatGPT comme phase obligatoire. La review adversariale est le principal filet de sécurité pour les patterns interdits.

P-02 — Gate 8 GO en v1 quand corrections intégrées dans l'acceptabilité

  • Fréquence : PD-277 (v1 GO 9.125), PD-273 (v1 GO), PD-272 (v1 GO)
  • Impact : Gain de temps — pas de boucle correction Gate 8
  • Action : Maintenir le pattern "corriger avant d'assembler l'acceptabilité" plutôt que "documenter les écarts et corriger après Gate 8".

P-03 — Contractualiser le format dès la spec évite les boucles Gate 3→Gate 5

  • Fréquence : PD-277 (UUID v4 lowercase ASCII contractualisé en v2 spec), PD-274 (enum format)
  • Impact : La non-contractualisation en v1 a causé la boucle Gate 3 v1→v2
  • Action : Template spec enrichi : section "Formats et contraintes" obligatoire dès v1.

P-04 — Sonar indisponible ne bloque pas le workflow si ESLint + TSC clean

  • Fréquence : PD-277 (token Vault null)
  • Impact : Dérogation de fait acceptée mais documentée. DIV-03 = -1.0 sur maintainability.
  • Action : Ajouter un fallback sonar-scanner local si Vault inaccessible. Investiguer pourquoi le token Sonar est null.

3. Patterns nouveaux

N-01 — JSONB @> atomique élimine les forbidden patterns applicatifs

  • Contexte : usedNonces.includes(nonce) est un forbidden pattern (TOCTOU). Remplacé par NOT (used_nonces @> :nonceJson::jsonb) dans le WHERE de l'UPDATE.
  • Impact : Élimine la race condition au niveau DB sans lock explicite.
  • Candidat CLAUDE.md : Oui — pattern réutilisable pour toute vérification d'unicité sur JSONB array.

N-02 — Regex UUID v4 sans flag /i pour lowercase strict

  • Contexte : Le flag i sur la regex UUID permettait un bypass de l'anti-rejeu par variation de casse.
  • Impact : Vulnérabilité de sécurité MAJEUR corrigée.
  • Candidat CLAUDE.md : Oui — règle : "Toute regex de validation format DOIT être case-sensitive sauf justification explicite."

4. Améliorations de processus suggérées

ID Proposition Cible Priorité
A-01 Ajouter section "Formats et contraintes" obligatoire dans le template spec v1 ✅ FAIT (2026-02-28) — Section ajoutée dans 1 Specification.md v1.6.0 → v1.7.0 templates/prompts/1-specification.md HAUTE Résolue
A-02 Ajouter règle "regex case-sensitive par défaut" dans CLAUDE.md — Déjà couvert par A-01 (case-sensitivity contractualisée dans la spec via section "Formats et contraintes") CLAUDE.md backend MOYENNE N/A
A-03 Ajouter règle "JSONB @> pour unicité array" dans CLAUDE.md — Écarté (pattern trop spécifique, couvert par les forbidden patterns dans la spec) CLAUDE.md backend MOYENNE N/A
A-04 Investiguer token Sonar null dans Vault ✅ FAIT (2026-02-28) — Credentials à kv/data/ci/sonarqube, URL corrigée Opérationnel HAUTE Résolue
A-05 Documenter le fallback sonar-scanner local (brew install) — Déjà couvert (procedures.md interdit la dérogation ESLint+tsc, token Vault corrigé par A-04) CLAUDE.md governance BASSE N/A

5. Verdict de rétrospective

La story PD-277 s'est déroulée en une session continue avec un workflow fluide. Les 6 itérations de gate (2+3+1) montrent que la convergence s'améliore : Gate 8 GO en v1 grâce aux corrections intégrées en amont. Le principal enseignement est que la review croisée ChatGPT reste le mécanisme le plus efficace pour détecter les vulnérabilités de sécurité que les tests unitaires ne couvrent pas (regex /i, TOCTOU). Le pattern JSONB @> est désormais un invariant réutilisable pour toutes les vérifications d'unicité sur arrays JSONB dans le projet.