Story : PD-86 — Detection de contenu sensible (IA locale) Epic : PD-185 — B2C-MINEURS Projet : ProbatioVault-app (iOS) Gate : 3 — CONFORMITY_CHECK Iteration : v2 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) |
| Review v2 (Phase 1) | Present | PD-86-review-step3-v2.md |
| Confrontation v2 (Phase 2) | Present | PD-86-confrontation-step3-v2.md |
2. Resolution des ecarts v1
Ecarts BLOQUANTS v1
| ID | Ecart v1 | Statut v2 | Resolution |
| ECT-01 | PDF sans strategie d'echantillonnage | RESOLU | Q8 specifie maxPagesAnalyzed=5, premiere + derniere + 3 intérieures uniformes. TC-86-26 teste la strategie. |
| ECT-02 | Collision suppressWarning x erreur | RESOLU | §5.2 definit un ordre de precedence contractuel (6 regles). INV-86-09 prime toujours. |
| ECT-03 | Mineur contourne via suppressWarning | RESOLU | INV-86-16 : si isMinor=true, suppressWarning ignore. TC-86-27 teste explicitement. |
| ECT-04 | Cache non invalide sur changement seuils | RESOLU | INV-86-20 : reevaluation depuis rawScores sans re-inference. thresholdsVersion ajoute. TC-86-30 teste. |
Ecarts MAJEURS v1
| ID | Ecart v1 | Statut v2 | Resolution |
| ECT-05 | Budget 700ms sans device/percentile | RESOLU | §8 : P95 sur iPhone 12 (A14, iOS 16.0+). PERF-86-01 mis a jour. |
| ECT-06 | iOS min non specifiee | RESOLU | §10 : iOS 16.0. |
| ECT-07 | Source isMinor non contractualisee | RESOLU | Q11 + §7 : profil authentifie serveur B2C-MINEURS. SEC-86-06 + TC-86-34. |
| ECT-08 | Seuils mineur sans garde-fou | RESOLU | INV-86-17 : seuils plafonnes aux defauts pour mineurs. TC-86-28. |
| ECT-09 | Timeout sans borne temporelle | RESOLU | Q7 + §4.2 : timeout contractuel 5000 ms. |
| ECT-10 | UNSUPPORTED_FORMAT absent du gate | RESOLU | §5.2 regle 2 : liste etendue incluant UNSUPPORTED_FORMAT + OUT_OF_MEMORY. |
| ECT-11 | Pas de test desactivation + sensible | RESOLU | INV-86-18 : rendu direct sans modal. TC-86-29. |
| ECT-12 | Race condition concurrente | RESOLU | INV-86-19 : mutex/PQueue mono-cle. TC-86-31 + TC-86-32. |
| ECT-13 | Pas de test bornes seuils | RESOLU | TC-86-33 : rejet hors bornes, acceptation aux bornes exactes. |
Ecarts MINEURS v1
| ID | Statut v2 |
| ECT-14 (InMemoryHandle) | RESOLU — defini dans §3.2 avec limite 64 MB + OUT_OF_MEMORY |
| ECT-15 (couverture INV-86-01) | PARTIELLEMENT RESOLU — tests TC-86-18/19/20 renforcent verification reseau mais tests plus stricts que spec |
| ECT-16 (INV-86-10 sans CA) | RESOLU — CA-86-13 ajoute |
| ECT-17 (logs reconstituables) | RESOLU — whitelist/blacklist explicite dans §7 |
| ECT-18 (arrondi vs decision) | RESOLU — §3.2 : decision avant arrondi sur rawScores |
| ECT-19 (mecanismes iOS) | PARTIELLEMENT RESOLU — App Switcher, Spotlight, QuickLook cites mais observables de preuve limites |
| ECT-20 (requiresExplicitConfirmation) | RESOLU — regle = isMinor && isSensitive |
| ECT-21 (documentId dans cache) | RESOLU — CA-86-06 inclut documentId dans champs autorises |
| ECT-22 (unicite sans test) | RESOLU — TC-86-32 teste la collision |
3. Ecarts residuels v2
Ecarts MAJEURS
| ID | Type | Source | Description |
| ECT-v2-01 | ECT | Review v2 #1 | Precedence enabled=false vs politique prudente : §5.2 regle 1 dit "pas de modal, rendu direct" quand enabled=false. Mais si l'analyse a deja echoue (ex: TIMEOUT persisté), INV-86-09 exige un modal prudent. La precedence enabled=false > politique prudente n'est pas explicitement justifiee. |
| ECT-v2-02 | AMB | Review v2 #2 | requiresExplicitConfirmation exclut les cas d'erreur mineur : la formule isMinor && isSensitive ne couvre pas le cas ou status=TIMEOUT (pas sensible, mais prudent) pour un mineur. INV-86-06 vise les mineurs sans distinguer sensible/prudent. |
| ECT-v2-03 | DIV | Review v2 #3 + Confrontation DIV-01 | Tests plus stricts que spec sur transmission reseau : TC-86-04 interdit catégories/statuts sur le réseau, mais INV-86-01 interdit seulement "contenu en clair". La spec ne contractualise pas l'interdiction de scores/catégories sur le réseau. + CA-86-18 couvert par TC-86-03 qui ne teste pas la stratégie d'échantillonnage. |
| ECT-v2-04 | AMB | Review v2 #4 + Confrontation ZO-06 | SEC-86-07 sans scenario de test pas-a-pas : les mecanismes iOS d'apercu sont cites en tableau mais aucun TC detaille ne verifie App Switcher, Spotlight, QuickLook individuellement. |
| ECT-v2-05 | SEC | Review v2 #7 | Aucune borne de retention/purge pour verdicts en cache : documentId persiste indefiniment, risque RGPD. Aucune politique de TTL ou purge documentee. |
Ecarts MINEURS
| ID | Type | Source | Description |
| ECT-v2-06 | AMB | Review v2 #5 | Zeroization best-effort : preuve partielle uniquement (signalé ST-86-01, non bloquant) |
| ECT-v2-07 | AMB | Review v2 #6 | LocalTimestamp sans contrainte sur derive/rollback horloge |
| ECT-v2-08 | AMB | Confrontation ZO-02 | Chemin negatif INV-86-20 (rawScores absents) non couvert par test |
| ECT-v2-09 | AMB | Confrontation ZO-03 | Algorithme PDF cas limites (totalPages ~ 5, deduplication) couvert partiellement |
| ECT-v2-10 | AMB | Confrontation ZO-04 | Seuil memoire InMemoryHandle 64 MB non teste a la frontiere |
| ECT-v2-11 | AMB | Confrontation ZO-05 | Benchmark modele pre-prod (Q1) absent du plan de test |
4. Scoring
Decompte
| Gravite | Nombre v2 | Deduction unitaire | Total |
| Bloquant | 0 | -2.0 | 0 |
| Majeur | 5 | -1.0 | -5.0 |
| Mineur | 6 | -0.25 | -1.5 |
| Total deductions | | | -6.5 |
Score brut : 10 - 6.5 = 3.5 (plancher mathematique)
Attribution par critere
| Critere | Score | Justification |
| completeness | 7.5 | Les 4 bloquants v1 resolus. 20 INV (vs 15), 19 CA (vs 12), 34 TC (vs 25). Lacunes residuelles : retention RGPD absente, chemin negatif INV-86-20, benchmark Q1 non teste. |
| testability | 7.0 | Signalements ST-86 reduits de 4 a 2. Budget perf desormais testable (P95 iPhone 12). Mais : SEC-86-07 sans TC detaille, seuil memoire 64MB non teste, cas limites PDF partiels. |
| clarity | 8.0 | Ordre de precedence gate viewer clairement numerote (6 regles). InMemoryHandle, isMinor, timeout, arrondi tous definis. Mineure tension residuelle : precedence enabled=false vs prudence, requiresExplicitConfirmation exclut cas prudent mineur. |
| traceability | 8.5 | Matrice 20/20 INV + 19/19 CA complete. 34 TC. Sur-declaration CA-86-18 par TC-86-03 (non verifiable). rawScores dans verdict pour audit. Signalement DIV-01 confrontation visible. |
Scores finaux
| Critere | Score |
| completeness | 7.5 |
| testability | 7.0 |
| clarity | 8.0 |
| traceability | 8.5 |
| Moyenne | 7.75 |
5. Verdict attendu