| INV-238-01 | Tous les endpoints /user/mfa/* DOIVENT exiger un JWT valide | TC-ERR-01, TC-ERR-02, TC-ERR-03 | ✅ COUVERT |
| INV-238-02 | Un utilisateur NE DOIT pouvoir consulter/modifier que son propre MFA | TC-ERR-04, tests unitaires MfaManagementService | ✅ COUVERT |
| INV-238-03 | GET /user/mfa/status DOIT retourner {enabled, method, configuredAt} | TC-NOM-01, tests unitaires getStatus | ✅ COUVERT |
| INV-238-04 | POST /user/mfa/totp/init DOIT retourner secret, qrCodeUri, expiresAt | TC-NOM-02, tests unitaires initTotp | ✅ COUVERT |
| INV-238-05 | POST /user/mfa/totp/verify DOIT activer le MFA uniquement si le code est valide | TC-NOM-03, TC-ERR-06, tests unitaires verifyTotp | ✅ COUVERT |
| INV-238-06 | POST /user/mfa/disable DOIT exiger un reauth token valide | TC-ERR-05, TC-NOM-04, tests ReauthTokenGuard | ✅ COUVERT |
| INV-238-07 | POST /user/mfa/recovery/regenerate DOIT exiger un reauth token et invalider les anciens codes | TC-NOM-05, TC-ERR-07, TC-ERR-11 | ✅ COUVERT |
| INV-238-08 | Les codes de récupération DOIVENT être retournés uniquement après activation/régénération | TC-NOM-03, TC-NOM-05, tests unitaires | ✅ COUVERT |
| INV-238-09 | Le secret TOTP et les codes de récupération NE DOIVENT jamais être loggés | TC-INV-02, review sécurité manuelle | ✅ COUVERT |
| INV-238-10 | Le backend ProbatioVault NE DOIT pas stocker les secrets MFA | TC-INV-03 (modifié ECT-03), review architecture | ✅ COUVERT |
| INV-238-11 | Les endpoints MFA DOIVENT être soumis au rate limiting global | TC-ERR-08, tests MfaRateLimitGuard | ✅ COUVERT |
| INV-238-12 | POST /auth/reauth DOIT retourner un reauthToken JWT avec sub, purpose="reauth", exp = 5 minutes | TC-NOM-06, tests unitaires ReauthService | ✅ COUVERT |
| INV-238-13 | Toute erreur métier/validation/auth DOIT retourner un échec explicite sans effet partiel silencieux | TC-INV-01, TC-ERR-12, tests MfaExceptionFilter | ✅ COUVERT |
| INV-238-14 | Preuve juridique exhaustive RGPD et audit Keycloak admin | N/A — Hors périmètre PD-238 | ⚠️ HORS PÉRIMÈTRE |
| INV-238-15 | POST /auth/reauth DOIT exiger un JWT valide | TC-ERR-14, tests ReauthController | ✅ COUVERT |