Skip to content

ui(workspace): Add Activity dock, step run view and workflow page - #23

Open
SCcagg5 wants to merge 9 commits into
stack/22-ui18from
stack/23-ui19
Open

SCcagg5 wants to merge 9 commits into
stack/22-ui18from
stack/23-ui19

Conversation

@SCcagg5

@SCcagg5 SCcagg5 commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Part of a stack of 31 pull requests that depend on each other. They must be reviewed and merged in order: each PR builds on the previous one and its diff only contains its own changes.

All PRs of the stack
# PR
1 specs: Add spec 083 and the samples store
2 ir: Add run state fields for ephemeral runs and reused outputs
3 runtime: Bound continuous steps and carry outputs of selected steps
4 api: Add step samples, events, availability and selected-step runs
5 test(ui): add YAML fixtures for the document model tests
6 ui(lib): add shared UI kit, status helpers and right-panel shell
7 ui(canvas): add canvas engine core, toolbars and editor helpers
8 ui(i18n): add workspace message catalogs, first batch
9 ui(canvas): add canvas Flow view, step run panel and workflow panel
10 ui(editor): add YAML document model, canvas model and run source logic
11 ui(editor): Add edit session, YAML format and quick fixes, run actions, tab strip
12 ui(editor): Add canvas graph model, Add step panel, issues popover, run bar
13 ui(canvas): Add layered layout, dependency edges, status styles, reference picker
14 ui(canvas): Add export, flow builder, upstream data panel, output capture
15 ui(canvas): Add node cards, launchers, inspector sections, client issues
16 ui(editor): Add visual editor, step inspector and YAML file panel
17 ui(lists): Open runs on the workflow page; add tab and schedule helpers
18 ui(workspace): Add workspace URL state, legacy redirects and run list links
19 ui(workspace): Add workspace data layer, run facts and Workflow panel
20 ui(workspace): Add run start controls, visible runs and reuse source
21 ui(workspace): Add data provider, bar identity, continuous panel and step list
22 ui(logs): Add run actions cluster, cached logs and log popout page
23 ui(workspace): Add Activity dock, step run view and workflow page
24 test(workspace): Add integration tests for the workspace shell and step view
25 ui(pages): Retire classic run pages and open runs on the workflow page
26 test(editor): Add integration tests for the editor, inspector and run overlay
27 test(ui): Add repository-wide guard tests and ESLint boundary rules
28 e2e: Add workspace helpers and fixtures, update existing specs
29 e2e: Add workspace specs, part 1 of 2
30 e2e: Add workspace specs, part 2 of 2
31 examples: Add the workspace demo workflows

Stack 23/31. Base branch: stack/22-ui18. Review and merge in order; this PR builds on the previous one.
Size: 51 files changed, 8932 insertions(+), 2663 deletions(-).
Checked: Typecheck (tsc) of the whole UI and the unit tests of this PR (Vitest), on top of the previous PR.

Summary

This PR assembles the workflow workspace and makes it the page of a workflow. It adds the workspace shell, the workflow bar, the Activity dock (timeline, run steps, logs), the step run view and the commands and keys. The workflow page /dags/:name now renders the workspace in place of the classic tabbed page. It removes the old DAG details modal and side panels.

Why

The earlier UI PRs (5 to 22) built the canvas, the editor, the data layer and the first parts of the workspace. This PR joins them on one page, so the stack has a working end to end screen. PR 24 adds integration tests for it. PR 25 removes the remaining classic screens and rewires the links.

Changes

51 files: 8 modified, 32 new, 11 deleted.

  • Shell (new): WorkflowWorkspace.tsx, layout/WorkspaceLayout.tsx, canvas/WorkspaceCanvas.tsx, hosts/WorkspaceRunHosts.tsx (sub-run stack and root run context), executions/RunSnapshotCanvas.tsx (read-only canvas of a past run), commands/WorkflowCommands.tsx, keys/useWorkspaceKeys.ts, notices/useWorkspaceNotices.ts.
  • Bar (new): bar/WorkflowBar.tsx, bar/RunChip.tsx, bar/RunDetailsPopover.tsx.
  • Dock (new): DockContext.tsx, LogsDock.tsx, RunTimeline.tsx, RunStepsNav.tsx, StepFailure.tsx, useDockAutoOpen.ts, useDockStep.ts, and dock/tabs/ (runTabBodies.tsx, logTarget.ts).
  • Step run view (new): step/StepRunView.tsx, StepFacts, StepForeach, StepLogPane, StepManualActions, StepRunTabs, StepSubRuns, useStepRunActions.ts. Canvas hooks useDockYield.ts and useStepCommandHost.ts connect step commands to these actions.
  • Page: pages/dags/dag/index.tsx renders WorkflowWorkspace, WorkspaceLoading and LogPopoutPage, and redirects old URLs with useLegacyRedirect.
  • Timeline: TimelineChart.tsx gets a label column, a cached-time zone and ghost steps from the source run.
  • Slimmed: DAGStatus.tsx, NodeStatusTableRow.tsx, SubRunStackModal.tsx and two barrel files lose code that only the old page used.
  • Deleted: DAGDetailsContent, DAGDetailsModal, DAGDetailsPanel, DAGDetailsSidePanel, ModalLinkTab, cockpit/DAGPreviewModal and their tests.

