Ce dossier est assemblé automatiquement avant chaque gate PMO. Il constitue la base factuelle sur laquelle le verdict est rendu.
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.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
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)