feat(shell,tenant,i18n): wave 7 — MDI tab shell, multitenancy phase 2 (JWT tid + fail-closed guard), i18n sweep 2
- MDI: additive tab layer over existing routing (MdiTabBar + mdiStore, sessionStorage,
dedup, max 10, keyboard a11y, dark-theme tokens); route tree untouched
- tenant p2: JWT tid claim with kintex fallback (backward compatible), EventAccessGuard
cross-tenant 403 (EventTenantMapper + isolation tests), explicit tenant scoping on
analytics/admin/sysuser aggregates; login threads app_user.tenant_id into tokens
- i18n sweep 2: 17 core+admin screens extracted to 30 namespaces x 4 locales (ko/en/zh/ja),
zero ko-render regression; P2/P3 sweep list documented
- verified: tsc -b --force, vite build, compileJava, test (75/75) all EXIT 0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>