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¶
-
Résolution des ambiguïtés terminologiques : Unifier "ProofEnvelope" et "preuve composite" ou établir une équivalence formelle.
-
Clarification de l'état métier : Documenter explicitement l'état
PERSISTED_IMMUTABLEet la machine à états sous-jacente. -
Contractualisation des codes d'erreur : Spécifier les codes SQLSTATE attendus en plus des messages.
-
Traitement de INV-272-07 : Soit l'exclure du périmètre, soit définir des observables testables.
-
Réconciliation Spec↔Tests : Aligner les scénarios de test de la spécification avec les tests contractuels.
-
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.