PD-101 — Rétrospective¶
Patterns récurrents identifiés¶
1. FILE-LEVEL encryption comme pattern mobile standard¶
Stories concernées : PD-101 (upload), PD-97 (crypto zero-knowledge), PD-98 (keychain kmaster)
La stratégie FILE-LEVEL (chiffrer le fichier entier avant chunking) élimine structurellement le risque de nonce-reuse GCM en multipart. Ce pattern devrait être documenté comme invariant architectural pour toute story mobile manipulant des fichiers chiffrés.
Action : Ajouter dans les code-contracts template un invariant INV-CRYPTO-FILE-LEVEL réutilisable.
2. Stubs tracés avec story destination → Gate 8 v1 GO¶
Stories confirmant le pattern : PD-101 (S-01→PD-28), PD-85 (4 stubs tracés), PD-251 (3 invariants partiels tracés)
Les stubs documentés avec // STUB: PD-XX — description et une story destination Jira n'ont JAMAIS généré d'écart MAJEUR en Gate 8. 3 stories consécutives confirment : la criticité est atténuée de MAJEUR → MINEUR quand le stub est tracé.
Action : Aucune (déjà dans les règles procedures.md).
3. Spec v1 NON_CONFORME → corrections ciblées → v2 GO¶
Stories concernées : PD-101 (6.5→8.75), PD-85 (6.5→8.0), PD-283 (6.75→8.25)
Le pattern de Gate 3 avec un premier passage NON_CONFORME suivi d'un GO en v2 est récurrent pour les stories complexes (>10 invariants). Les corrections sont toujours dans 3 catégories : - Ambiguïtés de définition (termes non définis, seuils flous) - Couverture spec↔tests désynchronisée - Erreurs/erreurs hors scope non documentés
Action : Injecter une checklist pré-Gate 3 dans les prompts spec (étape 1) pour anticiper ces 3 catégories.
4. ESLint cognitive-complexity → extraction helpers¶
Stories concernées : PD-101 (19→15), PD-283 (17→12), PD-262 (22→14)
Les orchestrateurs (fonctions avec try/catch imbriqués + validation + branching) dépassent systématiquement le seuil cognitive-complexity ESLint. Le pattern de correction est toujours le même : extraire validateParams() et handleError().
Action : Injecter dans les prompts agents (step 6b) la règle : "Si la fonction principale dépasse 10 lignes de validation, extraire un validateParams() helper."
5. Audit catch-absorb récurrent en contexte mobile vs backend¶
Stories concernées : PD-101 (FN-01 mobile), PD-85 (audit fail-closed), PD-262 (audit mobile), PD-265 (monitoring)
Le pattern anti-catch-absorb (issu des REX PD-85/PD-63/PD-250) s'applique différemment en mobile vs backend : - Backend : audit DOIT être fail-closed (erreur propagée en 500) - Mobile : audit est de la télémétrie (fire-and-forget acceptable) car l'audit autoritatif est backend-side
Action : Affiner la règle dans CLAUDE.md pour distinguer mobile (fire-and-forget OK si documenté) vs backend (fail-closed obligatoire).
6. Sonar credentials — dette opérationnelle¶
Stories impactées : PD-101 (SKIPPED), potentiellement les suivantes
Le token Vault pour SonarQube a expiré. La phase 1.5 (Sonar local) est documentée comme OBLIGATOIRE dans procedures.md mais a été SKIPPED faute de credentials. ESLint+tsc compensent partiellement mais ne couvrent pas les rules Sonar spécifiques (code smells, security hotspots).
Action : Renouveler les credentials Sonar dans Vault (kv/ci/sonarqube). Ajouter un health-check Sonar dans probe-capabilities.sh.
7. Art. II dérogation systématique pour prompts >30KB¶
Stories concernées : PD-101 (Gate 8), PD-283 (Gate 8), PD-262 (Gate 8)
Tous les prompts de Gate 8 dépassent 30KB (code source + spec + tests + acceptabilité). OpenCode/ChatGPT entre en mode agentic >30KB. La dérogation Art. II (claude -p pour P1 et P2) est devenue la norme plutôt que l'exception.
Action : Augmenter le seuil de dérogation automatique ou explorer des alternatives (prompt compression, split review).
Métriques globales¶
| Story | Gate 3 | Gate 5 | Gate 8 | Tests | Coverage |
|---|---|---|---|---|---|
| PD-101 | NON_CONFORME→GO (2 iter) | RESERVE (1 iter) | GO (1 iter) | 121 | 88% |
Recommandations process¶
- Checklist pré-Gate 3 : Ajouter vérification de cohérence spec↔tests avant soumission (pattern #3)
- Sonar credentials : Renouveler immédiatement dans Vault
- ESLint injection : Ajouter extraction helper dans prompts agents
- Mobile audit rule : Distinguer mobile (fire-and-forget) vs backend (fail-closed) dans CLAUDE.md
- Art. II : Évaluer si le seuil 30KB doit être abaissé ou si une alternative technique existe