# Research: UI Copy, IA & Localization Neutralization ## Decision 1: `Environment` is the default operator noun - Use `Environment` on chooser, shell, dashboard, and default action copy. - Use `Managed environment` only where a registry or heading must distinguish the object from the workspace. - Do not keep `tenant` as an operator-visible default noun on the in-scope post-workspace-first admin surfaces. ## Decision 2: Provider-specific names remain secondary unless the provider is the subject - Keep auth-provider wording such as `Sign in with Microsoft` unchanged. - Keep provider-specific detail such as Graph-specific helper text or explicit provider names only as secondary explanatory content. - Neutralize default-visible action/helper copy on the bounded restore/capture/baseline-compare entry surfaces where the platform noun is sufficient for the first operator decision. ## Decision 3: `286` is copy and IA only, not a symbol-renaming slice - Do not rename routes, slugs, class names, model names, capability names, or database fields. - Internal tenant-shaped symbols may remain temporarily while operator-facing copy becomes environment-first. - Any need for symbol renaming belongs to a later guardrail or cleanup spec, not this package. ## Decision 4: Canonical replacement beats aliasing for the in-scope key family - Replace in-scope translation keys and directly surfaced view-model labels that still encode tenant-first operator nouns. - Do not preserve alias keys for convenience where the key name itself remains a shared semantic contract. - Keep the replacement bounded to the confirmed admin surfaces in this package. ## Decision 5: Stay out of adjacent specs - Do not absorb RBAC wording from Spec `285`. - Do not absorb provider-capability or provider-identity work from Specs `281` and `283`. - Do not absorb no-legacy enforcement from Spec `287`. - Do not expand into website or customer-review localization already covered elsewhere. ## Rejected Alternatives ### Rejected: value-only translation updates without key cleanup That would keep tenant-first semantics in shared key families and test contracts, which is the same drift in a different place. ### Rejected: route or slug renaming in the same slice That widens the package from copy/IA into deeper runtime cutover work and should be handled separately if still needed. ### Rejected: repo-wide provider-neutral string sweep The slot is explicitly bounded. Repo-wide cleanup would collapse multiple provider-owned and customer-facing follow-up lanes into one package. ## Evidence Anchors - `apps/platform/lang/en/localization.php` still exposes `tenant_scope`, `select_tenant`, `selected_tenant`, `no_tenant_selected`, `no_active_tenants`, `view_managed_tenants`, `workspace_wide_available`, and `tenant_title`. - `apps/platform/app/Filament/Pages/ChooseTenant.php` still sets `Choose tenant` as the page title. - `apps/platform/app/Filament/Pages/Workspaces/ManagedTenantsLanding.php` still sets `Managed tenants` as the page title. - `apps/platform/app/Support/OperateHub/OperateHubShell.php` still exposes `ManagedEnvironment scope` and `All tenants` as shell labels. - `apps/platform/app/Support/Navigation/CanonicalNavigationContext.php` still exposes `Back to tenant registry`. - `apps/platform/app/Filament/Pages/TenantDashboard.php` still consumes `localization.dashboard.tenant_title`. ## Implementation Boundary Summary - The package is implementation-ready for bounded operator-copy convergence. - It is not a prerequisite-unblocking package for routes, RBAC, or provider capabilities. - If implementation uncovers a genuine need for route or symbol renaming, stop and split that work into a follow-up spec.