Aller au contenu

PD-272 — Audit de Spécification — Immutabilité DB des preuves composites

Synthèse de l'audit

Statut global : Spécification partiellement conforme avec écarts majeurs identifiés.

Points critiques détectés : - 6 ambiguïtés majeures - 3 contradictions internes - 2 règles non testables - 4 incohérences Spec↔Tests - 2 hypothèses dangereuses - 1 risque sécurité/conformité


Écarts identifiés

Type : Ambiguïté

Référence : PD-272-specification.md, Section 3 (Définitions) Description : Le terme "ProofEnvelope / preuve composite" utilise deux terminologies différentes pour désigner le même concept. La spécification alterne entre "ProofEnvelope" et "preuve composite" sans établir d'équivalence formelle. Impact : Risque de confusion dans l'implémentation et les tests, particulièrement dans les noms de variables et méthodes. Gravité : Majeur

Type : Contradiction

Référence : PD-272-specification.md, Section 9 vs Section 10 Description : La section 9 (Hypothèses) mentionne "Aucun cas métier légitime n'exige la suppression/mise à jour" (H-272-03) tandis que la section 10 (Points à clarifier) n'évoque aucune contradiction avec cette hypothèse, suggérant implicitement que des cas légitimes pourraient exister. Impact : Ambiguïté sur la portée réelle de l'immutabilité et possibles contournements futurs. Gravité : Majeur

Type : Ambiguïté

