Type de gate : CLOSURE
1. Documents de référence
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.txt → manifest-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 |
| 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
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.