| Champ | Valeur |
| User Story | PD-238 |
| Gate | AMBIGUITY (Étape 5) |
| Date | 2026-02-06 |
| Version | v1 |
| Projet | ProbatioVault-backend |
| Epic | EPIC-182 |
2. Documents audités
| Document | Version | Statut |
| PD-238-plan.md | v1 | Audité |
| PD-238-code-contracts.yaml | v1 | Audité |
| PD-238-specification.md | v2 | Référence |
3. Synthèse des reviews
Review ChatGPT
- Verdict : RESERVE
- Écarts identifiés : 8
Confrontation Claude
- Écarts validés : 4/8
- Écarts partiels : ⅜
- Écarts rejetés : ⅛
- Écarts manqués : 2
- Verdict : RESERVE
4. Écarts confirmés à résoudre
Écarts majeurs (bloquants)
| ID | Description | Impact | Action requise |
| ECT-02 | JwtAuthGuard vs OidcJwtAuthGuard incohérent | Confusion implémentation | Uniformiser vers OidcJwtAuthGuard dans le plan |
| ECT-03 | sessionId manquant pour verifyTotp | Flux incomplet | Documenter gestion sessionId (cache entre init/verify) |
| ECT-04 | Mapping userId → keycloakUserId non défini | Risque accès croisé | Spécifier source (claim sub JWT ou UserRepository) |
| ECT-06 | Permissions Keycloak Admin API non documentées | Blocage runtime | Documenter permissions minimales service account |
| ECT-M01 | Circuit breaker/retry non spécifiés | Implémentation incomplète | Ajouter specs dans code contracts |
| ECT-M02 | MfaExceptionFilter absent du plan | Composant oublié | Ajouter dans architecture et phases |
Écarts mineurs (non bloquants)
| ID | Description | Impact | Action requise |
| ECT-01 | Rate limiting étendu à /auth/reauth | Extension non documentée | Clarifier dans spec (optionnel) |
| ECT-05 | Rate limit par userId seul | Politique acceptable | Documenter dans risques (optionnel) |
| ECT-07 | method null quand MFA désactivé | Implicite dans spec | Clarifier si nécessaire (optionnel) |
Écarts rejetés
| ID | Raison rejet |
| ECT-08 | Faux positif - 400 bien listé dans code contracts |
Cohérence plan ↔ spec
| Élément | Statut | Commentaire |
| 6 endpoints | OK | Tous couverts |
| 15 invariants | OK | Références traçables |
| 10 erreurs | OK | Mappées correctement |
| Guards | RESERVE | Nomenclature à uniformiser |
Cohérence plan ↔ code contracts
| Élément | Statut | Commentaire |
| Services | RESERVE | sessionId manquant |
| Controllers | RESERVE | MfaExceptionFilter manquant |
| DTOs | OK | Conformes |
| Guards | RESERVE | Nomenclature incohérente |
| Config | RESERVE | Permissions Keycloak manquantes |
Couverture tests
| Catégorie | Plan | Contracts | Tests |
| TC-NOM-* | OK | OK | OK |
| TC-ERR-* | OK | OK | OK |
| TC-INV-* | OK | OK | OK |
6. Risques identifiés
| Risque | Sévérité | Mitigation |
| Mapping identité incorrect | Haute | Spécifier claim sub |
| Permissions Keycloak insuffisantes | Haute | Documenter avant implem |
| sessionId perdu entre init/verify | Moyenne | Cache Redis/session |
| Circuit breaker non implémenté | Moyenne | Ajouter specs |
7. Recommandations PMO
- BLOQUER l'implémentation jusqu'à résolution des 6 écarts majeurs
- Corriger le plan pour :
- Uniformiser OidcJwtAuthGuard
- Documenter flux sessionId
- Spécifier mapping userId → keycloakUserId
- Ajouter MfaExceptionFilter
- Documenter permissions Keycloak
- Corriger les code contracts pour :
- Ajouter specs circuit breaker/retry
8. Verdict proposé
NON_CONFORME — 6 écarts majeurs à résoudre avant implémentation.
Les corrections doivent être apportées à : - PD-238-plan.md - PD-238-code-contracts.yaml
Une fois corrigés, relancer la gate AMBIGUITY (v2).