feat(ui): ship offline operations cutover

This commit is contained in:
master
2026-03-08 03:12:01 +02:00
parent 93872e73ec
commit ff9de893d5
26 changed files with 1055 additions and 92 deletions

View File

@@ -7,11 +7,17 @@ Web
VERIFIED
## Description
Feed mirror ops UI with mirror registry list, snapshot management, AirGap import/export with bundle validation, feed version lock for deterministic scans, offline sync status, and bundle freshness warnings.
Feed mirror ops UI with mirror registry list, snapshot management, AirGap import/export with bundle validation, feed version lock for deterministic scans, offline sync status, and bundle freshness warnings. The canonical owner route now lives under `Ops > Operations`; legacy `ops` and `platform-ops` feed aliases redirect into it.
## Implementation Details
- **Feature directory**: `src/Web/StellaOps.Web/src/app/features/feed-mirror/`
- **Routes**: `feed-mirror.routes.ts`
- **Canonical route**: `/ops/operations/feeds-airgap`
- **Legacy aliases**:
- `/ops/feeds`
- `/ops/feeds/airgap/*`
- `/platform-ops/feeds*`
- `/platform/ops/feeds*`
- **Components**:
- `airgap-export` (`src/Web/StellaOps.Web/src/app/features/feed-mirror/airgap-export.component.ts`)
- `airgap-import` (`src/Web/StellaOps.Web/src/app/features/feed-mirror/airgap-import.component.ts`)
@@ -31,7 +37,7 @@ Feed mirror ops UI with mirror registry list, snapshot management, AirGap import
## E2E Test Plan
- **Setup**:
- [ ] Log in with a user that has appropriate permissions
- [ ] Navigate to `/ops/feeds`
- [ ] Navigate to `/ops/operations/feeds-airgap`
- [ ] Ensure test data exists (scanned artifacts, SBOM data, or seed data as needed)
- **Core verification**:
- [ ] Verify the component renders correctly with sample data

View File

@@ -7,11 +7,13 @@ Web
VERIFIED
## Description
Offline Kit UI with OfflineModeService, ManifestValidator, BundleFreshness widget, ReadOnlyGuard, and offline verification workflow for air-gapped environments, including deterministic bundle activation behavior in bundle management.
Offline Kit UI with OfflineModeService, ManifestValidator, BundleFreshness widget, ReadOnlyGuard, and offline verification workflow for air-gapped environments, including deterministic bundle activation behavior in bundle management. The canonical owner route now lives under `Ops > Operations`; the legacy `/ops/offline-kit` bookmark remains as a redirect.
## Implementation Details
- **Feature directory**: `src/Web/StellaOps.Web/src/app/features/offline-kit/`
- **Routes**: `offline-kit.routes.ts`
- **Canonical route**: `/ops/operations/offline-kit`
- **Legacy alias**: `/ops/offline-kit`
- **Components**:
- `bundle-management` (`src/Web/StellaOps.Web/src/app/features/offline-kit/components/bundle-management.component.ts`)
- `jwks-management` (`src/Web/StellaOps.Web/src/app/features/offline-kit/components/jwks-management.component.ts`)
@@ -23,7 +25,7 @@ Offline Kit UI with OfflineModeService, ManifestValidator, BundleFreshness widge
## E2E Test Plan
- **Setup**:
- [ ] Log in with a user that has appropriate permissions
- [ ] Navigate to `/ops/offline-kit`
- [ ] Navigate to `/ops/operations/offline-kit`
- [ ] Ensure test data exists (scanned artifacts, SBOM data, or seed data as needed)
- **Core verification**:
- [ ] Verify the component renders correctly with sample data

View File

