Aller au contenu

PD-79 — Retour d'Expérience (REX)

Metadata

Champ Valeur
Story ID PD-79
Titre Configurer catégorie B2C_EVIDENCE_MINOR dans PD-60
Epic PD-185 (B2C-MINEURS)
Projet ProbatioVault-backend
Domaine b2c-mineurs
Date 2026-02-16
Orchestrateur Claude

1. Résumé de la story

PD-79 configure une catégorie documentaire B2C_EVIDENCE_MINOR dans le moteur probatoire existant (PD-60), permettant de déposer des preuves numériques sensibles (images, audio, vidéo) avec validation de format MIME, taille limitée à 100 Mo, et scellement immédiat (< 1s).

Décision architecturale clé : Réutilisation complète de PD-60 avec une nouvelle catégorie déclarative. Pas de nouveau moteur probatoire, pas de régime juridique différent.


2. Métriques de workflow

Métrique Valeur
Durée totale ~8 heures
Nombre d'étapes 10 (0-9)
Gates traversées 3 (Gate 3, 5, 8)
Itérations de gate 1 par gate (GO direct)

Scores des gates

Gate Type Score Verdict
3 CONFORMITY_CHECK 8.50/10 GO
5 AMBIGUITY 8.13/10 GO
8 CLOSURE 7.88/10 GO

3. Écarts identifiés et résolus

Gate 3 (Spécification)

ID Type Sévérité Statut
ECT-79-01 Traceability MINEUR FAUX_POSITIF
ECT-79-02 Clarity MINEUR FAUX_POSITIF

Learning : La matrice de traçabilité était présente mais non explicitement référencée dans la review initiale.

Gate 5 (Plan)

ID Type Sévérité Statut
AMB-79-01 Ambiguity MINEUR CLARIFIE
AMB-79-02 Ambiguity - FAUX_POSITIF
AMB-79-03 Gap MINEUR REFERENCE_MANQUANTE
AMB-79-04 Gap MINEUR ACCEPTE
AMB-79-05 Risk - FAUX_POSITIF
AMB-79-06 Ambiguity MINEUR CLARIFIE

Learning : La stratégie de double contrôle (middleware + service) était intentionnelle (defense in depth) mais perçue comme redondance.

Gate 8 (Closure)

ID Type Sévérité Statut
ECT-79-G8-02 Test Coverage MINEUR ACCEPTED
ECT-79-G8-03 Performance MINEUR ACCEPTED
ECT-79-G8-05 Load Testing MINEUR ACCEPTED

Learning : Contrainte ESM du module file-type a réduit les tests d'intégration HTTP (5/16). Compensé par tests unitaires et sécurité (43 tests).


4. Couverture finale

Type Requis Réel Statut
Fonctionnalités (F-79) 5 5 100%
Invariants (INV-79) 6 6 100%
Critères d'acceptation (CA-79) 8 8 100%
Codes d'erreur (ERR-79) 7 7 100%

Tests

Type Nombre
Unitaires 24
Intégration 5
Sécurité 19
Total 48

Coverage code

Métrique Valeur
Statements 100%
Branches 92.85%
Functions 100%
Lines 100%

5. Artefacts produits

Artefact Chemin
Besoin docs/epics/b2c-mineurs/PD-79-evidence-upload/PD-79-besoin.md
Spécification docs/epics/b2c-mineurs/PD-79-evidence-upload/PD-79-specification.md
Tests docs/epics/b2c-mineurs/PD-79-evidence-upload/PD-79-tests.md
Plan docs/epics/b2c-mineurs/PD-79-evidence-upload/PD-79-plan.md
Code contracts docs/epics/b2c-mineurs/PD-79-evidence-upload/PD-79-code-contracts.yaml
Acceptabilité docs/epics/b2c-mineurs/PD-79-evidence-upload/PD-79-acceptability.md

Code produit

Fichier Description
src/modules/documents/entities/document-category-config.entity.ts Entité TypeORM
src/modules/documents/services/category-config.service.ts Service de résolution
src/database/migrations/1739000000000-AddCategoryConfig.ts Migration + seed
src/modules/documents/dto/create-deposit.dto.ts Extension DTO
src/modules/documents/controllers/deposit.controller.ts Intégration controller

6. Learnings et recommandations

Ce qui a bien fonctionné

  1. Décision architecturale précoce : Réutiliser PD-60 au lieu de créer un nouveau moteur a accéléré le développement.

  2. Gates GO direct : Les 3 gates ont passé en une seule itération grâce à une spécification complète dès l'étape 1.

  3. Validation MIME robuste : Analyse des magic bytes (4100 premiers octets) au lieu de se fier à l'extension.

  4. Tests de sécurité extensifs : 19 tests de sécurité couvrant les attaques par fichiers déguisés, timing attacks, etc.

Points d'amélioration

  1. Contrainte ESM file-type : Le module file-type en ESM pur a compliqué l'intégration Jest. Solution adoptée : import dynamique + mocking.

  2. Cache local non distribué : Le cache TTL 60s est local à chaque instance. Acceptable pour configs quasi-statiques mais à surveiller en horizontal scaling.

  3. Coverage branches entités : Les décorateurs TypeORM génèrent des branches non couvertes. Le coverage global du projet a nécessité des tests additionnels dans d'autres fichiers.

Patterns réutilisables

Pattern Description Réutilisabilité
Catégorie déclarative Extension de fonctionnalité via configuration DB Haute
MIME magic bytes Validation sécurisée du type de fichier Haute
Cache TTL simple Cache Map avec expiration timestamp Moyenne
Exceptions métier typées ERR-XX-YYY avec codes explicites Haute

7. Actions post-release

Action Responsable Deadline
Exécuter tests e2e HTTP en Docker QA Pré-release
Valider p95 <= 1s en charge QA Pré-release
Documenter API dans OpenAPI Dev Sprint+1

8. Conclusion

PD-79 est une story réussie avec : - 3 gates GO en première itération - 100% de couverture fonctionnelle - 48 tests passants - Architecture propre et extensible

Le positionnement stratégique de ProbatioVault comme infrastructure neutre de preuve a été renforcé par cette implémentation déclarative.


Validation

Critère Statut
Pipeline GitLab ✅ SUCCESS (94.50% coverage)
Sonar Quality Gate ✅ PASSED
Merge sur dev ✅ Commit a16e785
REX complété ✅ 2026-02-16