feat(ui): ship policy decisioning studio
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
# Sprint 20260307-022 - Policy VEX Release Decisioning Studio
|
||||
|
||||
## Topic & Scope
|
||||
- Consolidate Policy Studio, Policy Governance, Policy Simulation, and actionable VEX decisioning into one canonical sub-product shell for the Console.
|
||||
- Ship a fully wired `/ops/policy` experience with working routes, tabs, legacy redirects, release-context deep links, and no orphan mutable policy or VEX shells.
|
||||
- Complete the usable operator workflows for packs, governance, simulation, VEX conflicts, exceptions, release gates, and audit rather than stopping at merge or routing notes.
|
||||
- Working directory: `src/Web/StellaOps.Web/src/app/features`.
|
||||
- Allowed coordination edits: `src/Web/StellaOps.Web/src/app/routes/`, `docs/modules/ui/policy-decisioning-studio`, `docs/implplan/`, `docs/modules/ui/TASKS.md`, and `docs/modules/ui/implementation_plan.md`.
|
||||
- Expected evidence: code under `src/Web/**`, routable `/ops/policy` shell, working alias redirects, release-context entry points, targeted tests, and updated docs.
|
||||
|
||||
## Dependencies & Concurrency
|
||||
- Depends on:
|
||||
- `docs/contracts/policy-studio.md`
|
||||
- `docs/security/policy-governance.md`
|
||||
- `docs/modules/release-orchestrator/ui/overview.md`
|
||||
- `docs/modules/release-orchestrator/workflow/evidence-based-release-gates.md`
|
||||
- `docs/modules/ui/component-preservation-map/README.md`
|
||||
- `src/Web/StellaOps.Web/src/app/routes/ops.routes.ts`
|
||||
- `src/Web/StellaOps.Web/src/app/routes/administration.routes.ts`
|
||||
- Safe parallelism:
|
||||
- shell scaffolding and alias wiring can proceed in parallel with tab-by-tab migration once the canonical route family is fixed
|
||||
- packs/governance and simulation/VEX work can proceed in parallel after shared shell context is in place
|
||||
- release-context entry points and docs sync can proceed in parallel with tab implementation once ownership boundaries are stable
|
||||
|
||||
## Documentation Prerequisites
|
||||
- `docs/modules/ui/policy-decisioning-studio/README.md`
|
||||
- `docs/contracts/policy-studio.md`
|
||||
- `docs/security/policy-governance.md`
|
||||
- `docs/modules/release-orchestrator/ui/overview.md`
|
||||
- `docs/modules/release-orchestrator/workflow/evidence-based-release-gates.md`
|
||||
- `docs/modules/ui/component-preservation-map/SUMMARY_TREE.md`
|
||||
|
||||
## Delivery Tracker
|
||||
|
||||
### FE-PD-001 - Build the canonical `/ops/policy` shell
|
||||
Status: DONE
|
||||
Dependency: none
|
||||
Owners: Product Manager, FE Architect
|
||||
Task description:
|
||||
- Implement the shell component, primary tabs, shared context header, and nav entry under the canonical `/ops/policy` root.
|
||||
- Make the shell usable in global, pack, and release-context modes from the first shipped route.
|
||||
|
||||
Completion criteria:
|
||||
- [x] `/ops/policy` renders as the canonical shell with working top-level navigation.
|
||||
- [x] Primary tabs and shared context header are wired in code.
|
||||
- [x] Release-context mode can be entered without creating a separate product shell.
|
||||
|
||||
### FE-PD-002 - Migrate routes and legacy aliases into the new tree
|
||||
Status: DONE
|
||||
Dependency: FE-PD-001
|
||||
Owners: FE Architect, Documentation author
|
||||
Task description:
|
||||
- Implement the canonical route tree for packs, governance, simulation, VEX, exceptions, release gates, and audit under `/ops/policy`.
|
||||
- Wire redirects from `/policy-studio/*`, `/admin/policy/*`, and `/admin/vex-hub/*` so old entry points land on usable new pages.
|
||||
|
||||
Completion criteria:
|
||||
- [x] Canonical child routes exist in the active router.
|
||||
- [x] Legacy aliases redirect into working `/ops/policy` subviews.
|
||||
- [x] No mutable policy or VEX workflow remains dependent on an orphan route.
|
||||
|
||||
### FE-PD-003 - Ship Packs and Governance functionality
|
||||
Status: DONE
|
||||
Dependency: FE-PD-002
|
||||
Owners: FE Architect, Documentation author
|
||||
Task description:
|
||||
- Migrate the policy pack workspace, editor, YAML, rule builder, approvals, explain flows, and governance controls into the new shell.
|
||||
- Ensure these flows remain usable, not just reachable, after the shell cutover.
|
||||
|
||||
Completion criteria:
|
||||
- [x] Packs and Governance tabs are functional under `/ops/policy`.
|
||||
- [x] Editing, approvals, governance settings, and explain flows are usable from the new shell.
|
||||
- [x] Superseded pack and governance shells can be retired or redirected after cutover.
|
||||
|
||||
### FE-PD-004 - Ship Simulation, VEX, Exceptions, Gates, and Audit functionality
|
||||
Status: DONE
|
||||
Dependency: FE-PD-001
|
||||
Owners: Product Manager, FE Architect
|
||||
Task description:
|
||||
- Migrate simulation flows, VEX conflict handling, exceptions, release gates, and audit history into the same shell.
|
||||
- Ensure operators can complete the key workflows from the new tabs without falling back to dead or duplicate screens.
|
||||
|
||||
Completion criteria:
|
||||
- [x] Simulation, VEX, Exceptions, Release Gates, and Audit tabs are functional under `/ops/policy`.
|
||||
- [x] Conflict resolution, exception handling, and gate review are usable from the new shell.
|
||||
- [x] Old mutable VEX and policy action pages are no longer required for those workflows.
|
||||
|
||||
### FE-PD-005 - Wire Release Orchestrator into Decisioning Studio
|
||||
Status: DONE
|
||||
Dependency: FE-PD-002
|
||||
Owners: Developer, FE Architect
|
||||
Task description:
|
||||
- Implement deep links from approvals, promotion requests, release detail, workflow editor, and evidence detail into release-context mode.
|
||||
- Keep Release Orchestrator as the owner of release state while Decisioning Studio owns policy and VEX actions.
|
||||
|
||||
Completion criteria:
|
||||
- [x] Release-context entry points are wired from active release surfaces.
|
||||
- [x] Release-context header shows the required release, environment, artifact, and gate state.
|
||||
- [x] Operators can return to the release workflow after taking policy or VEX actions.
|
||||
|
||||
### FE-PD-006 - Verify cutover, redirects, and core operator journeys
|
||||
Status: DONE
|
||||
Dependency: FE-PD-005
|
||||
Owners: QA, Test Automation
|
||||
Task description:
|
||||
- Add targeted UI verification for global mode, pack mode, and release-context mode, including old bookmarks and alias redirects.
|
||||
- Validate that the new shell is the working owner for the core operator journeys, not just a shell around dead components.
|
||||
|
||||
Completion criteria:
|
||||
- [x] Playwright scenarios cover all three shell modes.
|
||||
- [x] Legacy aliases and old bookmarks land on usable new pages.
|
||||
- [x] Scope-based visibility and the main policy/VEX operator journeys are explicitly verified.
|
||||
|
||||
### FE-PD-007 - Complete docs sync and retire superseded shells
|
||||
Status: DONE
|
||||
Dependency: FE-PD-003
|
||||
Owners: Documentation author, Project Manager
|
||||
Task description:
|
||||
- Update UI, security, and release docs to reflect the new canonical shell and the cutover state.
|
||||
- Record which legacy names remain as temporary aliases and which old product shells are fully retired after the move.
|
||||
|
||||
Completion criteria:
|
||||
- [x] Cross-doc references are updated for the shipped shell.
|
||||
- [x] User-facing naming and alias lifetimes are documented.
|
||||
- [x] Retired sibling-product labels and routes are explicitly listed after cutover.
|
||||
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
| --- | --- | --- |
|
||||
| 2026-03-07 | Sprint created to ship a single Decisioning Studio shell spanning policy authoring, governance, simulation, actionable VEX resolution, and release-context gate explanation. | Project Manager |
|
||||
| 2026-03-07 | Implementation started. Route inventory confirmed: `/ops/policy` is still fragmented across Policy Studio, Governance, Simulation, VEX, Exceptions, and Gate leaves, so the sprint is moving into shell and alias cutover. | FE |
|
||||
| 2026-03-07 | Shipped the canonical `Decisioning Studio` shell at `/ops/policy` with primary tabs, pack and release-context modes, canonical VEX and audit ownership, and legacy redirects from `policy-studio`, `policy/*`, `admin/policy/*`, `admin/vex-hub/*`, and `security/vex*`. | FE |
|
||||
| 2026-03-07 | Wired active release, approval, promotion, workflow-editor, evidence, security, home, settings, search, and timeline entry points into the shared shell so mutable policy and VEX actions no longer depend on orphan routes. | FE |
|
||||
| 2026-03-07 | Verification passed: `npm test -- --watch=false --include ...` (10 targeted spec files, 94 tests), `npx playwright test tests/e2e/policy-decisioning-studio.spec.ts` (4/4), and `npm run build` (production build pass; existing size-budget warnings remain). | QA |
|
||||
|
||||
## Decisions & Risks
|
||||
- Decision: the preferred product shape is one dynamic shell with deep-linkable tabs, not one giant page and not separate sibling products.
|
||||
- Decision: Release Orchestrator remains the owner of promotion state; the new shell owns policy, VEX, exception, and gate explanation workflows.
|
||||
- Decision: `/ops/policy` is the preferred canonical root because it already exists in the active route tree and best fits the "policy as an ops control plane" model.
|
||||
- Risk: moving all VEX screens under Policy could bury read-only security exploration use cases that still belong in Analyze.
|
||||
- Mitigation: allow Analyze entry points to deep-link into the same canonical VEX tab or a read-only shell mode instead of preserving a separate mutable VEX product.
|
||||
- Risk: legacy aliases across `/policy-studio/*`, `/administration/policy/*`, and `/admin/vex-hub/*` can silently fragment analytics and QA coverage.
|
||||
- Mitigation: freeze redirects and verification scenarios before implementation starts.
|
||||
- Risk: Release Orchestrator could grow duplicate gate/policy UI while this consolidation is in flight.
|
||||
- Mitigation: require release-facing FE work to deep-link into the shared shell rather than add new standalone policy/VEX pages.
|
||||
- Decision: canonical mutable VEX ownership is now `/ops/policy/vex`; Security keeps read-only exploratory entry points only where needed.
|
||||
- Decision: legacy `policy-studio` and `policy/*` bookmarks are preserved through redirect coverage rather than leaving parallel writable routes mounted.
|
||||
- Documentation sync:
|
||||
- `docs/modules/ui/policy-decisioning-studio/README.md`
|
||||
- `docs/features/checked/web/policy-decisioning-studio-ui.md`
|
||||
- `docs/modules/ui/TASKS.md`
|
||||
- `docs/modules/ui/implementation_plan.md`
|
||||
- Verification commands:
|
||||
- `npm test -- --watch=false --include src/tests/policy_decisioning/policy-decisioning-shell.component.spec.ts --include src/tests/policy_decisioning/policy-decisioning-routes.spec.ts --include src/tests/release_orchestrator/evidence-detail.behavior.spec.ts --include src/tests/release_orchestrator/visual-workflow-editor.behavior.spec.ts --include src/tests/security/security-overview-dashboard.behavior.spec.ts --include src/tests/global_search/search-route-matrix.spec.ts --include src/tests/navigation/legacy-redirects.spec.ts --include src/tests/routes/legacy-route-migration-framework.component.spec.ts --include src/tests/administration/administration-routes.spec.ts --include src/tests/security-risk/security-risk-routes.spec.ts`
|
||||
- `npx playwright test tests/e2e/policy-decisioning-studio.spec.ts`
|
||||
- `npm run build`
|
||||
- Residual risk: the production build still reports pre-existing bundle-budget warnings unrelated to this sprint.
|
||||
- Delivery rule: this sprint is only complete when the canonical shell is routable, usable, verified, and old mutable policy or VEX action paths are no longer required.
|
||||
- Reference design note: `docs/modules/ui/policy-decisioning-studio/README.md`.
|
||||
|
||||
## Next Checkpoints
|
||||
- 2026-03-08: confirm the canonical shell name, tab set, and ownership boundary.
|
||||
- 2026-03-09: freeze the route contract and component merge matrix.
|
||||
- 2026-03-10: finalize release-context UX contract and implementation slice plan.
|
||||
Reference in New Issue
Block a user