Aller au contenu

Retrospective — PD-282

Resume story

  • Story : PD-282 — ProofEnvelope : scellement HSM (PROOF-14) + materiel validation eIDAS (PROOF-05b)
  • Domaine : legal-compliance
  • Date : 2026-03-02
  • Gates : G3 RESERVE (v3, 8.25/10) | G5 RESERVE (v3, 7.875/10) | G8 GO (v2, 9.125/10)
  • Score convergence moyen : 8.42/10
  • Temps actif : ~5h | Iterations totales : 8 (G3:3, G5:3, G8:2)
  • Learnings captures : 11

Learnings de cette story

Depuis les gates

Gate Verdict Score Iter Tags Note
G3 v1 NON_CONFORME 6.56 3 #hsm, #eidas, #proof-envelope, #seal Testability 4.75 (formats non contractualises). Fixer les defauts formels expose les lacunes de fond.
G3 v3 RESERVE 8.25 - #proof-envelope, #eidas, #state-machine, #ddl Spec corrigee pendant impl — re-gate 3 valide absence de regression
G5 v1 NON_CONFORME 6.69 3 #hsm, #eidas, #plan, #code-contracts INV-282-03 trop large ; invariants normatifs vs techniques non distingues
G5 v3 RESERVE 7.875 - #proof-envelope, #eidas, #signedAt, #invariant-precision Convergence atteinte (delta < 0.5, mean >= 7)
G8 v1 NON_CONFORME 7.19 2 #crypto, #hsm, #ecdsa, #ocsp, #jsonb, #trust-anchor 3 BLOQUANTS : double-hash crypto, structure JSONB, trust anchor bypass
G8 v2 GO 9.125 - #crypto, #security, #ocsp, #ssrf +1.94 delta — corrections ciblees tres efficaces

Depuis le REX

# Pattern Tags
1 crypto.verify(null) pour raw ECDSA matching CKM_ECDSA — createVerify() ajoute un hash implicite #crypto, #hsm, #ecdsa, #nodejs
2 Stocker l'objet direct dans JSONB, pas le wrapper de transport #crypto, #jsonb
3 trustedRoots obligatoire dans tout service de verification de certificats #crypto, #security, #trust
4 Triple NON_CONFORME v1 = complexite maximale (8+ iterations) #workflow, #gate, #pattern
5 ALTER TYPE ADD VALUE PostgreSQL dans transaction separee (55P04) #postgresql, #migration, #enum
6 SSRF via AIA certificate extensions — allowlist OCSP obligatoire #security, #ocsp, #ssrf

Tags a forte recurrence (>= 5 stories) — alerte forte

Tag Stories Tendance Impact
#crypto 24 stories Stable — domaine structurant Chaque story crypto genere des pieges non anticipes. Axe fragile en testability.
#security 16 stories Stable Fail-closed systematiquement absent en v1 → NON_CONFORME
#code-contracts 10 stories Stable Ancre dans le workflow, mais invariants parfois trop larges (PD-282 INV-03)
#hsm 6 stories En hausse Incompatibilites non documentees (CKM_ECDSA, double-hash, dsaEncoding)
#postgresql 6 stories Nouveau cluster Chaque migration DDL revele un piege different
#compliance 7 stories En hausse Domaine legal-compliance en croissance rapide

Patterns confirmes cross-stories (>= 3 occurrences)

Pattern Occ. Stories recentes Impact
Fail-closed obligatoire securite 11+ PD-282, PD-242, PD-39, PD-82 NON_CONFORME quand manquant
Format non contractualise en spec v1 12+ PD-282, PD-280, PD-277 Testability < 6 en v1
Machine a etats explicite 11+ PD-282 (SEALED), PD-280 (PENDING), PD-278 (DIP) GO accelere quand bien formalise
Stubs inter-PD documentes 11+ PD-282 (OCSP Mode B), PD-251 MAJEUR → mineur quand trace
Triple NON_CONFORME v1 3 PD-282, PD-280, PD-278 Predicteur : 8+ iter, corrections structurelles
Migration DDL PostgreSQL 4+ PD-282 (55P04), PD-55 (subquery), PD-264, PD-272 Pipeline CI casse

Axe fragile (score moyen < 7.5)

