Retour d'Expérience (REX) — PD-44¶
Story: PD-44 — Implémenter validation Object Lock WORM Date de clôture: 2026-02-17 Durée totale: ~24h (2 jours)
1. Résumé de l'implémentation¶
Livrables produits¶
| Type | Fichiers | Métriques |
|---|---|---|
| Lambda Python | 15 modules | 2,847 lignes |
| Tests unitaires | 10 fichiers | 125 tests |
| Tests intégration | 1 fichier | 18 scénarios |
| Terraform | 6 fichiers | 879 lignes |
| Documentation | 26 fichiers | ~3,500 lignes |
Architecture implémentée¶
lambda/worm-validator/
├── handler.py # Point d'entrée Lambda
├── orchestrator.py # Orchestration validation
├── collectors/ # Collecte métadonnées (AWS, OVH)
├── validators/ # Validation politiques WORM
├── normalizers/ # Normalisation données
├── proof/ # Génération preuves YAML
├── alerts/ # Publication SNS
├── metrics/ # CloudWatch metrics
├── security/ # Sanitization, validation
└── tests/ # 125 tests (82% coverage)
2. Ce qui a bien fonctionné¶
Workflow de gouvernance¶
- Injection des learnings (étape 0) : Les 4 learnings storage (PD-⅘/6/43) ont permis d'anticiper les patterns récurrents
- Code contracts (étape 4) : 7 contracts CC-01 à CC-07 ont garanti la cohérence spec → code
- Acceptabilité multi-phase (étape 7) : 3 itérations ont permis de converger vers 82% coverage
Points techniques positifs¶
| Aspect | Détail |
|---|---|
| Architecture modulaire | Séparation collectors/validators/normalizers facilitée par les code contracts |
| Tests exhaustifs | 125 tests couvrant les 12 invariants, 24 critères d'acceptation |
| Sécurité | Validation ARN, sanitization JSON, patterns anti-injection |
| Observabilité | 8 métriques CloudWatch, dashboard prédéfini, alertes SNS |
Shadow mode évaluation LLM¶
- devstral-2 testé comme fallback de mixtral:8x22b (erreur CUDA)
- Évaluation Phase 1 : score 6.75 vs 9.17 (ChatGPT) → delta -2.42
- Conclusion : devstral-2 inadapté pour spécifications (trop générique)
3. Ce qui pourrait être amélioré¶
Workflow¶
| Point | Impact | Recommandation |
|---|---|---|
| Gate 3 faux positifs | 3 FP sur 9 écarts identifiés | Affiner les critères du juge LLM |
| Itérations Gate 5 | 2 itérations (RESERVE → GO) | Enrichir le template plan avec résilience/traçabilité |
| Correction Sonar | Pipeline failed 1× pour security hotspot | Ajouter check KMS au template Terraform SNS |
Technique¶
| Point | Impact | Action future |
|---|---|---|
| Collector OVH non testé | ECT-06 mineur | Créer mocks OVH pour tests intégration |
| Circuit breaker non persistant | ECT-04 mineur | Implémenter persistence DynamoDB (PD-45) |
| TC-NR/TC-NEG implicites | ECT-07/08 mineurs | Nommer explicitement les tests négatifs |
4. Learnings capturés¶
L1: KMS encryption obligatoire sur SNS¶
Contexte: Pipeline Sonar a échoué car kms_master_key_id était omis sur le topic SNS.
Pattern: Toujours ajouter kms_master_key_id = "alias/aws/sns" pour les topics SNS en Terraform.
Tags: #terraform, #sns, #kms, #security-hotspot
L2: Shadow mode Phase 1 — modèles locaux inadaptés¶
Contexte: mixtral:8x22b (erreur CUDA), devstral-2 (score 6.75), llama3.3:70b (score 5.0) tous inférieurs à ChatGPT (9.17).
Pattern: Les modèles locaux produisent des specs trop synthétiques. Garder ChatGPT pour Phase 1, modèles locaux pour Phase 6 (code).
Tags: #shadow-mode, #llm-evaluation, #phase-1
L3: Clarifications contractuelles évitent les itérations Gate 3¶
Contexte: Gate 3 RESERVE (7.05) → Gate 3 GO (8.0) après ajout de 6 clarifications contractuelles (Section 10 spec).
Pattern: Toujours inclure une Section 10 "Clarifications contractuelles" avec valeurs concrètes (durées, intervalles, seuils).
Tags: #spec, #gate-3, #clarifications
L4: Terraform modules — structure worm_validator reproductible¶
Contexte: Module terraform worm_validator/ avec alerts.tf, dashboard.tf, main.tf, schedule.tf, variables.tf, outputs.tf.
Pattern: Structure modulaire réutilisable pour futures Lambda de validation (ex: retention-validator, signature-validator).
Tags: #terraform, #module, #lambda, #pattern
5. Métriques finales¶
| Métrique | Valeur |
|---|---|
| Gate 3 iterations | 2 (RESERVE → GO) |
| Gate 5 iterations | 2 (RESERVE → GO) |
| Gate 8 iterations | 1 (GO direct) |
| Score Gate 3 final | 8.0/10 |
| Score Gate 5 final | 8.5/10 |
| Score Gate 8 final | 8.30/10 |
| Tests coverage | 82% |
| Écarts résiduels | 4 mineurs |
6. Recommandations pour futures stories¶
- Spec Phase 1: Toujours inclure Section 10 "Clarifications contractuelles" dès la première version
- Plan Phase 4: Inclure sections résilience (circuit breaker, retry) et traçabilité (métriques) dès le départ
- Terraform SNS: Template avec
kms_master_key_idpar défaut - Shadow mode: Tester les modèles locaux uniquement sur Phase 6 (code), pas Phase 1 (spec)
- Tests: Nommer explicitement les TC-NR et TC-NEG dans les descriptions de test
7. Prochaines actions suggérées¶
| Story | Description | Priorité |
|---|---|---|
| PD-45 | Circuit breaker persistant (DynamoDB) | Medium |
| PD-46 | Intégration OVH Object Lock (mocks + tests) | Low |
| PD-47 | Template Terraform Lambda validation | Medium |
Statut: Story PD-44 DONE Gate 8: GO (8.30/10) Pipeline DEV: SUCCESS (#2330867842)