Aller au contenu

PD-103 — Rapport de confrontation (Étape 5)

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

2. Convergences

  • Alignement global sur la machine à états et les états terminaux (INV-103-20..29, INV-103-38), avec couverture dans TESTS, implémentation prévue dans PLAN (M1/M6) et contractualisation CC-1.
  • Alignement sur le pipeline crypto et key exchange (SHA3-256 local, AES-256-GCM, dek_wrapped_b64, kek_id, zéroïsage, nonce CSPRNG) entre SPEC, TESTS, PLAN (M2/M11) et CODE CONTRACTS (CC-2, CC-11).
  • Alignement sur l’idempotence canonique (capture_id lowercase + fingerprint déterministe + 200/409) entre SPEC (INV-103-31/37), TESTS (TC-NOM-15, TC-INV-06, TC-ERR-13), PLAN (M10) et CODE CONTRACTS (CC-10).
  • Alignement sur la reprise différée (JWT valide + URL pré-signée fraîche + TTL + purge) entre SPEC, TESTS, PLAN (M6/M7) et CODE CONTRACTS (CC-6, CC-7).
  • Alignement sur la réconciliation (SEAL_DELAYED, clearing 3 cycles conformes, GC orphelins S3) entre SPEC (INV-103-33/35/36), TESTS (TC-INV-08/11/14), PLAN (M12) et CODE CONTRACTS (CC-12, CC-15).
  • Alignement opérationnel sur la distinction 422 UNWRAP_DEK_FAILED vs 503 KEY_SERVICE_UNAVAILABLE dans SPEC normatif, TESTS, PLAN et CODE CONTRACTS.

3. Divergences

⚠️ Les conflits ne doivent JAMAIS être lissés. Chaque divergence est rendue visible.

  • DIV-01 : Stratégie DDL contradictoire. Source A (SPECIFICATION §5.10) : “Stratégie de migration DDL : non applicable à cette story”. Source B (PLAN §1.2, M13) : migration CreateCaptureEvents prévue avec nouvelles colonnes. Source C (CODE CONTRACTS CC-13) : migration explicitement contractualisée. Impact : périmètre de livraison non univoque (story sans DDL vs avec DDL).

  • DIV-02 : Statut de testabilité gate contradictoire sur SEALED/ANCHOR_CONFIRMED. Source A (TESTS §10) : “Testable contractuellement (aucun bloquant ouvert)”. Source B (PLAN §12 + HT-103-03) : E2E UPLOADED -> SEALED -> ANCHOR_CONFIRMED hors scope/STUB, dépendances PD-56/PD-55/PD-41 non livrées. Source C (SPECIFICATION H-103-04) : pipeline supposé opérationnel. Impact : posture gate ambiguë (prêt sans bloquant vs dépendances non livrées).

  • DIV-03 : Contrat de stack crypto mobile contradictoire (obligatoire vs fallback). Source A (SPECIFICATION §10.1) : react-native-quick-crypto + react-native-get-random-values obligatoires. Source B (PLAN §2.1 + HT-103-01) : hash prévu via @noble/hashes/sha3, fallback possible (@noble, expo-crypto, module custom). Impact : risque de non-conformité technique et d’écart de perf/sécurité.

  • DIV-04 : Contrat HTTP POST /documents/capture incohérent dans la SPEC et divergent avec les autres docs. Source A (SPECIFICATION §10.2, Q-103-03) : contrat fixé 202/200/409/400/429. Source B (SPECIFICATION §5.12 + §6) : inclut 422 et 503. Source C (TESTS TC-ERR-16/17, PLAN §6, CODE CONTRACTS CC-9) : attendent explicitement 422/503. Impact : référentiel API non univoque pour validation QA/API.

  • DIV-05 : Bornes de retries incohérentes. Source A (SPECIFICATION §5.2) : retries configurables 0..5 (défaut 3). Source B (CODE CONTRACTS CC-4 + TESTS TC-NEG-16) : clamp/rejet selon §5.2, borne haute 5. Source C (PLAN §6) : “Retry borné (max 3)”. Impact : ambiguïté sur le comportement attendu en résilience réseau.

4. Zones d'ombre

  • Transition d’état client non explicitée pour les réponses 422/503 pendant UPLOADING (état cible mobile non contractualisé).
  • Clarifications encore ouvertes : Q-103-01, Q-103-02, Q-103-04, Q-103-05, Q-103-06.
  • Distribution authentique de la clé publique backend côté mobile (H-103-09) reste au niveau hypothèse, sans mécanisme de confiance détaillé de bout en bout.
  • Déclinaison implémentation (PLAN/CODE CONTRACTS) du payload canonique d’idempotence moins précise que la définition normative SPEC §5.12 (liste exacte des champs à comparer).

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