Aller au contenu

PD-253 — Dossier de conformité (Étape 8)

Type de gate : CLOSURE

1. Documents de référence

  • PD-253-besoin — présent
  • PD-253-specification — présent
  • PD-253-tests — présent
  • PD-253-specification-review — présent
  • PD-253-plan — présent
  • PD-253-plan-review — présent
  • PD-253-code-contracts — absent
  • PD-253-acceptability — présent
  • PD-253-acceptability-review — présent
  • PD-253-rex — absent
  • PD-253-decomposition — présent

2. Rapport de confrontation

Voir : PD-253-confrontation-step8.md

3. Hypothèses déclarées

ID Hypothèse Impact si fausse
H-253-01 Les modules amont (PD-282, PD-39, PD-37) fournissent des ProofEnvelopes contractuellement valides et complètes. Exports échouent en FAILED avec PROOF_ENVELOPE_INCOMPLETE. Acceptable : détection asynchrone contractualisée.
H-253-02 Le stockage staging S3/OVH supporte des objets jusqu'à 100 GB par export. Limite à revoir ; risque non-conformité volumétrique sur gros coffres.
H-253-03 Le mécanisme S3 de présignature supporte TTL configurable entre 1h et 72h. Vérifier la limite OVH Object Storage sur les URLs signées.
H-253-04 Les métriques P95 sont disponibles en environnement de référence instrumenté. CA-253-12 non vérifiable. Accepté : item de monitoring Sprint.
H-253-05 Le mapping des statuts de destruction légale (PD-250) est accessible via une requête DB depuis le module bulk-export. Risque d'inclusion/exclusion incorrecte. Requête directe sur destruction_bordereaux via schema vault_secure.
H-253-06 La signature HSM peut être indisponible sans bloquer la réversibilité. Seul niveau standard disponible. Acceptable : INV-253-06.
H-253-07 La rétention uniforme post-téléchargement (indépendante du statut DOWNLOADED) est acceptable pour PD-253. Une purge anticipée sur confirmation pourra être ajoutée dans une story ultérieure.
H-253-08 La sélection du périmètre est effectuée au démarrage du worker (moment ASSEMBLING), pas au moment REQUESTED. Un document créé dans la fenêtre REQUESTED → ASSEMBLING n'est pas inclus. Acceptable : fenêtre de quelques secondes.
H-253-09 La copie content.enc depuis S3 vers le répertoire temp est incluse dans le package BagIt (export contient le binaire chiffré). Alternative : package contient uniquement les métadonnées et preuves (sans le binaire). Décision retenue : inclusion du binaire chiffré pour réversibilité NF Z42-013 §13.1 (auto-porteur).
H-253-10 Les fichiers temporaires /tmp/bulk-export-{exportId}/ ne contiennent aucun secret cryptographique (PD-253 est Zero-Knowledge côté serveur : les données manipulées sont content.enc déjà chiffré, et des hashes non-réversibles). Le chiffrement au repos pour INV-253-11 est fourni par le chiffrement disque hôte (disk encryption du serveur). Si le serveur hôte n'a pas de chiffrement disque, INV-253-11 est dégradé. À documenter dans le runbook opérationnel.
H-253-11 L'upload du package BagIt vers S3/OVH staging utilise le multipart upload (@aws-sdk/lib-storage Upload) pour les packages > 5GB. S3Service.uploadFile() est un stub (TODO) et devra être étendu par CC-253-07 (BagItAssemblerService) pour déléguer l'upload multipart. La limite PutObjectCommand = 5GB (S3 spec) ; packages jusqu'à 100GB requièrent obligatoirement multipart. Si S3Service n'est pas étendu, les packages > 5GB échouent avec EntityTooLarge. Criticité : MAJEUR (bloque les exports de gros coffres).

4. Écarts identifiés

Écarts RÉSOLUS (avant gate)

ID Type Description Criticalité
E-01 ECT Audit fail-closed absent (INV-253-10) — corrigé BLOQUANT RÉSOLU
E-02 ECT resolveGlobal excluait soft-deleted (INV-253-09) — corrigé BLOQUANT RÉSOLU
E-03 ECT manifest-sha3-256.txtmanifest-sha3.txt (INV-253-04) — corrigé BLOQUANT RÉSOLU
T-01/S-01 ECT ACTIVE_BULK_EXPORT_STATUSES manquait READY_FOR_DOWNLOAD — corrigé MAJEUR RÉSOLU
S-02 ECT = E-01 — résolu conjointement MAJEUR RÉSOLU
T-02 ECT Tests audit fail-closed absents — +2 tests ajoutés MAJEUR RÉSOLU

Écarts RESTANTS (non résolus)

ID Type Description Criticalité Tracé
DIV-01 / E-04 DIV INV-253-11 — chiffrement fichiers temp au repos non implémenté. Mitigation : chiffrement disque hôte (H-253-10). MAJEUR PD-253b
DIV-02 DIV TC-ERR-09 — spec/tests attendent 504 EXPORT_TIMEOUT, implémentation retourne 200 { status: FAILED_TIMEOUT }. Plan §ZA-02 justifie la suppression du 504. Test contractuel invalide. MINEUR PD-253b
DIV-03 DIV TC-NOM-15 absent du document de tests contractuel (présent dans les 126 tests) MINEUR PD-253b
DIV-04 DIV ExportExpiryScheduler bypass FSM — set status direct au lieu d'appeler ExportStateMachineService.transition() (INV-253-13) MINEUR PD-253b
DIV-05 DIV create() sans transaction DB — orphelin potentiel si queue.add() échoue après repo.save() (INV-253-14) MINEUR PD-253b
DIV-06 DIV confirmDownload non idempotent — Exception sur appel double (ECT-01, CC-253-05) MINEUR PD-253b
DIV-07 DIV Préfixe URL /exports (spec) vs /bulk-exports (plan/impl) — plan postérieur, décision justifiée MINEUR Spec à mettre à jour

Zones d'ombre

ID Description Criticité
ZO-02 Multipart upload > 5GB — stub non implémenté (H-253-11) MAJEUR opérationnel
ZO-03 P95 non vérifié (CA-253-12) — environnement non instrumenté (H-253-04) INFO
ZO-04 BulkExportProcessor 0% couverture unitaire — exclu par conception INFO

5. Scores conformité (Gate 8 CLOSURE)

Critère Écarts Score
conformity 1 MAJEUR (DIV-01/INV-253-11) + 6 MINEUR → 10 - 1 - 1.5 7.5
test_coverage 3 MINEUR (TC-ERR-09, TC-NOM-15, T-03 processor 0%) + 82.3% Sonar → 10 - 3×0.25 - 0.25 8.5
security 5 MINEUR restants (S-03 à S-07) → 10 - 5×0.25 8.75
maintainability 3 contrats non respectés (DIV-04/05/06) + DIV-07 → 10 - 4×0.25 9.0

Moyenne : (7.5 + 8.5 + 8.75 + 9.0) / 4 = 8.44


6. Verdict attendu

  • GO — conformité vérifiée
  • RESERVE — conformité partielle, conditions à satisfaire (conformity 7.5 < 8)
  • NON_CONFORME — écarts bloquants identifiés
  • ESCALADE — décision humaine requise

Note dérogation Art. II : Phase 1 (ChatGPT) remplacée par claude -p — prompts > 30KB (54KB + 101KB), mode agentic ChatGPT non utilisable. Validation croisée maintenue via 2 appels claude -p distincts + mode FACTUEL.