PD-285 — Retour d'experience (REX)
1. Resume executif
| Metrique | Valeur |
| Objectif initial | Relever la limite d'upload backend de 100 MB a 500 MB pour DEFAULT et B2C_EVIDENCE_MINOR |
| Resultat obtenu | Conforme — migration SQL, tests, documentation PD-252 amendes |
| Verdict final | GO (Gate 8 : 9.688/10) |
| Tests contractuels | 44/44 passes |
2. Metriques de convergence
2.1 Temps et iterations
| Etape | Duree estimee | Duree reelle | Iterations | Ecart |
| 0 - Besoin | 30 min | 8 min | 1 | -73% |
| 1 - Specification | 2h | 2 min | 1 | -98% |
| 2 - Tests | 1h | 2 min | 1 | -97% |
| 3 - Gate spec | 1h | 7 min | 1 | -88% |
| 4 - Plan | 1h | 6 min | 1 | -90% |
| 5 - Gate plan | 1h | 5 min | 1 | -92% |
| 6 - Implementation | 4h | 3 min | 1 | -99% |
| 7 - Acceptabilite | 2h | 2 min | 1 | -98% |
| 8 - Gate acceptabilite | 1h | 7 min | 1 | -88% |
| 9 - REX | 30 min | 14 min | 1 | -53% |
| TOTAL | ~14h | ~56 min (0.93h) | 10 | -93% |
2.2 Scores de convergence par gate
| Gate | Score v1 | Score final | Delta | Iterations |
| Gate 3 | 8.25/10 | 8.25/10 | 0 | 1 |
| Gate 5 | 8.50/10 | 8.50/10 | 0 | 1 |
| Gate 8 | 9.688/10 | 9.688/10 | 0 | 1 |
2.3 Ecarts par categorie
| Categorie d'ecart | Gate 3 | Gate 5 | Gate 8 | Total |
| ECT (completude/testabilite) | 5 | 2 | 1 | 8 |
| DIV (divergence spec/impl) | 0 | 0 | 0 | 0 |
| AMB (ambiguite) | 6 | 2 | 0 | 8 |
| SEC (securite) | 0 | 0 | 0 | 0 |
| PERF (performance) | 0 | 0 | 0 | 0 |
| TOTAL ecarts | 11 | 4 | 1 | 16 |
3. Points fluides
Ce qui a bien fonctionne : - Workflow ultra-rapide : toutes les gates passees en v1, aucune iteration corrective. Story completee en moins d'une heure. - Perimetre minimal et bien delimite : aucun code applicatif modifie, uniquement une migration SQL data + mocks de tests + documentation. La separation configuration/logique du backend a parfaitement fonctionne. - Score Gate 8 exceptionnel (9.688) : la simplicite du changement (UPDATE SQL) a elimine les risques de divergence spec/impl et de securite. - Capitalisation inter-EB : la detection de l'incoherence PD-101/backend par la pipeline de coherence a directement genere cette story corrective.
4. Points difficiles
Obstacles rencontres (sans justification) : - CA-07 non verifiable : la pipeline de coherence inter-EB (coherence-report.py) n'a pas ete executee pendant le workflow. CA-07 reste en attente post-migration. - Derogation Art. II systematique : toutes les gates ont utilise Claude comme reviewer des deux phases (review + confrontation) par fallback Art. II (prompts > 30KB pour OpenCode). Le principe de validation croisee n'a pas ete applique strictement.
5. Hypotheses revelees tardivement
Hypotheses non explicites decouvertes en cours de workflow : - storage.category_max_bytes vs maxSizeBytes — decouverte a l'etape 3 (Gate 3, C-01/C-02). Deux noms designent le meme concept (parametre de config global vs champ DB par categorie). Ambiguite documentaire, sans impact code. - Categorie determinee par la route, pas par le body — decouverte a l'etape 3 (Gate 3, C-09). Le middleware determine la categorie via la route d'upload (ex: /deposit/:category), pas via le body. Non documente dans la spec.
6. Invariants complexes
Invariants difficiles a implementer ou sensibles aux regressions : - INV-285-07-doc-sync — TC-NOM-07. Invariant documentaire : la synchronisation PD-252 depend d'un amendement manuel dans un autre repo (ProbatioVault-doc). Risque de desynchronisation si PD-252 est modifie independamment. - INV-285-08 a INV-285-12 — TC-INV-08 a TC-INV-12. Invariants d'absence (pas de transition temporelle, pas d'etats retour, etc.). Non testables par automate — assertions d'analyse du perimetre.
7. Dette technique
Compromis acceptes et non bloquants : - CA-07 differe — impact: faible. La verification de coherence inter-EB sera executee au prochain deploiement en dev. Le risque est nul car le changement aligne une borne deja effective cote client (PD-101). - Invariants d'absence non automatisables — impact: faible. INV-285-08 a INV-285-12 documentent des decisions de perimetre, pas des regles fonctionnelles. Leur presence dans la spec alourdit la matrice de couverture sans apporter de valeur testable.
8. Risques residuels
| Risque | Type | Probabilite | Impact | Mitigation |
| Cache TTL 60s post-migration | ops | faible | faible | Deploiement blue-green : nouvelles instances demarrent avec cache vide |
| Desynchronisation PD-252 future | metier | faible | moyen | Amendement fait dans cette story ; surveiller les MRs sur PD-252 |
8bis. Matrice de delegation inter-PD
| Story | Direction | Statut | Nature de la dependance | Probleme rencontre |
| PD-101 | <- depend de | DONE | Client iOS a 500 MB, backend doit s'aligner | RAS |
| PD-252 | <- depend de | DONE | Documentation normative a amender | RAS |
8ter. Bugs de tests
Aucun bug de test rencontre. Les mocks ont ete mis a jour mecaniquement (104857600 -> 524288000).
8quater. Corrections post-Gate 8
Aucune correction post-Gate 8 necessaire. Pipeline TSC OK, 44/44 tests.
9. Patterns recurrents detectes
9.1 Patterns confirmes (deja vus dans d'autres stories)
- Derogation Art. II par defaut pour prompts > 30KB — aussi dans PD-283, PD-284, PD-80. Le fallback Claude-only pour les confrontations est devenu systematique quand les prompts depassent 30KB (limitation OpenCode/ChatGPT).
- Invariants d'absence (checklist-style) — aussi dans PD-253, PD-284, PD-85. Les invariants INV-XX-08 a INV-XX-12 (absence de transition temporelle, etats retour, protection distribuee, atomicite DDL, inter-module) sont generes systematiquement par le template de specification mais ne sont pas testables par automate. Pattern de bruit documentaire.
9.2 Nouveaux patterns identifies
- Story "config-only" ultra-rapide — premiere story completee en < 1h avec toutes gates v1 GO. Le pattern "modification de donnee DB sans logique applicative" elimine les risques de divergence et de securite. A identifier comme archetype pour calibrer les estimations futures.
- Ambiguite naming config/DB — le double nommage
storage.category_max_bytes (documentaire) vs maxSizeBytes (DB/code) genere des constats en Gate 3 sans impact reel. A clarifier dans le template de specification pour eviter ce bruit.
10. Ameliorations du workflow
10.1 Ameliorations des prompts/templates
| Fichier | Amelioration suggeree | Priorite |
templates/prompts/1 Specification.md | Ajouter une note : "Si le parametre de configuration a un nom DB different du nom documentaire, expliciter la correspondance dans le modele de donnees" | basse |
templates/prompts/1 Specification.md | Rendre optionnels les invariants INV-XX-08 a INV-XX-12 quand la story ne touche ni transitions temporelles, ni machine d'etat, ni composants distribues, ni DDL, ni inter-module | moyenne |
10.2 Ameliorations des agents
| Agent | Amelioration suggeree | Justification |
| Specification (ChatGPT) | Calibrer la generation d'invariants d'absence en fonction de la complexite de la story | 5 invariants d'absence generes pour un simple UPDATE SQL — bruit documentaire |
10.3 Ameliorations du processus
- Archetype "config-only" : Identifier les stories qui ne modifient que des donnees de configuration (pas de code applicatif) et proposer un workflow allege (skip step 6a decomposition, simplifier les templates).
- Art. II — seuil 30KB : Documenter officiellement le seuil de 30KB comme limite operationnelle d'OpenCode et prevoir un reviewer alternatif (Ollama local ?) pour garantir la validation croisee.
11. Enseignements cles
- Les stories "config-only" sont des quick-wins — quand la logique applicative lit la config depuis la DB sans constante hardcodee, un changement de valeur est une simple migration SQL. Le workflow complet reste pertinent pour la tracabilite mais la duree est divisee par 15.
- Le template de spec genere du bruit pour les stories simples — les invariants d'absence (INV-08 a INV-12) et les tests associes (TC-INV-08 a TC-INV-12) representent 5/12 invariants et 5/16+ tests pour zero valeur fonctionnelle sur une story de configuration.
- La pipeline de coherence inter-EB genere correctement des stories correctives — PD-285 est le premier exemple de story generee directement par un ecart detecte par
coherence-report.py. Le cycle detection → correction → validation est operationnel.
12. Metriques cumulatives (auto-calculees)
| Metrique | Cette story | Moyenne projet | Tendance |
| Temps total | 0.93h | 6.41h | ↓ (record bas) |
| Iterations gates | 3 | 5.42 | ↓ |
| Ecarts totaux | 16 | 23.08 | ↓ |
| Score convergence moyen | 8.81/10 | 8.44/10 | ↑ |