PD-101 — Dossier de conformité Gate 3 (CONFORMITY_CHECK) — v1¶
Méta¶
- Story : PD-101 — Implémenter upload document avec progress
- Gate : 3 (CONFORMITY_CHECK)
- Itération : v1
- Date : 2026-03-10
- P1 (reviewer) : Claude
- P2 (confrontation) : Claude (dérogation Art. II — prompt > 30KB, OpenCode mode agentic)
Documents examinés¶
PD-101-specification.md(261 lignes, auteur ChatGPT)PD-101-tests.md(293 lignes, auteur ChatGPT)
Synthèse des écarts¶
Écarts BLOQUANTS (3)¶
| ID | Type | Résumé | Source |
|---|---|---|---|
| E-02 | Contradiction | Transition READY → CANCELLED interdite en §5.6 mais ERR-07 suppose annulation possible à tout moment. Document READY peut être scellé sans consentement. | Review P1 + CON P2 |
| E-05 | Ambiguïté | Validation fonctionnelle du hash (INV-05) non implémentable en zero-knowledge. Le mobile calcule mais ne vérifie pas par recalcul. Aucun mécanisme décrit. | Review P1 + ZO-08 P2 |
| E-16 | Ambiguïté | Granularité du nonce (file-level vs chunk-level) non spécifiée. Si chiffrement chunk-level, nonce unique = vulnérabilité catastrophique (nonce reuse GCM). | Review P1 |
Écarts MAJEURS (9)¶
| ID | Type | Résumé | Source |
|---|---|---|---|
| E-01 | Ambiguïté | Photos picker + transcodage + mode fidèle : optimized=false mais fichier altéré par iOS | Review P1 |
| E-03 | Ambiguïté | Format preuve de consentement non défini (booléen+timestamp ? audit signé ?) | Review P1 |
| E-06 | Spec↔Tests | Disclaimer EXIF (flux 5.1 étape 5) sans aucun test | Review P1 + DIV-02 P2 |
| E-08 | Hypothèse | Atomicité AbortMultipartUpload S3 non contractualisée, parts orphelines | Review P1 |
| E-09 | Spec↔Tests | INV-08 (envelope encryption) sans critère d'acceptation | Review P1 |
| E-10 | Spec↔Tests | INV-10 (no-sensitive-logs) sans critère d'acceptation | Review P1 |
| E-11 | Spec↔Tests | TC-INV-01..10 sans scénarios Given/When/Then — non exécutables | Review P1 + DIV-03 P2 |
| E-12 | Hypothèse | Purge mémoire Hermes best-effort vs invariant strict INV-07 | Review P1 |
| E-13 | Ambiguïté | Transition FAILED → UPLOADING autorisée mais non spécifiée | Review P1 + ZO-05 P2 |
Écarts MINEURS (4)¶
| ID | Type | Résumé | Source |
|---|---|---|---|
| E-04 | Ambiguïté | Seuil 10 MB : SI (10^7) ou binaire (10×1024²) ? | Review P1 |
| E-07 | Terminologie | Journal métier / audit / technique — 3 termes non distingués | Review P1 |
| E-14 | Spec↔Tests | TC-ERR-06 manquant (saut de numérotation) | Review P1 + DIV-01 P2 |
| E-15 | Sécurité | Transport base64 nonce/auth_tag sans intégrité contractualisée (TLS implicite) | Review P1 |
Zones d'ombre P2 non couvertes par P1¶
| ID | Résumé |
|---|---|
| ZO-01 | Qui génère doc_id (client vs backend) ? |
| ZO-02 | Taille chunk aux bornes [5,50] non testée |
| ZO-03 | Point de calcul hash (mémoire vs fichier temp) |
| ZO-04 | Contraintes iOS background URLSession en React Native |
| ZO-06 | Annulation upload simple non testée |
| ZO-07 | Concurrence de flux (2 uploads simultanés) |
Scoring¶
| Critère | Score | Justification |
|---|---|---|
| completeness | 6.0 | 3 bloquants (-6), compensé par couverture globale solide (10/10 INV, 12/12 CA) |
| testability | 5.5 | 10 tests d'invariants sans G/W/T (-2.5), disclaimer EXIF non testé (-1), TC-ERR-06 manquant (-0.25), performance non reproductible (-0.25), worker réconciliation non testé (-0.25) |
| clarity | 7.0 | Terminologie journal 3x (-0.25), seuil MB non défini (-0.25), format consentement absent (-1), architecture chiffrement chunk/file ambiguë (-1), transition FAILED→UPLOADING non spécifiée (-0.5) |
| traceability | 7.5 | INV-08 sans CA (-1), INV-10 sans CA (-1), bonne couverture globale (+0.5) |