# Security Operations Leaves UI ## Module Web ## Status VERIFIED ## Description Shipped the weak-route security operations leaves as fully surfaced operator workflows. `Mission Control` now exposes alerts and activity, `Security` owns unknowns tracking and determinization flows, and `Ops > Operations` owns notifications. Stale `/analyze/unknowns*` and `/notify` entry points now resolve into mounted canonical pages instead of dead owner paths. ## Implementation Details - **Feature directories**: - `src/Web/StellaOps.Web/src/app/features/mission-control/` - `src/Web/StellaOps.Web/src/app/features/unknowns-tracking/` - `src/Web/StellaOps.Web/src/app/features/notify/` - **Primary components**: - `mission-alerts-page` (`src/Web/StellaOps.Web/src/app/features/mission-control/mission-alerts-page.component.ts`) - `mission-activity-page` (`src/Web.StellaOps.Web/src/app/features/mission-control/mission-activity-page.component.ts`) - `unknowns-dashboard` (`src/Web.StellaOps.Web/src/app/features/unknowns-tracking/unknowns-dashboard.component.ts`) - `grey-queue-dashboard` (`src/Web.StellaOps.Web/src/app/features/unknowns-tracking/grey-queue-dashboard.component.ts`) - `determinization-review` (`src/Web.StellaOps.Web/src/app/features/unknowns-tracking/determinization-review.component.ts`) - `notify-panel` (`src/Web.StellaOps.Web/src/app/features/notify/notify-panel.component.ts`) - **Canonical routes**: - `/mission-control/alerts` - `/mission-control/activity` - `/security/unknowns` - `/security/unknowns/:unknownId` - `/security/unknowns/:unknownId/determinization` - `/security/unknowns/queue/grey` - `/ops/operations/notifications` - **Legacy aliases**: - `/analyze/unknowns` - `/analyze/unknowns/:unknownId` - `/analyze/unknowns/:unknownId/determinization` - `/analyze/unknowns/queue/grey` - `/notify` - **Secondary entry points**: - sidebar `Mission Control > Alerts` - sidebar `Mission Control > Activity` - sidebar `Security > Unknowns` - sidebar `Operations > Notifications` ## E2E Test Plan - **Setup**: - [x] Start the local Angular test server with `npm run serve:test`. - [x] Use a test session with mission, scanner, ops, and notify viewer scopes. - **Core verification**: - [x] Open `/analyze/unknowns` and verify redirect into canonical `/security/unknowns`. - [x] Drill into unknown detail and verify the identification workflow stays mounted. - [x] Open the canonical notifications shell and verify the operator page and watchlist handoff render. - [x] Open `/mission-control/alerts` and `/mission-control/activity` and verify both pages render live operator links. ## Verification - Run: - `npm run test -- --watch=false --include src/app/layout/app-sidebar/app-sidebar.component.spec.ts --include src/tests/security/security-operations-leaves-cutover.spec.ts --include src/tests/unknowns/unknowns-tracking-ui.behavior.spec.ts --include src/tests/unknowns/unknowns-route-handoffs.spec.ts --include src/tests/notify/notify-watchlist-handoff.spec.ts` - `npx playwright test --config playwright.config.ts tests/e2e/security-operations-leaves-cutover.spec.ts --workers=1` - `npm run build` - Tier 0 (source): pass - Tier 1 (build/tests): pass - Tier 2 (behavior): pass - Notes: - Angular targeted tests passed: `5` files, `16` tests. - Playwright passed: `1` security-operations cutover scenario. - The browser flow uses `/ops/operations/notifications` because the local frontend proxy reserves `/notify`; the `/notify` alias remains covered by the route-contract test. - Production build passed; existing bundle-budget warnings remain unchanged from the baseline. - Verified on (UTC): 2026-03-08T08:42:15Z