diff --git a/docs/implplan/SPRINT_20260307_026_FE_platform_ops_consolidation.md b/docs-archived/implplan/SPRINT_20260307_026_FE_platform_ops_consolidation.md
similarity index 76%
rename from docs/implplan/SPRINT_20260307_026_FE_platform_ops_consolidation.md
rename to docs-archived/implplan/SPRINT_20260307_026_FE_platform_ops_consolidation.md
index 99deb8379..199414889 100644
--- a/docs/implplan/SPRINT_20260307_026_FE_platform_ops_consolidation.md
+++ b/docs-archived/implplan/SPRINT_20260307_026_FE_platform_ops_consolidation.md
@@ -30,7 +30,7 @@
## Delivery Tracker
### FE-PO-001 - Rebuild the Operations overview and submenu in the live shell
-Status: TODO
+Status: DONE
Dependency: none
Owners: Product Manager, FE Architect
Task description:
@@ -38,12 +38,12 @@ Task description:
- Ensure the overview and submenu expose the real operator concerns rather than leaving them as a paper design.
Completion criteria:
-- [ ] The live shell exposes the intended overview groups and submenu entries.
-- [ ] Overview group labels and child-route labels are wired in code.
-- [ ] No parallel `platform-ops` owner tree is required for operator access.
+- [x] The live shell exposes the intended overview groups and submenu entries.
+- [x] Overview group labels and child-route labels are wired in code.
+- [x] No parallel `platform-ops` owner tree is required for operator access.
### FE-PO-002 - Ship the overview page and grouped blocking cards
-Status: TODO
+Status: DONE
Dependency: FE-PO-001
Owners: Developer, FE Architect
Task description:
@@ -51,12 +51,12 @@ Task description:
- Make the overview page usable as the real operator landing page rather than a placeholder around child routes.
Completion criteria:
-- [ ] Blocking strip renders the required signals in the live shell.
-- [ ] Grouped cards route into working child pages.
-- [ ] Overview sections follow one consistent shipped pattern.
+- [x] Blocking strip renders the required signals in the live shell.
+- [x] Grouped cards route into working child pages.
+- [x] Overview sections follow one consistent shipped pattern.
### FE-PO-003 - Absorb high-value legacy widgets and pages
-Status: TODO
+Status: DONE
Dependency: FE-PO-001
Owners: Developer, Documentation author
Task description:
@@ -64,12 +64,12 @@ Task description:
- Retire only the obsolete duplicates after the missing operational functionality is actually present in the live shell.
Completion criteria:
-- [ ] High-value legacy widgets are visible in the active shell or child routes.
-- [ ] Missing operational views are actually shipped into target pages.
-- [ ] Only genuinely duplicated legacy routes remain candidates for retirement.
+- [x] High-value legacy widgets are visible in the active shell or child routes.
+- [x] Missing operational views are actually shipped into target pages.
+- [x] Only genuinely duplicated legacy routes remain candidates for retirement.
### FE-PO-004 - Cut over routes and legacy aliases
-Status: TODO
+Status: DONE
Dependency: FE-PO-001
Owners: FE Architect, Developer
Task description:
@@ -77,12 +77,12 @@ Task description:
- Ensure old bookmarks and legacy route trees redirect into working pages without reviving a second shell.
Completion criteria:
-- [ ] Canonical route family is active in the router.
-- [ ] Legacy aliases redirect into working operations pages.
-- [ ] Sidebar, overview cards, and breadcrumb labels match in the shipped shell.
+- [x] Canonical route family is active in the router.
+- [x] Legacy aliases redirect into working operations pages.
+- [x] Sidebar, overview cards, and breadcrumb labels match in the shipped shell.
### FE-PO-005 - Complete Setup boundary and topology deep links
-Status: TODO
+Status: DONE
Dependency: FE-PO-002
Owners: Product Manager, FE Architect
Task description:
@@ -90,12 +90,12 @@ Task description:
- Wire deep links between `Ops > Operations` and `Setup > Topology` where operators need to cross that boundary.
Completion criteria:
-- [ ] Agent fleet and topology ownership remain under Setup in the live UI.
-- [ ] Operations-to-Setup deep links work from shipped pages.
-- [ ] No duplicated topology management remains exposed under Ops.
+- [x] Agent fleet and topology ownership remain under Setup in the live UI.
+- [x] Operations-to-Setup deep links work from shipped pages.
+- [x] No duplicated topology management remains exposed under Ops.
### FE-PO-006 - Verify, document, and cut over the consolidated shell
-Status: TODO
+Status: DONE
Dependency: FE-PO-004
Owners: QA, Documentation author
Task description:
@@ -103,14 +103,17 @@ Task description:
- Update UI docs and operational runbooks so the consolidated shell ships as the usable owner surface.
Completion criteria:
-- [ ] Verification covers overview groups and target routes.
-- [ ] Legacy alias redirects are included in testing.
-- [ ] Docs reflect the consolidated and shipped owner shell.
+- [x] Verification covers overview groups and target routes.
+- [x] Legacy alias redirects are included in testing.
+- [x] Docs reflect the consolidated and shipped owner shell.
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 2026-03-07 | Sprint created to ship a consolidated Operations shell with grouped overview cards, stable child routes, legacy-widget absorption, and explicit Setup boundaries. | Project Manager |
+| 2026-03-07 | Implementation started. Current `Ops > Operations` routes exist, but the overview and several child pages still link to dead `/platform/ops/*` paths. Consolidation work will replace those with canonical `/ops/operations/*` routes and add legacy redirect coverage. | Developer |
+| 2026-03-07 | Shipped the consolidated overview taxonomy, canonical `/ops/operations/*` links, legacy alias redirects, and Setup-boundary deep links. | Developer |
+| 2026-03-07 | Verified with targeted Angular and Playwright coverage, updated module docs, and archived the sprint. | QA |
## Decisions & Risks
- Decision: `Ops > Operations` remains the one operator shell; legacy `platform-ops` becomes migration input only.
diff --git a/docs/features/checked/web/operations-consolidation-ui.md b/docs/features/checked/web/operations-consolidation-ui.md
new file mode 100644
index 000000000..23466a704
--- /dev/null
+++ b/docs/features/checked/web/operations-consolidation-ui.md
@@ -0,0 +1,62 @@
+# Operations Consolidation UI
+
+## Module
+Web
+
+## Status
+VERIFIED
+
+## Description
+Shipped the canonical `Ops > Operations` owner shell with grouped overview cards, blocking-strip signals, canonical `/ops/operations/*` child routes, absorbed legacy data-integrity and queue links, and explicit deep links into `Setup > Topology` for agent-fleet ownership. Legacy `platform-ops/*` and `platform/ops/*` aliases now resolve into the consolidated shell instead of requiring a parallel product tree.
+
+## Implementation Details
+- **Feature directory**: `src/Web/StellaOps.Web/src/app/features/platform/ops/`
+- **Primary components**:
+ - `platform-ops-overview-page` (`src/Web/StellaOps.Web/src/app/features/platform/ops/platform-ops-overview-page.component.ts`)
+ - `platform-feeds-airgap-page` (`src/Web/StellaOps.Web/src/app/features/platform/ops/platform-feeds-airgap-page.component.ts`)
+ - `platform-jobs-queues-page` (`src/Web/StellaOps.Web/src/app/features/platform/ops/platform-jobs-queues-page.component.ts`)
+- **Canonical routes**:
+ - `/ops/operations`
+ - `/ops/operations/data-integrity`
+ - `/ops/operations/jobs-queues`
+ - `/ops/operations/health-slo`
+ - `/ops/operations/feeds-airgap`
+ - `/ops/operations/offline-kit`
+ - `/ops/operations/quotas`
+ - `/ops/operations/aoc`
+ - `/ops/operations/doctor`
+ - `/ops/operations/signals`
+ - `/ops/operations/packs`
+ - `/ops/operations/notifications`
+- **Legacy aliases**:
+ - `/platform-ops/*`
+ - `/platform/ops/*`
+- **Secondary entry points**:
+ - `Mission Control`
+ - `Setup > Topology`
+ - `Evidence`
+ - `Releases`
+
+## E2E Test Plan
+- **Setup**:
+ - [ ] Log in with a user that can access `Ops` and `Setup`.
+ - [ ] Navigate to `/ops/operations`.
+ - [ ] Ensure doctor trend and approvals fixtures or seeded data exist.
+- **Core verification**:
+ - [ ] Verify `Blocking`, `Execution`, `Health`, `Supply And Airgap`, and `Capacity And Setup Boundary` groups render.
+ - [ ] Verify overview cards drill into the intended canonical child routes.
+ - [ ] Verify Setup-boundary links send agent and topology work to `Setup > Topology`.
+- **Legacy verification**:
+ - [ ] Verify `platform-ops/*` and `platform/ops/*` aliases land in canonical `/ops/operations/*` routes.
+ - [ ] Verify query-string state survives redirect into tabbed child pages.
+ - [ ] Verify data-integrity drill-ins and job detail routes keep working after alias cutover.
+
+## Verification
+- Run:
+ - `npx ng test --watch=false --include src/tests/platform-ops/platform-ops-routes.spec.ts --include src/tests/platform-ops/platform-ops-overview-page.component.spec.ts --include src/tests/platform-ops/platform-feeds-airgap-page.component.spec.ts --include src/tests/platform-ops/data-integrity-pages.spec.ts --include src/tests/navigation/legacy-redirects.spec.ts`
+ - `PLAYWRIGHT_PORT=4410 npx playwright test tests/e2e/operations-consolidation.spec.ts --workers=1`
+- Tier 0 (source): pass
+- Tier 1 (build/tests): pass
+- Tier 2 (behavior): pass
+- Note: under the local Angular dev server, `/platform*` first-request URLs are intercepted by `proxy.conf.json`, so the Playwright legacy-alias check uses client-side navigation after app bootstrap to validate Angular redirect behavior deterministically.
+- Verified on (UTC): 2026-03-07T18:28:16Z
diff --git a/docs/modules/ui/README.md b/docs/modules/ui/README.md
index 802e24509..b10ae9331 100644
--- a/docs/modules/ui/README.md
+++ b/docs/modules/ui/README.md
@@ -16,8 +16,12 @@ The Console presents operator dashboards for scans, policies, VEX evidence, runt
- Added restoration topic shape notes at `restoration-topics/README.md` for Watchlist, Reachability Witnessing, Platform Ops, Triage explainability, and Workflow Visualization placement.
- Added implementation-ready UX dossiers for Watchlist, Reachability Witnessing, Platform Ops Consolidation, Triage Explainability Workspace, Workflow Visualization and Replay, and shared contextual action patterns.
- Added FE sprint files for the five accepted restoration topics plus a shared sprint for single actions, drawers, tabs, and stray-page placement patterns.
+- Shipped the canonical `Setup > Trust & Signing` watchlist shell, including entries, alerts, tuning, and Mission Control or Notifications deep links.
+- Added checked-feature verification for watchlist management at `../../features/checked/web/identity-watchlist-management-ui.md`.
- Shipped the canonical `Security > Reachability` witness and proof-of-exposure shell, including cross-shell handoffs from findings, triage, evidence replay, and release detail.
- Added checked-feature verification for reachability witnessing at `../../features/checked/web/reachability-witnessing-ui.md`.
+- Shipped the consolidated `Ops > Operations` shell with grouped overview cards, canonical `/ops/operations/*` routes, and legacy `platform-ops` alias cutover.
+- Added checked-feature verification for operations consolidation at `../../features/checked/web/operations-consolidation-ui.md`.
## Latest updates (2026-02-21)
- Runtime mock cutover completed for policy simulation history/conflict/batch flows and graph explorer data loading in `src/Web/StellaOps.Web/src/app/**`.
diff --git a/docs/modules/ui/TASKS.md b/docs/modules/ui/TASKS.md
index 5d8a16475..9e9372dde 100644
--- a/docs/modules/ui/TASKS.md
+++ b/docs/modules/ui/TASKS.md
@@ -9,7 +9,6 @@
- `docs/implplan/SPRINT_20260307_009_DOCS_ui_component_preservation_map.md`
- `docs/implplan/SPRINT_20260307_022_FE_policy_vex_release_decisioning_studio.md`
- `docs/implplan/SPRINT_20260307_023_DOCS_ui_restoration_topic_shapes.md`
-- `docs/implplan/SPRINT_20260307_026_FE_platform_ops_consolidation.md`
- `docs/implplan/SPRINT_20260307_027_FE_triage_explainability_workspace.md`
- `docs/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md`
- `docs/implplan/SPRINT_20260307_029_FE_contextual_actions_and_stray_surfaces.md`
@@ -82,12 +81,12 @@
- [DONE] FE-RW-004 Cross-product deep links and release-context use for reachability proofs
- [DONE] FE-RW-005 Supporting evidence and export surfaces for witness UX
- [DONE] FE-RW-006 QA, rollout, and docs sync for reachability witnessing
-- [TODO] FE-PO-001 Freeze Operations overview taxonomy and submenu structure
-- [TODO] FE-PO-002 Overview page regrouping and blocking-card contract
-- [TODO] FE-PO-003 Legacy widget absorption matrix for Platform Ops
-- [TODO] FE-PO-004 Route cleanup and alias migration contract for Operations
-- [TODO] FE-PO-005 Setup boundary and deep-link contract for Operations
-- [TODO] FE-PO-006 QA, rollout, and docs sync for Platform Ops consolidation
+- [DONE] FE-PO-001 Freeze Operations overview taxonomy and submenu structure
+- [DONE] FE-PO-002 Overview page regrouping and blocking-card contract
+- [DONE] FE-PO-003 Legacy widget absorption matrix for Platform Ops
+- [DONE] FE-PO-004 Route cleanup and alias migration contract for Operations
+- [DONE] FE-PO-005 Setup boundary and deep-link contract for Operations
+- [DONE] FE-PO-006 QA, rollout, and docs sync for Platform Ops consolidation
- [TODO] FE-TX-001 Freeze artifact workspace route, lane, and panel contract
- [TODO] FE-TX-002 List-lane segmentation slice for Artifact Workspace
- [TODO] FE-TX-003 Detail-side explainability rail slice
diff --git a/docs/modules/ui/implementation_plan.md b/docs/modules/ui/implementation_plan.md
index 4a81bb205..ce7ec9733 100644
--- a/docs/modules/ui/implementation_plan.md
+++ b/docs/modules/ui/implementation_plan.md
@@ -13,7 +13,6 @@ Provide a living plan for UI deliverables, dependencies, and evidence.
- `SPRINT_20260307_009_DOCS_ui_component_preservation_map.md` - per-component preservation dossiers for unused and weakly surfaced console UI components.
- `SPRINT_20260307_022_FE_policy_vex_release_decisioning_studio.md` - canonical Decisioning Studio shell to unify policy, simulation, VEX decisioning, and release-context gate explanation.
- `SPRINT_20260307_023_DOCS_ui_restoration_topic_shapes.md` - documentation prerequisite for shell/menu/tab placements; not a product-delivery sprint by itself.
-- `SPRINT_20260307_026_FE_platform_ops_consolidation.md` - ship one Operations shell with grouped overview cards, legacy widget absorption, and legacy redirects.
- `SPRINT_20260307_027_FE_triage_explainability_workspace.md` - ship the artifact workspace lane model, explainability panels, and audit-bundle flows.
- `SPRINT_20260307_028_FE_workflow_visualization_replay.md` - ship run-detail graph, timeline, replay, and evidence tabs plus bounded workflow-editor preview reuse.
- `SPRINT_20260307_029_FE_contextual_actions_and_stray_surfaces.md` - ship the shared tabs, drawers, right rails, split views, and contextual detail primitives adopted by the restoration features.
@@ -27,6 +26,7 @@ Provide a living plan for UI deliverables, dependencies, and evidence.
- `docs/modules/ui/watchlist-operations/README.md` - detailed watchlist UX dossier and owner-shell contract.
- `docs/features/checked/web/reachability-witnessing-ui.md` - shipped verification note for the canonical Reachability witness and PoE shell.
- `docs/features/checked/web/identity-watchlist-management-ui.md` - shipped verification note for the Trust & Signing watchlist shell and its Mission Control / Notifications handoffs.
+- `docs/features/checked/web/operations-consolidation-ui.md` - shipped verification note for the canonical Operations shell, overview grouping, and legacy alias cutover.
- `docs/modules/ui/reachability-witnessing/README.md` - detailed witness and proof UX dossier plus cross-shell deep-link contract.
- `docs/modules/ui/platform-ops-consolidation/README.md` - detailed Operations overview taxonomy and legacy absorption plan.
- `docs/modules/ui/triage-explainability-workspace/README.md` - detailed artifact workspace and audit-bundle UX dossier.
diff --git a/docs/modules/ui/platform-ops-consolidation/README.md b/docs/modules/ui/platform-ops-consolidation/README.md
index 56b2531d7..10a93735c 100644
--- a/docs/modules/ui/platform-ops-consolidation/README.md
+++ b/docs/modules/ui/platform-ops-consolidation/README.md
@@ -1,5 +1,7 @@
# Platform Ops Consolidation
+**Status:** Shipped on 2026-03-07
+
## Recommendation
Keep one consolidated operator shell under `Ops > Operations` and absorb the useful legacy `platform-ops` surfaces into it.
@@ -10,6 +12,14 @@ Keep one consolidated operator shell under `Ops > Operations` and absorb the use
This is not a restoration of an abandoned product. It is a consolidation of operator navigation, overview grouping, and missing widgets into the existing route tree.
+## Shipped Scope
+
+- Mounted one grouped `Ops > Operations` overview with blocking-strip status, quick submenu chips, pending-action callouts, and an explicit Setup ownership boundary.
+- Standardized canonical route helpers under `/ops/operations/*` and rewired active overview and child-page links away from dead `/platform/ops/*` paths.
+- Added legacy alias redirects for both `/platform-ops/*` and `/platform/ops/*` into the live Operations shell.
+- Preserved agent-fleet and topology ownership under `Setup > Topology` while adding direct Operations handoffs where runtime monitoring needs to cross that boundary.
+- Added focused route, component, and Playwright verification plus a checked-feature note at `docs/features/checked/web/operations-consolidation-ui.md`.
+
## Why This Is The Right Shape
- The current app already routes operators through `/ops/operations`.
@@ -115,6 +125,15 @@ Prefer the current route family and tighten it rather than creating new paths.
- duplicate overview routes should be retired once card parity is reached
- child-route labels should match the sidebar and overview cards exactly
+## Verification
+
+- Angular:
+ - `npx ng test --watch=false --include src/tests/platform-ops/platform-ops-routes.spec.ts --include src/tests/platform-ops/platform-ops-overview-page.component.spec.ts --include src/tests/platform-ops/platform-feeds-airgap-page.component.spec.ts --include src/tests/platform-ops/data-integrity-pages.spec.ts --include src/tests/navigation/legacy-redirects.spec.ts`
+- Playwright:
+ - `PLAYWRIGHT_PORT=4410 npx playwright test tests/e2e/operations-consolidation.spec.ts --workers=1`
+- Checked feature record:
+ - `docs/features/checked/web/operations-consolidation-ui.md`
+
## What To Merge
### Preserve as the main shell
diff --git a/src/Web/StellaOps.Web/src/app/app.routes.ts b/src/Web/StellaOps.Web/src/app/app.routes.ts
index 5299b99bf..4fc5e6e4f 100644
--- a/src/Web/StellaOps.Web/src/app/app.routes.ts
+++ b/src/Web/StellaOps.Web/src/app/app.routes.ts
@@ -7,6 +7,7 @@ import {
} from './core/auth';
import { requireBackendsReachableGuard } from './core/config/backends-reachable.guard';
import { requireConfigGuard } from './core/config/config.guard';
+import { LEGACY_REDIRECT_ROUTES } from './routes/legacy-redirects.routes';
const requireMissionControlGuard = requireAnyScopeGuard(
[
@@ -83,6 +84,7 @@ export const routes: Routes = [
pathMatch: 'full',
redirectTo: 'mission-control/board',
},
+ ...LEGACY_REDIRECT_ROUTES,
{
path: 'mission-control',
title: 'Mission Control',
@@ -104,6 +106,13 @@ export const routes: Routes = [
data: { breadcrumb: 'Security' },
loadChildren: () => import('./routes/security-risk.routes').then((m) => m.SECURITY_RISK_ROUTES),
},
+ {
+ path: 'triage',
+ title: 'Triage',
+ canMatch: [requireConfigGuard, requireBackendsReachableGuard, requireAuthGuard],
+ data: { breadcrumb: 'Triage' },
+ loadChildren: () => import('./routes/triage.routes').then((m) => m.TRIAGE_ROUTES),
+ },
{
path: 'evidence',
title: 'Evidence',
@@ -161,11 +170,17 @@ export const routes: Routes = [
data: { breadcrumb: 'Console Admin' },
loadChildren: () => import('./features/console-admin/console-admin.routes').then((m) => m.consoleAdminRoutes),
},
+ {
+ path: 'platform-ops',
+ loadChildren: () => import('./routes/platform-ops.routes').then((m) => m.PLATFORM_OPS_ROUTES),
+ },
{
path: 'platform',
children: [
- { path: 'ops', redirectTo: '/ops', pathMatch: 'full' },
- { path: 'ops/:rest', redirectTo: '/ops/:rest' },
+ {
+ path: 'ops',
+ loadChildren: () => import('./routes/platform-ops.routes').then((m) => m.PLATFORM_OPS_ROUTES),
+ },
{ path: 'setup', redirectTo: '/setup', pathMatch: 'full' },
{ path: 'setup/:rest', redirectTo: '/setup/:rest' },
{ path: '**', redirectTo: '/ops' },
diff --git a/src/Web/StellaOps.Web/src/app/features/platform-ops/data-integrity-overview.component.ts b/src/Web/StellaOps.Web/src/app/features/platform-ops/data-integrity-overview.component.ts
index b6acb819d..07991033a 100644
--- a/src/Web/StellaOps.Web/src/app/features/platform-ops/data-integrity-overview.component.ts
+++ b/src/Web/StellaOps.Web/src/app/features/platform-ops/data-integrity-overview.component.ts
@@ -123,13 +123,13 @@ interface FailureItem {
+ Operations can monitor topology impact, but inventory ownership remains in Setup. These
+ links deliberately route out of Operations to avoid duplicating infrastructure management.
+