PD-273 — Mise en conformité formelle des checks PV-AUDIT-001 (3 PARTIEL → OK)¶
1. Objectif¶
Contractualiser les exigences fonctionnelles de conformité pour que l'exécution de l'audit formel PV-AUDIT-001 produise un résultat conforme sur les 3 checks actuellement en statut PARTIEL, sans régression sur les checks déjà conformes.
Paramètres numériques contractualisés (obligatoires) :
| Paramètre | Valeur par défaut | Bornes (min/max) | Unité | Contexte de référence | Comportement hors bornes |
|---|---|---|---|---|---|
| Checks PARTIEL à corriger | 3 | min=3 / max=3 | checks | Exécution complète PV-AUDIT-001 | Non-conformité (US refusée) |
| Checks déjà conformes à préserver | 21 | min=21 / max=21 | checks | Exécution complète PV-AUDIT-001 | Non-conformité (régression) |
| Checks ciblés en statut OK attendu | 3 | min=3 / max=3 | checks | Résultat final de l'audit | Non-conformité (objectif non atteint) |
- Percentile/performance device: non applicable (pas de SLA de performance dans ce besoin).
2. Périmètre / Hors périmètre¶
Inclus¶
- Alignement contractuel entre faits de conformité audités et règles d'acceptation formelle pour :
- immutabilité du journal d'audit (update/delete interdits),
- capacité de signature des entrées d'audit,
- traçabilité de la séquence de destruction dans le domaine audit/destruction.
- Validation de non-régression sur les checks non ciblés de
PV-AUDIT-001. - Formalisation des états de conformité (
PARTIEL,OK) et de leurs transitions.
Exclu¶
- Toute évolution métier hors périmètre des 3 checks en écart.
- Toute exigence de performance (latence, throughput), hors périmètre.
- Toute modification de protocole cryptographique, hors périmètre.
- Toute refonte de l'architecture d'audit globale, hors périmètre.
3. Définitions¶
- PV-AUDIT-001 : audit formel de conformité probatoire.
- Check : règle unitaire de conformité évaluée par le moteur formel.
- Statut PARTIEL : conformité incomplète (au moins une condition d'acceptation non satisfaite).
- Statut OK : conformité complète pour le check.
- Régression : passage d'un check précédemment
OKàPARTIEL/KO. - Faits de conformité : représentations normalisées observées par le moteur de vérification.
- Séquence de destruction : numérotation monotone dédiée au domaine destruction/audit.
4. Invariants (non négociables)¶
| ID | Règle | Justification |
|---|---|---|
| INV-273-01 | L'exécution de PV-AUDIT-001 DOIT retourner exactement 3 checks ciblés en OK (ni moins, ni plus). | Objectif contractuel de la US. |
| INV-273-02 | Les 21 checks non ciblés DOIVENT rester conformes (aucune régression). | Préservation de la conformité acquise. |
| INV-273-03 | La sémantique de conformité sur l'immutabilité du journal d'audit DOIT être explicitement reconnue par l'audit formel. | Le check check_audit_trigger_update_delete est actuellement PARTIEL. |
| INV-273-04 | La capacité de signature du service d'audit DOIT être reconnue sous la sémantique attendue par l'audit formel. | Le check check_audit_signature_sign est actuellement PARTIEL. |
| INV-273-05 | La traçabilité du mécanisme de séquencement destruction/audit DOIT être reconnue par l'audit formel. | Le check check_destruction_sequence est actuellement PARTIEL. |
| INV-273-06 (transitions) | Modèle d'états conformité check: PARTIEL -> OK autorisée après alignement ; OK -> PARTIEL autorisée uniquement si régression détectée à une exécution ultérieure. Toute transition DOIT être observable dans le rapport d'audit. | Couvre explicitement les transitions retour exigées. |
| INV-273-07 | Aucune règle non testable n'est admise ; toute exigence non vérifiable automatiquement est hors périmètre. | Exigence de robustesse contractuelle. |
5. Flux nominaux¶
Flux F1 — Rétablissement conformité immutabilité audit log¶
- Le check ciblé est en entrée au statut
PARTIEL. - Les éléments audités sont évalués par le moteur formel.
- Le moteur constate la reconnaissance explicite de la règle d'immutabilité.
- Le check sort en statut
OK.
Résultat attendu : check_audit_trigger_update_delete = OK.
Flux F2 — Rétablissement conformité capacité de signature audit¶
- Le check ciblé est en entrée au statut
PARTIEL. - Le moteur formel évalue la capacité de signature attendue.
- La capacité est reconnue selon la sémantique contractuelle du check.
- Le check sort en statut
OK.
Résultat attendu : check_audit_signature_sign = OK.
Flux F3 — Rétablissement conformité séquence destruction¶
- Le check ciblé est en entrée au statut
PARTIEL. - Le moteur formel évalue l'existence/traçabilité contractuelle de la séquence destruction.
- La traçabilité est reconnue selon les critères du check.
- Le check sort en statut
OK.
Résultat attendu : check_destruction_sequence = OK.
Flux F4 — Vérification globale de non-régression¶
- L'audit complet
PV-AUDIT-001est exécuté. - Les 3 checks ciblés sont vérifiés en
OK. - Les 21 checks non ciblés sont vérifiés sans régression.
- Le lot de conformité est accepté.
5bis. Diagrammes¶
Diagramme d'états — Conformité d'un check (INV-273-06)¶
Modèle d'états d'un check unitaire de conformité, tel que défini par INV-273-06 (transitions) et détaillé en §10.3.
stateDiagram-v2
[*] --> PARTIEL : Évaluation initiale (check en écart)
[*] --> OK : Évaluation initiale (check conforme)
PARTIEL --> OK : Alignement contractuel vérifié (F1/F2/F3)
PARTIEL --> PARTIEL : Écart persistant après réévaluation
OK --> OK : Stabilité confirmée (F4)
OK --> PARTIEL : Régression détectée (ERR-273-02)
note right of PARTIEL
Conformité incomplète.
Au moins une condition
d'acceptation non satisfaite.
end note
note right of OK
Conformité complète.
Toutes conditions satisfaites.
end note Diagramme de séquence — Exécution audit PV-AUDIT-001 (F4)¶
Flux nominal de vérification globale incluant les 3 checks ciblés (INV-273-03, INV-273-04, INV-273-05) et le contrôle de non-régression (INV-273-02).
sequenceDiagram
participant O as Orchestrateur
participant M as Moteur formel (Prolog)
participant F as Extracteur de faits
participant DB as PostgreSQL
O->>F: extract-facts.py (backend AST + normes)
F->>DB: Lecture schéma audit (triggers, séquences)
DB-->>F: Faits bruts (immutabilité, signature, séquence)
F-->>M: Faits normalisés (.pl)
rect rgb(230, 245, 255)
Note over M: Évaluation des 3 checks ciblés
M->>M: check_audit_trigger_update_delete (INV-273-03)
M->>M: check_audit_signature_sign (INV-273-04)
M->>M: check_destruction_sequence (INV-273-05)
end
rect rgb(245, 255, 230)
Note over M: Vérification non-régression
M->>M: Évaluation 21 checks non ciblés (INV-273-02)
end
M-->>O: Rapport PV-AUDIT-001 (24 checks, statuts OK/PARTIEL)
alt 3 ciblés OK ET 0 régression (INV-273-01, INV-273-02)
O->>O: Lot accepté (CA-273-01..05)
else Check ciblé non OK
O->>O: Lot rejeté (ERR-273-01)
else Régression détectée
O->>O: Lot rejeté (ERR-273-02)
end 6. Cas d'erreur¶
- ERR-273-01-CHECK-NOT-OK : au moins un des 3 checks ciblés reste
PARTIEL/KO. Réponse attendue : lot rejeté, liste nominative des checks en écart. - ERR-273-02-REGRESSION-DETECTED : un ou plusieurs checks non ciblés régressent. Réponse attendue : lot rejeté, preuve de régression par diff des statuts.
- ERR-273-03-UNVERIFIABLE-RULE : exigence formulée sans observable testable. Réponse attendue : exigence classée
hors périmètreet exclue du verdict. - ERR-273-04-AUDIT-RUN-INCOMPLETE : exécution partielle de l'audit (résultat incomplet). Réponse attendue : verdict invalide, relance obligatoire en exécution complète.
7. Critères d'acceptation (testables)¶
| ID | Critère | Observable |
|---|---|---|
| CA-273-01 | check_audit_trigger_update_delete passe en OK. | Rapport PV-AUDIT-001 : statut OK pour ce check. |
| CA-273-02 | check_audit_signature_sign passe en OK. | Rapport PV-AUDIT-001 : statut OK pour ce check. |
| CA-273-03 | check_destruction_sequence passe en OK. | Rapport PV-AUDIT-001 : statut OK pour ce check. |
| CA-273-04 | Les 21 checks non ciblés ne régressent pas. | Comparaison avant/après : 0 régression. |
| CA-273-05 | Le total des checks ciblés conformes est exactement 3. | Comptage déterministe = 3/3. |
| CA-273-06 | Les erreurs de conformité sont catégorisées avec code structuré ERR-273-*. | Sortie d'échec contient un code valide. |
8. Scénarios de test (Given / When / Then)¶
- TC-273-01 — Immutabilité reconnue
- Given un audit
PV-AUDIT-001avec baseline oùcheck_audit_trigger_update_deleteestPARTIEL - When l'audit complet est exécuté après alignement contractuel
-
Then
check_audit_trigger_update_deleteestOK -
TC-273-02 — Signature reconnue
- Given un audit avec baseline où
check_audit_signature_signestPARTIEL - When l'audit complet est exécuté
-
Then
check_audit_signature_signestOK -
TC-273-03 — Séquence destruction reconnue
- Given un audit avec baseline où
check_destruction_sequenceestPARTIEL - When l'audit complet est exécuté
-
Then
check_destruction_sequenceestOK -
TC-273-04 — Non-régression globale
- Given une baseline de 21 checks non ciblés conformes
- When l'audit complet est exécuté
-
Then 0 check non ciblé ne régresse
-
TC-273-05 — Transition retour documentée
- Given un check en état
OK - When une exécution ultérieure détecte une divergence de conformité
-
Then le statut peut redevenir
PARTIELet la régression est explicitement reportée -
TC-273-06 — Exécution incomplète
- Given une exécution audit interrompue/incomplète
- When un verdict est demandé
- Then le verdict est invalide (
ERR-273-04-AUDIT-RUN-INCOMPLETE)
9. Hypothèses explicites¶
| ID | Hypothèse | Impact si faux |
|---|---|---|
| H-273-01 | La baseline de référence confirme exactement 3 checks PARTIEL et 21 checks non ciblés conformes. | Les bornes numériques contractuelles deviennent invalides ; spec à réviser. |
| H-273-02 | Le périmètre de PV-AUDIT-001 reste stable pendant la US. | Risque de faux écarts (ajout/retrait de checks). |
| H-273-03 | Le format de rapport d'audit expose les statuts par check de manière déterministe. | Impossibilité d'automatiser CA-273-01..06. |
| H-273-04 | Aucun changement réglementaire n'impose de nouveau check bloquant pendant l'exécution de la US. | Possibles écarts non liés à PD-273. |
10. Points à clarifier¶
10.1 Contraintes techniques du projet cible (obligatoire)¶
- Projet cible identifié : ProbatioVault-backend.
- Stack contractuelle à respecter : NestJS + TypeORM + PostgreSQL.
- Repos concernés : backend (principal), ProbatioVault-ia-governance (règles d'audit formel Prolog + script extract-facts.py).
10.2 SLA temporels¶
- Aucune transition temporelle identifiée.
10.3 Transitions retour (exigence explicite)¶
- État
PARTIEL: transitions sortantes PARTIEL -> OK: AUTORISÉE (après alignement de conformité vérifié).PARTIEL -> PARTIEL: AUTORISÉE (si écart persistant).- État
OK: transitions sortantes OK -> OK: AUTORISÉE (stabilité).OK -> PARTIEL: AUTORISÉE (régression détectée).- État terminal : aucun état terminal défini dans ce modèle.
- Données en cas de downgrade
OK -> PARTIEL: conservation intégrale des preuves et rapports historiques ; seul le statut courant se dégrade.
10.4 Stratégie migration DDL¶
- Aucune modification de colonne existante identifiée (type/nullabilité/contrainte/index) dans ce besoin.
- Donc cluster migration DDL : non applicable.
10.5 Atomicité multi-composant (DB + queue/append-only)¶
- Aucun nouveau flux multi-composant à contractualiser dans PD-273.
- Les garanties ACID/async existantes hors besoin restent inchangées (hors périmètre de cette US).
10.6 Contraintes inter-modules¶
- Aucune contrainte inter-module applicable (aucun guard cross-module de routes d'un autre module n'est demandé).
Références¶
- Epic : Conformité formelle PV-AUDIT-001
- JIRA : PD-273
- Repos concernés :
ProbatioVault-backend,ProbatioVault-ia-governance - Documents associés :
PV-AUDIT-001, audit formelPV-AUDIT-001baseline,PD-273-besoin.md