Aller au contenu

Rétrospective — PD-284

Résumé story

  • Story : PD-284 — UX scellement instantané — bouton urgent, carte progression, détails techniques
  • Domaine : b2c-mineurs (app mobile React Native)
  • Date : 2026-03-13
  • Durée : 5.4h (vs moyenne projet 6.6h, -18%)
  • Gates : G3 GO (v3, score 8.13) | G5 GO (v2, score 8.75) | G8 RESERVE (v1, score 8.17)

Learnings de cette story

Depuis les gates

Gate Verdict Score Itérations Tags Note
G3 GO 8.13 3 #spec, #state-machine, #branded-types Spec initiale manquait branded types et SLA temporels — ajoutés en v2/v3
G5 GO 8.75 2 #plan, #code-contracts, #decomposition Code contracts détaillés ont accéléré Phase 6b (agents bien cadrés)
G8 RESERVE 8.17 1 #test-coverage, #sse-testing, #mobile 3 MAJEUR tests infra absents, logique métier bien couverte

Depuis le REX

  1. Branded types comme barrière compilateur — SealId, DocumentId empêchent inversions UUID à la compilation. Pattern reproductible pour tout UUID sémantiquement distinct.
  2. Cognitive complexity : extraction de FIELD_BUILDERS Record — Remplacer un switch/case par un Record réduit la complexité cognitive de 26 à <15 sans perte de lisibilité.
  3. Mutable mapped type pour Zustand{ -readonly [K in keyof State]: State[K] } permet set() interne tout en gardant l'interface readonly pour les consommateurs.
  4. Tests infrastructure nécessitent planification dédiée — SSE client, orchestrateur et composants UI React Native absents car non planifiés comme tâches explicites dans la décomposition.
  5. tsconfig exclude patterns — Wildcard **/screens/vault/** bloquait ESLint pour nouveaux fichiers. Remplacer par exclusions individuelles.

Patterns récurrents (domaine mobile/app)

Pattern 1 : Tests UI React Native systématiquement absents (5 stories)

Stories : PD-284, PD-262, PD-101, PD-174, PD-79 Fréquence : 5/22 stories mobile (23%) Impact : RESERVE en Gate 8 pour PD-284. Coverage sous seuil pour PD-79. Cause : Les tests de composants React Native nécessitent RNTL + mocks complexes (navigation, SecureStore, fetch). Ils sont systématiquement sous-estimés en effort. Recommandation : Ajouter un item obligatoire dans la décomposition (step 6a) : "T-N: Tests composants UI (RNTL)" avec estimation explicite ≥ 2h.

Pattern 2 : Modules infra (SSE, WebSocket, streaming) non testés (3 stories)

Stories : PD-284 (SSE), PD-101 (multipart upload streaming), PD-180 (webhooks outbox) Fréquence : 3/22 stories avec module réseau temps réel Impact : Tests manquants en Gate 8 à chaque fois. Cause : Le mocking de fetch streaming, EventSource ou ReadableStream est complexe et peu documenté dans l'écosystème React Native/Expo. Recommandation : Créer un helper de test réutilisable __mocks__/fetch-streaming.ts avec exemples pour SSE, multipart, et WebSocket.

Pattern 3 : Reviewers LLM sans visibilité composants UI (3 stories)

Stories : PD-284 (E-01/E-02 audit), PD-262 (50% faux positifs Swift), PD-86 (Swift/SwiftUI confusion) Fréquence : 3 stories Impact : Faux positifs systématiques dans reviews code et sécurité. Cause : Le script d'assemblage des prompts n'injecte pas les composants UI (.tsx) dans le contexte de review code, seulement les modules logiques (.ts). Recommandation : Modifier assemble-prompt.sh --type review-code pour inclure les fichiers src/components/**/*.tsx dans le scope d'injection.

Pattern 4 : Gate 3 converge en 3 itérations (alerte faible)

Stories : PD-284 (3 iter), PD-283 (3 iter), PD-80 (2 iter) Fréquence : 3 stories récentes du domaine b2c-mineurs Impact : Temps de convergence Gate 3 élevé mais sans blocage. Cause : Les specs initiales du domaine b2c-mineurs impliquent des machines à états complexes (scellement, export, upload) qui génèrent des écarts structurels. Recommandation : Pour les stories avec machine à états ≥ 5 états, pré-rédiger le diagramme de transitions dans le besoin (step 0) pour cadrer la spec dès le départ.

Recommandations

Priorité haute (≥ 5 stories ou pattern récurrent)

  • R-01 : Ajouter item obligatoire "Tests composants UI (RNTL)" dans la checklist décomposition step 6a (Pattern 1)
  • R-02 : Créer src/__mocks__/fetch-streaming.ts comme helper réutilisable pour tests SSE/streaming (Pattern 2)
  • R-03 : Modifier assemble-prompt.sh --type review-code pour inclure src/components/**/*.tsx (Pattern 3)

Priorité normale

  • R-04 : Pour stories avec FSM ≥ 5 états, inclure diagramme transitions dans le besoin step 0 (Pattern 4)
  • R-05 : Documenter le pattern { -readonly [K in keyof State]: State[K] } pour Zustand dans les code contracts templates
  • R-06 : Enrichir la regex UUID client avec format canonique 8-4-4-4-12 (finding S-01)

Signal CLAUDE.md

ProbatioVault-app/CLAUDE.md

Section suggérée : "Tests composants React Native"

## Tests composants React Native (RNTL)

Toute story avec composant UI React Native DOIT planifier une tâche de test dédiée
dans la décomposition (step 6a), avec estimation ≥ 2h. Les tests UI ne sont PAS
un add-on post-implémentation.

Helper de mocking streaming : `src/__mocks__/fetch-streaming.ts`

ProbatioVault-ia-governance/CLAUDE.md (ou rules/)

Section suggérée : "Review code — injection composants UI"

## Review code — injection composants UI

Le script assemble-prompt.sh --type review-code DOIT inclure les fichiers
`src/components/**/*.tsx` dans le scope d'injection pour éviter les faux positifs
systématiques sur les invariants couverts par les composants UI.

La mise à jour de CLAUDE.md reste à la discrétion du PO.