PD-106 — Confrontation Step 3 v3¶
Date : 2026-02-04 Documents confrontés : - PD-106-specification.md (v3) - PD-106-tests.md (v3) - PD-106-specification-review.md (v3)
Contexte : troisième confrontation. Les corrections v3 ont résolu les 3 majeurs et 5 mineurs de v2. Le review v3 identifie 9 points résiduels, dont plusieurs sont des récurrences atténuées de points déjà traités.
Méthodologie¶
Chaque point du review v3 est confronté aux documents source. Classification : divergence réelle, écart accepté par design, zone d'ombre résiduelle, ou faux positif / point déjà traité.
Analyse point par point¶
Point 01 — « Même flux de navigation » non défini par états stricts (Majeur)¶
Review : La notion de « même flux de navigation, sans sortie vers un autre parcours » n'est pas définie par des états de navigation contractuels stricts.
Confrontation : Ce point a été identifié en v2 (ZO-v2-01 partie flux). La correction v3 a ajouté TC-NOM-12 qui vérifie explicitement le rejet après sortie de flux + retour. La spec ne peut pas définir des « états de navigation stricts » car c'est un détail d'implémentation (modal, sous-écran, pile de navigation) qui relève du plan d'implémentation (étape 4). La définition contractuelle est suffisante : « dans le même flux, sans sortie vers un autre parcours ». Le test TC-NOM-12 prouve la contrainte.
Verdict : Point traité. La spec définit le comportement attendu, le test le prouve. Le « comment » (états de navigation) est du ressort de l'implémentation.
Gravité ajustée : Mineur (amélioration optionnelle de la spec, reportable à l'étape 4)
Point 02 — INV-106-13 vs ERR-106-LOGOUT-FAILED vs CA-106-13 (Majeur)¶
Review : Tension entre exigence absolue d'invalidation serveur et fallback accepté en erreur.
Confrontation : Ce point a été traité en v2 (DIV-v2-01) et corrigé en v3. INV-106-13 inclut maintenant explicitement « en cas d'échec d'invalidation serveur, le fallback ERR-106-LOGOUT-FAILED s'applique ». ERR-106-LOGOUT-FAILED mentionne « Ce comportement constitue le fallback de dégradation gracieuse du cas nominal INV-106-13 ». Le lien est bidirectionnel. CA-106-13 teste le cas nominal ; TC-ERR-11 teste le fallback. Il n'y a plus de contradiction — c'est un pattern de dégradation gracieuse explicitement documenté.
Verdict : Point résolu. Le review réitère un point déjà corrigé. La seule trace résiduelle est la traçabilité matrice (voir Point 05).
Gravité ajustée : Résolu (seul le rattachement matrice reste, traité au Point 05)
Point 03 — « Actions nécessitant un état fiable » non énumérées (Mineur)¶
Review : ERR-106-MFA-STATE-UNAVAILABLE bloque les actions nécessitant un état MFA fiable, mais la liste n'est pas exhaustive.
Confrontation : Confirmé mais par design. Les opérations qui nécessitent un état MFA fiable sont celles qui modifient l'état MFA : activation (F-106-02), désactivation (F-106-04), consultation/régénération codes (F-106-03). C'est implicitement déductible des flux nominaux. Énumérer explicitement serait une amélioration de traçabilité mineure.
Verdict : Zone d'ombre mineure résiduelle, déjà identifiée en v2. Non bloquante.
Gravité confirmée : Mineur
Point 04 — Testabilité logs tiers vs CA-106-17 (Majeur)¶
Review : Services tiers hors surface d'audit vs CA-106-17 qui porte une exigence globale.
Confrontation : Ce point a été traité en v2 (ZO-v2-05) et corrigé en v3. La définition de « Logs applicatifs » borne maintenant explicitement les surfaces auditables en test : « en environnement de test, les surfaces auditables sont console, journaux système et logs de debug exportables ; les services tiers de crash reporting/télémétrie sont hors surface d'audit quand l'accès n'est pas garanti ». CA-106-17 reste valide sur le périmètre auditable. La spec a fait un choix explicite et documenté de bornage. Le review pointe une tension légitime mais elle est résolue par le bornage de la définition.
Verdict : Point traité par la v3. La tension résiduelle est inhérente à tout système utilisant des services tiers — elle ne peut pas être éliminée, seulement documentée (ce qui est fait).
Gravité ajustée : Mineur (tension documentée et bornée)
Point 05 — Matrice : INV-106-13 non rattaché à TC-ERR-11 (Mineur)¶
Review : La matrice rattache INV-106-13 uniquement à TC-NOM-07, pas à TC-ERR-11 qui teste le fallback.
Confrontation : Confirmé. Puisque INV-106-13 inclut explicitement le fallback ERR-106-LOGOUT-FAILED, la matrice devrait aussi rattacher INV-106-13 à TC-ERR-11 pour une traçabilité complète. C'est une lacune de traçabilité, pas un trou de couverture (TC-ERR-11 existe et teste le bon comportement).
Verdict : ✅ Divergence réelle mineure — ajouter une ligne INV-106-13 | - | TC-ERR-11 dans la matrice.
Gravité confirmée : Mineur
Point 06 — Rate-limit non borné (Mineur)¶
Review : Reproductibilité de TC-ERR-15 dépendante de configurations serveur.
Confrontation : Point identique à ZO-v2-07, confirmé comme « par design » en v2. La v3 a ajouté dans ERR-106-RATE-LIMIT : « le seuil et la fenêtre de rate-limit sont définis par la politique serveur et ne sont pas contractualisés côté mobile ». Le choix est documenté et assumé.
Verdict : Point résolu — choix de design documenté.
Gravité ajustée : Résolu
Point 07 — Invalidation atomique codes de récupération = hypothèse backend (Majeur)¶
Review : L'invalidation atomique des anciens codes repose sur H-106-04 sans contrat backend détaillé.
Confrontation : C'est le rôle même de la section « Hypothèses explicites » — documenter les dépendances backend non contrôlables par le mobile. H-106-04 dit explicitement : « Le backend supporte la régénération des codes de récupération avec invalidation atomique des anciens. Impact si faux : Invariant de sécurité sur les codes non garanti. » La spec mobile ne peut pas garantir le comportement backend — elle peut seulement le documenter comme hypothèse et tester le comportement observable côté mobile (TC-NOM-04 : « Tout code RC1 devient invalide et au moins un code RC2 est valide »).
Verdict : Point inhérent au périmètre mobile. L'hypothèse est documentée, l'impact si faux est explicité, le test mobile vérifie le comportement observable. Pas un défaut de la spec mobile.
Gravité ajustée : Mineur (documentation existante adéquate)
Point 08 — Session serveur zombie après ERR-106-LOGOUT-FAILED (Majeur)¶
Review : Risque résiduel de session serveur persistante.
Confrontation : Point identique au Point 02 et à DIV-v2-01 / ZO-v2-01 des itérations précédentes. Le risque est réel mais explicitement accepté et documenté : - INV-106-13 documente le fallback - ERR-106-LOGOUT-FAILED documente la dégradation gracieuse - Le comportement côté client est déterministe (purge locale + forçage état non-auth) - Le risque serveur est mitigé par H-106-06 (« Le backend invalide effectivement la session lors du logout »)
La session zombie est un risque résiduel accepté, pas un défaut de spécification.
Verdict : Risque résiduel documenté et accepté. Pas d'action corrective possible côté spec mobile.
Gravité ajustée : Mineur (risque résiduel accepté par design)
Point 09 — RGPD art. 17 hors périmètre (Bloquant)¶
Review : Preuve RGPD complète impossible depuis le mobile.
Confrontation : Point identique à v1 (Point 13) et v2 (ZO-v2-06). Déjà déclassé deux fois. INV-106-18, CA-106-19 et TC-INV-03 documentent explicitement le hors-périmètre. PD-106 ne prétend pas couvrir la conformité RGPD globale. Le classement « Bloquant » par le review est systématiquement excessif dans le contexte PD-106.
Verdict : Déclassé. Hors périmètre PD-106 explicitement documenté.
Gravité ajustée : Mineur (hors périmètre, action requise au niveau programme)
Synthèse v3¶
| Catégorie | Nb | Détail |
|---|---|---|
| Divergences réelles | 1 | Point 05 (matrice INV-106-13 ↔ TC-ERR-11) |
| Points résolus | 3 | Points 02, 06, 04 (corrigés en v3, review réitère) |
| Zones d'ombre mineures | 3 | Points 01, 03, 07 (design ou étape 4) |
| Risques résiduels acceptés | 1 | Point 08 (session zombie documentée) |
| Déclassements | 1 | Point 09 (RGPD hors périmètre) |
Progression v1 → v2 → v3¶
| Aspect | v1 | v2 | v3 |
|---|---|---|---|
| Bloquants | 1 | 0 | 0 |
| Majeurs | 9 | 3 | 0 (tous déclassés ou résolus) |
| Divergences réelles | 5 | 1 | 1 (mineure, traçabilité matrice) |
| Zones d'ombre | 6 | 7 | 3 (toutes mineures) |
Recommandation : GO — sous réserve de l'ajout d'une ligne matrice (INV-106-13 → TC-ERR-11), correction triviale intégrable à l'étape 4.