PD-37 — Acceptabilité
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 [Spécification](PD-37-specification.md) | | | 🛠️ [Plan d'implémentation](PD-37-plan.md) | | | ✅ **Critères d'acceptation** | *(ce document)* | | 📝 [Retour d'expérience](PD-37-rex.md) | | [← Retour à crypto-proof](../PD-189-epic.md) · [↑ Index User Story](index.md)
Objectif
Vérifier que l'implémentation est conforme à la spécification, respecte l'ensemble des invariants ProbatioVault et ne présente aucune incohérence ou oubli critique.
Périmètre de vérification
La revue d'acceptabilité vérifie explicitement :
- la conformité stricte à la spécification fonctionnelle
- le respect de tous les invariants applicables
- la couverture des scénarios de test définis
- l'absence d'incohérences, oublis ou régressions
Écarts identifiés
Classification des écarts
| Niveau | Définition |
| BLOQUANT | Violation d'un invariant, faille de sécurité, non-conformité majeure à la spec |
| MAJEUR | Fonction incomplète, comportement non conforme mais sans rupture de sécurité |
| MINEUR | Détail, dette acceptable, amélioration non critique |
Détail des écarts
| ID | Description | Référence | Gravité |
| E-01 | La vérification dépend d'un HSM actif : verifyAuditEntry requiert une session HSM et ne persiste ni clé publique ni certificat. Impossible de vérifier les journaux de façon indépendante du backend/HSM, en contradiction avec l'exigence probatoire d'une preuve vérifiable hors système. | Spec §Description fonctionnelle (« vérifiée de façon indépendante ») & §Conformité probatoire ; src/modules/audit/services/audit-signature.service.ts:82-148 | BLOQUANT |
E-02 | Label HSM divergente — Résolu : le plan d'implémentation spécifie désormais probatiovault-audit-ecdsa-p256, aligné avec l'implémentation. | Plan §Choix techniques retenus ; src/modules/audit/audit.constants.ts:26-33 | — |
| E-03 | Résilience queue incomplète : la Dead Letter Queue n'est pas implémentée. Après 3 tentatives, Bull supprime le job (removeOnFail) en se contentant d'un log, sans conservation ni alerte. Les entrées rejetées sont définitivement perdues, violant l'exigence de robustesse de la spec (pas d'entrée partielle, gestion propre des indisponibilités HSM). Note : la DLQ est explicitement hors périmètre du plan (cf. §Hors périmètre). | Spec §Robustesse ; src/modules/audit/audit.constants.ts:33-50, processors/audit-signature.processor.ts:13-61 | MAJEUR |
[2025-12-22] — Suivi E-01
- Statut précédent : BLOQUANT
- Statut actuel : RÉSOLU
- Justification factuelle :
- Les clés publiques HSM sont exportées et persistées append-only dans
vault_secure.hsm_public_keys (migration 1733700100000-CreateHsmPublicKeysTable.ts, entité hsm-public-key.entity.ts) pour vérification hors HSM. AuditVerificationService vérifie les signatures sans session HSM, à partir des clés stockées et du hash recomputé (src/modules/audit/services/audit-verification.service.ts). - Des endpoints et un outil standalone permettent l’export et la vérification externe sans accès HSM (
audit-proof.controller.ts, tools/verify-audit-proof.ts). - Référence vérification :
- src/database/migrations/1733700100000-CreateHsmPublicKeysTable.ts
- src/modules/audit/entities/hsm-public-key.entity.ts
- src/modules/audit/services/audit-verification.service.ts
- src/modules/audit/controllers/audit-proof.controller.ts
- tools/verify-audit-proof.ts
[2025-12-22] — Suivi E-03
- Statut précédent : MAJEUR
- Statut actuel : RÉSOLU
- Justification factuelle :
- Gestion DLQ et relance implémentée : endpoints REST de supervision/relance (
/audit/proof/dlq/...) dans audit-proof.controller.ts pour consulter, alerter, relancer ou abandonner des messages en échec. - Orchestration Prefect dédiée : flows
audit_dlq_retry_flow (cron */15) et audit_dlq_check_flow (on-demand) dans audit_dlq_retry.py (ProbatioVault-infra) pour rejouer/monitorer les jobs échoués. - Déploiement automatisé via Ansible (
audit_dlq_monitoring.yml avec prefect_audit_dlq_enabled=true, backend_api_url configuré) garantissant l’activation en environnement cible. - Les jobs en échec ne sont plus supprimés silencieusement : ils sont conservés, rejoués et contrôlés, conformément à l’exigence de robustesse et de non-perte d’entrées probatoires.
- Référence vérification :
- src/modules/audit/controllers/audit-proof.controller.ts
- probatiovault-infra/prefect/flows/audit_dlq_retry.py
- probatiovault-infra/ansible/audit_dlq_monitoring.yml
Verdict d’acceptabilité (courant)
- ✅ ACCEPTÉ
- Date : 2025-12-22
- Motif synthétique : E-01 et E-03 résolus (vérification indépendante sans HSM, DLQ/robustesse en place).
Historique des verdicts
| Date | Verdict | Version | Commentaire |
| 2025-12-18 | ⛔ REFUSÉ | n/a | E-01 BLOQUANT (vérification dépend HSM), E-03 MAJEUR |
| 2025-12-22 | ⚠️ ACCEPTÉ AVEC RÉSERVES | n/a | E-01 résolu (vérification sans HSM), E-03 toujours ouvert (DLQ) |
| 2025-12-22 | ✅ ACCEPTÉ | n/a | E-03 résolu (DLQ/robustesse implémentée), E-01 déjà résolu |