Aller au contenu

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