PD-46 — Retour d'expérience (REX)
1. Résumé exécutif
| Métrique | Valeur |
| Objectif initial | Implémenter download sécurisé avec pre-signed URLs S3 |
| Résultat obtenu | Conforme au scope défini (owner download) |
| Verdict final | GO (8.625/10) |
| Tests contractuels | 70/70 passés |
| Pipeline CI/CD | Bloqué par dette externe (notifications/) |
2. Métriques de convergence
2.1 Temps et itérations
| Étape | Durée estimée | Durée réelle | Itérations | Écart |
| 0 - Besoin | 30 min | 20 min | 1 | -33% |
| 1 - Spécification | 2h | 1h | 1 | -50% |
| 2 - Tests | 1h | 45 min | 1 | -25% |
| 3 - Gate spec | 1h | 1h30 | 2 | +50% |
| 4 - Plan | 1h | 1h | 1 | 0% |
| 5 - Gate plan | 1h | 45 min | 1 | -25% |
| 6 - Implémentation | 4h | 3h | 1 | -25% |
| 7 - Acceptabilité | 2h | 2h | 1 | 0% |
| 8 - Gate acceptabilité | 1h | 1h | 1 | 0% |
| 9 - REX | 30 min | 30 min | 1 | 0% |
| TOTAL | ~14h | ~11h | 11 | -21% |
2.2 Scores de convergence par gate
| Gate | Score v1 | Score final | Delta | Itérations |
| Gate 3 | 8.375/10 | 8.75/10 | +0.375 | 2 |
| Gate 5 | 9.0/10 | 9.0/10 | 0 | 1 |
| Gate 8 | 8.0/10 | 8.625/10 | +0.625 | 1 |
2.3 Écarts par catégorie
| Catégorie d'écart | Gate 3 | Gate 5 | Gate 8 | Total |
| ECT (complétude/testabilité) | 3 | 0 | 1 | 4 |
| DIV (divergence spec/impl) | - | 0 | 0 | 0 |
| AMB (ambiguïté) | 0 | 2 | 0 | 2 |
| SEC (sécurité) | - | - | 1 | 1 |
| PERF (performance) | - | - | 0 | 0 |
| TOTAL écarts | 3 | 2 | 2 | 7 |
3. Points fluides
Ce qui a bien fonctionné :
- Spécification Zero-Knowledge claire : L'invariant INV-46-06 (backend ne lit jamais le contenu) était bien défini et directement testable
- Architecture pre-signed URL éprouvée : Pattern AWS S3 standard, pas d'ambiguïté sur l'implémentation
- Tests exhaustifs dès la spécification : 70 tests définis en amont, tous passés
- Scope explicitement réduit : Les TODO (partage, B2B) documentés dès le plan ont évité les faux positifs en Gate 8
- Workflow automatisé OpenCode : Zéro copier-coller manuel pour les reviews ChatGPT
4. Points difficiles
Obstacles rencontrés (sans justification) :
- Gate 3 à 2 itérations : INV-46-06 (Zero-Knowledge) non observable initialement, nécessité d'ajouter une assertion sur l'absence de GetObject
- Review sécurité ChatGPT trop stricte : A remonté des vulnérabilités pour des fonctionnalités explicitement hors scope
- Confrontation obligatoire : Le delta ChatGPT (RESERVE) vs Claude (GO) a nécessité une analyse des faux positifs
- Pipeline CI/CD bloqué : Erreurs TypeScript pré-existantes dans
notifications/ bloquent le merge (non lié à PD-46)
5. Hypothèses révélées tardivement
Hypothèses non explicites découvertes en cours de workflow :
- OVH S3 compatible AWS SDK — découverte à l'étape 6 (confirmé fonctionnel)
- TTL centralisé nécessaire — découverte à l'étape 7 (ECT-CODE-05 corrigé)
- Audit non-bloquant by design — découverte à l'étape 7 (ERR-46-008 documenté)
6. Invariants complexes
Invariants difficiles à implémenter ou sensibles aux régressions :
- INV-46-06 (Zero-Knowledge) — TC-ZK-01 : Nécessite de vérifier l'absence de GetObject dans les mocks S3
- INV-46-01 (TTL + droits temps réel) — TC-INV-01 : Le TTL S3 est vérifié par X-Amz-Expires, mais les droits temps réel nécessitent un scénario de révocation
7. Dette technique
Compromis acceptés et non bloquants :
- Erreurs TypeScript
notifications/ — impact: moyen (bloque pipeline, mais pas lié à PD-46) - CA-46-02, CA-46-04 TODO — impact: faible (partage/B2B hors scope MVP)
- ESLint security/detect-object-injection désactivé — impact: faible (enum typé vérifié manuellement)
8. Risques résiduels
| Risque | Type | Probabilité | Impact | Mitigation |
| TTL S3 non vérifié côté client | ops | faible | moyen | Documentation API + test E2E futur |
| Énumération UUIDs | sécurité | très faible | faible | UUIDv4 non séquentiels |
Dette TS notifications/ propage | tech | élevée | moyen | Story dédiée à créer |
9. Patterns récurrents détectés
9.1 Patterns confirmés (déjà vus dans d'autres stories)
- Review sécurité trop stricte sur scope futur — aussi dans PD-19, PD-60
- Gate 3 nécessite 2 itérations pour invariants observables — pattern récurrent
9.2 Nouveaux patterns identifiés
- Confrontation ChatGPT vs Claude efficace : Le delta de scoring révèle les faux positifs
- Scope réduit avec TODO tracés = RESERVE contestable : Si TODO explicites, RESERVE → GO
10. Améliorations du workflow
10.1 Améliorations des prompts/templates
| Fichier | Amélioration suggérée | Priorité |
docs/prompts/7c Review Security.md | Ajouter instruction "Ne pas pénaliser fonctionnalités marquées TODO/hors scope" | haute |
docs/templates/PD-XX-verdict.yaml | Ajouter champ scope_exclusions pour documenter les TODO acceptés | moyenne |
10.2 Améliorations des agents
| Agent | Amélioration suggérée | Justification |
| Gate reviewer | Distinguer écarts "in-scope" vs "out-of-scope" | Éviter faux positifs sur TODO documentés |
| Confrontation | Systématiser contestation si écart concerne fonctionnalité hors scope | Réduire bruit dans scoring |
10.3 Améliorations du processus
- Pré-vérifier TypeScript avant merge : Ajouter check local
npx tsc --noEmit dans la phase 6c - Créer story dette tech si pipeline bloqué : Automatiser création de ticket pour dette pré-existante
11. Enseignements clés
5 enseignements génériques réutilisables :
- Scope explicite = protection contre faux positifs — Documenter les TODO dès le plan évite les pénalités en Gate 8
- Invariants observables dès Gate 3 — Un invariant non testable causera une itération supplémentaire
- Confrontation ChatGPT/Claude indispensable — Le delta de scoring révèle les biais des reviewers
- Zero-Knowledge testable par absence — Vérifier qu'une opération N'EST PAS appelée est aussi un test valide
- Dette technique externe bloque le workflow — Prévoir une marge pour corriger les problèmes pré-existants
12. Métriques cumulatives
| Métrique | Cette story | Moyenne projet | Tendance |
| Temps total | 11h | 14h | ↓ |
| Itérations gates | 4 | 5.2 | ↓ |
| Écarts totaux | 7 | 8.4 | ↓ |
| Score convergence moyen | 8.79/10 | 8.2/10 | ↑ |
13. Actions de suivi
| Action | Responsable | Échéance |
Corriger dette TypeScript notifications/ | Dev team | Sprint N+1 |
| Implémenter partage actif (CA-46-02) | PO à planifier | Backlog |
| Implémenter B2B tenant (CA-46-04) | PO à planifier | Backlog |
| Améliorer prompt review sécurité | Governance team | Sprint N |
Statut final : Story PD-46 GO, en attente correction dette notifications/ pour pipeline vert.