26 KiB
| description |
|---|
| Task list for Filament Workspace Tenancy & Environment Routing Cutover |
Tasks: Filament Workspace Tenancy & Environment Routing Cutover
Input: Design documents from specs/280-workspace-tenancy-environment-routing/
Prerequisites: specs/280-workspace-tenancy-environment-routing/spec.md, specs/280-workspace-tenancy-environment-routing/plan.md, specs/280-workspace-tenancy-environment-routing/checklists/requirements.md, specs/280-workspace-tenancy-environment-routing/research.md, specs/280-workspace-tenancy-environment-routing/data-model.md, specs/280-workspace-tenancy-environment-routing/quickstart.md, specs/280-workspace-tenancy-environment-routing/contracts/workspace-tenancy-environment-routing.logical.openapi.yaml
Tests: REQUIRED (Pest). Keep proof bounded to apps/platform/tests/Feature/Workspace/WorkspaceFilamentTenancyCutoverTest.php, apps/platform/tests/Feature/ManagedEnvironment/WorkspaceFirstEnvironmentRoutingTest.php, apps/platform/tests/Feature/Monitoring/WorkspaceOperationsEnvironmentContextTest.php, apps/platform/tests/Feature/Navigation/WorkspaceEnvironmentBreadcrumbsTest.php, apps/platform/tests/Feature/Guards/LegacyAdminTenantRouteRemovalGuardTest.php, and apps/platform/tests/Browser/Spec280WorkspaceTenancyEnvironmentRoutingSmokeTest.php.
Operations: No new OperationRun family. Reuse apps/platform/app/Support/OperationRunLinks.php, apps/platform/app/Support/Navigation/RelatedNavigationResolver.php, and apps/platform/app/Filament/Pages/Monitoring/Operations.php for workspace-first operations route ownership.
RBAC: Workspace membership remains the first 404 boundary, managed-environment access remains the second 404 boundary, and in-scope capability denials stay 403.
Shared Pattern Reuse: Reuse WorkspaceOverviewBuilder, TenantDashboardSummaryBuilder, ManagedTenantsLanding, ChooseTenant, WorkspaceRedirectResolver, OperationRunLinks, and RelatedNavigationResolver. Do not add compatibility routes, dual-panel fallbacks, or replacement dashboards.
Filament / Panel Guardrails: Filament remains v5 on Livewire v4. Provider registration remains in apps/platform/bootstrap/providers.php. Workspace becomes the only Filament tenant for operator routing. Any touched searchable resource must keep a valid view/edit destination or disable global search in the same slice. Any touched destructive action must preserve ->requiresConfirmation() plus current server authorization. Asset strategy stays unchanged.
Compatibility Posture: Reject /admin/t compatibility routes, /admin/tenants/{environment} aliases, redirect shims, dual-panel ownership, and hidden route fallbacks. Keep Specs 281 through 287 deferred.
Organization: Tasks are grouped by user story so panel tenancy, workspace-first environment routing, workspace-first operations routing, dashboard/context rebinding, and search/legacy guardrails remain independently testable.
Review Outcome: implementation-ready
Workflow Outcome: keep
Test-governance Outcome: keep
Test Governance Checklist
- Lane assignment stays
fast-feedback,confidence, and one narrowbrowserlane. - New or changed tests stay in the smallest honest families under
apps/platform/tests/Feature/plus one browser smoke file only. - Workspace and managed-environment fixtures remain explicit; no compatibility fixtures, dual-panel defaults, or hidden route fallbacks become shared setup.
- Planned validation commands match
spec.md,plan.md, andquickstart.mdexactly. standard-native-filament,global-context-shell, andmonitoring-state-pageexpectations stay explicit for touched surfaces.- Any attempt to absorb Specs
281through287resolves assplitorreject-or-split, not hidden scope.
Phase 1: Setup (Shared Context)
Purpose: Confirm the bounded cutover inventory, the proving files, and the explicit no-compatibility posture before runtime edits begin.
- T001 Review
specs/280-workspace-tenancy-environment-routing/spec.md,plan.md,checklists/requirements.md,research.md,data-model.md,quickstart.md, andcontracts/workspace-tenancy-environment-routing.logical.openapi.yamltogether so implementation stays on Spec 280 only. - T002 [P] Confirm the current panel-provider and registration seams in
apps/platform/app/Providers/Filament/AdminPanelProvider.php,apps/platform/app/Providers/Filament/TenantPanelProvider.php, andapps/platform/bootstrap/providers.phpbefore changing operator tenancy. - T003 [P] Confirm the current entry, chooser, and route-language seams in
apps/platform/routes/web.php,apps/platform/app/Filament/Pages/ChooseWorkspace.php,apps/platform/app/Filament/Pages/ChooseTenant.php,apps/platform/app/Filament/Pages/Workspaces/ManagedTenantsLanding.php, andapps/platform/app/Support/Workspaces/WorkspaceRedirectResolver.php. - T004 [P] Confirm the current context-classification seams in
apps/platform/app/Http/Middleware/EnsureWorkspaceSelected.php,apps/platform/app/Support/Middleware/EnsureFilamentTenantSelected.php,apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php, andapps/platform/app/Support/Tenants/TenantPageCategory.php. - T005 [P] Confirm the current dashboard and operations link owners in
apps/platform/app/Filament/Pages/WorkspaceOverview.php,apps/platform/app/Filament/Pages/TenantDashboard.php,apps/platform/app/Filament/Pages/TenantRequiredPermissions.php,apps/platform/app/Filament/Pages/Monitoring/Operations.php,apps/platform/app/Support/OperationRunLinks.php, andapps/platform/app/Support/Navigation/RelatedNavigationResolver.php. - T006 [P] Confirm the touched global-search and deferred-scope surfaces in
apps/platform/app/Filament/Resources/Workspaces/WorkspaceResource.php,apps/platform/app/Filament/Resources/TenantResource.php, andspecs/280-workspace-tenancy-environment-routing/checklists/requirements.mdso Specs281through287remain explicitly out of scope.
Phase 2: Foundational (Blocking Prerequisites)
Purpose: Establish the proving suite and the shared workspace-first route skeleton that all stories depend on.
Critical: No user-story work should begin until this phase is complete.
- T007 [P] Add failing coverage in
apps/platform/tests/Feature/Workspace/WorkspaceFilamentTenancyCutoverTest.phpforWorkspaceas the only Filament tenant,/adminentry ownership,TenantPanelProviderretirement from public operator routing, and provider registration expectations inapps/platform/bootstrap/providers.php. - T008 [P] Add failing coverage in
apps/platform/tests/Feature/ManagedEnvironment/WorkspaceFirstEnvironmentRoutingTest.phpfor/admin/workspaces/{workspace}/environments,/admin/workspaces/{workspace}/environments/{environment}, stale cross-workspace environment clearing, archived-environment exclusion, and wrong-workspace404behavior. - T009 [P] Add failing coverage in
apps/platform/tests/Feature/Monitoring/WorkspaceOperationsEnvironmentContextTest.phpfor/admin/workspaces/{workspace}/operations,managed_environment_idfiltering,Show all environmentswidening, workspace-safe run detail routes, and hostile filter404behavior. - T010 [P] Add failing coverage in
apps/platform/tests/Feature/Navigation/WorkspaceEnvironmentBreadcrumbsTest.phpfor workspace-dashboard versus environment-dashboard signal ownership andWorkspace -> Managed Environment -> pagebreadcrumb/context ordering. - T011 [P] Add failing guard coverage in
apps/platform/tests/Feature/Guards/LegacyAdminTenantRouteRemovalGuardTest.phpfor/admin/t,/admin/tenants/{environment}/required-permissions,/admin/w/{workspace}/managed-tenants,/admin/operations,/admin/operations/{run},panel: 'tenant',TenantPanelProvider::classregistration inapps/platform/bootstrap/providers.php, compatibility redirects, aliases, dual-panel fallbacks, and the searchable-destination rule for touched resources. - T012 [P] Add the narrow browser smoke in
apps/platform/tests/Browser/Spec280WorkspaceTenancyEnvironmentRoutingSmokeTest.phpfor workspace selection, workspace-scoped environment choice, managed-environment dashboard entry, and workspace-operations drillthrough on the surviving admin panel. - T013 Establish the one-panel workspace-first route skeleton in
apps/platform/app/Providers/Filament/AdminPanelProvider.php,apps/platform/app/Providers/Filament/TenantPanelProvider.php,apps/platform/bootstrap/providers.php, andapps/platform/routes/web.phpwith no compatibility aliases, redirect shims, or dual-panel fallback. - T014 Update
apps/platform/app/Filament/Pages/ChooseWorkspace.phpandapps/platform/app/Support/Workspaces/WorkspaceRedirectResolver.phpso/adminresolves only to workspace selection or/admin/workspaces/{workspace}before story-specific environment routing work begins.
Checkpoint: The proving files exist, /admin entry ownership is workspace-first, and the implementation has a single admin-panel route skeleton to extend.
Phase 3: User Story 1 - Enter an environment without leaving the workspace admin panel (Priority: P1)
Goal: Operators choose a workspace, then open one managed environment through the surviving admin panel and land on the canonical workspace-first environment dashboard.
Independent Test: Select a workspace, open /admin/workspaces/{workspace}/environments, choose one managed environment, and confirm the destination is /admin/workspaces/{workspace}/environments/{environment} while /admin/t/{environment} stays not found.
Tests for User Story 1
- T015 [P] [US1] Extend
apps/platform/tests/Feature/Workspace/WorkspaceFilamentTenancyCutoverTest.phpafter T013-T014 to prove the public chooser and environment entry stay on theadminpanel and direct/admin/t/{environment}requests return404. - T016 [P] [US1] Extend
apps/platform/tests/Feature/ManagedEnvironment/WorkspaceFirstEnvironmentRoutingTest.phpafter T013-T014 to prove chooser submission, managed-environment dashboard resolution, and wrong-workspace route binding remain404.
Implementation for User Story 1
- T017 [US1] Rework
apps/platform/app/Filament/Pages/ChooseTenant.phpandapps/platform/app/Filament/Pages/Workspaces/ManagedTenantsLanding.phpso/admin/workspaces/{workspace}/environmentsis the only public environment chooser and stale cross-workspace remembered environment context is cleared before resolution. - T018 [US1] Move managed-environment dashboard and required-permissions route ownership in
apps/platform/app/Filament/Pages/TenantDashboard.php,apps/platform/app/Filament/Pages/TenantRequiredPermissions.php, andapps/platform/routes/web.phpto/admin/workspaces/{workspace}/environments/{environment}with no/admin/tenants/{environment}compatibility reader. - T019 [US1] Update workspace-to-environment URL generation in
apps/platform/app/Filament/Pages/ChooseTenant.php,apps/platform/app/Support/Workspaces/WorkspaceRedirectResolver.php,apps/platform/app/Filament/Pages/TenantDashboard.php, and any touched environment page classes underapps/platform/app/Filament/Pages/so no entry flow emitspanel: 'tenant'or/admin/tdestinations.
Checkpoint: Workspace selection, environment chooser entry, and managed-environment dashboard routing all stay inside one workspace-first admin panel.
Phase 4: User Story 2 - Move from environment work into workspace operations with explicit scope (Priority: P1)
Goal: Environment dashboards and environment pages open the workspace operations hub through canonical workspace routes while preserving explicit environment context.
Independent Test: From a managed-environment dashboard or touched environment page, open operations and confirm the destination is /admin/workspaces/{workspace}/operations with the correct managed_environment_id filter and workspace-safe back-navigation.
Tests for User Story 2
- T020 [P] [US2] Extend
apps/platform/tests/Feature/Monitoring/WorkspaceOperationsEnvironmentContextTest.phpto prove environment dashboards and touched environment pages open/admin/workspaces/{workspace}/operationswith explicitmanaged_environment_id, preserve run-detail ownership under/admin/workspaces/{workspace}/operations/{run}, widen scope only through explicit user action, and keep/admin/operationsplus/admin/operations/{run}unavailable.
Implementation for User Story 2
- T021 [US2] Retarget
apps/platform/app/Support/OperationRunLinks.phpandapps/platform/app/Support/Navigation/RelatedNavigationResolver.phpso operations collection/detail links emit only workspace-first routes with explicit environment filter and return-context data. - T022 [US2] Update
apps/platform/app/Filament/Pages/Monitoring/Operations.phpso workspace collection/detail ownership,managed_environment_idhydration,Show all environmentsbehavior, and hostile filter handling match the new workspace-first route contract. - T023 [US2] Update operations entry actions in
apps/platform/app/Filament/Pages/TenantDashboard.php,apps/platform/app/Filament/Pages/TenantRequiredPermissions.php, and any touched environment-scoped page classes underapps/platform/app/Filament/Pages/so they delegate through the shared workspace operations builders instead of local tenant-panel URLs.
Checkpoint: Operations links, run-detail links, and return context are all workspace-canonical while preserving explicit environment scope.
Phase 5: User Story 3 - Read workspace-wide and environment-scoped signals on the correct surfaces (Priority: P2)
Goal: Workspace-wide signals stay on the workspace dashboard, environment-scoped signals stay on the managed-environment dashboard, and breadcrumbs/context bars reflect the new route ownership.
Independent Test: Open /admin/workspaces/{workspace} and /admin/workspaces/{workspace}/environments/{environment} for the same workspace and verify the workspace dashboard shows workspace-wide signals while the environment dashboard stays scoped to one environment with Workspace -> Managed Environment -> page context.
Tests for User Story 3
- T024 [P] [US3] Extend
apps/platform/tests/Feature/Navigation/WorkspaceEnvironmentBreadcrumbsTest.phpto prove workspace-wide dashboard signals remain onWorkspaceOverview, environment-scoped signals remain onTenantDashboard, and breadcrumb/context ordering becomesWorkspace -> Managed Environment -> page.
Implementation for User Story 3
- T025 [US3] Rebind
apps/platform/app/Filament/Pages/WorkspaceOverview.phpandapps/platform/app/Filament/Pages/TenantDashboard.phpto the canonical/admin/workspaces/{workspace}and/admin/workspaces/{workspace}/environments/{environment}routes while preservingWorkspaceOverviewBuilderandTenantDashboardSummaryBuilderownership. - T026 [US3] Update
apps/platform/app/Http/Middleware/EnsureWorkspaceSelected.php,apps/platform/app/Support/Middleware/EnsureFilamentTenantSelected.php,apps/platform/app/Filament/Concerns/ResolvesPanelTenantContext.php, andapps/platform/app/Support/Tenants/TenantPageCategory.phpso workspace-first environment routes are the only active environment-bound language and remembered cross-workspace environment context cannot leak. - T027 [US3] Update context bars, breadcrumbs, and chooser/dashboard CTA links in
apps/platform/app/Filament/Pages/ChooseTenant.php,apps/platform/app/Filament/Pages/Workspaces/ManagedTenantsLanding.php,apps/platform/app/Filament/Pages/WorkspaceOverview.php, andapps/platform/app/Filament/Pages/TenantDashboard.phpso the new route ownership readsWorkspace -> Managed Environment -> domain pageeverywhere this slice touches.
Checkpoint: Workspace dashboard, managed-environment dashboard, and current-context shells all present the correct scope and breadcrumb truth.
Phase 6: User Story 4 - Keep search and authorization truthful after the route cutover (Priority: P3)
Goal: Searchable resources, direct URLs, and legacy-route guards stay truthful after the cutover, with no broken search results and no hidden compatibility routes.
Independent Test: Open touched global-search results and direct workspace/environment URLs, confirm authorized destinations resolve under the workspace-first routes, and confirm /admin/t/{environment} plus /admin/tenants/{environment}/required-permissions remain 404.
Tests for User Story 4
- T028 [P] [US4] Extend
apps/platform/tests/Feature/Guards/LegacyAdminTenantRouteRemovalGuardTest.phpto prove no compatibility routes, aliases, redirects, or dual-panel fallbacks survive for/admin/t,/admin/tenants/{environment}/required-permissions,/admin/w/{workspace}/managed-tenants, or/admin/operationsplus/admin/operations/{run}. - T029 [P] [US4] Extend
apps/platform/tests/Feature/Workspace/WorkspaceFilamentTenancyCutoverTest.phpandapps/platform/tests/Feature/ManagedEnvironment/WorkspaceFirstEnvironmentRoutingTest.phpto coverWorkspaceResourceandTenantResourceglobal-search destinations plus404versus403behavior for direct workspace/environment URLs.
Implementation for User Story 4
- T030 [US4] Update
apps/platform/app/Filament/Resources/Workspaces/WorkspaceResource.phpandapps/platform/app/Filament/Resources/TenantResource.phpso each touched resource keeps a valid view/edit destination under workspace-first routing or disables global search in the same slice. - T031 [US4] Remove remaining legacy-route ownership and panel-language fallbacks from
apps/platform/app/Providers/Filament/AdminPanelProvider.php,apps/platform/app/Providers/Filament/TenantPanelProvider.php,apps/platform/bootstrap/providers.php,apps/platform/routes/web.php,apps/platform/app/Support/Workspaces/WorkspaceRedirectResolver.php,apps/platform/app/Support/OperationRunLinks.php, and any touched helpers underapps/platform/tests/so Specs281through287remain deferred instead of absorbed.
Checkpoint: Search, direct URLs, and no-legacy route guards all reflect the final workspace-first contract with no hidden fallback path.
Phase 7: Polish & Cross-Cutting Validation
Purpose: Run the exact bounded proof set, perform the final Filament review, and close the cutover without reopening deferred specs.
- T032 [P] Run
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && (cd "$REPO_ROOT/apps/platform" && ./vendor/bin/sail artisan test --compact tests/Feature/Workspace/WorkspaceFilamentTenancyCutoverTest.php tests/Feature/ManagedEnvironment/WorkspaceFirstEnvironmentRoutingTest.php tests/Feature/Monitoring/WorkspaceOperationsEnvironmentContextTest.php tests/Feature/Navigation/WorkspaceEnvironmentBreadcrumbsTest.php tests/Feature/Guards/LegacyAdminTenantRouteRemovalGuardTest.php). - T033 [P] Run
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && (cd "$REPO_ROOT/apps/platform" && ./vendor/bin/sail artisan test --compact tests/Browser/Spec280WorkspaceTenancyEnvironmentRoutingSmokeTest.php). - T034 [P] Run
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && (cd "$REPO_ROOT/apps/platform" && ./vendor/bin/sail bin pint --dirty --format agent). - T035 [P] Run
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && rg -n --fixed-strings '/admin/t/' "$REPO_ROOT/apps/platform/app" "$REPO_ROOT/apps/platform/tests" "$REPO_ROOT/apps/platform/routes" "$REPO_ROOT/apps/platform/bootstrap",export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && rg -n --fixed-strings '/admin/tenants/' "$REPO_ROOT/apps/platform/app" "$REPO_ROOT/apps/platform/tests" "$REPO_ROOT/apps/platform/routes" "$REPO_ROOT/apps/platform/bootstrap",export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && rg -n --fixed-strings '/admin/w/' "$REPO_ROOT/apps/platform/app" "$REPO_ROOT/apps/platform/tests" "$REPO_ROOT/apps/platform/routes" "$REPO_ROOT/apps/platform/bootstrap", andexport PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && rg -n --fixed-strings '/admin/operations' "$REPO_ROOT/apps/platform/app" "$REPO_ROOT/apps/platform/tests" "$REPO_ROOT/apps/platform/routes" "$REPO_ROOT/apps/platform/bootstrap"and confirm only intentional removal-guard output remains. - T036 [P] Run
export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && rg -n --fixed-strings "panel: 'tenant'" "$REPO_ROOT/apps/platform/app" "$REPO_ROOT/apps/platform/tests" "$REPO_ROOT/apps/platform/routes" "$REPO_ROOT/apps/platform/bootstrap"andexport PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && REPO_ROOT="$(git rev-parse --show-toplevel)" && rg -n --fixed-strings 'TenantPanelProvider::class' "$REPO_ROOT/apps/platform/bootstrap/providers.php"and confirm only intentional removal-guard output remains. - T037 [P] Review
apps/platform/app/Providers/Filament/AdminPanelProvider.php,apps/platform/app/Providers/Filament/TenantPanelProvider.php,apps/platform/bootstrap/providers.php,apps/platform/app/Filament/Resources/Workspaces/WorkspaceResource.php,apps/platform/app/Filament/Resources/TenantResource.php, and touched Filament pages/actions to confirm Filament v5 / Livewire v4 compliance, provider registration stays inapps/platform/bootstrap/providers.php, the global-search destination rule is satisfied, touched destructive actions still preserve->requiresConfirmation()plus authorization, and no asset strategy or deploy-step change was introduced. - T038 [P] Record the implementation close-out in
specs/280-workspace-tenancy-environment-routing/checklists/requirements.mdor the active PR notes confirming no compatibility routes, aliases, redirects, or dual-panel fallback shipped and Specs281through287remain explicitly deferred.
Dependencies & Execution Order
Phase Dependencies
- Phase 1 (Setup): no dependencies; start immediately.
- Phase 2 (Foundational): depends on Phase 1 and blocks all story work.
- Phase 3 (US1): depends on Phase 2 and establishes the canonical environment-entry contract.
- Phase 4 (US2): depends on Phase 2 and should follow US1 route ownership so operations links target the finished workspace-first environment family.
- Phase 5 (US3): depends on US1 and should land with or immediately after US2 so dashboards, breadcrumbs, and middleware all reflect the same route contract.
- Phase 6 (US4): depends on US1 through US3 so search, authorization, and no-legacy guards prove the final route language rather than an intermediate state.
- Phase 7 (Polish): depends on all desired user stories being complete.
User Story Dependencies
- US1 (P1): independently testable after Phase 2 and is the first required implementation increment.
- US2 (P1): independently testable after Phase 2, but should ship after or with US1 because operations links rely on the canonical workspace-first environment family.
- US3 (P2): independently testable after US1 and should land before US4 so breadcrumb and context truth are final.
- US4 (P3): independently testable after US1 through US3 and closes search, authorization, and legacy-route honesty.
Within Each User Story
- Write or extend the listed Pest coverage first and make it fail for the intended gap.
- Apply the smallest shared-seam changes needed to satisfy the story without reopening Specs
281through287. - Re-run the narrowest relevant validation command for that story before moving to the next story.
Parallel Execution Examples
- Setup: T002 through T006 can run in parallel once T001 sets the bounded scope.
- Foundational: T007 through T012 can run in parallel before T013 and T014 converge the route skeleton.
- US1: T015 and T016 can run in parallel; T017 through T019 should merge serially around chooser and route-owner files.
- US2: T020 can run alongside T021, then T022 and T023 should follow once shared operations builders are updated.
- US3: T024 can run in parallel with T025, then T026 and T027 should merge serially around the shared middleware and page-context seams.
- US4: T028 and T029 can run in parallel; T030 and T031 should follow once the final route contract is stable.
- Polish: T032 through T037 can run in parallel after implementation is complete; T038 should close out last.
Implementation Strategy
Suggested MVP Scope
- MVP = US1. Land the single surviving admin panel plus workspace-first environment entry before widening into operations, dashboard-context hardening, and search/no-legacy enforcement.
Incremental Delivery
- Complete Phase 1 and Phase 2.
- Deliver US1 so environment entry no longer depends on
/admin/t. - Deliver US2 so operations links become workspace-canonical with explicit environment scope.
- Deliver US3 so dashboard ownership, breadcrumbs, and middleware all converge on the same workspace-first context.
- Deliver US4 to lock search, authorization, and legacy-route honesty.
- Finish with the exact validation commands and the final Filament review in Phase 7.
Team Strategy
- Parallelize the failing test work first.
- Serialize merges around
apps/platform/app/Providers/Filament/,apps/platform/routes/web.php, and the middleware/context helpers to avoid conflicting route-language edits. - Reject any implementation branch that introduces compatibility routes, dual-panel ownership, or hidden follow-up work from Specs
281through287.
Deferred Follow-Ups / Non-Goals
- Spec
281provider connection, provider scope, and Microsoft profile extraction - Spec
282governance artifact retargeting toManagedEnvironment - Spec
283provider capability registry work - Spec
284provider-neutral artifact source taxonomy work - Spec
285workspace-first RBAC and environment access redesign - Spec
286UI copy, IA, and localization neutralization beyond route/context truth - Spec
287cutover quality gates and broader no-legacy enforcement beyond this feature-local proof