PD-241 — Dossier de conformité (Étape 5)¶
Ce dossier est assemblé automatiquement avant la gate PMO AMBIGUITY. Il constitue la base factuelle sur laquelle le verdict est rendu.
Type de gate : AMBIGUITY¶
Objectif : Vérifier que le plan d'implémentation ne contient pas d'hypothèses non déclarées et est strictement conforme à la spécification.
1. Documents de référence¶
| Document | Étape | Statut |
|---|---|---|
| PD-241-specification.md | 1 | ✓ Présent |
| PD-241-tests.md | 2 | ✓ Présent |
| PD-241-plan.md | 4 | ✓ Présent |
| PD-241-code-contracts.yaml | 4 | ✓ Présent |
| PD-241-plan-review.md | 5.1 | ✓ Présent |
| PD-241-confrontation-step5-v1.md | 5.2 | ✓ Présent |
2. Hypothèses déclarées (Plan §7)¶
| ID | Hypothèse | Déclarée ? |
|---|---|---|
| H-241-01 | Keycloak Admin API supporte DELETE /users/{id}/sessions | ✓ Oui |
| H-241-02 | Le refresh token est transmis dans le body JSON | ✓ Oui |
| H-241-03 | Le circuit breaker existant est compatible | ✓ Oui |
3. Couverture invariants → mécanismes¶
| Invariant | Mécanisme | Couvert ? |
|---|---|---|
| INV-241-01 | JwtAuthGuard | ✓ |
| INV-241-02 | invalidateSession() | ✓ |
| INV-241-03 | revokeRefreshToken() | ⚠️ Partiel (DIV-02) |
| INV-241-04 | HttpExceptionFilter + erreurs typées | ✓ |
| INV-241-05 | try/catch + LogoutFailedError | ✓ |
| INV-241-06 | N/A (hors périmètre) | N/A |
4. Écarts identifiés¶
| ID | Type | Source | Description | Gravité |
|---|---|---|---|---|
| ECT-01 | Non-conformité | Plan §2.1 | @HttpCode(401) impossible conjointement avec succès 200 | BLOQUANT (erreur rédaction) |
| ECT-02 | Non-conformité | Plan §8 | Si revokeRefreshToken échoue → considéré succès, viole INV-241-03 | BLOQUANT |
| ECT-03 | Hypothèse implicite | Plan §8 | Idempotence affirmée sans fondement contractuel | Mineur |
| ECT-04 | Code Contract | keycloak-admin-logout | Timeout 5s non dérivé de la spec | Majeur |
5. Analyse des écarts BLOQUANTS¶
ECT-01 — @HttpCode(401)¶
Nature : Erreur de rédaction technique Analyse : Le plan utilise une formulation impossible (deux @HttpCode sur une route). L'intention est claire : 200 en succès, 401 via exception. Verdict confrontation : Erreur de rédaction, pas de divergence fonctionnelle.
ECT-02 — Comportement si revokeRefreshToken échoue¶
Nature : Divergence fonctionnelle réelle Spec INV-241-03 : "Le refresh token DOIT être invalidé s'il est présent" Plan §8 : "Si invalidateSession réussit mais revokeRefreshToken échoue → logout réussi" Verdict confrontation : Violation d'invariant contractuel. Le plan doit retourner ERR-241-LOGOUT-FAILED si l'invalidation du refresh token échoue.
6. Rapport de confrontation¶
- Voir : PD-241-confrontation-step5-v1.md
- 6 convergences confirmées (CVG-01 à CVG-06)
- 4 divergences identifiées (DIV-01 à DIV-04)
- Recommandation confrontation : Rework nécessaire
7. Recommandation pré-verdict¶
- GO — plan conforme, aucune hypothèse implicite
- RESERVE — plan acceptable avec conditions mineures
- NON_CONFORME — écarts bloquants identifiés
- ECT-01 : Corriger la formulation @HttpCode (erreur de rédaction)
- ECT-02 : Corriger le comportement si revokeRefreshToken échoue (violation INV-241-03)
- ESCALADE — décision humaine requise
Dossier assemblé par Claude Orchestrateur — 2026-02-07