Axe Gate Score PD-282 Score domaine moyen
testability G3 7.5 (v3, apres 4.75 en v1) ~7.2
coverage G5 7.5 (v3) ~7.5
coherence G5 7.5 (v3, regresse de 8.5 en v1) ~7.8

Nouveaux patterns identifies (PD-282)

Pattern Source Impact
Double-hash crypto pipeline HSM E-01 BLOQUANT — non detectable par mocks, masque par taille identique SHA3-384/SHA-384
JSONB wrapper vs objet direct E-02 Bug silencieux — mocks DB ne le detectent pas
SSRF via AIA certificate extensions S-03 ELEVE — vecteur d'attaque sur toute story OCSP
Gate 8 delta massif apres corrections BLOQUANTES +1.94 Les BLOQUANTS bien identifies convergent vite

Recommandations

Priorite haute (>= 5 stories ou NON_CONFORME recurrent)

  • R-01 : Ajouter dans templates/prompts/1-specification.md l'exigence de documenter le pipeline sign ET verify complet (algorithme, encodage DER/IEEE-P1363, API Node.js cible) pour toute story avec signature HSM.
  • 6 stories HSM, toutes avec pieges crypto non anticipes.

  • R-02 : Ajouter dans templates/prompts/7c-review-security.md la verification que tout parametre trustedRoots / trust-store est obligatoire dans les services de verification de certificats.

  • PD-282 S-01 — bypass silencieux. 11+ stories fail-closed.

  • R-03 : Ajouter dans templates/prompts/7a-review-code.md la detection de createVerify(ALG).update(hash) quand le HSM utilise CKM_ECDSA (raw sign).

  • PD-282 E-01. Piege non intuitif Node.js crypto + CloudHSM.

  • R-04 : Documenter le pattern commitTransaction() / startTransaction() pour migrations TypeORM avec ALTER TYPE ADD VALUE dans CLAUDE.md section "Erreurs a eviter".

  • 2 occurrences (PD-282, PD-279/PD-278). Erreur PostgreSQL 55P04.

Priorite normale

  • R-05 : Pour les stories OCSP/CRL, contractualiser Mode A (offline) vs Mode B (online constitutif) des la spec.
  • PD-282 — Mode B reste dette technique.

  • R-06 : Exiger un test round-trip DB (INSERT + SELECT + assert structure) pour chaque nouvelle colonne JSONB complexe dans le template agent-entity.

  • PD-282 E-02 — bug silencieux non detecte par mocks.

  • R-07 : Verifier les URLs cibles des requetes OCSP contre une allowlist — ajouter dans review security.

  • PD-282 S-03 — vecteur SSRF non corrige.

  • R-08 : Maintenir un registre des tests CI en echec pre-existants par module.

  • 12 echecs pre-existants confondus avec regressions potentielles.

Signal CLAUDE.md

Les patterns suivants justifient une mise a jour de CLAUDE.md :

Section "Erreurs a eviter" (existante)

Ajouts suggeres :

5. Ne JAMAIS utiliser createVerify(ALG).update(hash) pour verifier une signature HSM CKM_ECDSA
   → utiliser crypto.verify(null, hash, key, sig) pour raw ECDSA (cf. PD-282 E-01)

6. ALTER TYPE ADD VALUE PostgreSQL : TOUJOURS dans une transaction separee
   → commitTransaction() AVANT toute clause WHERE utilisant la nouvelle valeur (cf. PD-282, PD-279)

7. trustedRoots/trust-store OBLIGATOIRE dans tout service de verification de certificats
   → parametre optionnel = bypass silencieux (cf. PD-282 S-01)

Section "Patterns operationnels" (existante)

Ajout suggere :

### SSRF via AIA certificate extensions
Les URLs de responders OCSP extraites des extensions AIA des certificats X.509
ne sont PAS fiables. Valider contre une allowlist avant tout appel HTTP.

CONSTITUTIONAL.md (Article IV)

Ajout suggere :

Tout module de signature cryptographique DOIT avoir un test contractuel de roundtrip
(sign puis verify sur les memes donnees). Sign et verify ne doivent JAMAIS etre testes
isolement. (Issu PD-282 — double-hash non detecte par tests isoles)

La mise a jour de CLAUDE.md et CONSTITUTIONAL.md reste a la discretion du PO.