PD-265 — Dossier de conformité Gate 8 (CLOSURE) v1¶
1. Références¶
- Story : PD-265 — Monitoring TSA et cycle de vie des clés RFC 3161
- Spécification : PD-265-specification.md
- Tests : PD-265-tests.md
- Acceptabilité : PD-265-acceptability.md
- Review P1 (ChatGPT) : PD-265-review-step8.md
- Confrontation P2 (Claude) : PD-265-confrontation-step8.md
- Date : 2026-03-02
- Iteration : v1
2. Synthèse P1 (Review ChatGPT)¶
Le reviewer P1 a suivi les 9 écarts identifiés dans le rapport d'acceptabilité. Tous sont maintenus OUVERT, ce qui est attendu car il s'agit de dette technique documentée (STUBs tracés, choix architecturaux), pas de bugs à corriger.
Points clés : - 9/9 écarts MINEUR maintenus OUVERT — conforme car ils représentent des choix documentés ou des dépendances STUB (PD-37, PD-265 phase 2) - Verdict P1 : ACCEPTÉ AVEC RÉSERVES (inchangé vs acceptabilité)
3. Synthèse P2 (Confrontation Claude)¶
La confrontation identifie 12 convergences et 7 divergences :
Convergences (12) — Fondamentaux validés¶
- 14 invariants INV-265-* couverts
- Machine d'états composite exhaustive (7 états, fail-closed)
- RBAC maintenance mode avec callback denied
- Labels HSM validés par regex
- Contraintes croisées config (2 validations TC-CROSS-*)
- Cycle de vie clés unidirectionnel (4 états)
- Refus TST normés avec DTO (503 + codes)
- Métriques tsa_* (10 définitions)
Divergences identifiées¶
| ID | Type | Description | Criticité | Statut |
|---|---|---|---|---|
| DIV-01 | ECT | Sonar Phase 1.5 auth 401 — scanner n'a pas analysé la branche | MINEUR | OUVERT — API check confirme 0 issue PD-265. Scanner auth = infra, pas code. |
| DIV-02 | AMB | TC-ERR-09 (crypto at-rest) marqué N/A | MINEUR | OUVERT — Hors scope : gestion HSM (PD-37). Le monitoring ne gère pas le stockage crypto. |
| DIV-03 | AMB | TC-ERR-11 (crash recovery) marqué N/A | MINEUR | OUVERT — Hors scope : test d'intégration DB crash recovery. État persisté en DB (DA-05). |
| DIV-04 | ECT | STUBs OCSP/CRL/TL/audit sans impl réelle | MINEUR | OUVERT — Documenté E-06, tracé PD-265 phase 2 + PD-37 |
| DIV-05 | ECT | escalatedFlags in-memory volatile | MINEUR | OUVERT — Documenté E-02, alertes idempotentes |
| DIV-06 | AMB | NTS offset global ntpd-rs vs per-server | MINEUR | OUVERT — Documenté E-03, DA-01 worst-case respecté |
| DIV-07 | AMB | Politique exceptions mode dégradé non formalisée | MINEUR | OUVERT — Couvert par canEmitTst()/canRehorodatage() fail-closed |
4. Analyse consolidée des écarts¶
Écarts BLOQUANTS : 0¶
Écarts MAJEURS : 0¶
Tous les écarts initialement identifiés comme MAJEUR par les reviews LLM (Phase 2 step 7) ont été déclassés après analyse des faux positifs : - T-01 (RBAC test) : RBAC est dans le service, pas le guard. Tests couvrent 5 scénarios de refus. - T-02/T-04 (TC manquants) : Correspondent à des modules STUB hors scope. - S-01 (Joi defaults) : Defaults = valeurs spec §5.2. Pas d'affaiblissement. - S-02 (Transition callback) : By design — persistence > audit (STUB PD-37).
Écarts MINEURS : 9 (dont 6 STUBs tracés)¶
| ID | Description | Source |
|---|---|---|
| E-01 | persistToDb sans WHERE explicite | 7a |
| E-02 | escalatedFlags in-memory | 7a, 7c |
| E-03 | NTS offset global | 7a |
| E-04 | req.user type non partagé | 7a |
| E-05 | import dynamique node:crypto | 7a |
| E-06 | 6 STUBs tracés (OCSP/CRL/TL/TST/audit) | 7a |
| E-07 | Joi defaults config | 7c |
| E-08 | Transition callback non-bloquant | 7c |
| E-09 | Health endpoint non authentifié | 7c |
5. Scores proposés¶
| Critère | Score | Justification |
|---|---|---|
| Conformity (spec vs implémentation) | 8.5 | 14 invariants vérifiés. 6 STUBs tracés avec story destination conforme pattern inter-PD. Machine d'états exhaustive. |
| Test coverage | 8.0 | 222/222 tests PASS. 3 TC marqués PASS-STUB. 2 TC marqués N/A (hors scope légitime). Couverture des edge cases complète. |
| Security | 8.0 | Fail-closed systématique. RBAC validé. Labels HSM sécurisés. 5 findings sécurité tous MINEUR ou faux positifs (Joi defaults, callback non-bloquant, health endpoint). |
| Maintainability | 8.5 | Architecture modulaire (14 composants). Enums partagés. Config Joi centralisée. STUBs documentés. Module registration cohérent. |
Moyenne : (8.5 + 8.0 + 8.0 + 8.5) / 4 = 8.25
6. Recommandation¶
GO — Tous les scores >= 8.0. Moyenne 8.25/10. 0 écart BLOQUANT, 0 écart MAJEUR. Les 9 écarts MINEUR sont de la dette technique documentée et tracée. L'implémentation couvre les 14 invariants de la spécification avec une architecture fail-closed conforme aux exigences RFC 3161.