| TC-NOM-01 | ✅ | test/user-profile.e2e-spec.ts | GET profil + champs attendus + minimisation partielle. |
| TC-NOM-02 | ✅ | test/user-profile.e2e-spec.ts | PUT name couvert. |
| TC-NOM-03 | ✅ | test/user-profile.e2e-spec.ts | PUT avatarUrl couvert. |
| TC-NOM-04 | ✅ | test/user-profile.e2e-spec.ts | PUT preferences couvert. |
| TC-ERR-01 | ✅ | test/user-profile.e2e-spec.ts | GET/PUT sans auth couverts. |
| TC-ERR-02 | ⚠️ | test/user-profile.e2e-spec.ts | ID réutilisé pour erreurs de validation, ambigu avec matrice contractuelle. |
| TC-ERR-03 | ✅ | test/user-profile.e2e-spec.ts | Isolation lecture U1/U2 couverte. |
| TC-ERR-04 | ✅ | test/user-profile.e2e-spec.ts | Isolation écriture U1/U2 couverte. |
| TC-ERR-05 | ✅ | test/user-profile.e2e-spec.ts | Clé inconnue/locale invalide couverte via 400 validation. |
| TC-ERR-06 | ✅ | test/user-profile.e2e-spec.ts | Rejet email/plan couvert. |
| TC-ERR-07 | ✅ | test/user-profile.e2e-spec.ts | Rejet id/status/passwordHash couvert (srpSalt non couvert en e2e, couvert en DTO unit). |
| TC-ERR-08 | ❌ | — | Rate limiting global non testé spécifiquement. |
| TC-ERR-09 | ❌ | — | Absence de vérification explicite "état inchangé" après échec validation. |
| TC-ERR-10 | ❌ | — | Scénario erreur interne non testé en e2e/service. |
| TC-INV-01 | ✅ | test/user-profile.e2e-spec.ts | Absence champs sensibles vérifiée. |
| TC-INV-02 | ❌ | — | Format contractuel {error: ERR-32-*, message} non vérifié de façon explicite. |
| TC-INV-03 | N/A | — | Hors périmètre / non testable. |