# Data Model: Workspace Switch Semantic Fix **Feature**: 121-workspace-switch-fix | **Date**: 2026-03-07 ## Overview This feature does not add or modify database tables. It corrects the navigation contract between three existing workspace-related concepts: 1. the topbar `Switch workspace` entry, 2. the canonical workspace chooser, 3. the separate workspace management destination. ## Existing Entities / Concepts ### Workspace switch entry (UI affordance) | Attribute | Value | |-----------|-------| | Surface | Admin context bar / topbar partial | | Current problem | Routes to workspace management instead of chooser | | New contract | Routes to the chooser using the existing forced-switch convention | | Mutation | None | ### Workspace chooser | Attribute | Value | |-----------|-------| | Backing page | `App\Filament\Pages\ChooseWorkspace` | | Route slug | `/admin/choose-workspace` | | Purpose | Explicit manual workspace selection | | Existing behavior | After selection, consumes intended URL or resolves redirect via `WorkspaceRedirectResolver` | ### Workspace management destination | Attribute | Value | |-----------|-------| | Backing resource | `App\Filament\Resources\Workspaces\WorkspaceResource` | | Purpose | Workspace CRUD / administrative management | | Access model | Existing capability-aware workspace management rules | | Change in this feature | None | ## Relevant Existing State ### Session-backed workspace context | Key | Type | Notes | |-----|------|-------| | `current_workspace_id` | int | Active workspace context used across the admin plane | | intended workspace URL | string/null | Existing post-selection return path managed by `WorkspaceIntendedUrl` | ### Existing redirect semantics ```text Switch intent -> ChooseWorkspace (`?choose=1` forces chooser) -> User selects workspace -> WorkspaceIntendedUrl::consume() if present -> else WorkspaceRedirectResolver::resolve() ``` ## Validation / Rules | Rule | Result | |------|--------| | Intentional workspace switching must target chooser | Required | | Intentional switching must not target workspace CRUD | Required | | Workspace management remains separately reachable | Required | | Existing membership/capability enforcement remains unchanged | Required | | Existing post-selection redirect behavior remains unchanged | Required | ## State Transition ```text [User on admin page] | | click "Switch workspace" v [Chooser page displayed] | | select workspace v [Existing intended URL or resolved workspace landing] ``` No new persistence state is introduced.