Aller au contenu

PD-274 — Specification Review (Gate 3)

Analyse de conformité contractuelle

Audit technique indépendant de la spécification PD-274 et de ses scénarios de test, orienté contractualisation, testabilité et conformité.


1. CONTRADICTIONS IDENTIFIÉES

C-01 : Contradiction terminologique entre INV-274-03 et CA-04

Type : Contradiction
Référence : PD-274-specification.md § Invariants INV-274-03 + § Critères CA-04 vs PD-274-tests.md § Règles non testables
Description : L'invariant INV-274-03 accepte deux prédicats alternatifs (service_method(anchor_batch, handleReorg) OU service_method(anchor_batch, reorg)), tandis que CA-04 impose strictement handleReorg uniquement. Le document de tests confirme cette contradiction dans la section "Règles non testables" §9.
Impact : Une implémentation conforme à INV-274-03 (utilisant reorg) échouerait CA-04, rendant le contrat inacceptable.
Gravité : Bloquant

C-02 : Contradiction sur l'exhaustivité du périmètre de test

Type : Contradiction
Référence : PD-274-specification.md § Hors périmètre + PD-274-tests.md § Tests INV-274-08
Description : La spécification exclut explicitement "Changement de schema SQL/DDL" du périmètre, mais INV-274-08 puis TC-INV-08 et TC-NR-03 testent l'absence de changements DDL, impliquant une surveillance active hors périmètre déclaré.
Impact : Ambiguïté sur les responsabilités de validation : si DDL est hors périmètre, pourquoi tester son invariance ?
Gravité : Majeur


2. AMBIGUÏTÉS IDENTIFIÉES

A-01 : Définition floue du "module logique anchor_batch"

Type : Ambiguïté
Référence : PD-274-specification.md § Hypothèses H-02 + multiples références aux faits Prolog
Description : La spécification utilise "module anchor_batch" sans définir précisément s'il s'agit d'un module NestJS, d'une entité logique Prolog, ou d'un namespace. L'hypothèse H-02 admet cette incertitude ("Le nom canonique de l'entité logique est anchor_batch dans les faits Prolog").
Impact : Risque de non-matching des prédicats si l'extraction de faits utilise un naming différent.
Gravité : Majeur

A-02 : Critère d'ordre des valeurs enum non spécifié

Type : Ambiguïté
Référence : PD-274-specification.md INV-274-01 + PD-274-tests.md TC-NOM-01
Description : INV-274-01 exige "exactement les 6 valeurs" et TC-NOM-01 spécifie un "Ensemble strict attendu", mais aucun critère d'ordre n'est défini pour Values dans entity_enum_values(anchor_batch, status, Values).
Impact : Un ordre différent (ex: alphabétique vs logique métier) pourrait invalider des tests stricts basés sur l'indexation.
Gravité : Mineur

A-03 : Seuil temporel d'exécution des vérifications non défini

Type : Ambiguïté
Référence : PD-274-tests.md § Observabilité § 8
Description : Les tests exigent des "traces horodatées" et "preuves immutables" mais aucun SLA d'exécution n'est contractualisé pour PV-ANCHOR-001.
Impact : Impossibilité de qualifier un timeout comme défaillance système vs latence acceptable.
Gravité : Mineur


3. RÈGLES NON TESTABLES IDENTIFIÉES

NT-01 : Indépendance entre type métier TypeScript et type SQL

Type : Non testable
Référence : PD-274-specification.md INV-274-02
Description : L'invariant impose que "la génération des valeurs d'enum DOIT être basée sur le type enum TypeScript [...], indépendamment du type de stockage SQL". Aucun observable ne permet de prouver cette causalité directe.
Impact : Impossible de distinguer une extraction correcte (depuis TS) d'une extraction fortuite (depuis SQL ou constante codée).
Gravité : Majeur

NT-02 : Conservation de la "conformité acquise" des 22 checks

Type : Non testable
Référence : PD-274-specification.md INV-274-06
Description : La notion de "protection de la conformité acquise" suppose une baseline stable, mais aucun mécanisme ne garantit l'immutabilité de cette baseline entre les exécutions.
Impact : Un changement de baseline externe pourrait invalider faussement la non-régression.
Gravité : Majeur


4. INCOHÉRENCES SPEC ↔ TESTS

I-01 : Couverture partielle des hypothèses explicites

