Gate 3 — Review Spécification PD-63¶
Reviewer : Claude (subprocess) Date : 2026-02-20 Verdict préliminaire : NON VALIDE — Corrections requises
Résumé¶
20 constats identifiés : 5 Bloquants, 9 Majeurs, 6 Mineurs
Constats Bloquants (5)¶
Constat 1 — Audit fail-open vs fail-closed¶
Type : Contradiction
Référence : INV-63-05 vs architecture PD-46
Description : INV-63-05 exige une trace probatoire pour chaque demande (non négociable), mais le code PD-46 hérité implémente un try/catch silencieux — le téléchargement réussit sans audit en cas d'erreur audit.
Impact : Violation de non-répudiation. Un téléchargement peut avoir lieu sans trace.
Gravité : Bloquant
Constat 2 — Format de réponse non figé¶
Type : Incohérence Spec↔Tests
Référence : §10.1 (Points à clarifier) vs TC-NOM-05, TC-INT-01
Description : §10.1 demande de figer « URL pré-signée vs redirection HTTP » mais le cahier de tests présuppose déjà l'URL pré-signée (TC-NOM-05, TC-INT-01). Incohérence entre spec ouverte et tests fermés.
Impact : Tests non déterministes si le format change.
Gravité : Bloquant
Constat 3 — Politique anti-énumération 403/404 non définie¶
Type : Ambiguïté
Référence : §10.2 (Points à clarifier), TC-SEC-11
Description : §10.2 laisse ouvert le choix 403 vs 404 en cas de document existant mais non autorisé. TC-SEC-11 exige une conformité « à la politique » sans la définir. Le comportement actuel retourne 404/403 distinguables = oracle d'énumération.
Impact : Faille de sécurité potentielle permettant d'énumérer les documents existants.
Gravité : Bloquant
Constat 4 — Statuts 410/423 sans modèle de données¶
Type : Non testable
Référence : ERR-63-06, ERR-63-07, TC-INT-07, TC-INT-08
Description : ERR-63-06 (410 - document supprimé) et ERR-63-07 (423 - document verrouillé) sont testés par TC-INT-07/08, mais le modèle `DocumentSecure` n'a ni `deletedAt`, ni flag de verrouillage juridique.
Impact : Tests non implémentables en l'état.
Gravité : Bloquant
Constat 5 — Flux partage/B2B = TODO¶
Type : Non testable
Référence : H-63-01, Flux B et C, TC-NOM-03, TC-NOM-04, TC-INT-02, TC-INT-03
Description : H-63-01 suppose PD-46 « stable » mais `DocumentAccessGuard` contient 2 blocs TODO pour partage et B2B. 2/3 flux nominaux (Partage, B2B) et 6 tests associés sont non exécutables.
Impact : 66% des flux nominaux non testables.
Gravité : Bloquant
Constats Majeurs (9)¶
Constat 6 — Sémantique usage unique vs multi-usage non tranchée¶
Type : 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 de clarifier si l'URL est réutilisable dans la fenêtre TTL. Les pre-signed URLs S3 sont nativement multi-usage.
Impact : Incertitude sur le comportement attendu.
Gravité : Majeur
Constat 7 — Pre-signed URL expose le chemin S3¶
Type : Risque sécu/conformité
Référence : INV-63-10, format pre-signed URL
Description : La pre-signed URL expose le chemin S3 complet (provider, bucket, UUID du document) en contradiction avec INV-63-10 qui interdit de divulguer le « chemin de stockage ».
Impact : Fuite d'information sur l'architecture de stockage.
Gravité : Majeur
Constat 8 — Double système de codes d'erreur¶
Type : Contradiction
Référence : ERR-63-* vs ERR-46-* (PD-46 existant)
Description : La spec PD-63 définit ERR-63-01 à ERR-63-10, mais PD-46 existant utilise ERR-46-*. Pas de mapping ni réconciliation documentée.
Impact : Confusion lors de l'implémentation et du debugging.
Gravité : Majeur
Constat 9 — Seuil timing attack non contractuel¶
Type : Non testable
Référence : TC-SEC-12
Description : TC-SEC-12 mentionne « Écart ≤ seuil défini (ex. <10%) » — le « ex. » rend le critère non contractuel et non reproductible.
Impact : Test non reproductible sans seuil fixé.
Gravité : Majeur
Constat 10 — Événements audit sans signature probatoire¶
Type : Hypothèse dangereuse
Référence : INV-63-05, CA-63-07, H-63-03
Description : Les événements audit sont stockés en table PostgreSQL sans signature HSM/TSA/blockchain. H-63-03 suppose l'admissibilité probatoire mais celle-ci est contestable sans signature cryptographique.
Impact : Recevabilité juridique des preuves incertaine.
Gravité : Majeur
Constat 11 — Audit pour 401 non implémentable¶
Type : Incohérence Spec↔Tests
Référence : TC-INT-04, INV-63-05
Description : TC-INT-04 exige un événement probatoire pour 401, mais `OidcJwtAuthGuard` rejette la requête avant d'atteindre le code métier. L'audit doit être implémenté dans le guard ou interceptor global.
Impact : Architecture à modifier pour respecter INV-63-05.
Gravité : Majeur
Constat 12 — Statuts document autorisés non spécifiés¶
Type : Ambiguïté
Référence : Flux nominaux §5
Description : Les flux nominaux ne spécifient pas quels statuts document (PENDING, SEALED, EXPIRED, etc.) autorisent le téléchargement. Un document PENDING peut-il être téléchargé ?
Impact : Comportement non déterministe selon le statut.
Gravité : Majeur
Constat 13 — Granularité audit non contractualisée¶
Type : Ambiguïté
Référence : §10.6
Description : §10.6 demande de clarifier « granularité exacte des champs d'audit » mais le cahier de tests suppose déjà des champs (actor, docId, tenant, décision, timestamp).
Impact : Incertitude sur les champs obligatoires vs optionnels.
Gravité : Majeur
Constat 14 — Compatibilité Glacier non bornée¶
Type : Hypothèse dangereuse
Référence : INV-63-07, §10.7, CA-63-10
Description : §10.7 mentionne « contraintes de latence/récupération froide » mais le SLA n'est pas défini. Un document Glacier peut nécessiter 12h de restauration — le TTL 5min devient incohérent.
Impact : Impossible de garantir CA-63-10 sans SLA défini.
Gravité : Majeur
Constats Mineurs (6)¶
Constat 15 — ERR-63-08 (429) optionnel¶
Type : Ambiguïté
Référence : ERR-63-08
Description : ERR-63-08 est marqué « optionnelle si feature active » — pas de critère d'acceptation ni test associé.
Impact : Comportement indéterminé.
Gravité : Mineur
Constat 16 — Format ID non spécifié¶
Type : Ambiguïté
Référence : ERR-63-01, TC-NOM-01, TC-ERR-01
Description : TC-NOM-01 mentionne « UUID/ULID valide » mais la spec ne fixe pas le format exact. UUID v4 ? ULID ? Les deux ?
Impact : Validation d'entrée incertaine.
Gravité : Mineur
Constat 17 — Métadonnées retournées non définies¶
Type : Ambiguïté
Référence : §10.4
Description : §10.4 demande de définir « niveau minimal de métadonnées retournées » (nom, type MIME) mais aucun CA ni test ne couvre ce point.
Impact : Comportement non testable.
Gravité : Mineur
Constat 18 — Préconditions tests non vérifiables¶
Type : Incohérence Spec↔Tests
Référence : Préconditions générales (cahier de tests)
Description : Les préconditions mentionnent « horloge testable (fake clock) » mais aucune spec ne documente comment injecter cette horloge.
Impact : Tests potentiellement non reproductibles.
Gravité : Mineur
Constat 19 — TC-INT-14 alternative non tranchée¶
Type : Ambiguïté
Référence : TC-INT-14
Description : TC-INT-14 propose « Requête rejetée (fail-safe) ou mise en file garantie, selon contrat » — les deux alternatives sont mutuellement exclusives.
Impact : Test non déterministe.
Gravité : Mineur
Constat 20 — Numérotation TC-SEC incohérente¶
Type : Incohérence Spec↔Tests
Référence : Tests de sécurité
Description : Les tests sécurité commencent à TC-SEC-01/02 (unitaires) puis sautent à TC-SEC-10 (section sécurité). Confusion possible.
Impact : Lisibilité réduite.
Gravité : Mineur
Synthèse par axe¶
| Axe | Bloquants | Majeurs | Mineurs |
|---|---|---|---|
| Ambiguïtés | 1 | 4 | 4 |
| Contradictions | 1 | 1 | 0 |
| Non testables | 2 | 1 | 0 |
| Incohérences Spec↔Tests | 1 | 1 | 2 |
| Hypothèses dangereuses | 0 | 2 | 0 |
| Risques sécu/conformité | 0 | 1 | 0 |
Conclusion¶
Les 8 « Points à clarifier » du §10 ne sont pas des détails mineurs : les points 1, 2, 3, 5 impactent directement la testabilité et la sécurité. Ils doivent être résolus avant toute implémentation.
Recommandation : Résoudre les 5 bloquants et clarifier les 9 majeurs avant de soumettre à la confrontation.
Généré par : Claude (subprocess) Date : 2026-02-20