PD-272 — Expression de besoin¶
Contexte¶
L'audit formel PV-PROOF-001 a identifie un ecart de conformite (KO) sur l'exigence PROOF-12 : la table legal_composite_proofs ne dispose pas de trigger PostgreSQL empechant les modifications apres generation de la preuve composite.
La preuve composite (ProofEnvelope) est le document probant central de ProbatioVault. Une fois generee, elle DOIT etre immutable — aucune modification ni suppression ne doit etre possible au niveau base de donnees.
Ce besoin est identifie par le check Prolog check_proof_immutable_trigger qui valide la presence d'un trigger BEFORE UPDATE OR DELETE sur la table.
Probleme¶
La propriete d'immutabilite post-generation est actuellement garantie uniquement au niveau applicatif (pas d'endpoint de modification). Mais sans trigger DB, une modification directe en base (erreur humaine, injection SQL, acces DBA) pourrait alterer une preuve finalisee.
Le modele formel TLA+ (INV-07 ImmutableAfterFinalize) et Alloy (ImmutableAfterGeneration) prouvent cette propriete au niveau specification. L'implementation doit la garantir au niveau PostgreSQL.
Besoin¶
Ajouter une migration PostgreSQL qui cree un trigger BEFORE UPDATE OR DELETE sur la table legal_composite_proofs. Ce trigger DOIT :
- Bloquer tout UPDATE :
RAISE EXCEPTION 'legal_composite_proofs: modification interdite — preuve immutable' - Bloquer tout DELETE :
RAISE EXCEPTION 'legal_composite_proofs: suppression interdite — preuve immutable' - S'appliquer inconditionnellement (pas de condition sur le statut — toute ligne inseree est immutable)
Criteres de succes¶
- CS-01 : Le trigger existe sur la table
legal_composite_proofs - CS-02 : Un
UPDATEsur n'importe quel champ de la table leve une exception PostgreSQL - CS-03 : Un
DELETEsur la table leve une exception PostgreSQL - CS-04 : L'
INSERTreste autorise (seule la creation est permise) - CS-05 : Le check Prolog
check_proof_immutable_triggerpasse a OK - CS-06 : Les tests existants continuent de passer (pas de regression)
Hors perimetre¶
- Modification de l'entite TypeORM
LegalCompositeProof - Modification du service
LegalCompositeProofService - Autres triggers sur d'autres tables (couverts par PD-273, PD-274)
References normatives¶
| Reference | Exigence | Description |
|---|---|---|
| RFC PV-PROOF-001 | PROOF-12 | Immutable apres persistance (trigger DB) |
| TLA+ PV_Proof.tla | INV-07 | ImmutableAfterFinalize |
| Alloy PV_Proof.als | ASSERT-08 | ImmutableAfterGeneration |
| Z PV_Proof.zed | THM-07 | Preservation immutabilite |
Learnings injectes¶
- [PD-171] : Triggers PostgreSQL pour append-only indispensables — pattern de reference pour cette story.