diff --git a/docs-archived/implplan/SPRINT_20260308_003_FE_quota_health_aoc_operations_cutover.md b/docs-archived/implplan/SPRINT_20260308_003_FE_quota_health_aoc_operations_cutover.md new file mode 100644 index 000000000..206bb4712 --- /dev/null +++ b/docs-archived/implplan/SPRINT_20260308_003_FE_quota_health_aoc_operations_cutover.md @@ -0,0 +1,122 @@ +# Sprint 20260308_003_FE - Quota Health AOC Operations Cutover + +## Topic & Scope +- Complete the `Ops > Operations` ownership cutover for `Quotas & Limits`, `Health & SLO`, and `AOC Compliance`. +- Replace stale `/ops/*`, `/platform/ops/*`, and `/platform-ops/*` deep links with canonical `/ops/operations/*` routes while preserving bookmarks and query state. +- Finish the missing operator workflows inside these surfaces so filters, drill-ins, exports, and handoff actions are actually usable. +- Working directory: `src/Web/StellaOps.Web/`. +- Expected evidence: targeted Angular tests, Playwright route-and-flow coverage, checked-feature documentation, and archived sprint notes. + +## Dependencies & Concurrency +- Depends on the shipped Operations shell and contextual primitives from archived Operations and Offline Kit sprints. +- Safe parallelism: backend modules are out of scope; only frontend code, frontend docs, and verification assets are permitted. + +## Documentation Prerequisites +- `AGENTS.md` +- `docs/modules/ui/AGENTS.md` +- `src/Web/StellaOps.Web/AGENTS.md` +- `docs/modules/ui/README.md` +- `docs/modules/ui/architecture.md` +- `docs/modules/ui/implementation_plan.md` +- `docs/modules/ui/platform-ops-consolidation/README.md` +- `docs/modules/platform/architecture-overview.md` + +## Delivery Tracker + +### FE-QHA-001 - Freeze canonical route and alias contract +Status: DONE +Dependency: none +Owners: Developer / Implementer +Task description: +- Reconcile the quota, health, and AOC surfaces with the existing `Ops > Operations` owner shell. Add any missing shorthand or legacy aliases required for stale links that still exist in the UI and for known bookmark patterns. +- Ensure redirects preserve query params and fragments, and cover both root-level `/ops/*` aliases and old `platform` paths where operators still land today. + +Completion criteria: +- [ ] Canonical helpers exist for quota, health, and AOC operations routes. +- [ ] Old quota, health, and AOC bookmarks land on the canonical owner pages without losing query state. +- [ ] Navigation config no longer points AOC to stale `/ops/aoc` paths. +- [x] Canonical helpers exist for quota, health, and AOC operations routes. +- [x] Old quota, health, and AOC bookmarks land on the canonical owner pages without losing query state. +- [x] Navigation config no longer points AOC to stale `/ops/aoc` paths. + +### FE-QHA-002 - Complete quota operator workflows +Status: DONE +Dependency: FE-QHA-001 +Owners: Developer / Implementer +Task description: +- Finish the missing quota workflows so dashboard drill-ins, forecast actions, alert configuration, tenant detail actions, and report export behave as real operator flows rather than placeholders or dead links. +- Any fallback for missing backend endpoints must still be usable offline and must not present fake success as if an integration happened. + +Completion criteria: +- [ ] Quota drill-ins and back links use canonical operations routes. +- [ ] Dashboard and forecast query-driven filters work and preserve intent across pages. +- [ ] Tenant detail export and report actions are usable. +- [ ] Quota alert test/preview flow is usable without relying on a nonexistent backend endpoint. +- [ ] Quota report history no longer renders as a permanent placeholder-only section. +- [x] Quota drill-ins and back links use canonical operations routes. +- [x] Dashboard and forecast query-driven filters work and preserve intent across pages. +- [x] Tenant detail export and report actions are usable. +- [x] Quota alert test/preview flow is usable without relying on a nonexistent backend endpoint. +- [x] Quota report history no longer renders as a permanent placeholder-only section. + +### FE-QHA-003 - Complete health and AOC operator workflows +Status: DONE +Dependency: FE-QHA-001 +Owners: Developer / Implementer +Task description: +- Repair the remaining health and AOC page actions so breadcrumbs, drill-ins, provenance validation, filter controls, and incident navigation stay inside the mounted owner shell. +- Wire any ignored filter state to API calls or deterministic client-side behavior so the pages do what they claim. + +Completion criteria: +- [ ] Platform Health service and incident pages return to canonical health routes. +- [ ] Health overview cards and drill-ins use canonical routes. +- [ ] AOC provenance validation navigates through Angular routing and preserves query intent. +- [ ] AOC violations filters actually affect the loaded results. +- [ ] AOC child pages use canonical owner-shell breadcrumbs and links. +- [x] Platform Health service and incident pages return to canonical health routes. +- [x] Health overview cards and drill-ins use canonical routes. +- [x] AOC provenance validation navigates through Angular routing and preserves query intent. +- [x] AOC violations filters actually affect the loaded results. +- [x] AOC child pages use canonical owner-shell breadcrumbs and links. + +### FE-QHA-004 - Verify cutover, sync docs, and archive +Status: DONE +Dependency: FE-QHA-002, FE-QHA-003 +Owners: Developer / Implementer, QA +Task description: +- Add focused tests for the repaired routes and flows, then run targeted Angular and Playwright verification. Record the shipped behavior in the checked-feature docs and archive the sprint only when every task is done. + +Completion criteria: +- [ ] Targeted Angular tests cover redirect contracts and the repaired quota/health/AOC behaviors. +- [ ] Playwright verifies at least one end-to-end journey through the restored surfaces. +- [ ] UI docs and checked-feature notes reflect the shipped behavior. +- [ ] Sprint moved to `docs-archived/implplan/` only after all tasks are marked DONE. +- [x] Targeted Angular tests cover redirect contracts and the repaired quota/health/AOC behaviors. +- [x] Playwright verifies at least one end-to-end journey through the restored surfaces. +- [x] UI docs and checked-feature notes reflect the shipped behavior. +- [x] Sprint moved to `docs-archived/implplan/` only after all tasks are marked DONE. + +## Execution Log +| Date (UTC) | Update | Owner | +| --- | --- | --- | +| 2026-03-08 | Sprint created and moved to DOING for Quota/Health/AOC operations cutover. | Codex | +| 2026-03-08 | Added canonical route helpers and repaired `ops`, `platform-ops`, and `platform/ops` aliases for quota, health, and AOC child routes. | Codex | +| 2026-03-08 | Completed quota query-driven actions, tenant-detail export, alert payload generation, health drill-ins, and AOC route-backed provenance or filter flows. | Codex | +| 2026-03-08 | Verified targeted Angular coverage with `npm test -- --watch=false --include src/tests/platform-ops/platform-ops-routes.spec.ts --include src/tests/quotas/quota-operations-cutover.spec.ts --include src/tests/aoc_verification/guard-violations-list.component.spec.ts --include src/tests/platform_health/platform-health-dashboard.spec.ts`: 13 tests passed. | QA | +| 2026-03-08 | Verified browser flows with a prestarted local Angular test server plus `PLAYWRIGHT_BASE_URL=https://127.0.0.1:4400 npx playwright test tests/e2e/quota-health-aoc-operations.spec.ts --workers=1`: 3 scenarios passed. | QA | +| 2026-03-08 | Production build passed via `npm run build`; existing bundle-budget warnings remain unchanged from the baseline. | QA | + +## Decisions & Risks +- Risk: some quota and alert behaviors have no dedicated backend endpoint. Mitigation: ship honest offline-safe fallbacks such as route-aware prefill, downloadable artifacts, or clipboard payloads instead of fake API success. +- Risk: quota status filtering is not represented in the existing client signature. Mitigation: use deterministic client-side filtering when the backend cannot filter directly, and document the limitation if discovered in verification. +- Risk: stale bookmarks may exist outside the currently searched UI files. Mitigation: add alias coverage at the route layer instead of only fixing component links. +- Delivery rule satisfied: the canonical routes are mounted, the operator actions are usable, and targeted Tier 1 plus Tier 2 UI verification passed. +- Docs synced: + - `docs/modules/ui/quota-health-aoc-operations/README.md` + - `docs/features/checked/web/quota-health-aoc-operations-ui.md` + - `docs/modules/ui/README.md` + - `docs/modules/ui/implementation_plan.md` + - `docs/modules/ui/TASKS.md` + +## Next Checkpoints +- 2026-03-08: archive sprint and commit the delivered cutover. diff --git a/docs/features/checked/web/quota-health-aoc-operations-ui.md b/docs/features/checked/web/quota-health-aoc-operations-ui.md new file mode 100644 index 000000000..bd6fce478 --- /dev/null +++ b/docs/features/checked/web/quota-health-aoc-operations-ui.md @@ -0,0 +1,71 @@ +# Quota Health AOC Operations UI + +## Module +Web + +## Status +VERIFIED + +## Description +Shipped the canonical `Ops > Operations` cutover for `Quotas & Limits`, `Health & SLO`, and `AOC Compliance`. The work repaired stale `/ops/*` and `platform-ops` deep links, completed quota actions that still stopped at placeholder behavior, and kept health and AOC drill-ins inside the mounted operations shell with usable route-backed filter state. + +## Implementation Details +- **Feature directories**: + - `src/Web/StellaOps.Web/src/app/features/quota-dashboard/` + - `src/Web.StellaOps.Web/src/app/features/platform-health/` + - `src/Web.StellaOps.Web/src/app/features/aoc-compliance/` + - `src/Web.StellaOps.Web/src/app/features/platform/ops/` +- **Primary routes**: + - `/ops/operations/quotas` + - `/ops/operations/quotas/tenants` + - `/ops/operations/quotas/forecast` + - `/ops/operations/quotas/alerts` + - `/ops/operations/quotas/reports` + - `/ops/operations/health-slo` + - `/ops/operations/health-slo/services/:serviceName` + - `/ops/operations/health-slo/incidents` + - `/ops/operations/aoc` + - `/ops/operations/aoc/violations` + - `/ops/operations/aoc/provenance` + - `/ops/operations/aoc/ingestion` + - `/ops/operations/aoc/report` +- **Legacy aliases**: + - `/ops/quotas/*` + - `/ops/aoc/*` + - `/ops/health-slo/*` + - `/platform-ops/*` + - `/platform/ops/*` +- **Notable repaired behaviors**: + - quota dashboard query-driven category loading + - quota forecast action routing into alerts or reports + - tenant-detail CSV export and audit-log handoff + - quota alert test-payload generation + - route-backed AOC provenance validation + - AOC guard-violation request filtering + +## E2E Test Plan +- **Setup**: + - [x] Start the local Angular test server with `npm run serve:test`. + - [x] Use a test session with Ops and admin scopes. +- **Core verification**: + - [x] Verify old quota alert deep links land on the canonical Operations route. + - [x] Verify stale platform health detail bookmarks land on canonical health service detail. + - [x] Verify old AOC provenance links keep query intent and still render a successful validation result. +- **Cutover verification**: + - [x] Verify the Angular unit suite covers route alias inventory, quota query actions, and AOC violation filter behavior. + - [x] Verify the production build still completes after the cutover. + +## Verification +- Run: + - `npm test -- --watch=false --include src/tests/platform-ops/platform-ops-routes.spec.ts --include src/tests/quotas/quota-operations-cutover.spec.ts --include src/tests/aoc_verification/guard-violations-list.component.spec.ts --include src/tests/platform_health/platform-health-dashboard.spec.ts` + - `npm run serve:test` + - `PLAYWRIGHT_BASE_URL=https://127.0.0.1:4400 npx playwright test tests/e2e/quota-health-aoc-operations.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: `4` files, `13` tests. + - Playwright passed: `3` scenarios. + - Production build passed; existing bundle-budget warnings remain unchanged from the baseline. +- Verified on (UTC): 2026-03-08T06:10:00Z diff --git a/docs/modules/ui/README.md b/docs/modules/ui/README.md index 0aefc9802..b3c77d9cf 100644 --- a/docs/modules/ui/README.md +++ b/docs/modules/ui/README.md @@ -24,6 +24,8 @@ The Console presents operator dashboards for scans, policies, VEX evidence, runt - Added checked-feature verification for operations consolidation at `../../features/checked/web/operations-consolidation-ui.md`. - Shipped the canonical offline and air-gap operations flow under `Ops > Operations`, including repaired stale `/ops/*` and `/platform-ops/*` deep links, usable Offline Kit actions, and Evidence or Trust handoffs. - Added checked-feature verification for offline operations at `../../features/checked/web/offline-operations-ui.md`. +- Shipped the canonical `Quotas & Limits`, `Health & SLO`, and `AOC Compliance` cutover under `Ops > Operations`, including repaired legacy aliases, usable quota exports and payload generation, and route-backed AOC filtering or provenance validation. +- Added checked-feature verification for quota, health, and AOC operations at `../../features/checked/web/quota-health-aoc-operations-ui.md`. - Shipped the shared contextual placement primitives for tabs, submenu pills, route-aware drawers, list-detail shells, grouped overview cards, and return-to-context headers under `src/Web/StellaOps.Web/src/app/shared/ui/`. - Added checked-feature verification for the contextual primitives and their first adopted surfaces at `../../features/checked/web/contextual-actions-patterns-ui.md`. @@ -72,6 +74,7 @@ The Console presents operator dashboards for scans, policies, VEX evidence, runt - ./reachability-witnessing/README.md - ./platform-ops-consolidation/README.md - ./offline-operations/README.md +- ./quota-health-aoc-operations/README.md - ./triage-explainability-workspace/README.md - ./workflow-visualization-replay/README.md - ./contextual-actions-patterns/README.md diff --git a/docs/modules/ui/TASKS.md b/docs/modules/ui/TASKS.md index ebd11e75e..e8e66e10b 100644 --- a/docs/modules/ui/TASKS.md +++ b/docs/modules/ui/TASKS.md @@ -92,6 +92,10 @@ - [DONE] FE-OFF-003 Complete supporting export, verification, and trust workflows - [DONE] FE-OFF-004 Verify canonical offline operations journeys - [DONE] FE-OFF-005 Sync docs, archive the sprint, and record the shipped feature +- [DONE] FE-QHA-001 Freeze canonical route and alias contract +- [DONE] FE-QHA-002 Complete quota operator workflows +- [DONE] FE-QHA-003 Complete health and AOC operator workflows +- [DONE] FE-QHA-004 Verify cutover, sync docs, and archive - [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 diff --git a/docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md b/docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md index 7dda50ded..590b3baca 100644 --- a/docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md +++ b/docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md @@ -140,7 +140,7 @@ These are mostly not dropped products. They are current or near-current capabili - consolidated ops operations subtree ### 10. Quota, Platform Health, And AOC Operations -- Type: `wire-in / preserve` +- Type: `shipped` - Confidence: `high` - Branches: - `Quota Dashboard` @@ -149,6 +149,8 @@ These are mostly not dropped products. They are current or near-current capabili - `Platform` - Target: - `/ops/operations/*` +- Status: + - shipped on 2026-03-08 as the canonical Operations child-route cutover ### 11. Topology And Trust Administration - Type: `wire-in / preserve` diff --git a/docs/modules/ui/implementation_plan.md b/docs/modules/ui/implementation_plan.md index 6d5f268fe..f4bf36308 100644 --- a/docs/modules/ui/implementation_plan.md +++ b/docs/modules/ui/implementation_plan.md @@ -29,9 +29,11 @@ Provide a living plan for UI deliverables, dependencies, and evidence. - `docs/features/checked/web/contextual-actions-patterns-ui.md` - shipped verification note for the shared contextual route-state, headers, drawers, list-detail shells, grouped overview cards, and first adopted restoration surfaces. - `docs/features/checked/web/unified-audit-surfaces-ui.md` - shipped verification note for the Evidence-owned audit shell, admin bookmark redirects, repaired audit subview links, and secondary handoff entry points. - `docs/features/checked/web/offline-operations-ui.md` - shipped verification note for the canonical Offline Kit and Feeds & Airgap owner routes, repaired stale aliases, and completed offline shell actions. +- `docs/features/checked/web/quota-health-aoc-operations-ui.md` - shipped verification note for canonical quota, health, and AOC owner routes, repaired deep links, route-backed filters, and completed operator actions. - `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/offline-operations/README.md` - detailed owner-shell contract for Offline Kit, Feeds & Airgap, Evidence handoffs, and stale alias policy. +- `docs/modules/ui/quota-health-aoc-operations/README.md` - canonical owner-shell contract for quota, health, and AOC operations cutover plus alias and action rules. - `docs/modules/ui/triage-explainability-workspace/README.md` - detailed artifact workspace and audit-bundle UX dossier. - `docs/modules/ui/workflow-visualization-replay/README.md` - detailed run-detail graph, timeline, replay, and evidence UX dossier. - `docs/modules/ui/contextual-actions-patterns/README.md` - shared placement contract for stray actions, pages, drawers, and tabs. diff --git a/docs/modules/ui/quota-health-aoc-operations/README.md b/docs/modules/ui/quota-health-aoc-operations/README.md new file mode 100644 index 000000000..c98ae28f7 --- /dev/null +++ b/docs/modules/ui/quota-health-aoc-operations/README.md @@ -0,0 +1,65 @@ +# Quota Health AOC Operations + +## Purpose +- Finish the `Ops > Operations` cutover for `Quotas & Limits`, `Health & SLO`, and `AOC Compliance`. +- Replace stale route fragments and half-wired actions with one usable operator flow under the mounted Operations shell. + +## Canonical Owner +- Owner shell: `Ops > Operations` +- Primary routes: + - `/ops/operations/quotas` + - `/ops/operations/quotas/tenants` + - `/ops/operations/quotas/forecast` + - `/ops/operations/quotas/alerts` + - `/ops/operations/quotas/reports` + - `/ops/operations/health-slo` + - `/ops/operations/health-slo/services/:serviceName` + - `/ops/operations/health-slo/incidents` + - `/ops/operations/aoc` + - `/ops/operations/aoc/violations` + - `/ops/operations/aoc/provenance` + - `/ops/operations/aoc/ingestion` + - `/ops/operations/aoc/report` + +## Legacy Alias Policy +- Preserve shorthand and stale bookmarks by redirecting: + - `/ops/quotas/*` + - `/ops/aoc/*` + - `/ops/health-slo/*` + - `/platform-ops/quotas/*` + - `/platform-ops/aoc/*` + - `/platform-ops/health-slo/*` + - `/platform/ops/quotas/*` + - `/platform/ops/aoc/*` + - `/platform/ops/health-slo/*` +- Redirects must preserve query params and fragments because these pages use route-backed filter or drill-in state. + +## UX Rules +- `Quotas & Limits` owns quota drill-ins, forecast routing, alert thresholds, and report export. +- `Health & SLO` owns service detail and incident history; service tiles must not deep-link into stale `platform` paths. +- `AOC Compliance` owns provenance validation, violation triage, ingestion monitoring, and compliance export. +- Cross-shell actions should stay contextual: + - quota tenant detail can hand off into `Evidence > Audit Log` + - critical quota forecasts can hand off into quota reports with prefilled category intent + - AOC provenance validation must stay bookmarkable through query params + +## Shipped In This Cut +- Added canonical route helpers and alias coverage for quota, health, and AOC old bookmarks. +- Rewired the Operations navigation tree so AOC no longer points at stale `/ops/aoc` paths. +- Made quota dashboard category chips drive real history and forecast loading through the URL. +- Repaired quota forecast, alert, tenant-detail, and report flows so they use canonical routes and usable local export or payload generation instead of dead links or console placeholders. +- Repaired health breadcrumbs and service drill-ins to stay inside the mounted `Health & SLO` subtree. +- Repaired AOC provenance navigation and made guard-violation filters affect the actual request payload. + +## Preserved Value +- Keep: + - quota capacity planning and threshold tuning + - service-level health drill-ins and incident export + - AOC provenance explanation and guard-violation triage +- Why: + - these are not abandoned product ideas; they are real operator surfaces that had route and workflow drift after the Operations shell consolidation + +## Related Docs +- `docs/modules/ui/platform-ops-consolidation/README.md` +- `docs/features/checked/web/quota-health-aoc-operations-ui.md` +- `docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md` diff --git a/src/Web/StellaOps.Web/src/app/core/api/aoc.client.ts b/src/Web/StellaOps.Web/src/app/core/api/aoc.client.ts index 734a5b8a9..1c4358885 100644 --- a/src/Web/StellaOps.Web/src/app/core/api/aoc.client.ts +++ b/src/Web/StellaOps.Web/src/app/core/api/aoc.client.ts @@ -211,7 +211,7 @@ export class AocClient { /** * Gets AOC compliance dashboard data including metrics, violations, and ingestion flow. */ - getComplianceDashboard(filters?: AocDashboardFilters): Observable { + getComplianceDashboard(filters?: Partial): Observable { let params = new HttpParams(); if (filters?.dateRange) { params = params.set('startDate', filters.dateRange.start); @@ -232,7 +232,7 @@ export class AocClient { getGuardViolations( page = 1, pageSize = 20, - filters?: AocDashboardFilters + filters?: Partial ): Observable { let params = new HttpParams() .set('page', page.toString()) @@ -243,6 +243,9 @@ export class AocClient { } if (filters?.sources?.length) params = params.set('sources', filters.sources.join(',')); if (filters?.modules?.length) params = params.set('modules', filters.modules.join(',')); + if (filters?.violationReasons?.length) { + params = params.set('violationReasons', filters.violationReasons.join(',')); + } return this.http.get(`${this.baseUrl}/compliance/violations`, { params, headers: this.buildHeaders(), diff --git a/src/Web/StellaOps.Web/src/app/core/navigation/navigation.config.ts b/src/Web/StellaOps.Web/src/app/core/navigation/navigation.config.ts index 4295071f7..3d4eb8f6e 100644 --- a/src/Web/StellaOps.Web/src/app/core/navigation/navigation.config.ts +++ b/src/Web/StellaOps.Web/src/app/core/navigation/navigation.config.ts @@ -1,4 +1,4 @@ -import { OPERATIONS_PATHS } from '../../features/platform/ops/operations-paths'; +import { OPERATIONS_PATHS, aocPath } from '../../features/platform/ops/operations-paths'; import { NavGroup, NavigationConfig } from './navigation.types'; /** @@ -415,38 +415,38 @@ export const NAVIGATION_GROUPS: NavGroup[] = [ { id: 'aoc-compliance', label: 'AOC Compliance', - route: '/ops/aoc', + route: OPERATIONS_PATHS.aoc, icon: 'shield-check', tooltip: 'Guard violations, ingestion flow, and provenance chain validation', children: [ { id: 'aoc-dashboard', label: 'Dashboard', - route: '/ops/aoc', + route: OPERATIONS_PATHS.aoc, tooltip: 'AOC compliance metrics and KPIs', }, { id: 'aoc-violations', label: 'Guard Violations', - route: '/ops/aoc/violations', + route: aocPath('violations'), tooltip: 'View rejected payloads and reasons', }, { id: 'aoc-ingestion', label: 'Ingestion Flow', - route: '/ops/aoc/ingestion', + route: aocPath('ingestion'), tooltip: 'Real-time ingestion metrics per source', }, { id: 'aoc-provenance', label: 'Provenance Validator', - route: '/ops/aoc/provenance', + route: aocPath('provenance'), tooltip: 'Validate provenance chains for advisories', }, { id: 'aoc-report', label: 'Compliance Report', - route: '/ops/aoc/report', + route: aocPath('report'), tooltip: 'Export compliance reports for auditors', }, ], diff --git a/src/Web/StellaOps.Web/src/app/features/aoc-compliance/aoc-compliance-dashboard.component.ts b/src/Web/StellaOps.Web/src/app/features/aoc-compliance/aoc-compliance-dashboard.component.ts index f34de13d3..2dff5c425 100644 --- a/src/Web/StellaOps.Web/src/app/features/aoc-compliance/aoc-compliance-dashboard.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/aoc-compliance/aoc-compliance-dashboard.component.ts @@ -6,7 +6,7 @@ import { Component, OnInit, inject, signal, computed, ChangeDetectionStrategy } from '@angular/core'; -import { RouterModule } from '@angular/router'; +import { Router, RouterModule } from '@angular/router'; import { FormsModule } from '@angular/forms'; import { AocClient } from '../../core/api/aoc.client'; import { @@ -15,6 +15,7 @@ import { GuardViolation, IngestionFlowSummary, } from '../../core/api/aoc.models'; +import { aocPath } from '../platform/ops/operations-paths'; @Component({ selector: 'app-aoc-compliance-dashboard', @@ -671,6 +672,8 @@ import { }) export class AocComplianceDashboardComponent implements OnInit { private readonly aocClient = inject(AocClient); + private readonly router = inject(Router); + readonly aocOverviewPath = aocPath(); // State signals readonly data = signal(null); @@ -745,8 +748,12 @@ export class AocComplianceDashboardComponent implements OnInit { validateProvenance(): void { if (!this.provenanceInputValue.trim()) return; - // Navigate to provenance validator with params - window.location.href = `/ops/aoc/provenance?type=${this.provenanceInputType}&value=${encodeURIComponent(this.provenanceInputValue)}`; + void this.router.navigate([aocPath('provenance')], { + queryParams: { + type: this.provenanceInputType, + value: this.provenanceInputValue.trim(), + }, + }); } getTrendIcon(trend?: 'up' | 'down' | 'stable'): string { diff --git a/src/Web/StellaOps.Web/src/app/features/aoc-compliance/compliance-report.component.ts b/src/Web/StellaOps.Web/src/app/features/aoc-compliance/compliance-report.component.ts index 455104646..e2f7babc8 100644 --- a/src/Web/StellaOps.Web/src/app/features/aoc-compliance/compliance-report.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/aoc-compliance/compliance-report.component.ts @@ -5,6 +5,7 @@ import { RouterModule } from '@angular/router'; import { FormsModule } from '@angular/forms'; import { AocClient } from '../../core/api/aoc.client'; import { ComplianceReportSummary, ComplianceReportRequest, ComplianceReportFormat } from '../../core/api/aoc.models'; +import { aocPath } from '../platform/ops/operations-paths'; @Component({ selector: 'app-compliance-report', @@ -14,7 +15,7 @@ import { ComplianceReportSummary, ComplianceReportRequest, ComplianceReportForma