diff --git a/docs/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md b/docs-archived/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md similarity index 67% rename from docs/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md rename to docs-archived/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md index f2a291a25..592389c97 100644 --- a/docs/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md +++ b/docs-archived/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md @@ -31,7 +31,7 @@ ## Delivery Tracker ### FE-WV-001 - Wire run-detail tabs into Releases and Evidence -Status: TODO +Status: DONE Dependency: none Owners: Product Manager, FE Architect Task description: @@ -39,12 +39,12 @@ Task description: - Ensure operators can reach the graph and replay experience from the active shells. Completion criteria: -- [ ] Canonical run-detail tabs are active in the router. -- [ ] Runtime graph and replay routes are mounted and reachable. -- [ ] Evidence-side entry points open the working runtime context. +- [x] Canonical run-detail tabs are active in the router. +- [x] Runtime graph and replay routes are mounted and reachable. +- [x] Evidence-side entry points open the working runtime context. ### FE-WV-002 - Ship the Graph, Timeline, and Critical Path tabs -Status: TODO +Status: DONE Dependency: FE-WV-001 Owners: Developer, FE Architect Task description: @@ -52,12 +52,12 @@ Task description: - Ensure these tabs are usable for real run diagnosis, not just visual placeholders. Completion criteria: -- [ ] Graph, timeline, and critical-path tabs render with working filters and node metadata. -- [ ] Operators can diagnose run state from the shipped tabs. -- [ ] Step selection opens the working detail drawer. +- [x] Graph, timeline, and critical-path tabs render with working filters and node metadata. +- [x] Operators can diagnose run state from the shipped tabs. +- [x] Step selection opens the working detail drawer. ### FE-WV-003 - Ship Replay and Evidence integration -Status: TODO +Status: DONE Dependency: FE-WV-001 Owners: Developer, Product Manager Task description: @@ -65,12 +65,12 @@ Task description: - Integrate the existing evidence replay controls and proof replay surfaces into the active run-detail shell. Completion criteria: -- [ ] Replay tab works from the active run-detail shell. -- [ ] Existing evidence replay controls are usable from the new tab model. -- [ ] Evidence and Replay tabs both expose their intended workflows in the shipped UI. +- [x] Replay tab works from the active run-detail shell. +- [x] Existing evidence replay controls are usable from the new tab model. +- [x] Evidence and Replay tabs both expose their intended workflows in the shipped UI. ### FE-WV-004 - Ship step-detail drill-in and deep-link behavior -Status: TODO +Status: DONE Dependency: FE-WV-002 Owners: Developer, FE Architect Task description: @@ -78,12 +78,12 @@ Task description: - Ensure failed-step drill-ins work from graph and timeline views without losing run context. Completion criteria: -- [ ] Step-detail drawer works from graph and timeline tabs. -- [ ] `step=` deep-link behavior is usable and shareable. -- [ ] Any required full-route escalation is implemented only where necessary. +- [x] Step-detail drawer works from graph and timeline tabs. +- [x] `step=` deep-link behavior is usable and shareable. +- [x] Any required full-route escalation is implemented only where necessary. ### FE-WV-005 - Implement bounded workflow-editor preview reuse -Status: TODO +Status: DONE Dependency: FE-WV-001 Owners: FE Architect, Developer Task description: @@ -91,12 +91,12 @@ Task description: - Keep authoring preview clearly separate from live run telemetry and troubleshooting. Completion criteria: -- [ ] Workflow editor can render the bounded preview mode. -- [ ] Runtime-only behaviors are excluded from preview. -- [ ] Shared and runtime-only graph components are separated in the shipped implementation. +- [x] Workflow editor can render the bounded preview mode. +- [x] Runtime-only behaviors are excluded from preview. +- [x] Shared and runtime-only graph components are separated in the shipped implementation. ### FE-WV-006 - Verify, redirect, and document the shipped capability -Status: TODO +Status: DONE Dependency: FE-WV-003 Owners: QA, Documentation author Task description: @@ -104,24 +104,37 @@ Task description: - Update release and evidence docs so workflow visualization and replay ship as a usable capability, not just a merge target. Completion criteria: -- [ ] Verification covers graph, timeline, replay, and evidence tabs. -- [ ] Step deep links and alias redirects are included in testing. -- [ ] Docs reflect the shipped run-detail and replay capability. +- [x] Verification covers graph, timeline, replay, and evidence tabs. +- [x] Step deep links and alias redirects are included in testing. +- [x] Docs reflect the shipped run-detail and replay capability. ## Execution Log | Date (UTC) | Update | Owner | | --- | --- | --- | | 2026-03-07 | Sprint created to ship workflow graphing and replay as a run-detail capability under Releases, with evidence-side entry points and a bounded authoring preview reuse model. | Project Manager | +| 2026-03-07 | Implementation resumed; shared workflow components, route wiring, and verification were moved into active delivery. | Developer | +| 2026-03-07 | Shipped the canonical `/releases/runs/:runId/{summary|graph|timeline|critical-path|replay|evidence}` workspace, bounded workflow-editor preview reuse, evidence replay handoff, and legacy `workflow-visualization/*` alias redirects into the mounted run shell. | Developer | +| 2026-03-07 | Verified the feature with targeted Angular tests (`npx ng test --watch=false --include src/tests/release-control/release-control-routes.spec.ts --include src/tests/releases/release-detail.live-refresh.spec.ts --include src/tests/evidence/replay-controls-reachability-handoff.spec.ts --include src/tests/release_orchestrator/visual-workflow-editor.behavior.spec.ts --include src/tests/workflow_visualization/run-graph-replay-page.behavior.spec.ts`) and Playwright browser scenarios (`npx playwright test tests/e2e/workflow-visualization-replay.spec.ts --workers=1`). | QA | ## Decisions & Risks - Decision: runtime workflow visualization is owned by `Releases > Runs`, not by a standalone product. - Decision: `Evidence > Verify & Replay` becomes a secondary entry point into the same replay model. +- Decision: the canonical mounted routes are `/releases/runs/:runId/{summary|graph|timeline|critical-path|replay|evidence}` and legacy `workflow-visualization/*` URLs now redirect into that route family. +- Decision: workflow editor preview reuse is graph-only and cannot trigger runtime graph or replay loading. - Risk: runtime and authoring semantics may get mixed in one component tree and confuse operators. - Mitigation: freeze a strict preview versus runtime boundary before implementation begins. - Risk: replay controls already living in evidence routes may diverge from the run-detail experience. - Mitigation: require one shared route and tab model for replay semantics. - Delivery rule: this sprint is only complete when release operators can use the mounted graph, timeline, replay, and evidence flows without depending on the dead workflow-visualization branch. - Reference design note: `docs/modules/ui/workflow-visualization-replay/README.md`. +- Docs synced: + - `docs/modules/ui/workflow-visualization-replay/README.md` + - `docs/features/checked/web/workflow-visualization-replay-ui.md` + - `docs/modules/ui/restoration-topics/workflow-visualization-and-replay.md` + - `docs/modules/ui/restoration-topics/README.md` + - `docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md` + - `docs/modules/ui/TASKS.md` + - `docs/modules/ui/implementation_plan.md` ## Next Checkpoints - 2026-03-08: confirm runtime ownership, tab model, and evidence entry-point rules. diff --git a/docs/features/checked/web/workflow-visualization-replay-ui.md b/docs/features/checked/web/workflow-visualization-replay-ui.md new file mode 100644 index 000000000..ce9ae3a99 --- /dev/null +++ b/docs/features/checked/web/workflow-visualization-replay-ui.md @@ -0,0 +1,59 @@ +# Workflow Visualization Replay UI + +## Module +Web + +## Status +VERIFIED + +## Description +Shipped the canonical `Releases > Runs` graph and replay workspace with stable summary, graph, timeline, critical-path, replay, and evidence tabs. Operators can drill into failed steps, deep-link a step drawer with `step=`, move into `Evidence > Verify & Replay`, and return to the same run context without depending on the dead `workflow-visualization` branch. + +## Implementation Details +- **Feature directory**: `src/Web/StellaOps.Web/src/app/features/workflow-visualization/` +- **Primary components**: + - `run-graph-replay-page` (`src/Web/StellaOps.Web/src/app/features/workflow-visualization/run-graph-replay-page.component.ts`) + - `workflow-visualizer` (`src/Web/StellaOps.Web/src/app/features/workflow-visualization/components/workflow-visualizer/workflow-visualizer.component.ts`) + - `time-travel-controls` (`src/Web/StellaOps.Web/src/app/features/workflow-visualization/components/time-travel-controls/time-travel-controls.component.ts`) + - `step-detail-panel` (`src/Web/StellaOps.Web/src/app/features/workflow-visualization/components/step-detail-panel/step-detail-panel.component.ts`) +- **Canonical routes**: + - `/releases/runs/:runId/summary` + - `/releases/runs/:runId/graph` + - `/releases/runs/:runId/timeline` + - `/releases/runs/:runId/critical-path` + - `/releases/runs/:runId/replay` + - `/releases/runs/:runId/evidence` +- **Legacy aliases**: + - `/workflow-visualization/:runId` + - `/workflow-visualization/:runId/:tab` +- **Query state**: + - `step=` + - `returnTo=` +- **Secondary entry points**: + - `Releases > Activity` + - release detail replay actions + - `Evidence > Verify & Replay` + - workflow editor `Preview DAG` mode + +## E2E Test Plan +- **Setup**: + - [ ] Log in with a user that can access `Releases`, `Evidence`, and workflow administration. + - [ ] Navigate to `/releases/runs//graph`. + - [ ] Ensure run detail, timeline, replay, and workflow graph fixtures or seeded data exist. +- **Core verification**: + - [ ] Verify `Summary`, `Graph`, `Timeline`, `Critical Path`, `Replay`, and `Evidence` tabs render in one mounted run shell. + - [ ] Verify graph and timeline step selection open the step drawer and preserve `step=` in the URL. + - [ ] Verify replay and evidence actions preserve run context and hand off correctly to `Evidence > Verify & Replay`. +- **Legacy verification**: + - [ ] Verify `workflow-visualization/*` aliases redirect into `/releases/runs/:runId/*`. + - [ ] Verify authoring preview renders the graph-only workflow editor mode without runtime replay loading. + - [ ] Verify redirect and deep-link behavior tolerate additional context query params. + +## Verification +- Run: + - `npx ng test --watch=false --include src/tests/release-control/release-control-routes.spec.ts --include src/tests/releases/release-detail.live-refresh.spec.ts --include src/tests/evidence/replay-controls-reachability-handoff.spec.ts --include src/tests/release_orchestrator/visual-workflow-editor.behavior.spec.ts --include src/tests/workflow_visualization/run-graph-replay-page.behavior.spec.ts` + - `npx playwright test tests/e2e/workflow-visualization-replay.spec.ts --workers=1` +- Tier 0 (source): pass +- Tier 1 (build/tests): pass +- Tier 2 (behavior): pass +- Verified on (UTC): 2026-03-07T21:24:11.4848681Z diff --git a/docs/modules/ui/TASKS.md b/docs/modules/ui/TASKS.md index f476a4047..6ddf76b59 100644 --- a/docs/modules/ui/TASKS.md +++ b/docs/modules/ui/TASKS.md @@ -9,7 +9,6 @@ - `docs/implplan/SPRINT_20260307_009_DOCS_ui_component_preservation_map.md` - `docs/implplan/SPRINT_20260307_022_FE_policy_vex_release_decisioning_studio.md` - `docs/implplan/SPRINT_20260307_023_DOCS_ui_restoration_topic_shapes.md` -- `docs/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md` - `docs/implplan/SPRINT_20260307_029_FE_contextual_actions_and_stray_surfaces.md` ## Delivery Tasks @@ -92,12 +91,12 @@ - [DONE] FE-TX-004 Audit bundles page and create-flow slice - [DONE] FE-TX-005 Supporting component merge matrix for Triage explainability - [DONE] FE-TX-006 QA, rollout, and docs sync for Triage explainability -- [TODO] FE-WV-001 Freeze run-detail tab and route contract for workflow visualization -- [TODO] FE-WV-002 Graph, timeline, and critical-path slice -- [TODO] FE-WV-003 Replay and evidence integration slice -- [TODO] FE-WV-004 Step-detail drawer and deep-link behavior -- [TODO] FE-WV-005 Workflow-editor preview reuse boundary -- [TODO] FE-WV-006 QA, rollout, alias migration, and docs sync for workflow visualization +- [DONE] FE-WV-001 Freeze run-detail tab and route contract for workflow visualization +- [DONE] FE-WV-002 Graph, timeline, and critical-path slice +- [DONE] FE-WV-003 Replay and evidence integration slice +- [DONE] FE-WV-004 Step-detail drawer and deep-link behavior +- [DONE] FE-WV-005 Workflow-editor preview reuse boundary +- [DONE] FE-WV-006 QA, rollout, alias migration, and docs sync for workflow visualization - [TODO] FE-CA-001 Freeze contextual placement decision matrix and route-state contract - [TODO] FE-CA-002 Shared contextual drawer host - [TODO] FE-CA-003 Split list-detail and right-rail primitives diff --git a/docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md b/docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md index 5e9a4c277..91796834b 100644 --- a/docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md +++ b/docs/modules/ui/component-preservation-map/RESTORATION_PRIORITIES.md @@ -93,7 +93,8 @@ The order is by confidence that the capability should exist in the final Stella - `/releases/runs`, `/evidence`, and release-context views - Notes: - Detailed UX dossier: `docs/modules/ui/workflow-visualization-replay/README.md` - - Implementation sprint: `docs/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md` + - Implementation sprint: `docs-archived/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md` + - Shipped verification note: `docs/features/checked/web/workflow-visualization-replay-ui.md` ## Tier 2 - Surface Existing Capability Instead Of Rebuilding diff --git a/docs/modules/ui/implementation_plan.md b/docs/modules/ui/implementation_plan.md index 497615ec1..0bc5b3b86 100644 --- a/docs/modules/ui/implementation_plan.md +++ b/docs/modules/ui/implementation_plan.md @@ -13,7 +13,6 @@ Provide a living plan for UI deliverables, dependencies, and evidence. - `SPRINT_20260307_009_DOCS_ui_component_preservation_map.md` - per-component preservation dossiers for unused and weakly surfaced console UI components. - `SPRINT_20260307_022_FE_policy_vex_release_decisioning_studio.md` - canonical Decisioning Studio shell to unify policy, simulation, VEX decisioning, and release-context gate explanation. - `SPRINT_20260307_023_DOCS_ui_restoration_topic_shapes.md` - documentation prerequisite for shell/menu/tab placements; not a product-delivery sprint by itself. -- `SPRINT_20260307_028_FE_workflow_visualization_replay.md` - ship run-detail graph, timeline, replay, and evidence tabs plus bounded workflow-editor preview reuse. - `SPRINT_20260307_029_FE_contextual_actions_and_stray_surfaces.md` - ship the shared tabs, drawers, right rails, split views, and contextual detail primitives adopted by the restoration features. ## Latest evidence @@ -27,6 +26,7 @@ Provide a living plan for UI deliverables, dependencies, and evidence. - `docs/features/checked/web/identity-watchlist-management-ui.md` - shipped verification note for the Trust & Signing watchlist shell and its Mission Control / Notifications handoffs. - `docs/features/checked/web/operations-consolidation-ui.md` - shipped verification note for the canonical Operations shell, overview grouping, and legacy alias cutover. - `docs/features/checked/web/triage-explainability-workspace-ui.md` - shipped verification note for the canonical triage artifact workspace, explainability rail, audit bundles, and security alias cutover. +- `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/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/triage-explainability-workspace/README.md` - detailed artifact workspace and audit-bundle UX dossier. diff --git a/docs/modules/ui/restoration-topics/README.md b/docs/modules/ui/restoration-topics/README.md index bf7b56240..649b1c8fd 100644 --- a/docs/modules/ui/restoration-topics/README.md +++ b/docs/modules/ui/restoration-topics/README.md @@ -31,7 +31,7 @@ It answers four questions for each topic: - `docs/implplan/SPRINT_20260307_025_FE_reachability_witnessing_merge.md` - `docs/implplan/SPRINT_20260307_026_FE_platform_ops_consolidation.md` - `docs/implplan/SPRINT_20260307_027_FE_triage_explainability_workspace.md` -- `docs/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md` +- `docs-archived/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md` - shipped workflow visualization and replay restoration - `docs/implplan/SPRINT_20260307_029_FE_contextual_actions_and_stray_surfaces.md` ## Placement Matrix diff --git a/docs/modules/ui/restoration-topics/workflow-visualization-and-replay.md b/docs/modules/ui/restoration-topics/workflow-visualization-and-replay.md index 38aaf365d..3b5e40904 100644 --- a/docs/modules/ui/restoration-topics/workflow-visualization-and-replay.md +++ b/docs/modules/ui/restoration-topics/workflow-visualization-and-replay.md @@ -96,7 +96,8 @@ The graph/timeline/critical-path experiences should be facets of the same run de ## Detailed UX And Sprint - Detailed UX dossier: `../workflow-visualization-replay/README.md` -- Implementation sprint: `../../../implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md` +- Implementation sprint: `../../../docs-archived/implplan/SPRINT_20260307_028_FE_workflow_visualization_replay.md` +- Shipped verification note: `../../../features/checked/web/workflow-visualization-replay-ui.md` ## Corroborating Inputs diff --git a/docs/modules/ui/workflow-visualization-replay/README.md b/docs/modules/ui/workflow-visualization-replay/README.md index 7791d29c1..76197d570 100644 --- a/docs/modules/ui/workflow-visualization-replay/README.md +++ b/docs/modules/ui/workflow-visualization-replay/README.md @@ -10,6 +10,15 @@ Restore workflow graphing, time-travel, and replay as a run-detail capability un This capability should help operators understand what happened in a release run, why a run failed or slowed, and how evidence or replay confirms the outcome. +## Shipped Outcome + +- The canonical runtime workspace now ships under `/releases/runs/:runId/{summary|graph|timeline|critical-path|replay|evidence}`. +- `Releases > Activity` and release detail flows deep-link into the mounted run workspace instead of the dead prototype route family. +- `Evidence > Verify & Replay` can open the same run context, and replay controls can return operators into the canonical run workspace. +- Legacy `workflow-visualization/:runId/*` URLs now redirect into the canonical run workspace. +- Workflow editor preview reuse is bounded to graph preview mode and does not load runtime replay semantics. +- Verification evidence is captured in `docs/features/checked/web/workflow-visualization-replay-ui.md`. + ## Why This Is The Right Shape - The abandoned visualizer models runtime concepts such as graph state, auto-refresh, step detail, critical path, and time travel. diff --git a/src/Web/StellaOps.Web/src/app/features/evidence-export/replay-controls.component.ts b/src/Web/StellaOps.Web/src/app/features/evidence-export/replay-controls.component.ts index 658ce62c9..ce98fe414 100644 --- a/src/Web/StellaOps.Web/src/app/features/evidence-export/replay-controls.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/evidence-export/replay-controls.component.ts @@ -34,6 +34,13 @@ import { / {{ runId() || 'run-unset' }}

