Aller au contenu

PD-264 — Dossier de conformité (Étape 8)

Type de gate : CLOSURE

1. Documents de référence

  • PD-264-besoin — présent
  • PD-264-specification — présent
  • PD-264-tests — présent
  • PD-264-specification-review — présent
  • PD-264-plan — présent
  • PD-264-plan-review — présent
  • PD-264-code-contracts — présent
  • PD-264-acceptability — présent
  • PD-264-acceptability-review — présent
  • PD-264-rex — absent
  • PD-264-decomposition — présent

2. Rapport de confrontation

Voir : PD-264-confrontation-step8.md

3. Hypothèses déclarées

ID Hypothèse Impact si faux
H-01 Aucun token de production existant avec nonce VARCHAR en base de données de production Si tokens existants : la migration Phase A doit convertir correctement hex→binary ; le nonce de remplissage (0x00...00) est traçable mais ne respecte pas CSPRNG → acceptable car tokens pré-PD-264
H-02 Le trigger timestamp_token_immutable() est type-agnostic (RAISE EXCEPTION inconditionnel) Si le trigger inspectait les types de colonnes : la migration BYTEA casserait le trigger → vérifié : le trigger est bien inconditionnel
H-03 Le worker de réconciliation PD-55 ne fait pas d'hypothèse sur le format du nonce (VARCHAR vs BYTEA) Si le worker lit/compare le nonce en format spécifique : la migration casserait la réconciliation → à vérifier dans le code du worker
H-04 crypto.randomBytes(16) est disponible dans tous les environnements d'exécution (Node.js ≥ 14) Si CSPRNG indisponible : le système refuse de démarrer (fail-closed natif Node.js)
H-05 crypto.timingSafeEqual est disponible dans tous les environnements d'exécution (Node.js ≥ 6) Si indisponible : fallback interdit, fail-closed
H-06 Le timeout de l'appel QTSA HTTP est géré par le client QTSA existant (hors périmètre PD-264, réponse R08) Si pas de timeout : REQUEST_EMITTED peut rester indéfiniment → timeout BullMQ job comme filet de sécurité
H-07 Les fixtures mock TSA RFC sont conformes ASN.1/DER par construction (mock déterministe) Si fixture invalide : TC-264-14 détectera le problème avec openssl ts -verify
H-08 L'index UNIQUE sur nonce BYTEA est supporté par PostgreSQL sans limitation de taille (16 octets bien sous les 2704 octets max d'un index btree) Risque nul pour 16 octets

4. Écarts consolidés (Review + Confrontation)

Écarts BLOQUANTS : 0

Écarts MAJEURS : 0

Écarts MINEURS : 9

ID Type Source Description
DIV-01 ECT Tests Chi² (TC-264-08) non implémenté — proxy CSPRNG comportemental
DIV-02 ECT Tests Concurrence (TC-264-06) : mock séquentiel, pas PG réel
DIV-03 ECT Tests 3 placeholders TC-264-14/15/17 — dépendances QTSA/Prolog/nightly
DIV-04 ECT QG Sonar QG non exécuté localement (token indisponible)
DIV-05 ECT Code errorCode forcé QTSA_UNREACHABLE dans catch global
DIV-06 SEC Code errorMessage brut dans résultat job BullMQ
DIV-07 ECT Tests TC-264-07 critère timing simplifié (Cliff's delta seul)
ZO-01 ECT QG QG global backend en échec (hors périmètre PD-264)
ZO-02 ECT Tests Résultat TC-264-07 non rapporté explicitement

Zones d'ombre non bloquantes : 3

ID Description Mitigation
ZO-03 H-03 worker PD-55 non confirmé formellement Code worker utilise ORM, pas de casting VARCHAR
ZO-04 Convention nommage SQL non vérifiée Suit les conventions ProbatioVault existantes
ZO-05 Prolog 18/18 non vérifié Hors Jest, exécution séparée documentée

5. Scoring Gate 8 CLOSURE

Base 10, pénalités : -0.25 par écart MINEUR.

Conformity (conformité spec/implémentation)

  • 14/14 INV couverts, 12/12 CA couverts
  • 1 écart MINEUR (DIV-05: errorCode placeholder)
  • Score : 10 - 0.25 = 9.75

Test Coverage (couverture et qualité des tests)

  • 95/95 tests, coverage 95.38% > 80%
  • 4 écarts MINEURS (DIV-01 Chi², DIV-02 concurrence mock, DIV-03 placeholders, DIV-07 timing)
  • Score : 10 - 4×0.25 = 9.0

Security (sécurité)

  • 0 vulnérabilité CRITIQUE/MAJEURE, CSPRNG + timingSafeEqual + défense profondeur
  • 1 écart MINEUR (DIV-06: errorMessage brut)
  • Score : 10 - 0.25 = 9.75

Maintainability (maintenabilité)

  • Séparation responsabilités, automate déclaratif, migration réversible
  • 3 écarts MINEURS (DIV-04 Sonar non exécuté, ZO-01 QG global, ZO-02 résultat timing)
  • Score : 10 - 3×0.25 = 9.25

6. Verdict

  • conformity : 9.75
  • test_coverage : 9.0
  • security : 9.75
  • maintainability : 9.25
  • Moyenne : 9.4375
  • Score min : 9.0

Tous les scores >= 8 → GO

  • GO — conformité vérifiée
  • RESERVE — conformité partielle, conditions à satisfaire
  • NON_CONFORME — écarts bloquants identifiés
  • ESCALADE — décision humaine requise