@@ -0,0 +1,67 @@
# Offline Operations UI
## Module
Web
## Status
VERIFIED
## Description
Shipped the canonical offline and air-gap operations flow under `Ops > Operations`, repaired stale deep links from legacy `ops` and `platform-ops` aliases, and completed the previously half-wired Offline Kit actions so operators can load bundles, export summaries, inspect trust anchors, and hand off into Evidence and Trust surfaces without dead ends.
## Implementation Details
- **Feature directories**:
- `src/Web/StellaOps.Web/src/app/features/offline-kit/`
- `src/Web.StellaOps.Web/src/app/features/platform/ops/`
- **Primary components**:
- `offline-kit` (`src/Web.StellaOps.Web/src/app/features/offline-kit/offline-kit.component.ts`)
- `offline-dashboard` (`src/Web.StellaOps.Web/src/app/features/offline-kit/components/offline-dashboard.component.ts`)
- `bundle-management` (`src/Web.StellaOps.Web/src/app/features/offline-kit/components/bundle-management.component.ts`)
- `verification-center` (`src/Web.StellaOps.Web/src/app/features/offline-kit/components/verification-center.component.ts`)
- `jwks-management` (`src/Web.StellaOps.Web/src/app/features/offline-kit/components/jwks-management.component.ts`)
- `platform-feeds-airgap-page` (`src/Web.StellaOps.Web/src/app/features/platform/ops/platform-feeds-airgap-page.component.ts`)
- **Canonical routes**:
- `/ops/operations/offline-kit`
- `/ops/operations/offline-kit/dashboard`
- `/ops/operations/offline-kit/bundles`
- `/ops/operations/offline-kit/verify`
- `/ops/operations/offline-kit/jwks`
- `/ops/operations/feeds-airgap`
- **Legacy aliases**:
- `/ops/offline-kit/*`
- `/ops/feeds/*`
- `/platform-ops/*`
- `/platform/ops/*`
- **Secondary entry points**:
- `Evidence > Export Center`
- `Evidence > Verify & Replay`
- `Setup > Trust & Signing`
- context status chips and Ops navigation
## E2E Test Plan
- **Setup**:
- [x] Start the local Angular test server with `npm run serve:test`.
- [x] Open `/ops/operations/offline-kit`.
- [x] Use a test session with Ops and admin scopes.
- **Core verification**:
- [x] Verify Offline Kit renders its canonical shortcuts and child tabs.
- [x] Verify bundle and verification actions are usable instead of placeholder logs.
- [x] Verify trust-anchor inspection and export flows render inside the shell.
- **Legacy verification**:
- [x] Verify stale `/platform/ops/offline-kit/*` bookmarks land on `/ops/operations/offline-kit/*`.
- [x] Verify stale `/ops/feeds/airgap/import` lands on the canonical `Feeds & Airgap` page with preserved tab or action context.
## Verification
- Run:
- `npm test -- --watch=false --include src/tests/offline/offline-kit-ui-integration.spec.ts --include src/tests/offline/verification-center.component.spec.ts --include src/tests/offline/jwks-management.component.spec.ts --include src/tests/platform-ops/platform-feeds-airgap-page.component.spec.ts --include src/tests/platform-ops/platform-ops-routes.spec.ts`
- `npm run serve:test`
- `PLAYWRIGHT_BASE_URL=https://127.0.0.1:4400 npx playwright test tests/e2e/offline-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: `5` files, `17` tests.
- Playwright passed: `2` scenarios.
- Production build passed; existing bundle-budget warnings remain unchanged from the baseline.
- Verified on (UTC): 2026-03-08T00:54:00Z

View File

@@ -22,6 +22,8 @@ The Console presents operator dashboards for scans, policies, VEX evidence, runt
- 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`.
- 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 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`.
@@ -69,6 +71,7 @@ The Console presents operator dashboards for scans, policies, VEX evidence, runt
- ./watchlist-operations/README.md
- ./reachability-witnessing/README.md
- ./platform-ops-consolidation/README.md
- ./offline-operations/README.md
- ./triage-explainability-workspace/README.md
- ./workflow-visualization-replay/README.md
- ./contextual-actions-patterns/README.md

View File

@@ -87,6 +87,11 @@
- [DONE] FE-AUD-003 Wire secondary entry points and contextual handoffs
- [DONE] FE-AUD-004 Verify route cutover and operator journeys
- [DONE] FE-AUD-005 Sync docs, archive the sprint, and record the shipped feature
- [DONE] FE-OFF-001 Freeze canonical offline owner and alias contract
- [DONE] FE-OFF-002 Make offline shell actions usable and route-aware
- [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-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

View File

@@ -121,6 +121,10 @@ These are mostly not dropped products. They are current or near-current capabili
- `Evidence Pack`
- Target:
- `/ops/operations/*` with evidence links where relevant
- Notes:
- Detailed UX dossier: `docs/modules/ui/offline-operations/README.md`
- Implementation sprint: `docs-archived/implplan/SPRINT_20260308_002_FE_offline_operations_cutover.md`
- Shipped verification note: `docs/features/checked/web/offline-operations-ui.md`
### 9. Scanner And Job Operations
- Type: `wire-in / preserve`

View File

@@ -28,13 +28,14 @@ Provide a living plan for UI deliverables, dependencies, and evidence.
- `docs/features/checked/web/workflow-visualization-replay-ui.md` - shipped verification note for the canonical run-detail graph, timeline, replay, evidence tabs, and workflow-editor preview reuse boundary.
- `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/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/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.
- `docs/modules/ui/unified-audit-surfaces/README.md` - shipped canonical audit owner, alias contract, and secondary entry-point rules for cross-module audit browsing.
- `docs/modules/ui/unified-audit-surfaces/README.md` - canonical audit owner, alias contract, and secondary entry-point rules for cross-module audit browsing.
## Dependencies
- `docs/modules/ui/architecture.md`

View File

@@ -0,0 +1,55 @@
# Offline Operations
## Purpose
- Keep offline and air-gap workflows as a first-class operational capability without reviving a second product tree.
- Make `Offline Kit`, `Feeds & Airgap`, and evidence export handoffs usable from the active `Ops > Operations` shell.
## Canonical Owner
- Owner shell: `Ops > Operations`
- Primary routes:
- `/ops/operations/offline-kit`
- `/ops/operations/offline-kit/dashboard`
- `/ops/operations/offline-kit/bundles`
- `/ops/operations/offline-kit/verify`
- `/ops/operations/offline-kit/jwks`
- `/ops/operations/feeds-airgap`
- Secondary linked destinations:
- `/evidence/exports`
- `/evidence/verify-replay`
- `/setup/trust-signing`
## Legacy Alias Policy
- Preserve old bookmarks and stale menu links by redirecting:
- `/ops/offline-kit/*`
- `/ops/feeds/*`
- `/platform-ops/*`
- `/platform/ops/*`
- Redirects must preserve query params and fragments so tab or action state survives the handoff.
## UX Rules
- `Offline Kit` owns bundle management, offline verification, and trust-material inspection.
- `Feeds & Airgap` owns mirror freshness, version-lock posture, and air-gap entry actions.
- `Evidence Exports` remains Evidence-owned, but Offline Kit must link into it for portable bundle generation.
- Single actions like `Import Bundle` and `Export Bundle` should not become standalone products; they route into a tabbed or action-aware owner page.
## Preserved Value
- Keep:
- offline bundle loading and activation
- offline verification history and report export
- trust-anchor inspection and export
- feed freshness and version-lock context
- evidence export and replay handoffs
- Why:
- offline and air-gap operation is a real product differentiator, not a prototype branch
- release evidence, trust material, and feed provenance all need an operator home when the site is disconnected
## Shipped In This Cut
- Canonical `Ops > Operations` routes and stale alias repair for deep offline links.
- Route-aware `Feeds & Airgap` tab state and action banners.
- Working Offline Kit shortcuts into Evidence and Trust surfaces.
- Bundle export, verification detail drill-in, verification report export, and trust-anchor inspection/export.
## Related Docs
- `docs/modules/ui/platform-ops-consolidation/README.md`
- `docs/features/checked/web/offline-operations-ui.md`
- `docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md`