Aller au contenu

PD-262 — Plan d’implémentation : Revue

1. Références

  • Spécification : PD-262-specification.md
  • Tests contractuels : PD-262-tests.md
  • Plan d’implémentation : PD-262-plan.md
  • Date de revue : 2026-03-06
  • Reviewer : Auditeur technique indépendant (IA)

2. Constatations (écarts)

Type Référence (Spec/Test/Plan) Description Impact Gravité (BLOQUANT/MAJEUR/MINEUR)
Non-conformité Spec INV-262-02 / Spec §4 / Plan §1 (C3, C4), §2 (FT3) Le plan décrit une orchestration lockout/purge pilotée côté service TypeScript (handleDetection -> tamperingPurgeService), alors que l’invariant impose une décision lockout/purge uniquement native non inhibable/non retardable par JS. Dépendance fonctionnelle à la couche JS sur une décision critique de sécurité ; risque de contournement/retard via bridge/runtime. BLOQUANT
Non-conformité Spec ERR-10, CA-18, INV-262-09, INV-262-12 / Spec §5 F6 + §6 / Plan §2 (FT6) FT6 prévoit lockout absent + first_launch_clean présent => MONITORED, sans condition explicite de reconstruction fail-closed du cas crash/kill entre TAMPERED_SESSION et LOCKED_PERSISTENT. Possibilité de reprise nominale après interruption en fenêtre critique, contraire à l’irréversibilité attendue. BLOQUANT
Test irréalisable CA-16, TC-NOM-08 / Tests §3, §8 / Plan §5 (mapping TC-NOM-08), §11 Le plan associe la vérification de persistance lockout majoritairement à une “Integration (mock Keychain)”, alors que le test contractuel exige inspection des métadonnées Keychain réelles (kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly). Le test contractuel ne peut pas être démontré avec le mécanisme de test décrit ; validation de conformité incomplète. BLOQUANT
Hypothèse implicite INV-262-10, CA-14 / Plan §4 (CA-14), §8 (HT-05, HT-06) La conformité “aucun secret temporaire en clair au repos” est déléguée à des modules existants et hypothèses d’architecture, sans mécanisme contractuel explicite couvrant exhaustivement tous artefacts temporaires mentionnés. Risque de trou de couverture sur l’invariant crypto si un artefact temporaire échappe au périmètre réel des modules délégués. MAJEUR
Test irréalisable TC-NOM-06, TC-ERR-06 / Tests §3-4 / Plan §5 (niveau “Unit (conditions compilées)”) Les scénarios de gating compile-time (DEBUG/SIMULATOR/QA flag build) sont mappés en tests unitaires, sans observabilité de build matrix native explicitée dans le mécanisme de test. Démonstration contractuelle partielle des règles compile-time ; risque de non-preuve du comportement en configuration réelle. MAJEUR
Contrainte technique non documentée Plan global (absence section “Contraintes techniques” dédiée) Le plan ne documente pas explicitement le framework de test choisi (Jest ou Vitest). Ambiguïté d’exécution QA et reproductibilité CI. MINEUR
Contrainte technique non documentée Plan global Compatibilité ESM/CJS (dépendances ESM-only et adaptation runner) non documentée. Risque d’échec d’exécution des tests/runner lié au mode module ; contrainte demandée non satisfaite. MAJEUR
Contrainte technique non documentée Plan global Variables CI requises (ex: DATABASE_URL, CI=true, etc.) non documentées pour les tests d’intégration/perf. Exécution pipeline non déterministe selon environnement. MINEUR
Contrainte technique non documentée Plan §9.3, §12 Dépendances inter-PD non listées avec statut explicite unifié (DONE/TODO/STUB) pour l’ensemble des dépendances citées (PD-98, PD-107, PD-283, etc.). Traçabilité contractuelle inter-stories incomplète. MINEUR
Code Contract — Forbidden Code contracts T10 / section forbidden Règle “Tester sign et verify isolement (roundtrip obligatoire si crypto)” non reliée au périmètre de la story PD-262 ni aux invariants contractuels fournis. Pollution normative du contrat de code ; risque d’ambiguïté d’audit sur exigences hors périmètre. MINEUR

3. Synthèse

  • Nombre d’écarts par gravité : BLOQUANT: 3 / MAJEUR: 3 / MINEUR: 4
  • Points critiques :
  • Contradiction sur l’autorité native (lockout/purge) vs orchestration JS.
  • Reconstruction d’état au boot incompatible avec le cas crash/kill contractuel.
  • Mécanismes de test décrits insuffisants pour prouver certains TC contractuels (notamment Keychain metadata et gating compile-time).

Vérification du contexte itération v2 : - E-01 : corrigé (présence de getDeviceIdPseudo dans plan + contracts). - E-02 : partiellement corrigé (distinction reconstruction/transition ajoutée, mais incohérence persistante sur cas crash/kill). - E-03 : corrigé (stub PD-283 explicité). - E-04 : corrigé (tests adversariaux device réel explicités). - E-05 : corrigé (bootstrapping first_launch_clean documenté).

4. Verdict de la revue

  • Statut : ⛔ Rejeté
  • Motif synthétique : le plan reste non conforme sur des invariants critiques (autorité native, reconstruction fail-closed post-crash) et ne permet pas de démontrer intégralement certains tests contractuels obligatoires.