How to review

  1. pages/dags/dag/index.tsx for what the page keeps and drops.
  2. WorkflowWorkspace.tsx and layout/WorkspaceLayout.tsx for the structure.
  3. dock/DockContext.tsx, then useDockAutoOpen.ts, then RunTimeline.tsx.
  4. step/StepRunView.tsx and useStepRunActions.ts.
  5. The deletions, to check that nothing still imports them.

Most attention: the dock open and close rules in DockContext and useDockAutoOpen, and the step actions in useStepRunActions, because they decide which run a click acts on.

Tests

This PR changes tests only by deleting the tests of the deleted components (DAGDetails*.test.tsx, DAGPreviewModal.test.tsx). Tests for the new files are in PR 24.

Screenshots

The page is reachable at /dags/:name from this PR.

Activity panel, Timeline tab

Activity panel, Log tab with cached lines

Full-screen step view

This was referenced Oct 28, 2026
@yohamta0
yohamta0 force-pushed the stack/23-ui19 branch 2 times, most recently from 56c4f4e to 7f1089c Compare October 29, 2026 13:21
@yohamta0
yohamta0 force-pushed the stack/22-ui18 branch 2 times, most recently from 14949d9 to ed94b5a Compare October 30, 2026 06:44
@yohamta0
yohamta0 force-pushed the stack/23-ui19 branch 2 times, most recently from 2e9eeaa to 6391cc8 Compare October 30, 2026 08:07
@yohamta0
yohamta0 force-pushed the stack/22-ui18 branch 2 times, most recently from 29a591b to cc6206c Compare October 31, 2026 04:50
@yohamta0
yohamta0 force-pushed the stack/23-ui19 branch 2 times, most recently from 17f31b9 to 7b0a8a1 Compare October 31, 2026 05:37
SCcagg5 and others added 9 commits October 31, 2026 19:44
…agucloud#3402)

* UI: dags/components, workflow-workspace/bar, workflow-workspace/popout
* Mark the source-match note as info
* Fix stop-all, retry link, and run log details
* Show the stop-all toast as a note
* Let the log chevron and jump work as documented
* Fix stale log stream, reschedule and run links
The workflow page now shows runs: an old ?dagRunId link and a progress
card open the run there, and its run bar stops the run. The run page
stays until a later change retires it.
A run link names the workflow by the DAG name of the run. When no
file has that name, the page reads the run and opens its source file.
An earlier PR stops a legacy sub-run link from applying the step of
the sub-run to the root run that it opens, since that step is not one
of the root's steps. The page redirect test still expected the step in
the target URL, so it failed. It now expects the root run alone.
A sub-run link opened its root run: Cmd/Ctrl-click on a sub-run, the
pop-out run link and a legacy ?subDAGRunId link lost the sub-run, and
a ?step of the sub-run was applied to the root. A run URL now names a
sub-run with ?subRun next to ?run. Once the root run has loaded, the
workspace opens that sub-run on the sub-run stack, with ?step as a step
of the sub-run, and drops the link from the URL.

A run link of a workflow whose file was deleted, or renamed while its
DAG name stayed, ended at "Workflow not found". The run now shows on
its own when it loads without a source file. A run link of a DAG named
apart from its file also opened another DAG that has the file of that
name; the page now asks the run for its file first.

The sub-run drawer is an open dialog to the workspace, so Escape pops
the drawer instead of also leaving the run snapshot or clearing the
step.

Other fixes:
- The duration of a running step reads a time cut to the second, so
  the clock snapshot stays the same within a tick.
- The run outputs stop polling when the 15 s after the end of a run
  close, with no other render needed.
- The step sub-run list keeps children that the sub-run list does not
  have yet, after the others.
- The log output placeholder of a log step is translated.
- The E2E URL checks no longer depend on query order and retry on the
  new tab.
The run summary now links to the run page only while an agent waits
for an answer. Only the case without a waiting agent had a test, so
the link could disappear without a failure. Cover the waiting case,
with the text and the address of the link.
stepParticipation now takes whether the run carries the step, since a
skipped node alone does not tell a reused step from a plain skip. The
step facts pass it from runInputProvenance.

The outputs of a running or waiting step were read before they existed,
and the request key stays the same when the step finishes, so the panel
kept "No outputs in this run". Outputs are now read once the step
settles.
A step run of an unsaved draft took its previous steps from the saved
file, so a dependency that only the draft has was left out, and Run
upstream steps could do nothing. The editor handle now gives the
definition that the server built from the buffer, and a step run reads
its steps from it.

The node view of a foreach step had no item list: View items led to
tabs without one. The Log tab of the node view now lists the items over
the raw log, and a foreach step opens on that tab.

For a workflow whose DAG name differs from its file name, the page hid
the workspace while it looked up the file of each selected run. That
remounted the editor and reset its text and undo history. A lookup now
keeps a workspace that already shows the file.

A run that no workspace can show stands on its own: a run whose file
is gone, and now a run of an older DAG name of the file. The view
follows the run while it is active, and a ?subRun link shows its
sub-run instead of the root run.

Show in all workspaces dropped only ?workspace, so the workspace
selected in the app bar could hide the workflow again. It now selects
all workspaces.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants