PR #17413 Research: Visualizing workflow runs with an invocation graph view
PR Metadata
| Field | Value |
|---|---|
| Title | Visualizing workflow runs with an invocation graph view |
| Author | Ahmed Hamid Awan (@ahmedhamidawan) |
| Created | 2024-02-01 |
| Merged | 2024-04-30 |
| State | MERGED |
| Base Branch | dev |
| Head Branch | graph_view_invocations |
| Labels | area/UI-UX, kind/feature, highlight |
| Additions | 1802 |
| Deletions | 397 |
| Commits | 39 |
Summary
This PR adds a graph view to the workflow invocation summary page. It reuses the existing workflow editor canvas in read-only mode, overlaying job state information (running, ok, error, paused, queued, skipped, etc.) onto each workflow step node. Clicking a step expands its details in a side panel, and clicking a job within a step shows full job info below the graph.
Key Motivations
- Users previously had no visual representation of workflow execution progress
- The invocation summary was purely text/tabular; now it reuses the familiar workflow editor DAG layout
- Enables at-a-glance understanding of which steps succeeded, failed, are running, etc.
Detailed Changes
New Files Created
-
client/src/components/Workflow/Invocation/Graph/InvocationGraph.vue(349 lines at PR time; now ~311 lines)- Main component rendering the invocation graph view
- Loads workflow graph via
useInvocationGraphcomposable - Polls invocation state until terminal
- [CHANGED] Originally had side-by-side layout with
FlexPanel; now shows graph with step detail card below (no FlexPanel, no side panel) - [CHANGED] Hide/show graph toggle removed (the
hide_invocation_graphselector no longer exists) - Now uses
WorkflowInvocationStepandWorkflowInvocationStepHeaderdirectly below the graph card
-
client/src/components/Workflow/Invocation/Graph/WorkflowInvocationSteps.vue(131 lines at PR time; now ~102 lines)- Lists invocation steps in a list view
- Groups input steps separately from tool/subworkflow steps
- [CHANGED] No longer used inside
InvocationGraph.vue; now used directly byWorkflowInvocationState.vueas the “Steps” tab content - Uses
useInvocationGraphcomposable withloadOntoEditor=falseto get graph steps without rendering the editor canvas - Uses
useWorkflowInstancecomposable instead of direct store access
-
client/src/components/Workflow/Editor/NodeInvocationText.vue(39 lines at PR time; now ~73 lines)- Renders job state summary text inside graph nodes
- Shows counts per state (e.g., “2 jobs successful”, “1 job failed”)
- Handles input steps and subworkflow steps differently
- [CHANGED] Now uses
InvocationStepStateDisplaycomponent for job state rendering, added color input display for color-type inputs, boolean checkbox display
-
client/src/composables/useInvocationGraph.ts(267 lines at PR time; now ~367 lines)- Core composable that creates a readonly invocation graph
- Fetches original workflow structure (at the correct version that was run)
- [CHANGED] No longer fetches step job summaries internally via
stepJobsSummaryFetcher(which no longer exists); instead receivesstepsJobsSummaryas a Ref parameter - Maps job states to visual states for each graph step
- Defines
GraphStepinterface extendingStepwith state/jobs/headerClass/headerIcon/headerIconSpin/nodeText - Defines
iconClassesmapping states to FontAwesome icons - Also exports
statePlaceholdersandgetHeaderClass(not mentioned in original PR) - Uses
fromSimpleto load graph into scoped workflow editor stores - Composable function exports:
storeId,steps,loadInvocationGraph,loading
-
client/src/components/WorkflowInvocationState/WorkflowInvocationInputOutputTabs.vue(55 lines)- Extracted from deleted
WorkflowInvocationDetails.vue - Renders Parameters, Inputs, Outputs, Output Collections as individual
<BTab>components - Used directly inside
WorkflowInvocationState.vue’s tab bar
- Extracted from deleted
Deleted Files
client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue(71 lines)- Replaced by
WorkflowInvocationInputOutputTabs.vue+ the new graph view - Previously contained a self-contained
<b-tabs>with Parameters/Inputs/Outputs/Steps tabs
- Replaced by
Renamed Files
-
WorkflowInvocationSummary.vue->WorkflowInvocationOverview.vue- Significant rework: now includes the
InvocationGraphcomponent - Added
isFullPage,isSubworkflowprops - Removed “View Report” button (report now a tab)
- Added inline progress bars and invocation messages
- Shows subworkflow link when
isSubworkflowis true
- Significant rework: now includes the
-
WorkflowInvocationSummary.test.js->WorkflowInvocationOverview.test.js- Updated to match renamed component
- Added
jobStatesSummaryto props,createTestingPinia
-
client/src/components/Workflow/constants.js->constants.ts- Converted to TypeScript with typed parameters
Significantly Modified Files
-
client/src/components/WorkflowInvocationState/WorkflowInvocationState.vue(262 additions, 128 deletions)- Rewritten from Options API to Composition API (
<script setup>) - Added full-page header with workflow name, history link, edit/run/rerun buttons
- Added tabbed interface: Overview, Steps, Inputs, Outputs, Report, Export, Metrics, Debug (originally was: Overview, Parameters/Inputs/Outputs, Report, Export)
- Report tab is lazy-loaded and disabled until invocation is successful
- Added
isFullPage,isSubworkflowprops - Polling logic preserved but rewritten with composition API refs/watchers
- Rewritten from Options API to Composition API (
-
client/src/components/WorkflowInvocationState/WorkflowInvocationState.test.ts(135 additions, 32 deletions)- Rewrote tests to mock invocation store directly (instead of computed overrides)
- Added tests for terminal/non-terminal states, Report tab disabled state
- Added assertions for fetch call counts
-
client/src/components/Workflow/Editor/Node.vue(45 additions, 5 deletions)- Added
isInvocationprop - Added
invocationStepcomputed (casts step toGraphStep) - Dynamic
headerClasscomputed (state-based colors for invocation mode) - Shows
NodeInvocationTextinside node body when in invocation mode - Hides rule divider, makes inputs/outputs “blank” (invisible labels) in invocation mode
- Shows header icon (spinner for running, check for ok, etc.)
- Added
-
client/src/components/Workflow/Editor/WorkflowGraph.vue(14 additions, 2 deletions)- Added
isInvocationprop, passes it toNode - [CHANGED] Canvas height now controlled by
fixedHeightprop (number in vh units) instead of hardcoded60vhconditional onisInvocation
- Added
-
client/src/components/Panels/FlexPanel.vue(47 additions, 18 deletions)- Converted props from Options API to TypeScript interface
- Made
minWidth,maxWidth,defaultWidthconfigurable via props (were hardcoded constants) - Added watchers to clamp panel width when min/max change
-
client/src/components/WorkflowInvocationState/WorkflowInvocationStep.vue(66 additions, 10 deletions)- Added
graphStep,expanded,showingJobId,inGraphViewprops computedExpanded: supports both local state and external control (v-model pattern)- Shows graph step header icon and state-based header class
- Auto-opens output details and job details in graph view
- Emits
show-jobevent for job selection
- Added
-
client/src/components/WorkflowInvocationState/JobStep.vue(69 additions, 4 deletions)- Added
invocationGraphandshowingJobIdprops - In graph mode: row click emits
row-clickedinstead of toggling inline details - Added eye icon column to indicate which job is being viewed
- Added hover/selected row styling
- Added
-
client/src/components/Workflow/InvocationsList.vue— [FILE REMOVED] (70 additions, 14 deletions at PR time)- This file no longer exists in the codebase
- Replaced by:
client/src/components/Panels/InvocationsPanel.vue,client/src/components/Workflow/Invocation/InvocationScrollList.vue,client/src/components/Workflow/StoredWorkflowInvocations.vue,client/src/components/Workflow/HistoryInvocations.vue
-
client/src/components/Workflow/Run/WorkflowRunSuccess.vue(17 additions, 7 deletions)- Changed links from
<a>to<router-link>to prevent page reload - Replaced
href-based history switch withsetCurrentHistorystore action - Added link to Invocations List
- Passes
full-pageprop toWorkflowInvocationState
- Changed links from
Backend Changes
-
lib/galaxy/model/__init__.py(1 addition)- Added
implicit_collection_jobs_idto invocation stepto_dict()output
- Added
-
lib/galaxy/schema/invocation.py(15 additions)- Added
implicit_collection_jobs_idfield toInvocationStepmodel - Fixed
idfield descriptions inInvocationStepJobsResponseJobModelandInvocationStepJobsResponseCollectionJobsModel(were incorrectly saying “workflow invocation” instead of “job”/“collection job”)
- Added
API / Type Changes
client/src/api/invocations.ts- AddedStepJobSummaryunion type. [CHANGED]stepJobsSummaryFetcherno longer exists in this file or anywhere in the codebase.client/src/api/schema/schema.ts- Addedimplicit_collection_jobs_idto schema, fixed ID descriptionsclient/src/api/workflows.ts- AddedStoredWorkflowDetailedtype exportclient/src/stores/workflowStore.ts- [CHANGED] NoWorkflowinterface exists in this file. The store now usesStoredWorkflowDetailedfrom@/api/workflowsdirectly. Version handling is done viagetFullWorkflowCached(workflowId, version?)anduniqueIdAndVersionKeypattern.
Minor Changes
client/src/components/Common/Heading.vue- Addedtruncateprop, icon imports, default forsize/iconclient/src/components/History/SwitchToHistoryLink.vue- Moved tooltip to<BLink>, made noninteractiveclient/src/components/Workflow/Editor/NodeInput.vue- Addedblankprop to hide label textclient/src/components/Workflow/Editor/NodeOutput.vue- Addedblankprop to hide output details/tooltipsclient/src/components/Workflow/workflows.services.ts-getWorkflowFullnow accepts optionalversionparamclient/src/style/scss/base.scss- Added.node-header-invocationstyles with state-based background colorsclient/src/utils/navigation/navigation.yml- Addedhide_invocation_graphselector [REMOVED] — this selector no longer exists;invocation_tabuses CSS selector.nav-item[title="${label}"] > a.nav-link;invocation_details_tabstill uses XPathclient/src/utils/navigation/schema.ts- Addedhide_invocation_graphto schema type [REMOVED] — no longer present in schemaclient/src/entry/analysis/router.js- Route for/workflows/invocations/:invocationIdnow passesisFullPage: true
Selenium Test
lib/galaxy_test/selenium/test_workflow_invocation_details.py- Updated to new tab structure. [CHANGED] Now usesinvocation_tab(label="Steps")andinvocation_tab(label="Inputs")directly (not “Overview + hide graph”). Added second testtest_invocation_step_jobs_with_failed_jobscovering Debug tab. Now 142 lines.
Cross-Reference: PR Paths vs Current Codebase
| PR Path | Status in Current Codebase | Notes |
|---|---|---|
client/src/api/invocations.ts | EXISTS | StepJobSummary still present; stepJobsSummaryFetcher NO LONGER EXISTS |
client/src/api/schema/schema.ts | EXISTS | Auto-generated; implicit_collection_jobs_id present |
client/src/api/workflows.ts | EXISTS | StoredWorkflowDetailed present, now also exports more types |
client/src/components/Common/Heading.vue | EXISTS | |
client/src/components/History/SwitchToHistoryLink.vue | EXISTS | |
client/src/components/Panels/FlexPanel.vue | EXISTS | |
client/src/components/Workflow/Editor/Node.vue | EXISTS | |
client/src/components/Workflow/Editor/NodeInput.vue | EXISTS | |
client/src/components/Workflow/Editor/NodeInvocationText.vue | EXISTS | Now ~73 lines (was 39). Added InvocationStepStateDisplay, color input, boolean checkbox display. |
client/src/components/Workflow/Editor/NodeOutput.vue | EXISTS | |
client/src/components/Workflow/Editor/WorkflowGraph.vue | EXISTS | |
client/src/components/Workflow/Invocation/Graph/InvocationGraph.vue | EXISTS | Significantly refactored: no longer uses FlexPanel or WorkflowInvocationSteps; step details shown in card below graph |
client/src/components/Workflow/Invocation/Graph/WorkflowInvocationSteps.vue | EXISTS | No longer used by InvocationGraph.vue; now used directly by WorkflowInvocationState.vue as “Steps” tab content |
client/src/components/Workflow/InvocationsList.vue | REMOVED | Replaced by client/src/components/Panels/InvocationsPanel.vue, client/src/components/Workflow/Invocation/InvocationScrollList.vue, client/src/components/Workflow/StoredWorkflowInvocations.vue, client/src/components/Workflow/HistoryInvocations.vue. |
client/src/components/Workflow/Run/WorkflowRunSuccess.vue | EXISTS | |
client/src/components/Workflow/constants.ts | EXISTS | isWorkflowInput still present |
client/src/components/Workflow/workflows.services.ts | EXISTS | getWorkflowFull(id, version?) signature preserved |
client/src/components/WorkflowInvocationState/JobStep.test.js | RENAMED to JobStep.test.ts | Converted from JS to TS |
client/src/components/WorkflowInvocationState/JobStep.vue | EXISTS | |
client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue | DELETED (as intended) | Was deleted in this PR, remains deleted |
client/src/components/WorkflowInvocationState/WorkflowInvocationInputOutputTabs.vue | EXISTS | |
client/src/components/WorkflowInvocationState/WorkflowInvocationOverview.test.js | EXISTS | |
client/src/components/WorkflowInvocationState/WorkflowInvocationOverview.vue | EXISTS | Still contains InvocationGraph, isFullPage, isSubworkflow. Now also uses useWorkflowInstance composable, SubworkflowAlert, WorkflowInvocationError. |
client/src/components/WorkflowInvocationState/WorkflowInvocationState.test.ts | EXISTS | |
client/src/components/WorkflowInvocationState/WorkflowInvocationState.vue | EXISTS | Composition API preserved; uses BNav pills. Tabs now: Overview, Steps, Inputs, Outputs, Report, Export, Metrics, Debug (expanded from original 4). |
client/src/components/WorkflowInvocationState/WorkflowInvocationStep.vue | EXISTS | |
client/src/composables/useInvocationGraph.ts | EXISTS | GraphStep, iconClasses, useInvocationGraph, statePlaceholders, getHeaderClass exported. Now ~367 lines. Receives stepsJobsSummary as param instead of fetching internally. |
client/src/entry/analysis/router.js | EXISTS | Invocation routes restructured; now has /workflows/invocations/:invocationId/:tab? |
client/src/stores/workflowStore.ts | EXISTS | No Workflow interface; uses StoredWorkflowDetailed from @/api/workflows. Version handling via getFullWorkflowCached(workflowId, version?) and uniqueIdAndVersionKey. |
client/src/style/scss/base.scss | EXISTS | .node-header-invocation styles still present |
client/src/utils/navigation/navigation.yml | EXISTS | hide_invocation_graph selector REMOVED in later changes; invocation selectors significantly restructured |
client/src/utils/navigation/schema.ts | EXISTS | hide_invocation_graph REMOVED from schema type |
lib/galaxy/model/__init__.py | EXISTS | implicit_collection_jobs_id still included in to_dict |
lib/galaxy/schema/invocation.py | EXISTS | implicit_collection_jobs_id field still present on InvocationStep |
lib/galaxy_test/selenium/test_workflow_invocation_details.py | EXISTS | Partially reverted: uses label="Steps" instead of label="Overview" + hide graph; test now 142 lines (was ~50 in PR). Significantly expanded since PR merge. |
Architecture & Design Decisions
1. Reuse of Workflow Editor Canvas
The invocation graph reuses the existing WorkflowGraph.vue component in readonly mode. Node components (Node.vue, NodeInput.vue, NodeOutput.vue) received isInvocation/blank props to conditionally hide editor-specific UI (labels, drag handles, tooltips) and show invocation-specific UI (state colors, job counts, state icons).
2. Scoped Workflow Stores
Each invocation graph gets its own scoped store via provideScopedWorkflowStores(storeId) where storeId = "invocation-{invocationId}". This prevents conflicts between the graph view and any open workflow editor.
3. Polling Architecture
The graph polls step_jobs_summary API every 3 seconds until the invocation reaches a terminal state. The component handles onUnmounted cleanup of poll timeouts.
4. State Derivation Logic
Job states are mapped to graph step states using priority logic:
- Single-instance states (error, running, paused): If any job is in this state, the step gets this state
- All-instance states (deleted, skipped, new, queued): All jobs must be in this state for the step to get it
- Falls back to
populated_statefrom the invocation step summary
5. Version-Aware Workflow Loading
The graph loads the specific workflow version that was run (not the latest), ensuring the graph matches the actual execution topology.
6. Component Restructuring
WorkflowInvocationState.vuewas rewritten from Options API to Composition APIWorkflowInvocationDetails.vuewas split: its tab content becameWorkflowInvocationInputOutputTabs.vue, and its steps view was replaced by the graph- “Summary” tab renamed to “Overview”
- “Report” became a top-level tab (lazy-loaded, disabled until success)
Review Discussion
@davelopez (Review Comment)
Recommended importing API models from @/api modules (e.g., @/api/invocations) instead of using components["schemas"] directly. Benefits: better readability, single point of update if backend model names change. Resolved: Author updated imports.
@ElectronicBlueberry (Review Comment + Approval)
Suggested using Record<string, boolean> for headerClass computed property instead of string concatenation. This simplifies the conditional class logic significantly. Resolved: Author adopted the suggestion (with correction from Record<string, number> to Record<string, boolean>).
@ElectronicBlueberry (Approval)
Approved the PR.
@dannon (Approval + Merge)
Approved and merged. Also contributed a commit fixing Heading component imports and default props.
@mvdbeek (Approval)
Enthusiastic approval: “This is so cool, I’ve been wanting something like this ever since I ran my first workflow on Galaxy!”
Post-Merge Evolution
Since merge, several aspects have changed:
- InvocationsList.vue was removed entirely — replaced by
client/src/components/Panels/InvocationsPanel.vue,client/src/components/Workflow/Invocation/InvocationScrollList.vue,client/src/components/Workflow/StoredWorkflowInvocations.vue,client/src/components/Workflow/HistoryInvocations.vue - Selenium navigation selectors restructured —
hide_invocation_graphremoved;invocation_tabuses CSS selector;invocation_details_tabstill uses XPath - Selenium test significantly expanded — from ~50 lines to 142 lines; tabs accessed directly (Steps, Inputs, Debug), not via “Overview + hide graph”
- WorkflowInvocationState.vue further evolved — now uses
BNavpills for full-page view instead ofBTabs; routing supports tab parameter (/workflows/invocations/:invocationId/:tab?); expanded from 4 tabs to 8 tabs (Overview, Steps, Inputs, Outputs, Report, Export, Metrics, Debug) - JobStep.test.js renamed to .ts — converted to TypeScript
- Workflow interface removed from workflowStore.ts — store now uses
StoredWorkflowDetailedfrom@/api/workflowsdirectly; version handling viagetFullWorkflowCached(workflowId, version?)anduniqueIdAndVersionKeypattern stepJobsSummaryFetcherremoved —useInvocationGraphcomposable no longer fetches job summaries internally; receivesstepsJobsSummaryas a Ref parameter from the parent component- InvocationGraph.vue significantly refactored — FlexPanel side panel layout removed; WorkflowInvocationSteps no longer used within InvocationGraph; step details now shown in a card below the graph
- WorkflowInvocationSteps.vue moved to separate tab — now used by WorkflowInvocationState.vue as the “Steps” tab content, not inside InvocationGraph
- Many new components added to
WorkflowInvocationState/directory:InvocationStepStateDisplay.vue,JobStepJobs.vue,SubworkflowAlert.vue,TabsDisabledAlert.vue,WorkflowInvocationError.vue,WorkflowInvocationFeedback.vue,WorkflowInvocationExportOptions.vue,WorkflowInvocationInputs.vue,WorkflowInvocationOutputs.vue,WorkflowInvocationMetrics.vue,WorkflowInvocationShare.vue,WorkflowInvocationStepHeader.vue,WorkflowStepIcon.vue,WorkflowStepTitle.vue useWorkflowInstancecomposable added — used byWorkflowInvocationOverview.vueandWorkflowInvocationSteps.vuefor workflow fetching (atclient/src/composables/useWorkflowInstance.ts)
Unresolved Questions / Areas Needing Attention
TheRESOLVED: NoWorkflowinterface originally inworkflowStore.tsmay have been restructured — where does the canonicalversionfield live now?Workflowinterface. Store usesStoredWorkflowDetailedfrom@/api/workflowswhich includesversion. Version-aware caching viagetFullWorkflowCached(workflowId, version?).RESOLVED: Replaced byInvocationsList.vuewas completely replacedInvocationsPanel.vue,InvocationScrollList.vue,StoredWorkflowInvocations.vue,HistoryInvocations.vue.The selenium test was partially reverted to useRESOLVED: Yes, “Steps” is now a separate top-level tab inlabel="Steps"— is the “Steps” tab now separate from the “Overview” tab again, or is this a different iteration?WorkflowInvocationState.vue’sBNavpills. The tab structure expanded from 4 to 8 tabs. Steps tab rendersWorkflowInvocationSteps.vuedirectly.- The PR contained several TODO comments in
useInvocationGraph.ts(subworkflow state derivation, layout graph, input step states) — STILL UNRESOLVED: 5 TODOs remain at lines 172, 227, 250, 323, 328. TheRESOLVED: The hide/show graph toggle feature was removed entirely. The graph is always visible on the Overview tab (for non-subworkflow invocations).hide_invocation_graphnavigation selector was removed — does the hide/show graph feature still exist in the UI, just with different test selectors?
Verification Notes
Verified 2026-02-11 against codebase at /Users/jxc755/projects/worktrees/galaxy/branch/uv_lock (branch: fix_package_tests)
File Path Verification (All paths from document)
| File Path | Exists? | Notes |
|---|---|---|
client/src/api/invocations.ts | YES | StepJobSummary export confirmed; stepJobsSummaryFetcher no longer exists |
client/src/api/schema/schema.ts | YES | |
client/src/api/workflows.ts | YES | StoredWorkflowDetailed confirmed, plus WorkflowStepTyped, AnyWorkflow, etc. |
client/src/components/Common/Heading.vue | YES | |
client/src/components/History/SwitchToHistoryLink.vue | YES | |
client/src/components/Panels/FlexPanel.vue | YES | |
client/src/components/Workflow/Editor/Node.vue | YES | isInvocation prop confirmed |
client/src/components/Workflow/Editor/NodeInput.vue | YES | blank prop confirmed |
client/src/components/Workflow/Editor/NodeInvocationText.vue | YES | Now 73 lines (was 39) |
client/src/components/Workflow/Editor/NodeOutput.vue | YES | blank prop confirmed |
client/src/components/Workflow/Editor/WorkflowGraph.vue | YES | isInvocation and fixedHeight props confirmed |
client/src/components/Workflow/Invocation/Graph/InvocationGraph.vue | YES | Now 311 lines (was 349). No FlexPanel, no WorkflowInvocationSteps import. |
client/src/components/Workflow/Invocation/Graph/WorkflowInvocationSteps.vue | YES | Now 102 lines (was 131) |
client/src/components/Workflow/InvocationsList.vue | NO | File removed |
client/src/components/Workflow/Run/WorkflowRunSuccess.vue | YES | |
client/src/components/Workflow/constants.ts | YES | isWorkflowInput confirmed |
client/src/components/Workflow/workflows.services.ts | YES | getWorkflowFull(id, version?) confirmed |
client/src/components/WorkflowInvocationState/JobStep.test.js | NO | Renamed to JobStep.test.ts |
client/src/components/WorkflowInvocationState/JobStep.test.ts | YES | |
client/src/components/WorkflowInvocationState/JobStep.vue | YES | |
client/src/components/WorkflowInvocationState/WorkflowInvocationDetails.vue | NO | Deleted as intended by PR |
client/src/components/WorkflowInvocationState/WorkflowInvocationInputOutputTabs.vue | YES | |
client/src/components/WorkflowInvocationState/WorkflowInvocationOverview.test.js | YES | |
client/src/components/WorkflowInvocationState/WorkflowInvocationOverview.vue | YES | |
client/src/components/WorkflowInvocationState/WorkflowInvocationState.test.ts | YES | |
client/src/components/WorkflowInvocationState/WorkflowInvocationState.vue | YES | |
client/src/components/WorkflowInvocationState/WorkflowInvocationStep.vue | YES | |
client/src/composables/useInvocationGraph.ts | YES | Now 367 lines (was 267) |
client/src/entry/analysis/router.js | YES | Route /workflows/invocations/:invocationId/:tab? confirmed with isFullPage: true |
client/src/stores/workflowStore.ts | YES | No Workflow interface; uses StoredWorkflowDetailed |
client/src/style/scss/base.scss | YES | .node-header-invocation at line 195 confirmed |
client/src/utils/navigation/navigation.yml | YES | hide_invocation_graph NOT present |
client/src/utils/navigation/schema.ts | YES | hide_invocation_graph NOT present |
lib/galaxy/model/__init__.py | YES | implicit_collection_jobs_id in to_dict at line 9813 |
lib/galaxy/schema/invocation.py | YES | implicit_collection_jobs_id field at line 428 |
lib/galaxy_test/selenium/test_workflow_invocation_details.py | YES | 142 lines. Uses label="Steps", label="Inputs", label="Debug" |
Component/Composable Verification
| Name | Status | Location |
|---|---|---|
useInvocationGraph | EXISTS | client/src/composables/useInvocationGraph.ts — signature changed: now takes stepsJobsSummary as Ref param |
GraphStep interface | EXISTS | client/src/composables/useInvocationGraph.ts line 26 |
iconClasses | EXISTS | client/src/composables/useInvocationGraph.ts line 51 |
statePlaceholders | EXISTS | client/src/composables/useInvocationGraph.ts line 63 (not in original PR description) |
getHeaderClass | EXISTS | client/src/composables/useInvocationGraph.ts line 361 (not in original PR description) |
provideScopedWorkflowStores | EXISTS | client/src/composables/workflowStores.ts |
fromSimple | EXISTS | client/src/components/Workflow/Editor/modules/model (imported by useInvocationGraph) |
InvocationGraph component | EXISTS | client/src/components/Workflow/Invocation/Graph/InvocationGraph.vue |
WorkflowInvocationSteps component | EXISTS | client/src/components/Workflow/Invocation/Graph/WorkflowInvocationSteps.vue |
NodeInvocationText component | EXISTS | client/src/components/Workflow/Editor/NodeInvocationText.vue |
WorkflowInvocationState component | EXISTS | client/src/components/WorkflowInvocationState/WorkflowInvocationState.vue |
WorkflowInvocationOverview component | EXISTS | client/src/components/WorkflowInvocationState/WorkflowInvocationOverview.vue |
WorkflowInvocationStep component | EXISTS | client/src/components/WorkflowInvocationState/WorkflowInvocationStep.vue |
WorkflowInvocationInputOutputTabs component | EXISTS | client/src/components/WorkflowInvocationState/WorkflowInvocationInputOutputTabs.vue |
JobStep component | EXISTS | client/src/components/WorkflowInvocationState/JobStep.vue |
stepJobsSummaryFetcher | REMOVED | No longer exists anywhere in codebase |
StepJobSummary type | EXISTS | client/src/api/invocations.ts line 16 |
useWorkflowInstance composable | EXISTS | client/src/composables/useWorkflowInstance.ts (new since PR, used by Overview and Steps) |
Store Verification
| Store | Status | Location |
|---|---|---|
workflowStore | EXISTS | client/src/stores/workflowStore.ts — no Workflow interface; uses StoredWorkflowDetailed |
invocationStore | EXISTS | client/src/stores/invocationStore.ts |
workflowEditorStateStore | EXISTS | Used via useWorkflowStateStore(storeId) in InvocationGraph.vue |
Route Verification
| Route | Status |
|---|---|
/workflows/invocations/:invocationId/:tab? | EXISTS — router.js line 802, passes isFullPage: true, tab, success |
/workflows/:storedWorkflowId/invocations | EXISTS — line 879, uses StoredWorkflowInvocations |
/histories/:historyId/invocations | EXISTS — line 420, uses HistoryInvocations |
Discrepancies Found and Corrected
stepJobsSummaryFetcher: Document stated it “still exists” inapi/invocations.ts— it does NOT. The composable now receives job summaries as a parameter.- InvocationGraph.vue layout: Document described “side-by-side layout with FlexPanel” — FlexPanel is no longer used by InvocationGraph; step details shown in card below graph.
- WorkflowInvocationSteps.vue usage: Document described it as listing steps “in the side panel” — it’s now a standalone Steps tab, not part of InvocationGraph.
- Hide/show graph toggle: Document mentioned this feature — it has been completely removed.
- Tab structure: Document listed 4 tabs (Overview, Parameters/Inputs/Outputs, Report, Export) — now 8 tabs (Overview, Steps, Inputs, Outputs, Report, Export, Metrics, Debug).
Workflowinterface in workflowStore: Document said “Addedversionfield toWorkflowinterface” — noWorkflowinterface exists; store usesStoredWorkflowDetaileddirectly.- NodeInvocationText.vue size: Document said 39 lines — now 73 lines with significant additions.
- useInvocationGraph.ts exports: Document listed 3 exports (
storeId,steps,loadInvocationGraph) — actually exports 4 (storeId,steps,loadInvocationGraph,loading). Module also exportsstatePlaceholders,getHeaderClass,iconClasses,GraphStep. - Selenium test: Document said “Steps accessed via Overview tab + hide graph” — test now accesses Steps directly via
invocation_tab(label="Steps"). - New components not in document: 14+ new files added to
WorkflowInvocationState/directory since the PR (see Post-Merge Evolution item 10).