Aller au contenu

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

  1. Checklist pré-Gate 3 : Ajouter vérification de cohérence spec↔tests avant soumission (pattern #3)
  2. Sonar credentials : Renouveler immédiatement dans Vault
  3. ESLint injection : Ajouter extraction helper dans prompts agents
  4. Mobile audit rule : Distinguer mobile (fire-and-forget) vs backend (fail-closed) dans CLAUDE.md
  5. Art. II : Évaluer si le seuil 30KB doit être abaissé ou si une alternative technique existe