diff --git a/apps/portal-admin/src/locale/messages.fr.xlf b/apps/portal-admin/src/locale/messages.fr.xlf
index 07ce70e..ea3fc4a 100644
--- a/apps/portal-admin/src/locale/messages.fr.xlf
+++ b/apps/portal-admin/src/locale/messages.fr.xlf
@@ -21,6 +21,10 @@
Users — APF Portal AdminUtilisateurs — Administration APF Portal
+
+ User scopes — APF Portal Admin
+ Périmètres utilisateur — Administration APF Portal
+ Profile — APF Portal AdminProfil — Administration APF Portal
diff --git a/apps/portal-bff/src/admin/user-scopes.service.ts b/apps/portal-bff/src/admin/user-scopes.service.ts
index 1a9a8ac..8f5b965 100644
--- a/apps/portal-bff/src/admin/user-scopes.service.ts
+++ b/apps/portal-bff/src/admin/user-scopes.service.ts
@@ -194,7 +194,15 @@ export class UserScopesService {
// ADR-0026 PR 1's "no FK on UserScope.value" rationale lets the
// value persist even after the target is decommissioned, so we
// validate only at the write path.
- let exists: boolean;
+ //
+ // Initialise `exists = false` so TypeScript sees it as definitely
+ // assigned regardless of how the switch lands (the type-system
+ // can't see that `VALUE_BEARING_KINDS.has` already narrowed
+ // `kind` to the three branches). If somehow a non-value-bearing
+ // kind reached this code, the false default makes the next `if`
+ // throw with the same friendly "does not match" message — safe
+ // by construction.
+ let exists = false;
switch (kind) {
case 'etablissement':
exists =