+ @if (runId()) { + + } } @@ -281,6 +288,10 @@ import { font-size: 0.875rem; } + .replay-runtime-link { + margin-top: 0.75rem; + } + section { margin-bottom: 2.5rem; } @@ -843,6 +854,19 @@ export class ReplayControlsComponent { }); } + openRunReplayWorkspace(): void { + if (!this.runId()) { + return; + } + + void this.router.navigate(['/releases/runs', this.runId(), 'replay'], { + queryParams: { + releaseId: this.releaseId(), + returnTo: this.buildReplayReturnTo(), + }, + }); + } + requestReplay(): void { const newRequest: ReplayRequest = { id: `rr-${Date.now()}`, diff --git a/src/Web/StellaOps.Web/src/app/features/release-orchestrator/releases/release-detail/release-detail.component.ts b/src/Web/StellaOps.Web/src/app/features/release-orchestrator/releases/release-detail/release-detail.component.ts index 87aa7519e..ecd331c1c 100644 --- a/src/Web/StellaOps.Web/src/app/features/release-orchestrator/releases/release-detail/release-detail.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/release-orchestrator/releases/release-detail/release-detail.component.ts @@ -645,14 +645,22 @@ export class ReleaseDetailComponent { void this.router.navigate(['/security/reachability/witnesses'], { queryParams }); } - replayRun(): void { void this.router.navigate(['/evidence/verify-replay'], { queryParams: { releaseId: this.releaseContextId(), runId: this.releaseId() } }); } + replayRun(): void { + void this.router.navigate(['/releases/runs', this.releaseId(), 'replay'], { + queryParams: { releaseId: this.releaseContextId() }, + }); + } exportRunEvidence(): void { void this.router.navigate(['/evidence/capsules'], { queryParams: { releaseId: this.releaseContextId(), runId: this.releaseId() } }); } openAgentLogs(target: string): void { void this.router.navigate(['/ops/operations/jobs-queues'], { queryParams: { releaseId: this.releaseContextId(), target } }); } openTopology(target: string): void { void this.router.navigate(['/setup/topology/targets'], { queryParams: { releaseId: this.releaseContextId(), target } }); } openGlobalFindings(): void { void this.router.navigate(['/security/triage'], { queryParams: { releaseId: this.releaseContextId() } }); } exportSecurityEvidence(): void { void this.router.navigate(['/evidence/capsules'], { queryParams: { releaseId: this.releaseContextId(), scope: 'security' } }); } openProofChain(): void { void this.router.navigate(['/evidence/proofs'], { queryParams: { releaseId: this.releaseContextId() } }); } - openReplay(): void { void this.router.navigate(['/evidence/verify-replay'], { queryParams: { releaseId: this.releaseContextId(), runId: this.releaseId() } }); } + openReplay(): void { + void this.router.navigate(['/releases/runs', this.releaseId(), 'replay'], { + queryParams: { releaseId: this.releaseContextId() }, + }); + } exportReleaseEvidence(): void { void this.router.navigate(['/evidence/exports'], { queryParams: { releaseId: this.releaseContextId(), scope: 'release' } }); } openUnifiedAudit(): void { void this.router.navigate(['/evidence/audit-log'], { queryParams: { releaseId: this.releaseContextId(), runId: this.releaseId() } }); } diff --git a/src/Web/StellaOps.Web/src/app/features/release-orchestrator/workflows/workflow-editor/workflow-editor.component.ts b/src/Web/StellaOps.Web/src/app/features/release-orchestrator/workflows/workflow-editor/workflow-editor.component.ts index a3c4d4b93..4b70adc0d 100644 --- a/src/Web/StellaOps.Web/src/app/features/release-orchestrator/workflows/workflow-editor/workflow-editor.component.ts +++ b/src/Web/StellaOps.Web/src/app/features/release-orchestrator/workflows/workflow-editor/workflow-editor.component.ts @@ -25,6 +25,8 @@ import { type WorkflowStepType, type StepTypeDefinition, } from '../../../../core/api/workflow.models'; +import { WorkflowVisualizerComponent } from '../../../workflow-visualization/components/workflow-visualizer/workflow-visualizer.component'; +import type { WorkflowGraph } from '../../../workflow-visualization/services/workflow-visualization.service'; interface CanvasState { offsetX: number; @@ -50,7 +52,7 @@ interface ConnectionState { @Component({ selector: 'app-workflow-editor', - imports: [RouterLink, FormsModule], + imports: [RouterLink, FormsModule, WorkflowVisualizerComponent], template: `
@@ -106,6 +108,32 @@ interface ConnectionState {
} + @if (previewMode()) { +
+
+
+

Preview Graph

+

Read-only graph preview that reuses the runtime visualizer without replay or live telemetry controls.

+
+ +
+ + @if (previewGraph(); as graph) { + + } @else { +
Preparing graph preview...
+ } +
+ } +