gscMy /settings now hosts a single Language picker.
- Persisted in admin.users.locale (keyed by gscSID). Per the
gsc-identity-boundaries decision, locale is one of the explicitly
allowed app-local preference columns.
- Cross-app effect via NEXT_LOCALE cookie set with
Domain=.gosec.internal — every sibling host on *.gosec.internal
picks it up on the next request (no relogin, no DB read).
- Server action prisma.user.upsert + cookies().set; client form
reloads after save so next-intl re-resolves immediately.
This deliberately collapses the previous kitchen-sink AccountSettings
page (which depended on the broken gscUserId/getUserEffectiveSettings
path) — full settings UI will return when the database/users.ts
redesign in Phase-2 lands.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>