Aller au contenu

PD-32 — Rapport de confrontation (Étape 3 - Gate CONFORMITY_CHECK)

Ce rapport est produit par l'orchestrateur Claude avant la gate PMO. Il confronte les documents produits pour identifier convergences, divergences et zones d'ombre.

1. Sources confrontées

  • PD-32-specification.md (Étape 1) — Spécification canonique contractuelle
  • PD-32-tests.md (Étape 2) — Scénarios de tests contractuels
  • PD-32-specification-review.md (Étape 3, Phase 1) — Revue ChatGPT

2. Convergences

Architecture et périmètre

  • Les trois documents s'accordent sur le périmètre : GET /user/profile et PUT /user/profile uniquement.
  • Les trois documents s'accordent sur les champs modifiables : name, avatar_url, preferences.
  • Les trois documents s'accordent sur les exclusions : pas de MFA, pas de changement de mot de passe, pas de suppression de compte, pas de modification d'email/plan.

Invariants et couverture

  • La matrice de couverture (tests) couvre les 11 invariants de la spec.
  • Les 14 critères d'acceptation ont chacun au moins un test associé.
  • L'invariant INV-32-11 (RGPD hors périmètre) est correctement marqué NON TESTABLE dans les tests et dans la review.

Sécurité

  • Les trois documents s'accordent sur : authentification JWT obligatoire, isolation RLS, rate limiting global, minimisation des données.

3. Divergences

⚠️ Les conflits ne doivent JAMAIS être lissés. Chaque divergence est rendue visible.

DIV-01 : Format avatar_url non défini

  • Source A (Spec §3) : définit avatar_url comme champ modifiable sans contrainte de format.
  • Source B (Tests TC-NEG-05) : suppose une validation de avatar_url ("vide/invalide selon règles de validation").
  • Source C (Review) : signale l'ambiguïté comme Majeure — "le contrat ne définit pas ce qu'est un avatar_url valide".
  • Impact : Comportement d'acceptation/rejet non déterministe. L'implémentation pourrait accepter n'importe quelle chaîne ou rejeter selon des règles non contractualisées.

DIV-02 : Observable "code erreur" non spécifié

  • Source A (Spec CA-32-13) : exige "Code erreur + état inchangé" comme observable.
  • Source B (Tests TC-INV-02) : vérifie "erreur explicite retournée" et "état inchangé" sans vérifier la structure du code erreur.
  • Source C (Review) : signale l'incohérence comme Majeure — tests insuffisants pour valider l'observable contractuel.
  • Impact : Un système peut passer les tests sans exposer un code erreur exploitable.

DIV-03 : Seuil rate limiting non contractualisé

  • Source A (Spec INV-32-09, H-32-04) : mentionne "rate limiting global" sans seuil/fenêtre.
  • Source B (Tests TC-ERR-08) : suppose un seuil dépassable mais ne le définit pas.
  • Source C (Review) : signale comme Majeure — testabilité dépend d'une configuration externe.
  • Impact : Tests non déterministes sans maîtrise de la configuration environnement.

DIV-04 : Mécanisme d'accès croisé non reproductible

  • Source A (Spec INV-32-02, CA-32-03) : interdit l'accès croisé.
  • Source B (Tests TC-ERR-03, TC-ERR-04) : suppose une "cible U2" distincte accessible via manipulation de contexte.
  • Source C (Review) : signale comme Majeure — l'API /user/profile n'expose pas de paramètre de cible ; le test dépend d'un mécanisme de simulation non décrit.
  • Impact : Risque de non-reproductibilité inter-équipes pour prouver l'invariant.

DIV-05 : Section 10 contradictoire

  • Source A (Spec §10) : "Aucun point fonctionnel ouvert".
  • Source A (Spec §10) : maintient un point à clarifier (référence artefact RGPD).
  • Source C (Review) : signale comme Mineure — contradiction sur la "complétude".
  • Impact : Ambiguïté de gouvernance sur la clôture du lot.

4. Zones d'ombre

ZO-01 : Validation timezone

  • La spec définit "chaîne IANA timezone" sans référence normative précise (quelle base de données tz ? quelle version ?).
  • Signalé comme Mineur par la review.

ZO-02 : Artefact RGPD externe

  • INV-32-11 et CA-32-14 dépendent d'un artefact de conformité externe dont la référence exacte n'est pas fournie.
  • Signalé comme Bloquant par la review pour la conformité RGPD globale.

ZO-03 : Longueur maximale des champs

  • name et avatar_url n'ont pas de contrainte de longueur définie dans la spec.
  • Non mentionné dans la review mais implicitement couvert par "taille" dans ERR-32-VALIDATION.

5. Recommandation

  • Procéder — convergence confirmée, aucun conflit bloquant
  • Rework nécessaire — divergences à résoudre avant de continuer
  • Escalade — décision humaine requise sur un point structurant

Justification

5 divergences majeures identifiées (DIV-01 à DIV-04 + ZO-02) : - DIV-01, DIV-02, DIV-03, DIV-04 : impactent la testabilité et la reproductibilité - ZO-02 : bloquant pour la conformité RGPD globale (mais explicitement hors périmètre PD-32)

Recommandation : Résoudre DIV-01 à DIV-04 avant de passer à l'étape 4 (plan d'implémentation). Le point ZO-02 (RGPD) peut être traité en parallèle par un artefact de conformité dédié.