Gate 3 — Confrontation PD-63¶
Contre-auditeur : ChatGPT (gpt-5.3-codex) Date : 2026-02-20
Analyse des constats¶
Constats Bloquants¶
Constat 1 : Audit fail-open vs fail-closed - Position : CONFIRMER - Justification : INV-63-05 impose une traçabilité probatoire pour chaque demande ; la référence à l'implémentation PD-46 en try/catch silencieux est en contradiction directe avec cet invariant. - Gravité finale : Bloquant
Constat 2 : Format de réponse non figé - Position : CONFIRMER - Justification : §10.1 indique un format à figer (URL pré-signée vs redirection), alors que TC-NOM-05 et TC-INT-01 supposent déjà l'URL pré-signée ; incohérence Spec↔Tests qui rend l'oracle de test instable. - Gravité finale : Bloquant
Constat 3 : Politique anti-énumération 403/404 non définie - Position : NUANCER - Justification : §10.2 et TC-SEC-11 montrent une ambiguïté réelle ; toutefois ce point est tranchable par convention sécurité sans refonte fonctionnelle lourde. - Gravité finale : Majeur (reclassifié de Bloquant)
Constat 4 : Statuts 410/423 sans modèle de données - Position : CONFIRMER - Justification : ERR-63-06/07 + TC-INT-07/08 exigent des états (deletedAt, verrouillage) absents du modèle DocumentSecure selon le constat ; non-testable tel quel. - Gravité finale : Bloquant
Constat 5 : Flux partage/B2B = TODO - Position : CONFIRMER - Justification : Les flux nominaux B et C sont au coeur de H-63-01 et du périmètre ; des TODO dans DocumentAccessGuard rendent ces flux non vérifiables en l'état. - Gravité finale : Bloquant
Constats Majeurs¶
Constat 6 : Sémantique usage unique vs multi-usage non tranchée - Position : CONFIRMER - Justification : Tension explicite entre INV-63-03 et §10.5; impact direct sur logique métier, tests de rejeu et sécurité. - Gravité finale : Majeur
Constat 7 : Pre-signed URL expose le chemin S3 - Position : NUANCER - Justification : Risque réel vis-à-vis de INV-63-10, mais dépend de la sensibilité du key naming ; si clés opaques/non signifiantes, l'exposition peut être acceptable. - Gravité finale : Mineur (reclassifié de Majeur)
Constat 8 : Double système de codes d'erreur ERR-63-* vs ERR-46-* - Position : CONFIRMER - Justification : Deux taxonomies concurrentes sans mapping formel créent ambiguïté d'implémentation et de validation (traçabilité TC↔erreurs). - Gravité finale : Majeur
Constat 9 : Seuil timing attack non contractuel - Position : CONFIRMER - Justification : TC-SEC-12 mentionne "ex. <10%" sans seuil normatif ; test sécurité non déterministe et difficilement opposable. - Gravité finale : Majeur
Constat 10 : Événements audit sans signature probatoire - Position : NUANCER - Justification : H-63-03 signale un manque pour la force probatoire ; c'est critique conformité mais pas forcément bloquant immédiat si autre mécanisme d'intégrité existe (WORM/chaînage). - Gravité finale : Majeur
Constat 11 : Audit pour 401 non implémentable - Position : CONTESTER - Justification : Le fait d'être en 401 n'empêche pas une trace technique (IP, route, corrélation, horodatage) ; la formulation "non implémentable" est excessive. - Gravité finale : Non applicable
Constat 12 : Statuts document autorisés non spécifiés - Position : CONFIRMER - Justification : Ambiguïté du flux §5 sur les états autorisés ; impact immédiat sur règles d'autorisation et cas d'erreur. - Gravité finale : Majeur
Constat 13 : Granularité audit non contractualisée - Position : CONFIRMER - Justification : §10.6 non figé => couverture de preuve non garantie (qui, quoi, quand, pourquoi, résultat), avec impact conformité et investigation. - Gravité finale : Majeur
Constat 14 : Compatibilité Glacier non bornée - Position : NUANCER - Justification : §10.7 sans SLA/latence cible est un manque réel, mais davantage de cadrage NFR que de blocage fonctionnel immédiat. - Gravité finale : Mineur (reclassifié de Majeur)
Constats Mineurs¶
Constat 15 : ERR-63-08 (429) optionnel - Position : CONTESTER - Justification : Si explicitement "optionnel" dans la spec, ce n'est pas un écart en soi ; c'est un choix de scope/capacité. - Gravité finale : Non applicable
Constat 16 : Format ID non spécifié (UUID/ULID) - Position : CONFIRMER - Justification : Ambiguïté de contrat API/données ; impact faible mais réel sur validations, logs et interop. - Gravité finale : Mineur
Constat 17 : Métadonnées retournées non définies - Position : CONFIRMER - Justification : §10.4 laisse le payload partiellement ouvert ; fragilise les assertions d'intégration/E2E et la stabilité de contrat. - Gravité finale : Mineur
Constat 18 : Préconditions tests non vérifiables (fake clock) - Position : NUANCER - Justification : Point valide si aucun mécanisme d'injection temporelle n'est prévu ; sinon c'est traitable côté harness. - Gravité finale : Mineur
Constat 19 : TC-INT-14 alternative non tranchée - Position : CONFIRMER - Justification : Un test avec alternatives non décidées diminue la falsifiabilité et la reproductibilité du résultat. - Gravité finale : Mineur
Constat 20 : Numérotation TC-SEC incohérente - Position : CONFIRMER - Justification : Défaut de traçabilité documentaire (matrice TC→CA/INV), faible impact technique mais impact audit. - Gravité finale : Mineur
Synthèse révisée après confrontation¶
| Gravité | Count initial | Count révisé |
|---|---|---|
| Bloquant | 5 | 4 |
| Majeur | 9 | 7 |
| Mineur | 6 | 7 |
| Non applicable | 0 | 2 |
| Total | 20 | 18 (constats valides) |
Reclassifications¶
| Constat | Gravité initiale | Gravité finale | Raison |
|---|---|---|---|
| 3 | Bloquant | Majeur | Tranchable par convention sécurité |
| 7 | Majeur | Mineur | Dépend du key naming S3 |
| 11 | Majeur | Non applicable | Implémentable via interceptor global |
| 14 | Majeur | Mineur | Cadrage NFR, pas blocage fonctionnel |
| 15 | Mineur | Non applicable | Optionnel explicite dans la spec |
Constats confirmés pour correction¶
Bloquants (4)¶
- Audit fail-open vs fail-closed — INV-63-05 violé
- Format de réponse non figé — Incohérence Spec↔Tests
- Statuts 410/423 sans modèle de données — Non testable
- Flux partage/B2B = TODO — Non testable
Majeurs (7)¶
- Sémantique usage unique vs multi-usage
- Double système de codes d'erreur
- Seuil timing attack non contractuel
- Événements audit sans signature probatoire
- Statuts document autorisés non spécifiés
- Granularité audit non contractualisée
- Politique anti-énumération (reclassifié de Bloquant)
Mineurs (7)¶
7, 14, 16, 17, 18, 19, 20
Généré par : ChatGPT (gpt-5.3-codex) Date : 2026-02-20