Itération 2 — Écarts v1 corrigés
Type de gate : AMBIGUITY
1. Documents de référence
| Document | Étape | Statut |
| PD-240-besoin.md | 0 | ✓ Présent |
| PD-240-specification.md | 1 | ✓ Présent (v4 — corrigé) |
| PD-240-tests.md | 2 | ✓ Présent (v3) |
| PD-240-plan.md | 4 | ✓ Présent |
| PD-240-code-contracts.yaml | 4 | ✓ Présent (v2 — corrigé) |
| PD-240-plan-review-v2.md | 5 | ✓ Présent |
| PD-240-confrontation-step5-v2.md | 5 | ✓ Présent |
2. Historique des corrections
| Itération | Écarts bloquants | Corrigés | Persistants |
| v1 | 1 (DIV-01) | 0 | 1 |
| v2 | 1 | 1 | 0 |
Détail des corrections v2
| Écart | Correction appliquée |
| DIV-01 | Spec §4 : DELETE → GET /admin/audit/user/{userId} |
| DIV-02 | Code contract : purgedAt obligatoire si status=purged |
| DIV-03 | Spec §8 : état dégradé contractualisé explicitement |
3.1 Invariants ↔ Mécanismes Plan
| Invariant | Mécanisme Plan | Couvert ? |
| INV-240-01 | JwtAuthGuard sur route | ✓ |
| INV-240-02 | ReauthMiddleware (PD-238) | ✓ |
| INV-240-03 | Validation body confirm === "DELETE_MY_ACCOUNT" | ✓ |
| INV-240-04 | Keycloak Admin API DELETE | ✓ |
| INV-240-05 | PostgreSQL + audit entry { status, purgedAt } + endpoint admin | ✓ |
| INV-240-06 | Redis DEL avant suppression Keycloak | ✓ |
| INV-240-07 | Combinaison INV-240-04 + INV-240-06 | ✓ |
| INV-240-08 | ExceptionFilter avec format {error, message} | ✓ |
| INV-240-09 | Messages d'erreur explicites | ✓ |
| INV-240-10 | Hors périmètre | N/A |
3.2 Tests réalisables
| Test | Réalisable ? | Observable |
| T-240-NOM-01 | ✓ | Réponse succès + sessions invalidées |
| T-240-POST-01 | ✓ | Échec auth ultérieure |
| T-240-POST-02 | ✓ | Endpoint admin retourne { status, purgedAt } |
| T-240-ERR-01 à 06 | ✓ | Codes erreur conformes |
| T-240-INV-01 | N/A | Hors périmètre |
3.3 Code Contracts ↔ Plan
| Module | Complétude | Cohérence | Écarts |
| delete-account-controller | ✓ | ✓ | — |
| delete-account-service | ✓ | ✓ | — |
| session-invalidation | ✓ | ✓ | — |
| user-data-purge | ✓ | ✓ | — |
| keycloak-user | ✓ | ✓ | — |
| audit-controller | ✓ | ✓ | — |
| delete-account-tests | ✓ | ✓ | — |
4. Points mineurs acceptés
| Point | Justification |
| Hypothèse "point de non-retour" non formalisée | Comportement contractualisé dans spec v4 §8, formalisation optionnelle |
5. Rapport de confrontation
- Voir : PD-240-confrontation-step5-v2.md
- Synthèse : 3 faux positifs identifiés, 1 point mineur résiduel accepté
Les écarts MAJEUR signalés par ChatGPT v2 sont des faux positifs : - L'état dégradé EST contractualisé (spec v4 §8) - purgedAt EST mentionné (plan §3.2) - L'endpoint DELETE n'est PAS requis (spec v4 = GET)
6. Recommandation pré-verdict
Justification
Tous les écarts bloquants de v1 ont été corrigés : - Spec v4 : cohérence §4/INV-240-05 (GET) - Spec v4 : état dégradé contractualisé (§8) - Code contract v2 : purgedAt obligatoire
Le plan d'implémentation est conforme à la spécification v4 et permet la réalisation de tous les tests définis.
Le workflow peut passer à l'étape 6 (Implémentation).