Skip to content

Workflow log gui tab - #14246

Open
erlenlh wants to merge 4 commits into
cancel-running-workflowfrom
workflow-log-gui-tab
Open

Workflow log gui tab#14246
erlenlh wants to merge 4 commits into
cancel-running-workflowfrom
workflow-log-gui-tab

Conversation

@erlenlh

@erlenlh erlenlh commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Issue
Resolves #14091

Approach
Create new tab in run experiment view for showing workflow output. Aligned with iteration selector, with dropdown for selecting groups of workflows
Consumes workflow events

(Screenshot of new behavior in GUI if applicable)
bilde

  • PR title captures the intent of the changes, and is fitting for release notes.
  • Added appropriate release note label
  • Commit history is consistent and clean, in line with the contribution guidelines.
  • Make sure unit tests pass locally after every commit (git rebase -i main --exec 'just rapid-tests')

When applicable

  • When screenshots are changed: Review screenshot-PR in ert-testdata,
    merge screenshot-PR in ert-testdata before merging this PR.
  • When there are user facing changes: Updated documentation
  • New behavior or changes to existing untested code: Ensured that unit tests are added (See Ground Rules).
  • Large PR: Prepare changes in small commits for more convenient review
  • Bug fix: Add regression test for the bug
  • Bug fix: Add backport label to latest release (format: 'backport release-branch-name')

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds live workflow output to the experiment run dialog.

Changes:

  • Adds an iteration-grouped workflow log with stdout, stderr, and status.
  • Integrates a persistent Workflows tab into run monitoring.
  • Adds unit and GUI workflow tests.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/ert/gui/experiments/run_dialog.py Handles workflow events and tab placement.
src/ert/gui/experiments/view/__init__.py Exports the workflow widget.
src/ert/gui/experiments/view/workflow_log.py Implements the workflow log UI.
tests/ert/unit_tests/gui/experiments/test_run_dialog.py Tests run-dialog integration.
tests/ert/unit_tests/gui/experiments/view/test_workflow_log_widget.py Tests widget behavior.
tests/ert/ui_tests/gui/test_workflow_log_tab.py Tests the end-to-end GUI workflow.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/ert/gui/experiments/run_dialog.py Outdated
if isinstance(widget, WorkflowLogWidget):
return widget
workflow_log_widget = WorkflowLogWidget(self)
self._tab_widget.addTab(workflow_log_widget, "Workflows")
@ertomatic

Copy link
Copy Markdown
Collaborator

Screenshots differ from baselines. A baseline update PR has been prepared: equinor/ert-testdata#91

@codecov-commenter

codecov-commenter commented Aug 21, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.93617% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.81%. Comparing base (f80fa2e) to head (9f19b27).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/ert/gui/experiments/view/workflow_log.py 98.76% 2 Missing ⚠️
Additional details and impacted files
@@                    Coverage Diff                    @@
##           cancel-running-workflow   #14246    +/-   ##
=========================================================
  Coverage                    91.81%   91.81%            
=========================================================
  Files                          486      487     +1     
  Lines                        34908    35089   +181     
