Aller au contenu

PD-32 — Dossier de conformité (Étape 3)

Ce dossier est assemblé automatiquement avant chaque gate PMO. Il constitue la base factuelle sur laquelle le verdict est rendu.

Type de gate : CONFORMITY_CHECK

Objectif : vérifier la complétude et la testabilité de la spécification.

1. Documents de référence

Document Étape Statut
PD-32-besoin.md 0 ✓ Présent
PD-32-specification.md 1 ✓ Présent
PD-32-tests.md 2 ✓ Présent
PD-32-specification-review.md 3.1 ✓ Présent
PD-32-confrontation-step3.md 3.2 ✓ Présent
PD-32-plan.md 4 — Non applicable (étape ultérieure)
PD-32-code-contracts.yaml 4 — Non applicable (étape ultérieure)

2. Hypothèses déclarées

Extraites de PD-32-specification.md, section 9 :

ID Hypothèse Impact si faux
H-32-01 Le mécanisme JWT existant permet d'identifier de façon fiable l'utilisateur courant. Impossible de garantir INV-32-01/02.
H-32-02 Le mécanisme d'isolation des données (RLS/contexte identité) est actif et correct. Risque d'accès croisé critique.
H-32-03 La table utilisateur peut être étendue avec name, avatar_url, preferences sans rupture de données existantes. Blocage de mise en service PD-32.
H-32-04 Le rate limiting global est actif sur ces routes en environnement cible. CA-32-12 non atteignable.
H-32-05 Le format des erreurs expose un code exploitable pour les cas contractuels. CA-32-13 non vérifiable.
H-32-06 PD-106 consomme au minimum name, email, avatar_url et tolère la présence de preferences. Risque d'incompatibilité client.
H-32-07 L'artefact conformité RGPD global est géré hors PD-32. CA-32-14 non démontrable dans le lot.

3. Preuves de conformité

3.1 Invariants ↔ Tests

Invariant Test(s) couvrant Couvert ?
INV-32-01 : JWT obligatoire TC-ERR-01, TC-ERR-02
INV-32-02 : Accès propre profil uniquement TC-ERR-03, TC-ERR-04
INV-32-03 : Champs non sensibles uniquement TC-NOM-01, TC-INV-01
INV-32-04 : Pas de fuite de secrets TC-INV-01
INV-32-05 : Champs modifiables limités TC-NOM-02, TC-NOM-03, TC-NOM-04
INV-32-06 : Rejet champs protégés TC-ERR-06, TC-ERR-07
INV-32-07 : Schema preferences strict TC-ERR-05, TC-NOM-04
INV-32-08 : Compatibilité PD-106 TC-NOM-01
INV-32-09 : Rate limiting global TC-ERR-08
INV-32-10 : Erreurs explicites sans mutation TC-INV-02, TC-ERR-09, TC-ERR-10
INV-32-11 : Preuve RGPD exhaustive TC-INV-03 ✗ NON TESTABLE (hors périmètre)

3.2 Critères d'acceptation ↔ Couverture

Critère Test(s) couvrant Vérifié ?
CA-32-01 TC-ERR-01
CA-32-02 TC-ERR-02
CA-32-03 TC-ERR-03, TC-ERR-04
CA-32-04 TC-NOM-01, TC-INV-01
CA-32-05 TC-NOM-01
CA-32-06 TC-NOM-02
CA-32-07 TC-NOM-03
CA-32-08 TC-NOM-04
CA-32-09 TC-ERR-05
CA-32-10 TC-ERR-06
CA-32-11 TC-ERR-07
CA-32-12 TC-ERR-08
CA-32-13 TC-INV-02, TC-ERR-09, TC-ERR-10 ⚠️ Partiel (voir DIV-02)
CA-32-14 TC-INV-03 ✗ NON TESTABLE (hors périmètre)

Couverture globale : 13/14 critères testables couverts, 1 non testable (hors périmètre).

4. Points ouverts

Points relevés par la review ChatGPT (8 points)

# Type Gravité Référence Description
1 Ambiguïté Majeur avatar_url Format valide non défini
2 Incohérence Spec↔Tests Majeur CA-32-13 Observable "code erreur" non vérifié par tests
3 Ambiguïté Mineur timezone Source IANA non bornée
4 Hypothèse dangereuse Majeur rate limiting Seuil non contractualisé
5 Incohérence Spec↔Tests Majeur accès croisé Mécanisme de test non décrit
6 Non testable Bloquant INV-32-11 Preuve RGPD hors périmètre
7 Contradiction Mineur Section 10 "Aucun point ouvert" vs point à clarifier
8 Risque sécu/conformité Majeur preferences Surface JSONB = risque RGPD si validation dérive

Divergences identifiées par la confrontation (5 divergences)

DIV Impact Description
DIV-01 Testabilité Format avatar_url non défini
DIV-02 Testabilité Code erreur non vérifié dans tests
DIV-03 Testabilité Seuil rate limiting non contractualisé
DIV-04 Testabilité Accès croisé non reproductible
DIV-05 Gouvernance Section 10 contradictoire

Zones d'ombre (3)

ZO Description
ZO-01 Validation timezone : base IANA non référencée
ZO-02 Artefact RGPD externe : référence exacte absente
ZO-03 Longueur maximale name/avatar_url non définie

5. Rapport de confrontation

6. Recommandation pré-verdict

  • GO — conformité vérifiée, aucun point bloquant
  • RESERVE — conformité partielle, conditions à satisfaire
  • NON_CONFORME — écarts bloquants identifiés
  • ESCALADE — décision humaine requise

Justification

4 divergences majeures impactent la testabilité (DIV-01 à DIV-04). Sans résolution : - Les tests d'acceptance ne sont pas déterministes - La reproductibilité inter-équipes n'est pas garantie - L'observable CA-32-13 n'est pas vérifié par les tests

Écarts à résoudre avant passage à l'étape 4 : 1. Définir le format valide de avatar_url (URL scheme, longueur max) 2. Préciser la structure du code erreur dans la spec et vérifier dans les tests 3. Documenter le seuil/fenêtre rate limiting dans les prérequis de test 4. Décrire le mécanisme de simulation d'accès croisé pour les tests 5. Optionnel : Clarifier la section 10 (contradiction mineure)