Aller au contenu

PD-283 — Rétrospective

Périmètre d'analyse

  • Domaine : b2c-mineurs / crypto / mobile
  • Stories analysées : 337 learnings dans learnings.jsonl, 13 avec tag #zero-knowledge
  • Story courante : PD-283 — Assemblage local ZIP dossier plainte (Zero-Knowledge)

Patterns identifiés

Pattern 1 : Validation format-only vs fonctionnelle (SEC-format-validation)

Fréquence : 3 stories (PD-283, PD-282, PD-265) Sévérité : BLOCKING

Les schémas de validation (Zod, class-validator) vérifient le format (regex, longueur) mais pas la sémantique. PD-283 integrityHash : format hex 64 chars validé, mais jamais comparé au fichier téléchargé. Pattern identique PD-282 (certificat validé en format mais trustedRoots optionnel) et PD-265 (monitoring NTS format OK mais clearing conditionnel absent).

Recommandation : Ajouter dans la checklist pre-Gate 5 (/gov-check-plan) un item "Vérification fonctionnelle de chaque champ de sécurité" distinct de la validation de format.

Pattern 2 : Purge proactive obligatoire (SEC-crash-residual)

Fréquence : 2 stories (PD-283, PD-262) Sévérité : WARNING

Le finally block ne suffit pas — un crash app (OOM, kill signal) bypass le finally. PD-283 : fichiers clairs résiduels après crash. PD-262 : données anti-tampering résiduelles en cache.

Recommandation : Pour toute story manipulant des fichiers temporaires sensibles, exiger un appel purgeStale() ou équivalent au démarrage du flux, documenté comme invariant dans la spec.

Pattern 3 : Passthrough byte vs sémantique (ARCH-passthrough)

Fréquence : 1 story (PD-283), mais pattern potentiellement récurrent Sévérité : INFO

Quand la spec dit "passthrough strict", elle peut signifier byte-level (identité binaire) ou sémantique (clés/valeurs préservées). JSON parsing détruit l'identité byte-level (ordre des clés, espacement). PD-283 : confrontation a identifié la divergence, reclassée comme décision architecturale.

Recommandation : Quand une spec mentionne "passthrough", qualifier explicitement : passthrough: byte-level (pour binaire) ou passthrough: semantic (pour JSON/XML).

Pattern 4 : Coverage effective hors I/O natif (QA-coverage-mobile)

Fréquence : 3 stories (PD-283, PD-262, PD-97) Sévérité : INFO

Les modules dépendant d'I/O natif (expo-file-system, expo-notifications, Keychain) ont une couverture systématiquement faible (15-20%) car les mocks sont difficiles. La couverture globale est tirée vers le bas par ces modules. PD-283 : 77% vs 80% objectif, causé par pvproof-assembler (14%) et streaming-hasher (17%).

Recommandation : Calculer et afficher la "coverage effective" (hors barrel files et modules I/O natif) en complément de la coverage globale.

Pattern 5 : Gate 3 comme investissement (PROCESS-gate3-roi)

Fréquence : PD-283 + 8 stories avec #spec-ambiguous/#spec-incomplete Sévérité : INFO

PD-283 Gate 3 a identifié 15 écarts (7 ambiguïtés, 5 complétude, 3 sécurité). Après correction, Gate 5 = GO v1 et Gate 8 = RESERVE v1 avec seulement des limitations documentées. Le ROI de Gate 3 sévère est mesurable : moins d'itérations en aval.

Recommandation : Maintenir la sévérité Gate 3 actuelle. Ne pas assouplir pour "gagner du temps".

Signal à l'humain

Candidats à intégration CLAUDE.md

Pattern Tag Recommandation
SEC-format-validation #format-vs-functional Ajouter item dans /gov-check-plan checklist
SEC-crash-residual #purge-proactive Documenter dans rules/learnings.md comme règle

Action requise

Oui — Pattern SEC-format-validation (3 occurrences, blocking) mérite une règle dans procedures.md ou learnings.md.

Métriques de cette rétrospective

Métrique Valeur
Learnings analysés 337
Patterns identifiés 5
Blocking 1
Warning 1
Info 3
Action requise Oui (1 pattern)