=========================================================
+ Hits                         32051    32218   +167     
- Misses                        2857     2871    +14     
Flag Coverage Δ
cli-tests 35.81% <0.00%> (-0.18%) ⬇️
fuzz 43.74% <15.95%> (-0.15%) ⬇️
gui-tests 58.49% <87.23%> (+0.19%) ⬆️
performance-and-unit-tests 81.17% <98.93%> (+0.06%) ⬆️
test 45.36% <15.95%> (-0.15%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/ert/gui/experiments/run_dialog.py 90.76% <100.00%> (+0.38%) ⬆️
src/ert/gui/experiments/view/__init__.py 100.00% <100.00%> (ø)
src/ert/gui/experiments/view/workflow_log.py 98.76% <98.76%> (ø)

... and 3 files with indirect coverage changes

@codspeed-hq

codspeed-hq Bot commented Aug 21, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 36 untouched benchmarks


Comparing workflow-log-gui-tab (d8733ab) with cancel-running-workflow (774c756)1

Open in CodSpeed

Footnotes

  1. No successful run was found on cancel-running-workflow (12fdc57) during the generation of this report, so 64077d9 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@ertomatic

Copy link
Copy Markdown
Collaborator

Screenshot tests now pass. The baseline update PR equinor/ert-testdata#91 has been closed.


self._iteration_selector = QComboBox(self)
self._iteration_selector.setObjectName("workflow_log_iteration_selector")
self._iteration_selector.currentIndexChanged.connect(self._on_iteration_changed)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need a name here?

@@ -0,0 +1,226 @@
from __future__ import annotations

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

perhaps name the file workflow_log_widget?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all the entries in this folder drop the widget suffix, so that is fine.
The question for me is whether to call it rather WorkflowLogInfoWidget -> workflow_log_info since workflow_log might not convey the exact info.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not all entries do. disk_space_widget.py, progress_widget.py ..

@frode-aarstad

Copy link
Copy Markdown
Contributor

How does the screenshot look on redhat?

@ertomatic

Copy link
Copy Markdown
Collaborator

Screenshots differ from baselines. A baseline update PR has been prepared: equinor/ert-testdata#99

Comment thread src/ert/gui/experiments/run_dialog.py Outdated
# If the current tab is the last dynamic tab,
# we want to keep it selected after adding a new tab.
last_index = self._tab_widget.count() - 1
was_on_latest_dynamic_tab = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure I understand what was_on_latest_dynamic_tab means?

@erlenlh
erlenlh force-pushed the workflow-log-gui-tab branch from d8733ab to 7f80532 Compare August 27, 2026 18:40
@ertomatic

Copy link
Copy Markdown
Collaborator

Screenshot tests now pass. The baseline update PR equinor/ert-testdata#99 has been closed.

@erlenlh
erlenlh force-pushed the workflow-log-gui-tab branch from 7f80532 to 47fbfe5 Compare August 31, 2026 11:01
@erlenlh
erlenlh force-pushed the workflow-log-gui-tab branch from 47fbfe5 to 4b1d0a8 Compare August 31, 2026 12:51
@erlenlh
erlenlh force-pushed the workflow-log-gui-tab branch from 4b1d0a8 to 952730b Compare September 1, 2026 12:11
@erlenlh
erlenlh force-pushed the workflow-log-gui-tab branch from 952730b to 9f19b27 Compare September 3, 2026 07:37
erlenlh and others added 2 commits September 3, 2026 10:20
Workflow stdout/stderr is captured and emitted as WorkflowEvent,
but so far it could only be read from the log files on disk.

WorkflowLogWidget renders those events as one row per job invocation,
filtered by an iteration selector, with the full stdout and stderr of the
selected job shown below the table.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The run dialog now consumes WorkflowEvent and lazily adds a
Workflows tab on the first event, so experiments without workflows are
unaffected. The tab is not brought to the front, to avoid interrupting a
user watching realization progress.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
erlenlh and others added 2 commits September 3, 2026 10:20
Drop five setObjectName calls in WorkflowLogWidget that nothing reads
(unlike progress_widget's, which test_legend.py looks up), and the
object_name parameter that only existed to support them.

Rename was_on_latest_dynamic_tab to follow_new_tab and fix its comment,
which claimed we "keep it selected" while the code actually selects the
newly added tab.

Document the live Workflows tab in the run dialog, which was the one
part of this feature with no user-facing docs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@erlenlh
erlenlh force-pushed the workflow-log-gui-tab branch from 9f19b27 to 58ae7fc Compare September 3, 2026 08:39
@erlenlh

erlenlh commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

How does the screenshot look on redhat?

Good check! They also look fine I think.
bilde

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.

Workflow output should be visible in GUI in some form

6 participants