Type : Incohérence Spec↔Tests
Référence : PD-274-specification.md § Hypothèses H-01 à H-05 vs PD-274-tests.md (absence de tests dédiés)
Description : La spécification déclare 5 hypothèses explicites dont la fausseté invaliderait les critères, mais aucun scénario de test ne valide ces hypothèses en amont.
Impact : Risque d'échec silencieux si une hypothèse devient fausse (ex: changement de stack, évolution du naming Prolog).
Gravité : Majeur

I-02 : Test négatif TC-NEG-02 sans invariant correspondant

Type : Incohérence Spec↔Tests
Référence : PD-274-tests.md TC-NEG-02 vs PD-274-specification.md (absence d'invariant sur cardinalité stricte)
Description : Le test TC-NEG-02 vérifie le rejet d'une "valeur enum additionnelle (ex: CANCELLED)" mais aucun invariant ne spécifie explicitement l'interdiction de valeurs supplémentaires.
Impact : Test basé sur une exigence implicite, non contractualisée.
Gravité : Mineur


5. HYPOTHÈSES DANGEREUSES IDENTIFIÉES

HD-01 : Stabilité des règles Prolog PV-ANCHOR-001

Type : Hypothèse dangereuse
Référence : PD-274-specification.md § Objectifs + références PV-ANCHOR-001
Description : La spécification assume que les 24 checks PV-ANCHOR-001 sont figés et que leurs prédicats d'entrée restent stables dans le temps.
Impact : Une évolution des règles formelles pourrait invalider rétroactivement une implémentation conforme.
Gravité : Majeur

HD-02 : Atomicité implicite des transitions d'état

Type : Hypothèse dangereuse
Référence : PD-274-specification.md § Flux nominaux - Modèle d'états + PD-274-tests.md TC-NOM-07, TC-NOM-08
Description : Le modèle de transitions suppose l'atomicité des changements d'état sans spécifier les mécanismes de gestion de concurrence ou de rollback.
Impact : Risque d'incohérence en cas d'accès concurrent ou de panne durant une transition.
Gravité : Majeur

HD-03 : Disponibilité continue de la baseline de référence

Type : Hypothèse dangereuse
Référence : PD-274-tests.md TC-NOM-05, TC-ERR-03, TC-NR-01
Description : Plusieurs tests exigent une "baseline avant correction" disponible, sans mécanisme de persistance ou de récupération spécifié.
Impact : Impossibilité d'exécuter les tests de non-régression si la baseline est perdue ou corrompue.
Gravité : Majeur


6. RISQUES SÉCURITÉ / CONFORMITÉ

RS-01 : Absence de contrôle d'intégrité des faits extraits

Type : Risque sécurité/conformité
Référence : PD-274-specification.md § Flux nominaux FN-01, FN-02 + PD-274-tests.md § Observabilité
Description : Aucun mécanisme de signature ou de checksum n'est spécifié pour garantir l'intégrité des faits Prolog entre extraction et évaluation.
Impact : Risque de manipulation des faits ou de corruption silencieuse, invalidant l'audit de conformité.
Gravité : Majeur

RS-02 : Traçabilité incomplète des verdicts d'audit

Type : Risque sécurité/conformité
Référence : PD-274-tests.md § Observabilité "preuve immutable de verdict"
Description : Bien que l'observabilité exige une "preuve immutable", aucun standard de traçabilité (format, chiffrement, horodatage certifié) n'est contractualisé.
Impact : Impossibilité de prouver l'authenticité d'un audit en cas de contestation ou d'audit de second niveau.
Gravité : Majeur


7. SYNTHÈSE

Points bloquants identifiés : 1

  • C-01 : Contradiction contractuelle sur le naming de la méthode de gestion reorg

Points majeurs identifiés : 9

  • C-02 : Contradiction périmètre vs surveillance DDL
  • A-01 : Définition floue du module logique
  • NT-01 : Règle de causalité non testable (TS vs SQL)
  • NT-02 : Conservation baseline non testable
  • I-01 : Hypothèses non validées par les tests
  • HD-01 : Stabilité des règles Prolog non garantie
  • HD-02 : Atomicité des transitions non spécifiée
  • HD-03 : Disponibilité baseline non garantie
  • RS-01 : Intégrité des faits non contrôlée
  • RS-02 : Traçabilité des verdicts non standardisée

Points mineurs identifiés : 2

  • A-02 : Ordre des valeurs enum non spécifié
  • I-02 : Test sans invariant correspondant

Verdict de revue : NON_CONFORME
La spécification présente des contradictions bloquantes et de multiples ambiguïtés majeures qui empêchent une implémentation contractuelle fiable.