Aller au contenu

PD-39 — Acceptabilité

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

Chaque écart constaté doit être documenté et classé selon sa gravité.

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 Clôture/immutabilité du batch non probatoire : le statut CLOSED et le guard API n’empêchent pas l’ajout/modification via accès DB/DDL ; aucun mécanisme WORM/scellement ou verrouillage post-clôture. L’invariant “ensemble fini et non extensible” et “aucune modification après conservation” ne sont pas garantis. Spec §4.4/§4.5/§4.9 ; Plan §3 (BatchClosedGuard) ; code batch.service.ts, guards/batch-closed.guard.ts, migration 1733900000000-CreateTsaTables.ts BLOQUANT
E-02 Horloge de référence NTS dépendante d’un démon externe non contrôlé : ReferenceClockService lit ntpd-rs observe.json sans garantie d’authentification NTS ou fallback. Si le service NTS est absent/non synchronisé, les invariants “pas d’heure locale” et “validations via horloge de référence sécurisée” ne sont pas assurés. Spec §4.8/§4.9 ; Plan §3 (ReferenceClockService NTS) ; code services/reference-clock.service.ts BLOQUANT

[2025-12-23] — Suivi E-01

  • Statut précédent : BLOQUANT
  • Statut actuel : RÉSOLU
  • Justification factuelle :
  • WORM complet via triggers INSERT/UPDATE/DELETE sur batch_items (blocage post-scèlement) et timestamp_batches (SEALED/TIMESTAMPED/FAILED non modifiables).
  • Append-only renforcé sur batch_seals, timestamp_tokens, clock_attestations + event trigger evt_worm_protect_tsa bloquant DDL/Drop trigger ; fonctions en SECURITY DEFINER et révocation TRUNCATE/TRIGGER.
  • Référence vérification :
  • src/database/migrations/1733900001000-AddWormProtection.ts

[2025-12-23] — Suivi E-02

  • Statut précédent : BLOQUANT
  • Statut actuel : RÉSOLU
  • Justification factuelle :
  • Mode fail-closed par défaut : ReferenceClockService.getAuthenticatedTimeStrict() vérifie intégrité du fichier observe.json (UID/GID/permissions) et exige ≥ NTS_MIN_AUTHENTICATED_SOURCES avec nts_ke_established=true.
  • ClockAttestationService force le mode strict (TSA_NTS_STRICT_MODE=true par défaut) et renvoie une erreur NTS_FAIL_CLOSED si synchronisation insuffisante ; nouveaux codes d’erreur et seuils constants.
  • Tests TSA mis à jour couvrant les cas fail-closed (reference-clock.service.spec.ts).
  • Référence vérification :
  • src/modules/tsa/services/reference-clock.service.ts ; src/modules/tsa/constants/tsa.constants.ts ; src/modules/tsa/services/clock-attestation.service.ts ; src/modules/tsa/services/reference-clock.service.spec.ts

Conclusion d’acceptabilité

ACCEPTÉ

Motif : E-01 (WORM probatoire) et E-02 (NTS fail-closed) résolus et vérifiés.


Historique des verdicts

Date Verdict Version Commentaire
2025-12-23 ⛔ REFUSÉ n/a E-01 (clôture/immutabilité non probatoire), E-02 (horloge NTS non garantie)
2025-12-23 ✅ ACCEPTÉ n/a E-01 WORM DB + DDL protégé, E-02 NTS fail-closed (authentifié)