[0m
build · gpt-5.2 [0m [0m✱ [0mGlob "**/PD-265-plan.md"[90m 0 matches[0m
PD-265 — Plan d’implémentation : Revue¶
1. Références¶
- Spécification : PD-265-specification.md
- Tests contractuels : PD-265-tests.md
- Plan d’implémentation : PD-265-plan.md
- Date de revue : 2026-03-02
- Reviewer : Auditeur technique indépendant (OpenCode)
2. Constatations (écarts)¶
| Type | Référence (Spec/Test/Plan) | Description | Impact | Gravité (BLOQUANT/MAJEUR/MINEUR) |
|---|---|---|---|---|
| Non-conformité Spec | Spec §5.9 / Plan DA-02 | Ajout de reasonCode non prévus (KEY_RETIRED_SLA_BREACH, KEY_ARCHIVED_SLA_BREACH) dans PV_TSA_CRITICAL_ALERT | Événements d’audit potentiellement non conformes au contrat (enum) | BLOQUANT |
| Non-conformité Spec | Spec §5.4 / Plan DA-05 | Fail-closed startup retourne refusalReasonCode="MAINTENANCE" sans maintenanceMode=true (et sans action RBAC) | Refus/API et traçabilité incohérents (motif/état), risque de non-conformité CA-11/CA-12 | MAJEUR |
| Non-conformité Spec | Spec §5.2 / Plan DA-05 | Introduction d’un paramètre/contrat runtime non spécifié (C1.dbStartupTimeout, comportement “NE DEMARRE PAS”) | Comportement non contractualisé, dépendance env non listée dans la spec | MAJEUR |
| Hypothèse implicite | Spec §5.2 (min 1h) / Plan C8 | Scheduler re-horodatage fixé à 12h (“marge vs 24h”) alors que rehorodatageProcessingDeadline est configurable min 1h | Possibilité structurelle de dépassement de deadline (INV-265-06) selon configuration | MAJEUR |
| Non-conformité Spec | Spec §5.2, INV-265-01 / Plan DA-01 | Agrégation NTS multi-serveurs “worst-case ANY KO => flag” non définie contractuellement par la spec | Interprétation libre d’un point non spécifié ; états/flags peuvent diverger selon implémentations | MAJEUR |
| Code Contract — Cohérence | CC-265-02 / Plan DA-05, C2 | Code contract impose tsa_degradation_state avec colonne state, le plan spécifie explicitement “pas de colonne state” (state dérivé) | Contradiction contractuelle entre artefacts, risque de livraison incohérente multi-agent | MAJEUR |
| Code Contract — Frontière | CC-265-02, CC-265-07 | Chevauchement de périmètre fichiers (src/modules/tsa/entities/tsa-key-lifecycle-metadata.entity.ts listé dans 2 modules) | Ambiguïté de responsabilité/ownership, risque de conflits et d’auditabilité | MAJEUR |
| Code Contract — Complétude | Plan DA-02/C3 / Code contracts | Fichier critique src/modules/tsa/enums/audit-reason-code.enum.ts présent dans le plan mais absent des périmètres files: des code contracts | Zone non couverte par contrat (interfaces/enums audit), risque de dérive non tracée | MAJEUR |
| Code Contract — Invariant | CC-265-04 / Spec INV-265-01 | Code contract mandate/fige “worst-case” et interdit moyenne/médiane alors que la spec ne contractualise pas l’agrégation multi-serveurs | Les invariants de code contract ne sont pas un sous-ensemble strict de la spec | MAJEUR |
| Contrainte technique non documentée | Plan §13 | Dépendances inter-PD non listées avec statut (DONE/TODO/STUB acceptable) | Traçabilité et risque d’intégration non auditables | MINEUR |
| Contrainte technique non documentée | Plan §13 / Périmètre tests §11 | Variables CI/env d’intégration non documentées (ex: DATABASE_URL, CI=true) malgré DB PostgreSQL réelle en tests d’intégration/E2E | Reproductibilité CI affaiblie, risque de tests non rejouables | MINEUR |
Écarts (détails au format contractuel) :
Type : Non-conformité Spec
Référence : Spec §5.9 (reasonCode enum PV_TSA_CRITICAL_ALERT) / Plan DA-02
Description : Le plan “contractualise” l’ajout de reasonCodes KEY_RETIRED_SLA_BREACH et KEY_ARCHIVED_SLA_BREACH dans l’enum reasonCode des événements d’alerte critique.
Impact : Les événements produits peuvent être non conformes à l’enum contractuel ; un tiers auditeur/consommateur strict peut rejeter l’événement, rupture d’auditabilité.
Gravité : BLOQUANT
Type : Non-conformité Spec
Référence : Spec §5.4 (MAINTENANCE, refusalReasonCode) / Plan DA-05
Description : En cas de cache non initialisé (DB indisponible au démarrage), canEmitTst() retourne refusalReasonCode="MAINTENANCE" comme fail-closed, sans lien contractuel avec maintenanceMode=true (action manuelle + RBAC).
Impact : Motif normé et état peuvent être incohérents ; risque de non-conformité CA-11 (motif/état/flags) et CA-12 (MAINTENANCE strictement RBAC + journalisé).
Gravité : MAJEUR
Type : Non-conformité Spec
Référence : Spec §5.2 (paramètres contractualisés) / Plan DA-05
Description : Le plan introduit un paramètre et un comportement runtime non décrits par la spec : C1.dbStartupTimeout et “l’application ne démarre pas si DB indisponible > timeout”.
Impact : Dépendance environnementale et comportement non contractualisés ; risque d’écarts entre environnements et d’audit tiers (conditions d’arrêt non prévues).
Gravité : MAJEUR
Type : Hypothèse implicite
Référence : Spec §5.2 (rehorodatageProcessingDeadline min=1h) / Plan C8
Description : Le plan fixe un cadencement du scheduler de re-horodatage à 12h (“marge vs 24h”), sans relation contractuelle avec la valeur configurable rehorodatageProcessingDeadline (min 1h).
Impact : Pour des configurations valides (deadline < 12h), le design peut empêcher le respect du délai, déclenchant non-conformité INV-265-06.
Gravité : MAJEUR
Type : Non-conformité Spec
Référence : Spec §5.2 (ntsReferenceServers), INV-265-01 / Plan DA-01
Description : Le plan définit une logique d’agrégation multi-serveurs (worst-case ANY) et une métrique dérivée (max abs offset) alors que la spec ne définit pas la réduction multi-serveurs.
Impact : Interprétation libre ; deux implémentations peuvent produire des états/flags différents pour les mêmes mesures, contestable en audit.
Gravité : MAJEUR
Type : Code Contract — Cohérence
Référence : Module tsa-monitoring-entities (CC-265-02) / Plan DA-05, C2
Description : CC-265-02 impose “tsa_degradation_state singleton (flags + state + timestamps)” alors que le plan (et la spec) spécifie explicitement “pas de colonne state, state dérivé des flags”.
Impact : Contradiction entre artefacts contractuels (plan vs code contract), risque de dérives d’implémentation et de non-alignement multi-agents.
Gravité : MAJEUR
Type : Code Contract — Frontière
Référence : Modules CC-265-02 vs CC-265-07 (files)
Description : Le fichier src/modules/tsa/entities/tsa-key-lifecycle-metadata.entity.ts apparaît dans deux modules de code contracts (entities et lifecycle-extension).
Impact : Frontières non disjointes ; ambiguïté de responsabilité et risque de modifications concurrentes non maîtrisées.
Gravité : MAJEUR
Type : Code Contract — Complétude
Référence : Plan DA-02/C3 (audit-reason-code.enum.ts) / Code contracts (files)
Description : Le plan référence src/modules/tsa/enums/audit-reason-code.enum.ts (enum audit reasonCode), mais aucun code contract ne l’inclut dans son périmètre de fichiers.
Impact : Composant critique (nomenclature d’audit) sans frontière/contrat ; risque de divergence non détectée.
Gravité : MAJEUR
Type : Code Contract — Invariant
Référence : Module nts-monitoring (CC-265-04) / Spec INV-265-01
Description : CC-265-04 mandate DA-01 (agrégation worst-case) et interdit moyenne/médiane alors que la spec ne contractualise pas l’agrégation multi-serveurs.
Impact : Les invariants du code contract excèdent la spec (pas un sous-ensemble strict) ; conflit potentiel avec conformité contractuelle.
Gravité : MAJEUR
Type : Contrainte technique non documentée
Référence : Plan §13 (Contraintes techniques) / Dépendance inter-PD
Description : Absence de liste explicite des dépendances inter-PD avec statut (DONE/TODO/STUB acceptable).
Impact : Perte de traçabilité d’intégration et risque de blocage non anticipé.
Gravité : MINEUR
Type : Contrainte technique non documentée
Référence : Plan §13 (CI/CD) / Variables CI
Description : Variables d’environnement nécessaires aux tests d’intégration/E2E avec PostgreSQL réelle non documentées (ex: DATABASE_URL, CI=true).
Impact : Reproductibilité des tests et auditabilité CI affaiblies.
Gravité : MINEUR
3. Synthèse¶
- Nombre d’écarts par gravité : BLOQUANT=1, MAJEUR=8, MINEUR=2
- Points critiques : extension non contractuelle des enums d’audit (§5.9) ; fail-closed startup utilisant MAINTENANCE hors RBAC ; hypothèse temporelle 12h incompatible avec deadline min 1h.
4. Verdict de la revue¶
- Statut : ⛔ Rejeté
- Motif synthétique : le plan introduit des comportements/valeurs non spécifiés (enum reasonCode audit, agrégation NTS multi-serveurs, paramètre startup) et contient une hypothèse temporelle incompatible avec les bornes contractuelles (
rehorodatageProcessingDeadlinemin 1h).