Story : PD-86 — Detection de contenu sensible (IA locale) Epic : PD-185 — B2C-MINEURS Projet : ProbatioVault-app (iOS) Gate : 3 — CONFORMITY_CHECK Iteration : v1 Date : 2026-02-24
1. Documents de reference
| Document | Statut | Fichier |
| Expression de besoin | Present | PD-86-besoin.md |
| Specification | Present | PD-86-specification.md |
| Cahier de tests | Present | PD-86-tests.md |
| Review spec (Phase 1) | Present | PD-86-review-step3.md |
| Confrontation (Phase 2) | Present | PD-86-confrontation-step3.md |
2. Sources d'ecarts
- Phase 1 — Review Claude : 20 constats (4 bloquants, 9 majeurs, 7 mineurs)
- Phase 2 — Confrontation ChatGPT : 1 divergence (DIV-01), 6 zones d'ombre
3. Synthese des ecarts
Ecarts BLOQUANTS
| ID | Type | Source | Description | References |
| ECT-01 | AMB | C-01 + ZO-04 | "Pages representatives" PDF non definies : aucune strategie d'echantillonnage contractuelle (nombre de pages, selection premiere/mediane/derniere). Contrairement aux videos (12 frames, uniforme + 2 premieres secondes), les PDF n'ont pas de regle. TC-86-25 et PERF-86-05 non verifiables. Signale par ST-86-04. | Spec §8, §2.1, Q8 |
| ECT-02 | AMB | C-02 + ZO-01 | Collision suppressWarning=true x erreur d'analyse : le contrat gate viewer ne resout pas le conflit quand un document a la preference "ne plus prevenir" ET que l'analyse echoue (TIMEOUT, MODEL_UNAVAILABLE). INV-86-09 (politique prudente) vs preference utilisateur : aucune regle de precedence. | Spec §5.2, §9, INV-86-09 |
| ECT-03 | SEC | C-03 | Mineur peut contourner INV-86-06 via suppressWarning : le contrat §5.2 autorise l'omission du modal quand suppressWarning=true sans condition sur isMinor. Un mineur pourrait desactiver la protection document par document. Aucun test ne couvre isMinor=true + suppressWarning=true. Risque conformite B2C-MINEURS. | Spec §5.2, INV-86-06, TC-86-13 |
| ECT-04 | ECT | C-04 | Cache non invalide lors du changement de seuils : INV-86-13 invalide le cache uniquement si modelVersion change. Si l'utilisateur abaisse un seuil (ex: NUDITE 0.70 → 0.55), les documents deja classifies ne sont pas reclassifies. Le resultat est l'inverse de l'intention utilisateur. | Spec §4.2, §3.1, INV-86-13 |
Ecarts MAJEURS
| ID | Type | Source | Description | References |
| ECT-05 | AMB | C-05 + ZO-05 | Budget 700 ms sans device cible ni percentile : aucune matrice de devices de reference. Aucun percentile (P50/P95/P99). PERF-86-01 non deterministe. Signale par ST-86-03. | Spec §8, §10 |
| ECT-06 | AMB | C-06 + ZO-06 | Compatibilite iOS minimale non specifiee : deleguee a l'implementation. Impacte disponibilite CoreML/Vision, chiffrement Data Protection, performances inference. | Spec §10 |
| ECT-07 | AMB | C-07 | Source de isMinor non contractualisee : flag isMinor: Bool en entree sans source definie (profil, age, flag serveur). Si falsifiable localement, INV-86-06 est contournable. Learning PD-106 : scope mineur = 4 iterations Gate 3. | Spec §5.1, INV-86-06 |
| ECT-08 | SEC | C-08 | Seuils configurables par mineur sans garde-fou : un mineur peut monter tous les seuils a 0.95, rendant la detection quasi inoperante. Pas de seuils plancher pour mineurs. Risque conformite. | Spec §3.1, Q10, INV-86-06 |
| ECT-09 | AMB | C-09 | Timeout d'inference sans borne temporelle : le comportement TIMEOUT est specifie (modal prudent) mais la duree de timeout n'est pas contractualisee (1s ? 30s ?). TC-86-08 non deterministe. | Spec §Q7, §9 |
| ECT-10 | ECT | C-10 | UNSUPPORTED_FORMAT absent du gate viewer : le contrat §5.2 ne liste pas ce statut dans les cas declenchant un modal prudent. Un format non supporte par le modele ML mais affichable par le viewer iOS pourrait etre rendu sans analyse ni consentement. | Spec §5.2, §9 |
| ECT-11 | DIV | C-11 | Pas de test : desactivation globale + document deja sensible : INV-86-14 empeche les nouvelles classifications, TC-86-10 verifie cela. Mais aucun test ne couvre l'ouverture d'un document deja classifie sensible quand la detection est desactivee. Comportement indetermine. Learning PD-174 : distinguer "desactiver" vs "effacer". | INV-86-14, TC-86-10 |
| ECT-12 | ECT | C-12 | Race condition : reclassification concurrente : aucune specification d'idempotence, lock ou mutex pour le meme document ouvert dans deux contextes simultanement (split view iPad). Risque de corruption du cache de verdict. Learning PD-105 : PQueue/mutex obligatoire. | INV-86-13, §5.1, §3.1 |
| ECT-13 | DIV | C-13 + ZO-02 | Pas de test pour les bornes de seuils : seuils bornes [0.50, 0.95] sans cas de test verifiant le rejet hors bornes (0.49, 0.96) ni le comportement aux bornes exactes. | Spec §3.1 |
Ecarts MINEURS
| ID | Type | Source | Description | References |
| ECT-14 | AMB | C-14 | InMemoryHandle non defini, pas de gestion OOM pour fichiers volumineux | Spec §5.1 |
| ECT-15 | DIV | C-15 | TC-86-18/19/20 couvrent INV-86-01 indirectement (couverture fragile) | Matrice §1.1 |
| ECT-16 | AMB | C-16 | INV-86-10 (zeroization best-effort) sans CA associe, critere de reussite indetermine | INV-86-10, ST-86-01 |
| ECT-17 | AMB | C-17 | "Reconstituable" dans INV-86-12 non defini ; TC-86-15 subjectif. Signale ST-86-02 | INV-86-12, ST-86-02 |
| ECT-18 | ECT | C-18 | Scores arrondis Float(2d) : moment arrondi vs decision non specifie | Spec §3.1, §3.2 |
| ECT-19 | AMB | C-19 | Mecanismes systeme iOS d'apercu non listes (exigence ouverte). Learning PD-248. | Spec §7 |
| ECT-20 | AMB | C-20 | ViewerGateDecision.requiresExplicitConfirmation : regle de calcul absente | Spec §3.1 |
| ECT-21 | DIV | DIV-01 | Contradiction cache : documentId dans la structure : la spec inclut documentId dans DocumentSensitiveVerdict, les tests (TC-86-06) ne le listent pas dans les champs autorises. Ambiguite de conformite. | Spec §3.1, TC-86-06, CA-86-06 |
| ECT-22 | AMB | ZO-03 | Unicite (documentId, modelVersion) definie dans la spec sans scenario de validation/collision | Spec §3.1 |
4. Scoring
Methode de calcul
Base = 10. Deductions : -2 par bloquant, -1 par majeur, -0.25 par mineur.
Decompte
| Gravite | Nombre | Deduction unitaire | Total |
| Bloquant | 4 | -2.0 | -8.0 |
| Majeur | 9 | -1.0 | -9.0 |
| Mineur | 9 | -0.25 | -2.25 |
| Total deductions | | | -19.25 |
Score brut : 10 - 19.25 = negatif (plancher 1.0)
Attribution par critere (Gate 3 : completeness, testability, clarity, traceability)
| Critere | Score | Justification |
| completeness | 4.0 | 4 ecarts bloquants (PDF, suppressWarning x erreur, mineur x suppressWarning, cache seuils). 9 ecarts majeurs dont 2 liees a la protection des mineurs (C-07 source isMinor, C-08 seuils mineurs). Perimetre fonctionnel couvert mais lacunes structurelles. |
| testability | 4.5 | 3 ecarts de type "non testable" (C-05 budget, C-09 timeout, C-16 zeroization). 2 ecarts "pas de test" (C-11, C-13). Matrice de couverture 15/15 INV et 12/12 CA formellement complete mais 5 tests non deterministes ou absents. |
| clarity | 5.0 | 7 ambiguites (C-01 PDF, C-02 collision, C-06 iOS min, C-07 isMinor, C-09 timeout, C-14 InMemoryHandle, C-17 reconstituable). 1 divergence spec/tests (DIV-01 documentId). Structure globale claire, mais les zones floues sont concentrees sur des points critiques. |
| traceability | 6.0 | Matrice de couverture INV/CA complete. Referencement croise spec↔tests present. Signalements ST-86-01..04 pertinents. Points faibles : couverture indirecte INV-86-01 (C-15), INV-86-10 sans CA (C-16), DIV-01 non resolue. |
Scores finaux
| Critere | Score |
| completeness | 4.0 |
| testability | 4.5 |
| clarity | 5.0 |
| traceability | 6.0 |
| Moyenne | 4.875 |
5. Verdict attendu