Story : PD-86 — Detection de contenu sensible (IA locale) Epic : PD-185 — B2C-MINEURS Projet : ProbatioVault-app (iOS / React Native Expo) Gate : 5 — AMBIGUITY Iteration : v1 Date : 2026-02-24
1. Documents de reference
| Document | Statut | Fichier |
| Specification v2 | Present | PD-86-specification.md (v2.0.0) |
| Cahier de tests v2 | Present | PD-86-tests.md (34 TC) |
| Plan d'implementation | Present | PD-86-plan.md (v1.0.0, 568 lignes) |
| Code contracts | Present | PD-86-code-contracts.yaml (v1.0.0, 8 modules) |
| Review (Phase 1 — ChatGPT) | Present | PD-86-review-step5.md |
| Confrontation (Phase 2 — Claude) | Present | PD-86-confrontation-step5.md |
2. Synthese de la review Phase 1 (ChatGPT)
5 ecarts identifies par ChatGPT : - 1 BLOQUANT : TC-86-34 non demonstrable (stub isMinor) - 4 MAJEURS : extension requiresExplicitConfirmation, stub isMinor risque, invariants hors spec dans code contracts, hypothese implicite isMinor
3. Synthese de la confrontation Phase 2 (Claude)
17 convergences confirmees, 7 divergences, 7 zones d'ombre. - 1 BLOQUANT (DIV-06) : TC-86-34 non demonstrable - 2 MAJEURS (DIV-01, DIV-07) : extension formule mineur, spec Swift vs React Native - 4 MINEURS (DIV-02/03/04/05) : TTL, rawScores blacklist, invariants supplementaires, niveau test
4. Ecarts consolides
Ecarts BLOQUANTS
| ID | Type | Source | Description |
| ECT-01 | ECT | Review #3 + DIV-06 | TC-86-34 non demonstrable avec stub isMinor : Le test exige verification de la source serveur non falsifiable, mais le plan repose sur un stub local (false par defaut) tant que PD-84 n'est pas livre. Le plan doit specifier un mecanisme de verification partielle (mock authentifie) ou un report explicite a post-PD-84. |
Ecarts MAJEURS
| ID | Type | Source | Description |
| ECT-02 | DIV | Review #1 + DIV-01 | Extension non contractualisee de requiresExplicitConfirmation : Le plan etend la formule de isMinor && isSensitive (spec) a isMinor && (isSensitive \|\| isErrorStatus). Cette protection supplementaire est coherente mais non tracee dans la spec. Si l'extension est souhaitee, la spec doit etre mise a jour. |
| ECT-03 | DIV | DIV-07 | Spec indique Swift/SwiftUI, plan utilise React Native Expo : La spec §10 mentionne "iOS (Swift/SwiftUI)" mais le projet reel est React Native Expo avec bridges natifs. Ecart documentaire a corriger dans la spec. |
| ECT-04 | DIV | Review #4 + DIV-04 | Invariants supplementaires dans code contracts non traces en spec : Les code contracts ajoutent des invariants hors spec (classifieur stateless, TTL 90j, determinisme strict sampling, warm-up). Pas de contradiction mais dilution de la frontiere contractuelle. |
| ECT-05 | AMB | Review #2 + Review #5 | Stub isMinor avec fallback false — risque de neutralisation des garde-fous mineur : Le plan documente le stub mais ne propose pas de verrou de conformite explicite avant activation complete du flux mineur. Hypothese implicite de disponibilite future. |
Ecarts MINEURS
| ID | Type | Source | Description |
| ECT-06 | DIV | DIV-02 | TTL 90 jours introduit en reponse a ECT-v2-05 de Gate 3, mais non contractualise dans la spec. Detail d'implementation acceptable. |
| ECT-07 | DIV | DIV-03 | rawScores ajoutes a la blacklist logging dans le plan — durcissement non contractualise mais defense-in-depth coherente. |
| ECT-08 | DIV | DIV-05 | TC-86-05 classifie "Unit" dans le plan alors que la nature du test (ouverture + analyse + hash) est plutot integration. Erreur de classification sans consequence fonctionnelle. |
| ECT-09 | AMB | ZO-01 | Absence de test pour la frontiere contractuelle InMemoryHandle 64 MB. Le guard existe dans le plan mais aucun TC dedie ne verifie la valeur seuil exacte. |
| ECT-10 | AMB | ZO-02 | Benchmark modele ML absent du plan de test. Exigence Q1 documentee comme hypothese mais sans protocole de verification. |
| ECT-11 | AMB | ZO-03 | Algorithme PDF pour cas limites totalPages proches de 5. Deduplication et completion non testees aux frontieres. |
| ECT-12 | AMB | ZO-04 | Controles iOS anti-apercus (App Switcher, Spotlight, QuickLook) documentes mais aucun TC detaille pas-a-pas. Zone d'ombre recurrente depuis Gate 3. |
| ECT-13 | AMB | ZO-05 | Cas enabled=false + erreur persistee en cache non teste explicitement. La precedence R1 > R2 l'implique mais sans test dedie. |
| ECT-14 | AMB | ZO-06 | Strategie de migration post-update app (invalidation en masse des verdicts cache) non documentee. Impact performance potentiel. |
| ECT-15 | AMB | ZO-07 | Format exact de thresholdsVersion (entier incrementant) et modelVersion (semver? hash?) non precise. Gestion de conflit settings concurrent non documentee. |
5. Scoring
Decompte
| Gravite | Nombre | Deduction unitaire | Total |
| Bloquant | 1 | -2.0 | -2.0 |
| Majeur | 4 | -1.0 | -4.0 |
| Mineur | 10 | -0.25 | -2.5 |
| Total deductions | | | -8.5 |
Score brut : 10 - 8.5 = 1.5 (plancher mathematique)
Attribution par critere
| Critere | Score | Justification |
| feasibility | 7.5 | Architecture modulaire solide (23 composants), Phase 0 Go/No-Go complete avec 9 hypotheses validees. Dependance PD-84 (isMinor) documentee avec stub. Mais : stub rend TC-86-34 non demonstrable (bloquant testabilite, pas faisabilite), et spec Swift vs React Native cree une ambiguite sur la stack. Points forts : couverture INV/CA complete 20/20 + 19/19, framework de test identifie, CI planifiee. |
| coverage | 7.0 | Mapping complet 20/20 INV, 19/19 CA, 34/34 TC. Tous les 11 ecarts Gate 3 adresses. Mais : 10 ecarts mineurs residuels (ZO-01 a ZO-07, tests pas-a-pas iOS, benchmark ML, frontieres seuils). Ecart bloquant TC-86-34 non demonstrable. Les code contracts couvrent 8 modules avec invariants et forbidden patterns. |
| risk_mitigation | 7.5 | Gestion des 6 codes erreur comprehensive. Politique prudente (R2) bien documentee. TTL/purge RGPD (ECT-v2-05). Warm-up + lazy fallback. Zeroization best-effort documentee comme dette. Mais : pas de verrou de conformite mineur avant PD-84, extension non contractualisee de requiresExplicitConfirmation, benchmark ML en hypothese sans protocole de verification. |
| coherence | 8.0 | 17 convergences confirmees par la confrontation (solide). Architecture alignee avec le projet reel (React Native Expo). Flux techniques detailles et coherents. Code contracts coherents avec les modules du plan. Mais : spec dit Swift/SwiftUI vs plan React Native (ecart documentaire), invariants code contracts debordent la spec (dilution frontiere contractuelle). |
Scores finaux
| Critere | Score |
| feasibility | 7.5 |
| coverage | 7.0 |
| risk_mitigation | 7.5 |
| coherence | 8.0 |
| Moyenne | 7.5 |
6. Verdict attendu