Aller au contenu

PD-43 — Acceptabilité

Objectif

Vérifier que l’implémentation est conforme à la spécification, respecte les invariants ProbatioVault et ne présente aucune incohérence critique.


Périmètre de vérification

  • conformité stricte à la spécification fonctionnelle PD-43
  • respect de tous les invariants applicables
  • couverture des scénarios de test définis
  • 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 Streaming violé : la part reçue est entièrement bufferisée en mémoire (hashStreamWithBuffer) puis réémise vers S3, ce qui contrevient à l’invariant de streaming sans chargement complet du contenu (risque OOM pour une part ≤ maxPartSize) Spec §4 INV-2, CA4 ; src/modules/upload/services/upload-session.service.ts:80-163 ; src/modules/upload/services/hash-stream.service.ts:58-93 BLOQUANT
E-02 Vérification d’intégrité stockage absente : l’adapter S3 est un stub (ETag factice, getObjectStream vide), aucune comparaison avec un checksum S3 réel ; la complétion se base sur un hash recalculé sur un flux vide, ne garantissant pas la cohérence entre l’objet stocké et l’empreinte retournée Spec §4 INV-10, §5 N3/N4, CA13/E10 ; src/modules/upload/infrastructure/s3-multipart.adapter.ts:35-194 ; src/modules/upload/services/upload-session.service.ts:186-243 BLOQUANT

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

  • Statut précédent : NON RÉSOLU
  • Statut actuel : RÉSOLU
  • Justification factuelle :
  • uploadPart stream le corps directement vers S3 via stream.pipe(createHashTransform()) sans bufferiser la part entière en mémoire (hash calculé en transit).
  • Référence vérification :
  • src/modules/upload/services/upload-session.service.ts:152-188
  • src/modules/upload/services/hash-stream.service.ts:13-87

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

  • Statut précédent : NON RÉSOLU
  • Statut actuel : RÉSOLU
  • Justification factuelle :
  • L’adapter utilise S3Client réel, calcule un MD5 en streaming et vérifie l’ETag renvoyé par S3 pour chaque part ; getObjectStream retourne le flux S3 réel et le hash final est calculé sur l’objet stocké.
  • Référence vérification :
  • src/modules/upload/infrastructure/s3-multipart.adapter.ts:1-366
  • src/modules/upload/services/upload-session.service.ts:260-311

Conclusion d’acceptabilité

✅ ACCEPTÉ
Date : 2025-12-29
Motif synthétique : Écarts E-01 et E-02 résolus (streaming direct et vérification d’intégrité S3 effective).