PD-265 — Dossier de conformité Gate 5 (AMBIGUITY) — v2¶
Date : 2026-03-02 Gate : 5 (AMBIGUITY) Itération : v2 Documents évalués : PD-265-plan.md (v2 corrigé), code-contracts.yaml (v2) Sources : Review ChatGPT v2 (Phase 1), Confrontation Claude v2 (Phase 2)
1. Synthèse¶
Review ChatGPT v2 : 2 BLOQUANTS, 7 MAJEURS, 3 MINEURS. Confrontation Claude v2 : 14 convergences, 8 divergences (2 BLOQUANTS, 5 MAJEURS, 3 MINEURS), 7 zones d'ombre. Recommandation : Rework.
Analyse croisée des corrections v1→v2 :
Les 6 MAJEURS v1 ont été traités : - ✅ Marge deadline re-horodatage : résolu (scheduler 12h, marge 12h vs deadline 24h) - ✅ Section contraintes techniques : résolu (§13 ajouté) - ✅ Frontières CC reference-clock.service.ts : résolu (ajouté dans C4) - ✅ Wiring controller NestJS : résolu (TsaMonitoringController documenté) - ⚠️ reasonCode contractualisés : partiellement résolu — les codes KEY_RETIRED_SLA_BREACH et KEY_ARCHIVED_SLA_BREACH ont été contractualisés, MAIS la correction a fusionné deux enums spec distinctes (refusalReasonCode et reasonCode) en un seul enum plan, avec des renommages non conformes. - ⚠️ État dérivé clarifié : partiellement résolu — DA-05 clarifie la relation flags→état, MAIS la formulation simplifiée (flags.length > 0 → DEGRADED) ne distingue pas 1 flag (→ DEGRADED_*) de >=2 flags (→ DEGRADED) comme la spec l'exige.
Les corrections ont introduit 2 écarts de formulation dans DA-05 et DA-02 qui sont confirmés comme réels par les deux sources.
Analyse croisée des 2 BLOQUANTS v2 :
| BLOQUANT | Review | Confrontation | Analyse croisée |
|---|---|---|---|
| DA-05 state calc | BLOQUANT (modèle d'état contractuel cassé) | BLOQUANT DIV-01 (DA-05 vs Spec §5.4) | Confirmé comme écart réel mais déclassé en MAJEUR : Le plan section 5 (mapping tests) utilise correctement DEGRADED_NTS, DEGRADED_REVOCATION etc. avec single flag. L'erreur est localisée dans le texte de DA-05 (3 lignes). L'intention de conception est correcte (confirmé par le test mapping). Fix trivial : aligner DA-05 sur le spec §5.4. |
| Enum fusion | BLOQUANT (refus API non conformes) | BLOQUANT DIV-02 (plan DA-02 vs Spec §5.1/§5.9) | Confirmé comme écart réel mais déclassé en MAJEUR : Le plan section 5 utilise correctement les valeurs spec (refusalReasonCode=NTS_DEGRADED etc.). L'erreur est dans DA-02 qui fusionne deux enums et renomme des codes. Les codes ajoutés (KEY_RETIRED_SLA_BREACH, KEY_ARCHIVED_SLA_BREACH) sont légitimes comme extension, mais les renommages (TL_STALE→TRUSTLIST_EXPIRED etc.) et la fusion sont non conformes. Fix : restaurer deux enums séparées, garder nommage spec. |
Justification des déclassements : Les deux BLOQUANTs concernent des formulations de texte dans DA-05 et DA-02 introduites par les corrections v2. Le design architectural sous-jacent est correct (confirmé par les test mappings section 5 qui sont cohérents avec la spec). La résolution est purement rédactionnelle. Les deux sources confirment l'écart mais ne contestent pas le design.
2. Écarts consolidés¶
BLOQUANTS (0 — 2 déclassés en MAJEUR après analyse croisée)¶
Aucun BLOQUANT résiduel.
MAJEURS (7 — dont 2 déclassés + 5 issues préexistantes/nouvelles)¶
| ID | Type | Résumé | Critère | Statut v1→v2 |
|---|---|---|---|---|
| AMB-01-v2 | Formulation DA-05 | Calcul tsaServiceState : flags.length > 0 → DEGRADED ne distingue pas 1 flag (DEGRADED_*) vs >=2 (DEGRADED) | risk_mitigation | Nouveau (introduction par correction v2) |
| AMB-02-v2 | Formulation DA-02 | Fusion enum refusalReasonCode + reasonCode + renommages non spec | coherence | Nouveau (introduction par correction v2) |
| AMB-03-v2 | Gap spec→plan | Agrégation NTS multi-serveurs non spécifiée + DA-01 élevé en invariant CC | coverage | Préexistant v1 (zone d'ombre confirmée) |
| AMB-04-v2 | Comportement non contractualisé | Fail-closed du cache C3 au démarrage (DB down) non défini | risk_mitigation | Préexistant v1 (zone d'ombre confirmée) |
| AMB-05-v2 | Overlap code-contracts | tsa-key-lifecycle-metadata.entity.ts dans CC-02 ET CC-07 | coherence | Préexistant v1 (non flaggé) |
| AMB-06-v2 | Incohérence plan | DA-05 "state jamais persisté" vs C2 entity "state" column | coherence | Nouveau (introduction par correction v2) |
| AMB-07-v2 | Lacune §13 | Framework de test (Jest) non explicité dans contraintes techniques | feasibility | Préexistant v1 (absence §13) |
MINEURS (3)¶
| ID | Résumé |
|---|---|
| MIN-01-v2 | HTTP 503 non spécifié dans spec (choix plan sémantiquement correct) |
| MIN-02-v2 | Dépendances inter-PD sans statut DONE/TODO/STUB |
| MIN-03-v2 | Variables CI pour tests intégration non documentées |
3. Progression v1 → v2¶
| Métrique | v1 | v2 | Delta |
|---|---|---|---|
| BLOQUANTS | 0 (1 déclassé) | 0 (2 déclassés) | 0 |
| MAJEURS | 9 | 7 | -2 |
| MINEURS | 6 | 3 | -3 |
| MAJEURs v1 résolus | — | 4/6 | — |
| MAJEURs v1 partiellement résolus | — | 2/6 | — |
| Nouveaux MAJEURs introduits | — | 3 | — |
4. Scoring par critère¶
| Critère | Score v1 | Score v2 | Justification v2 |
|---|---|---|---|
| feasibility | 8.5 | 8.5 | §13 ajouté, wiring documenté. 1 MAJEUR résiduel (framework test). Plan toujours réaliste avec 14 composants. |
| coverage | 8.0 | 8.5 | 14/14 invariants, 12/12 CA, contraintes techniques ajoutées. 1 MAJEUR (agrégation NTS DA-01 gap spec). |
| risk_mitigation | 7.5 | 8.0 | Marge deadline fixée (+0.5). reasonCode contractualisés. 2 MAJEURs résiduels (DA-05 formulation, cache fail-closed). Amélioration nette. |
| coherence | 8.0 | 7.5 | Frontières CC fixées. MAIS corrections ont introduit fusion enum et incohérence state persist. 3 MAJEURs dont 2 introduits par v2. Régression localisée. |
Moyenne v1 : 8.00 Moyenne v2 : (8.5 + 8.5 + 8.0 + 7.5) / 4 = 8.125 Delta : +0.125
5. Verdict¶
Les corrections v2 ont amélioré risk_mitigation (+0.5) et coverage (+0.5) mais dégradé coherence (-0.5) par introduction d'écarts rédactionnels dans DA-05/DA-02. Le plan architectural sous-jacent est solide (14 convergences confirmées). Les écarts résiduels sont principalement des formulations à corriger (DA-05, DA-02) et des zones d'ombre préexistantes (cache, NTS aggregation).