PD-103 — Rapport de confrontation (Étape 8)¶
Ce rapport est produit par l'orchestrateur Claude avant chaque gate PMO.
Il confronte les documents produits pour identifier convergences, divergences et zones d'ombre.
1. Sources confrontées¶
PD-103-specification.md(contenu mixte v2 + v3, incluant sections marquées[v3])PD-103-tests.md(tests contractuels v3)PD-103-acceptability.mdPD-103-plan.md- Livrables agents :
capture-crypto,capture-idempotence,capture-ingest,capture-kek-keyring,capture-migration,capture-ocr,capture-orchestrator,capture-purge,capture-reconciliation,capture-state-machine,capture-store,capture-ui,capture-upload,capture-tests-integration,capture-types
2. Convergences¶
- Le flux cœur est aligné : capture applicative iOS -> hash local -> chiffrement local -> upload -> pipeline de scellement -> notification à
SEALED(spec§5.⅘.5/5.6,testsTC-NOM-01/08/09,plan§2). - Le contrat crypto converge globalement sur
SHA3-256,AES-256-GCM, wrapping DEK +kek_id, et exclusion OCR du probatoire (specINV-103-03/06/30/34/37,testsmatrice §2,planmappings INV). - Le modèle de reprise différée est cohérent dans son principe :
UPLOAD_DEFERRED+ prérequis JWT valide + URL pré-signée fraîche (specINV-103-24,testsTC-NOM-06/TC-ERR-15,plan§2.2). - Les états terminaux
CANCELLEDetANCHOR_CONFIRMEDsont convergents dans spec/tests/plan (specINV-103-28,testsTC-NOM-12/TC-INV-10,planmapping INV-103-28). - L’idempotence canonique
payload_canonical_sha256et la sémantique200/409sont convergentes au niveau intentionnel (spec§5.12,testsTC-NOM-15/TC-INV-06/TC-ERR-13, livrablecapture-idempotence). - Le couple supervision
SEAL_DELAYED+ GC orphelins S3 est convergent sur l’objectif (specINV-103-33/35/36,testsTC-INV-11/14,plan§2.3).
3. Divergences¶
⚠️ Les conflits ne doivent JAMAIS être lissés. Chaque divergence est rendue visible.
- DIV-01 : Contrat SPEC interne incohérent (v2 et v3 cohabitent dans le même fichier)
- Source A (document) :
PD-103-specification.mdindiqueTolérance skewmin/max0..900et erreurs contrat sans422/503. - Source B (document) : le même
PD-103-specification.md(section[v3]) fixeTolérance skewà300..300et ajoute422/503. -
Impact : baseline contractuelle ambiguë (validation, API, tests opposables).
-
DIV-02 : DDL déclaré « non applicable » vs migrations effectivement prévues
- Source A (document) :
PD-103-specification.md§5.10 : « Stratégie de migration DDL : non applicable à cette story ». - Source B (document) :
PD-103-plan.md(M13) + livrablecapture-migration: créationcapture_eventsetcapture_audit_log. - Source C (document) :
PD-103-acceptability.mdE-02 mentionne un correctif migration↔entités. -
Impact : contradiction de périmètre DB et traçabilité de gate fragilisée.
-
DIV-03 : Statut
SEAL_DELAYEDtraité à la fois comme flag et comme état DB - Source A (document) :
PD-103-specification.mdv3 :SEAL_DELAYEDest un flag, FSM à 8 états. - Source B (document) :
PD-103-acceptability.mdE-03 : « SEAL_DELAYED + 4 états mobiles ajoutés dans enum DB ». - Source C (document) : livrable
capture-migration: enum DB explicitement à 8 états, sansSEAL_DELAYED. -
Impact : incohérence structurelle machine d’états/persistance/tests.
-
DIV-04 : Sémantique HTTP
200/202idempotence non alignée - Source A (document) :
PD-103-specification.md§5.12 impose202(nouveau) et200(idempotent). - Source B (document) :
PD-103-acceptability.mdE-04 corrigé par « @HttpCode conditionnel 200/202 ». - Source C (document) : livrable
capture-ingest(controller) décrit une difficulté à retourner dynamiquement200et évoque un status exposé dans le body. -
Impact : contrat API potentiellement non respecté côté client/monitoring.
-
DIV-05 : État backend à l’ingestion (
CAPTURED) vs contratUPLOADED -> PENDING_SEAL - Source A (document) :
PD-103-specification.md§5.6 : le commit backend déclencheUPLOADED -> PENDING_SEAL. - Source B (document) : livrable
capture-ingest: insertioncapture_events (state='CAPTURED', signature_status='PENDING_SIGNATURE')et hypothèse H-M9-05 « captures restent enCAPTURED» si pipeline non livré. -
Impact : divergence sur le statut probatoire réel et sur les SLA de scellement.
-
DIV-06 : Exigence « payload différé chiffré localement » vs fuite OCR en clair
- Source A (document) :
PD-103-specification.md§5.5 : payload différé stocké localement chiffré. - Source B (document) :
PD-103-acceptability.mdS-02 : fuiteocr_texten clair dans AsyncStorage (deferredCaptures). - Source C (document) : livrable
capture-store: persistancedeferredCapturesdans AsyncStorage. -
Impact : non-conformité sécurité/privacy sur données sensibles locales.
-
DIV-07 : Module annoncé auto-contenu vs modification navigation existante
- Source A (document) :
PD-103-plan.md§11 : « Aucune modification d'autres modules existants. Le module capture est auto-contenu. » - Source B (document) : livrable
capture-ui:src/navigation/AppNavigator.tsxmarqué « MODIFIE ». -
Impact : écart de périmètre et de gouvernance de changement.
-
DIV-08 : Couverture auth revendiquée vs lacunes reconnues
- Source A (document) :
PD-103-specification.md/PD-103-tests.mdincluent401/403dans les erreurs contrat. - Source B (document) :
PD-103-acceptability.mdT-01/T-02 : test explicite403non prouvé et401absent de la matrice. -
Impact : couverture sécurité incomplète pour gate.
-
DIV-09 : Verdict QA « sans bloquant » vs résidu de majeurs significatifs
- Source A (document) :
PD-103-tests.mdverdict QA : « Testable contractuellement (aucun bloquant ouvert...) ». - Source B (document) :
PD-103-acceptability.mdpost-correction :8 MAJEURSrésiduels +4 MINEURS. -
Impact : lecture gate contradictoire sur la maturité réelle.
-
DIV-10 : Plan infra M15 vs livrables incomplets signalés
- Source A (document) :
PD-103-plan.mdinclut M15capture-s3-config(Terraform). - Source B (document) :
PD-103-acceptability.mdE-09 : « module infra S3 » manquant. -
Impact : risque sur lifecycle S3/gestion des orphelins non entièrement garanti.
-
DIV-11 : Stack crypto mobile obligatoire vs implémentation décrite partiellement dérogatoire
- Source A (document) :
PD-103-specification.md§10.1 :react-native-quick-crypto+react-native-get-random-valuesobligatoires. - Source B (document) : livrable
capture-crypto: usageexpo-crypto, SHA3 via@noble/hashes, etrsaOaepWrapexplicitement non implémenté dans la classe fournie. - Impact : conformité technique et readiness crypto non stabilisées.
4. Zones d'ombre¶
- Source normative unique non explicitée entre blocs v2/v3 dans
PD-103-specification.md(présence de marqueurcodexet sections dupliquées) : baseline de gate non verrouillée. - Preuve factuelle de correction des majeurs résiduels absente (références commits dans
acceptability, mais pas de rattachement explicite aux tests/fichiers dans ce dossier de confrontation). - Contrat API des endpoints d’upload auxiliaires (
/presign,multipart-init,multipart-complete, abort) non normé au même niveau quePOST /documents/capture. - Dépendances
PD-55/PD-56/PD-41restent partiellement en STUB dans plusieurs livrables ; absence de date/owner de clôture consolidés dans ce dossier. - Gouvernance des majeurs résiduels (E-05..E-09, T-01..T-02, S-01..S-02) : pas de plan de fermeture unifié avec échéances gate.
5. Recommandation¶
- Procéder — convergence confirmée, aucun conflit bloquant
- Rework nécessaire — divergences à résoudre avant de continuer
- Escalade — décision humaine requise sur un point structurant