Aller au contenu

Dossier de conformité — Gate 3 PD-63

Story : PD-63 — GET /documents/:id/download Gate : 3 (CONFORMITY_CHECK) Itération : v1 Date : 2026-02-20


1. Synthèse

Gravité Nombre
Bloquant 4
Majeur 7
Mineur 7
Non applicable 2
Total valides 18

2. Écarts bloquants (4)

ECT-63-01 — Audit fail-open vs fail-closed

Champ Valeur
Type ECT (Écart technique)
Référence INV-63-05, architecture PD-46
Description INV-63-05 impose une trace probatoire pour CHAQUE demande (non négociable). L'implémentation PD-46 héritée utilise un try/catch silencieux permettant un téléchargement sans audit en cas d'erreur.
Impact Violation de non-répudiation. Perte de traçabilité probatoire.
Action requise Modifier l'architecture pour fail-closed : si audit échoue, rejeter la requête.

ECT-63-02 — Format de réponse non figé

Champ Valeur
Type DIV (Divergence)
Référence §10.1, TC-NOM-05, TC-INT-01
Description La spec §10.1 demande de figer le format (URL pré-signée vs redirection HTTP) mais les tests présupposent déjà l'URL pré-signée.
Impact Tests non déterministes si le format change. Incohérence Spec↔Tests.
Action requise Figer dans la spec : "La réponse succès retourne une URL pré-signée S3 dans le body JSON."

ECT-63-03 — Statuts 410/423 sans modèle de données

Champ Valeur
Type ECT (Écart technique)
Référence ERR-63-06, ERR-63-07, TC-INT-07, TC-INT-08
Description Les codes 410 (supprimé) et 423 (verrouillé) sont spécifiés et testés, mais le modèle DocumentSecure n'a ni deletedAt ni flag de verrouillage juridique.
Impact Tests non implémentables.
Action requise Ajouter les champs au modèle OU déclarer ces cas hors périmètre PD-63.

ECT-63-04 — Flux partage/B2B = TODO

Champ Valeur
Type ECT (Écart technique)
Référence H-63-01, Flux B et C, TC-NOM-03, TC-NOM-04
Description H-63-01 suppose PD-46 "stable" mais DocumentAccessGuard contient des TODO pour partage et B2B. 66% des flux nominaux non testables.
Impact Flux Partage et B2B non vérifiables.
Action requise Compléter l'implémentation des guards partage/B2B OU créer stories dédiées et marquer hors périmètre PD-63.

3. Écarts majeurs (7)

DIV-63-01 — Politique anti-énumération 403/404

Champ Valeur
Type AMB (Ambiguïté)
Référence §10.2, TC-SEC-11
Description Choix 403 vs 404 non tranché pour document existant mais non autorisé. Oracle d'énumération possible.
Action requise Trancher : "Document existant non autorisé = 403" ou "= 404 uniforme".

DIV-63-02 — Sémantique usage unique vs multi-usage

Champ Valeur
Type AMB (Ambiguïté)
Référence INV-63-03, §10.5
Description INV-63-03 mentionne "non réutilisable hors fenêtre" mais §10.5 demande clarification sur réutilisabilité dans la fenêtre TTL.
Action requise Trancher : "URL réutilisable durant TTL" (comportement S3 natif) ou "usage unique" (nécessite token additionnel).

DIV-63-03 — Double système de codes d'erreur

Champ Valeur
Type DIV (Divergence)
Référence ERR-63-* vs ERR-46-*
Description Deux taxonomies concurrentes sans mapping formel.
Action requise Créer mapping ERR-46 → ERR-63 ou unifier la taxonomie.

DIV-63-04 — Seuil timing attack non contractuel

Champ Valeur
Type AMB (Ambiguïté)
Référence TC-SEC-12
Description "ex. <10%" n'est pas un seuil contractuel.
Action requise Fixer : "Écart latence p95 ≤ 10% entre doc existant et inexistant."

DIV-63-05 — Événements audit sans signature probatoire

Champ Valeur
Type SEC (Sécurité)
Référence H-63-03, INV-63-05
Description Événements en table PostgreSQL sans signature HSM/TSA. Force probatoire contestable.
Action requise Clarifier si PD-37 (HSM audit signature) s'applique à ces événements.

DIV-63-06 — Statuts document autorisés non spécifiés

Champ Valeur
Type AMB (Ambiguïté)
Référence Flux §5
Description Quels statuts (PENDING, SEALED, EXPIRED) autorisent le téléchargement ?
Action requise Ajouter tableau : statut → téléchargeable (oui/non).

DIV-63-07 — Granularité audit non contractualisée

Champ Valeur
Type AMB (Ambiguïté)
Référence §10.6
Description Champs audit (actor, docId, tenant, décision, timestamp) supposés mais non contractualisés.
Action requise Figer le schéma d'événement audit dans la spec.

4. Écarts mineurs (7)

ID Type Description
MIN-63-01 DIV Pre-signed URL expose chemin S3 (acceptable si clés opaques)
MIN-63-02 AMB Compatibilité Glacier sans SLA (cadrage NFR)
MIN-63-03 AMB Format ID UUID/ULID non fixé
MIN-63-04 AMB Métadonnées retournées non définies
MIN-63-05 AMB Fake clock non documenté (préconditions tests)
MIN-63-06 DIV TC-INT-14 alternative non tranchée
MIN-63-07 DIV Numérotation TC-SEC incohérente

5. Constats non applicables (2)

ID Description Raison
NA-01 Audit 401 non implémentable Implémentable via interceptor global
NA-02 ERR-63-08 (429) optionnel Explicitement optionnel dans la spec

6. Scoring préliminaire (critères Gate 3)

Critère Score estimé Justification
Completeness 5/10 4 bloquants dont 2 flux non implémentables
Testability 6/10 7 ambiguïtés majeures, tests présupposent des clarifications
Clarity 7/10 Structure claire mais 8 points à clarifier non résolus
Traceability 8/10 Matrice TC→CA/INV complète, quelques incohérences mineures

Moyenne : 6.5/10NON_CONFORME (< 7.0)


7. Verdict préliminaire

NON_CONFORME — Les 4 bloquants doivent être résolus avant nouvelle soumission.

Actions prioritaires

  1. Résoudre ECT-63-01 : Architecture fail-closed pour audit
  2. Résoudre ECT-63-02 : Figer format réponse = URL pré-signée
  3. Résoudre ECT-63-03 : Ajouter champs modèle OU hors périmètre
  4. Résoudre ECT-63-04 : Compléter guards OU hors périmètre

Points à clarifier (§10) à trancher

  • §10.1 → URL pré-signée (confirmé par tests)
  • §10.2 → Choix anti-énumération
  • §10.5 → Multi-usage dans TTL (S3 natif)
  • §10.6 → Schéma audit

Généré par : Orchestrateur Claude Date : 2026-02-20