Référence : PD-272-specification.md, Section 6 (Cas d'erreur) Description : Les messages d'erreur contractuels sont définis mais le code SQLSTATE PostgreSQL correspondant n'est pas spécifié. Section 10 le mentionne comme "point à clarifier" mais cela impacte la testabilité. Impact : Tests incomplets ne pouvant vérifier la conformité complète du contrat d'erreur PostgreSQL. Gravité : Majeur

Type : Règle non testable

Référence : PD-272-specification.md, Section 4, INV-272-07 Description : L'invariant INV-272-07 concernant le chiffrement des artefacts cryptographiques temporaires n'a aucun observable défini dans le périmètre de la story. Impact : Invariant déclaré "non négociable" mais impossible à valider, créant un risque d'acceptation formelle incomplète. Gravité : Bloquant

Type : Incohérence Spec↔Tests

Référence : PD-272-tests.md, Section 5, TC-ERR-03 vs PD-272-specification.md, Section 6 Description : Le test TC-ERR-03 définit un scénario de "Non-conformité détectée" qui n'est pas prévu dans les cas d'erreur de la spécification. La spécification ne documente que les erreurs liées aux opérations DML, pas aux échecs de contrôle formel. Impact : Test couvrant un comportement non spécifié, risque de faux positifs. Gravité : Majeur

Type : Contradiction

Référence : PD-272-specification.md, Section 5 vs PD-272-tests.md, Section 6 Description : La spécification décrit 4 flux nominaux mais la matrice de couverture des tests référence des invariants avec des "transitions sortantes interdites" (INV-272-06) qui ne sont pas explicitement documentées dans les flux. Impact : Discordance entre modèle métier implicite (machine à états) et flux explicites. Gravité : Majeur

Type : Hypothèse dangereuse

Référence : PD-272-specification.md, Section 9, H-272-02 Description : L'hypothèse que check_proof_immutable_trigger vérifie bien un blocage UPDATE ET DELETE n'est qu'une hypothèse, pas une exigence contractuelle vérifiée. Impact : Risque de faux positif de conformité si le contrôle ne valide qu'une partie des opérations interdites. Gravité : Majeur

Type : Ambiguïté

Référence : PD-272-specification.md, Section 10 vs PD-272-tests.md, Section 3 Description : Le "schéma PostgreSQL explicite" est identifié comme point à clarifier dans la spec mais les tests TC-NOM-01 et TC-NOM-02 présupposent un accès direct à "legal_composite_proofs" sans qualification de schéma. Impact : Tests potentiellement non reproductibles selon l'environnement de déploiement. Gravité : Majeur

Type : Règle non testable

Référence : PD-272-specification.md, Section 4, INV-272-05 Description : L'invariant INV-272-05 stipule une "règle d'immutabilité inconditionnelle" mais ne définit pas exhaustivement tous les contextes à tester (rôles, connexions, transactions imbriquées, etc.). Impact : Impossibilité de prouver l'exhaustivité de l'inconditionnalité. Gravité : Majeur

Type : Incohérence Spec↔Tests

Référence : PD-272-tests.md, Section 7, TC-NEG-03 vs PD-272-specification.md, Section 4 Description : Le test TC-NEG-03 vérifie un UPDATE no-op (SET col = col) mais cet cas spécifique n'est pas mentionné dans les invariants de la spécification. Impact : Test couvrant un cas edge non spécifié, risque de sur-contrainte. Gravité : Mineur

Type : Contradiction

Référence : PD-272-tests.md, Section 2 vs Section 9 Description : La matrice de couverture déclare INV-272-07 comme "Non testable dans ce périmètre" mais la section 9 le classe comme règle "NON TESTABLE" avec un impact "Majeur", créant une incohérence sur la criticité. Impact : Ambiguïté sur l'acceptabilité de l'invariant non testé. Gravité : Majeur

Type : Hypothèse dangereuse

Référence : PD-272-specification.md, Section 9, H-272-04 Description : L'hypothèse de ciblage du projet "ProbatioVault-backend" n'est qu'une hypothèse, mais les contraintes techniques et les références (TypeORM, NestJS) sont décrites comme définitives. Impact : Spécification potentiellement inapplicable si l'hypothèse est fausse. Gravité : Majeur

Type : Incohérence Spec↔Tests

Référence : PD-272-tests.md, Section 8 (Observabilité) vs PD-272-specification.md, Section 7 (Critères d'acceptation) Description : L'observabilité requise mentionne un "Export probatoire" qui n'est pas défini comme critère d'acceptation dans la spécification. Impact : Exigence de livraison non contractualisée dans la spécification. Gravité : Mineur

Type : Ambiguïté

Référence : PD-272-specification.md, Section 4, INV-272-06 Description : L'invariant INV-272-06 mentionne un "état métier implicite PERSISTED_IMMUTABLE" qui n'est défini nulle part ailleurs dans la spécification. Impact : Référence à un concept non documenté, rendant l'invariant non vérifiable. Gravité : Bloquant

Type : Risque sécurité/conformité

Référence : PD-272-specification.md, Section 4, INV-272-07 Description : L'invariant cryptographique INV-272-07 est déclaré "transversal obligatoire" mais n'a aucun mécanisme de vérification dans cette story, créant un trou d'auditabilité. Impact : Risque de non-conformité crypto non détectable, impact sur la certification. Gravité : Bloquant

Type : Incohérence Spec↔Tests

Référence : PD-272-tests.md, Section 5, TC-INV-06 vs PD-272-specification.md, Section 5 Description : Le test TC-INV-06 référence une "validation état terminal" mais les flux nominaux de la spécification ne décrivent pas explicitement de machine à états avec état terminal. Impact : Test basé sur un modèle conceptuel non documenté dans la spécification. Gravité : Majeur

Type : Ambiguïté

Référence : PD-272-specification.md, Section 8 (Scénarios de test) vs PD-272-tests.md, Section 3 Description : La spécification définit des scénarios de test en format libre tandis que les tests utilisent un format Given/When/Then structuré, sans établir la correspondance formelle. Impact : Double définition de tests avec risques de divergence. Gravité : Mineur

Type : Ambiguïté

Référence : PD-272-specification.md, Section 1 (Objectif) Description : L'objectif mentionne "contractualiser l'exigence d'immutabilité au niveau PostgreSQL" mais ne précise pas si cela exclut les contrôles applicatifs (TypeORM, service layer). Impact : Périmètre d'implémentation ambigu, risque de solutions partielles. Gravité : Majeur


Recommandations pour correction

  1. Résolution des ambiguïtés terminologiques : Unifier "ProofEnvelope" et "preuve composite" ou établir une équivalence formelle.

  2. Clarification de l'état métier : Documenter explicitement l'état PERSISTED_IMMUTABLE et la machine à états sous-jacente.

  3. Contractualisation des codes d'erreur : Spécifier les codes SQLSTATE attendus en plus des messages.

  4. Traitement de INV-272-07 : Soit l'exclure du périmètre, soit définir des observables testables.

  5. Réconciliation Spec↔Tests : Aligner les scénarios de test de la spécification avec les tests contractuels.

  6. Validation des hypothèses critiques : Transformer les hypothèses H-272-02 et H-272-04 en exigences vérifiables.


Impact sur l'acceptabilité formelle

La spécification présente 3 écarts bloquants qui empêchent une acceptation formelle : - INV-272-07 non testable - État PERSISTED_IMMUTABLE non défini - Trou d'auditabilité cryptographique

Recommandation : Correction obligatoire des écarts bloquants avant passage en implémentation.