# 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. - Canonical mount: `/ops/operations` - Suggested user-facing title: `Operations` - Suggested overview page title: `Platform Ops` 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`. - The dead and weak-route `platform-ops` pages overlap with the live ops shell rather than introducing a separate domain. - Restoring the old shell would recreate fragmentation between overview pages, diagnostics, quotas, AOC, and air-gap operations. - The correct move is to strengthen one overview and one child-route tree. ## Operator Modes ### 1. Control Room Mode - Used by operators scanning for blocking platform issues. - Focus: overview, blocking cards, and high-priority drills. ### 2. Subsystem Specialist Mode - Used by operators responsible for one area such as quotas, offline kit, job queues, or AOC. - Focus: a dedicated child route reached from grouped cards. ### 3. Triage Handoff Mode - Used when another shell surfaces an ops problem and links into operations. - Focus: deep link into the relevant child route with preserved return context. ## Recommended IA ### Overview groups - `Blocking` - data integrity - AOC compliance - critical platform alerts - `Execution` - jobs and queues - scheduler - dead-letter - signals - `Health` - health and SLO - diagnostics - system status - `Supply And Airgap` - feeds and airgap - offline kit - pack registry - `Capacity` - quotas and limits - `Communications` - notifications ### Child routes - `Overview` - `Data Integrity` - `Jobs & Queues` - `Health & SLO` - `Feeds & Airgap` - `Offline Kit` - `Quotas & Limits` - `AOC Compliance` - `Diagnostics` - `Signals` - `Pack Registry` - `Notifications` ## Page Anatomy ### Overview page - top blocking strip: - open incidents - highest-risk subsystem - degraded status count - grouped cards: - each card shows status, trend, queue depth, or freshness - each card links to a single child route - lower sections: - recent changes - pending operator actions - cross-links to Setup-owned topology when infra ownership is involved ### Child routes - keep a consistent subpage layout: - status summary cards - main table or chart - action rail - diagnostics or evidence side panel when relevant ## Route Contract Prefer the current route family and tighten it rather than creating new paths. ### Canonical routes - `/ops/operations` - `/ops/operations/jobs-queues` - `/ops/operations/data-integrity` - `/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` ### Alias and cleanup rules - legacy `/platform-ops/*` bookmarks should redirect into `/ops/operations/*` - 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 - `PlatformOpsOverviewPageComponent` - `operations.routes.ts` ### Absorb from legacy Platform Ops - `PlatformOpsOverviewComponent` - federation and telemetry summary cards that still add value - data-integrity pages still missing from the live grouped overview - any distinctive capacity or compliance widgets not already surfaced ## Single Actions And Supporting Surfaces ### Agent fleet - primary home: `Setup > Topology` - operations overview may show health summary and deep-link out ### Diagnostics - keep as `Ops > Operations > Diagnostics` - avoid a second top-level doctor product entry ### AOC violations and reports - keep overview status on the main page - full detail stays in its own child route ### Offline import/export helpers - keep inside `Offline Kit` or `Feeds & Airgap` - do not create separate sidebar products ## Cross-Product Entry Points - `Mission Control` - links to degraded subsystem routes - `Setup > Topology` - links back to operations when infra state impacts runtime operations - `Evidence` or `Releases` - links into data integrity, signals, or pack registry when evidence freshness blocks a workflow ## UI Standards For Implementation - One shell, one overview, one submenu tree. - Group cards by operator concern, not by backend service name alone. - Preserve stable deep links from cards to subpages. - Keep Setup-owned infrastructure management distinct from Ops-owned runtime monitoring. - Treat legacy routes as migration aliases only. ## Non-Goals - Do not revive `/platform-ops/*` as a parallel route tree. - Do not duplicate topology ownership under Ops. - Do not create separate overview pages for each subsystem when grouped cards already solve discoverability. ## Source Inputs - `docs/UI_GUIDE.md` - `docs/modules/ui/operations/observability-guide.md` - `docs/modules/notify/operations/observability.md` - `src/Web/StellaOps.Web/src/app/routes/operations.routes.ts` - `src/Web/StellaOps.Web/src/app/features/platform/ops/platform-ops-overview-page.component.ts` - `src/Web/StellaOps.Web/src/app/features/platform-ops/platform-ops-overview.component.ts` - `src/Web/StellaOps.Web/src/app/features/aoc-compliance/aoc-compliance.routes.ts`