Exposing Step Parameters in the Simple Run Form An issue to file, and two spikes that test it
John Chilton
The problem
Changing one threshold means the whole legacy form Everything, every time
To change a threshold, a filter value or one repeat option, users open the expanded form. It renders every step and submits every unconnected parameter.
What did I change?
The invocation keeps all of them. You can’t tell the two you meant to change from the rest.
Reruns stuck there
Four fixes make step parameters round-trip, but a rerun of such a run is forced back into the legacy form. I’ve held them back.
The API can already set any of these parameters. What’s missing is a light way to set a few .
[Sources] RERUN_ISSUE.md “Problem” and “Recording exposed parameters” (galaxy-brain vault/projects/workflow_applications/); RERUN_UX.md “Problem” (the full form records every unconnected param, so rerunHasStepParameters pins reruns to the expanded form). Fixes: galaxyproject/galaxy #24178 (subworkflow export keys), #24175, #24176 (import re-keys), #24177 (rerun prefills; forces the expanded form when an invocation has step parameters). The issue’s “hundreds of unchanged defaults” is illustrative; no parameter count or render timing was measured, so the slide doesn’t give one. No user reports are linked in the sources: “users” here is the issue’s “some users”.
The proposal
Pick a few parameters. Send only those. Pickersteps → parameters
→ Cardsin the simple form
→ Invocationrecords exposed keys
→ Rerunre-shows them
Each parameter has one key, <order_index>|<prefixed_name>, the same one the invocation request export already uses. Links, rerun and submission share it.
Everything not picked uses the workflow’s saved values.
To decide: file this as an issue? Pick parameters from a tree, or from the graph?
[Sources] RERUN_ISSUE.md “Proposal”, “Exposure key”, “Recording exposed parameters”, “Rerun”. Subworkflow keys add one index per level: <outer>|<inner>|name. order_index is 0-based, like inputs_by: “step_index”. The two questions are the branch record’s “Decision” (index.md) and the two spikes.
Spike 1 · tree picker
A parameter tree that reads like the tool form jmchilton/galaxy · workflow_run_exposed_step_params ↗ [Sources] Screenshot from Playwright test test_add_step_parameters_and_run (lib/galaxy_test/selenium/test_workflow_run_exposed_step_params.py), branch head a6e08520821, cropped. Scalar params are selectable; data params, conditional selectors and data-dependent params (Column) are locked. Repeats show existing instances only. “Reads like the tool form”: LESSONS_LEARNED.md UI lesson 1 (judged on a tool with about 10 params).
Spike 1 · rows
Rows show values, help and why a row is locked A conditional’s selector is locked: changing it would change which parameters apply. Only the current case’s children can be picked. Internal keys are never shown.
[Sources] Screenshots exposed_step_params_picker_help and exposed_step_params_picker_locked_conditional from the same Playwright test, which asserts the popover text, the tooltip text and that “1|threshold” is absent from the row. Commit a6e08520821 “Spike tree polish”. Leftover: the filter box still matches the hidden keys.
Spike 1 · run form
Each pick becomes a card with the tool’s own widget Each card is a one-input tool form: validation, widget and parsing come free.
[Sources] Screenshot exposed_step_params_cards. Card rendering through a one-input FormDisplay: LESSONS_LEARNED.md UI lesson 2. The test removes the Column name card, submits, and checks the job echoes threshold=0.9, cond.min=5 and the saved column c2, and that the invocation request records exposed_step_parameters [“1|threshold”, “1|cond|min”].
Spike 1 · rerun
Rerun brings the same parameters back Left: rerun re-shows the recorded keys, prefilled. Right: “rerun with this changed” from an invocation’s job parameters.
[Sources] Tests test_rerun_reshows_exposed_step_parameters and test_rerun_with_this_changed. Runs with step parameters but no recorded keys keep #24177’s expanded-form fallback (test_rerun_without_exposed_keys_stays_expanded). A rerun icon on every row is noisy; a hover icon or one button may read better.
Spike 2 · graph picker
Same rows, picked from the graph jmchilton/galaxy · …_alt_graph_picker ↗ [Sources] Branch head 1c4e9534043, stacked on spike 1. Screenshot from test_pick_from_graph_deselect_and_run (lib/galaxy_test/selenium/test_workflow_run_step_param_graph_picker.py). Clicking a node lists that step’s rows (same component as the tree); picking is select/deselect and Apply sets the whole set.
Spike 2 · subworkflows
Locking subworkflows drops working overrides The server already applies inner subworkflow keys. A rerun of a run that set one silently falls back to the saved value.
[Sources] Screenshot from test_link_subworkflow_key_is_dropped_with_warning (alt branch). Inner keys (parameters[“<outer>”][“<inner>|name”]) apply one and two levels deep per the spike’s API probes (RERUN_ISSUE.md G3). The raw key in the alert is a known leftover.
Comparison
The graph only helps find the step Tree picker
Filter finds a parameter across steps Subworkflow overrides re-shown and re-sent One modal, no editor changes Add-only: take select/deselect from the graph Graph picker
Find a step by its place in the graph Select/deselect in the picker No search across steps Subworkflow overrides dropped on rerun Own store scope, new editor-node prop Nodes say “2: echo” (1-based); keys say 1|threshold (0-based). Never show both.
[Sources] RERUN_ISSUE.md “Comparison” table and Spike 2 findings. Client cost per the alt branch: editor nodes gained a prop for counts; the picker needs its own workflow store scope or node clicks move the run form’s active step; the datatypes mapper must be read reactively or the picker hangs on “Loading workflow”.
Recommendation
Ship the tree, with select/deselect Cost: strict keys (G1), parameter paths (G2), recorded keys (G4). About 20–30 server lines each, no migration. Graph later as an optional view.Risk: strict keys turn silently ignored keys into 400s. The audit covered only the run/rerun test tools.Gap: column parameters stay locked in the first pass, and they’re probably what users most want to change.Ask: file the issue, then PRs in order: G1, G2 + G4 API, client.
[Sources] RERUN_ISSUE.md “Recommendation”, “API work needed” (G1 audit scope: still check dynamic options, hidden params, __job_resource, old saved states with keys from upgraded tools) and “Picking parameters” (column follow-up); LESSONS_LEARNED.md UI lesson 3 and “Suggested issue edits” 5 (“most likely user complaint”); branch record vault/repositories/galaxy/branches/active/workflow_run_exposed_step_params/index.md “Decision”. Line estimates are from the spike, not a review. Full subworkflow listing (G3) is also still to design. Neither spike will be opened as a PR.
Scope
What the first pass can and can’t expose Can pick
Text, integer, float, boolean, select and color parameters Inside sections, existing repeat instances and the active conditional case Inside subworkflows (full listing needs G3) Not yet
Conditional selectors (shown locked, with their value) Data, collection and connected inputs Column parameters: follow-up once their data input is set Adding or removing repeat instances Workflows with replacement parameters in tool steps [Sources] RERUN_ISSUE.md “Picking parameters” and G3. Workflows with replacement parameters in tool steps already have the simple form disabled (hasReplacementParameters), per LESSONS_LEARNED.md API lesson 7, so they never reach the picker. Landing requests are also out of scope for the first pass.
Links
A link can expose and preset parameters step_param=1|cond|min&step_param_value=1|cond|min=7 becomes a card set to 7. Keys that can’t be set are listed and dropped; the run isn’t blocked.
[Sources] LESSONS_LEARNED.md “F2, link” screenshot rerun_link_preset_and_dropped.png (cropped), from test_step_param_link_with_preset_and_unknown_key at a6e08520821. The full link also passed step_param=1|cond|pattern and step_param=1|column. The raw keys in the warning are a known leftover (UI lesson 1).
Fallback
Runs without recorded keys still rerun in the legacy form With #24177 alone, every rerun of a run that set step parameters opens here. With recorded keys, only runs from the expanded form or the API still do.
The alert should say the run didn’t record which parameters were chosen.
[Sources] Screenshot rerun_unrecorded_expanded.png (cropped) from test_rerun_without_exposed_keys_stays_expanded on the spike branch at a6e08520821; the alert text is #24177’s. It’s a 2-step test workflow with the echo step collapsed, so it doesn’t show how long the form gets on a real workflow. RERUN_ISSUE.md “Rerun”; LESSONS_LEARNED.md UI lesson 5 (alert wording).
Submission
Existing request shape, plus one list POST /api/workflows/{workflow_id}/invocations
{
"inputs_by": "step_index",
"parameters_normalized": true,
"parameters": {
"2": {"queries_0|column": "c3"},
"3": {"1|cond|threshold": 0.05}
},
"exposed_step_parameters":
["2|queries_0|column", "3|1|cond|threshold"]
}The field name is a placeholder. An older server ignores it, so the run works and its rerun opens the expanded form.
[Sources] RERUN_ISSUE.md “Submission” and G4. “inputs” omitted here for space. The form sends values as strings, so an API run and its UI rerun can record different JSON for the same values.
API work
Four server gaps G1 · strict keys
Unknown or inactive-case keys are silently ignored today. Return 400, including in subworkflows.
G2 · parameter paths
parameters_display has labels only. Add the path, an exposable flag and the raw value.
G3 · subworkflow listing
Run data lists only inner runtime parameters. Applying inner keys already works.
G4 · record exposed keys
Store with the request, return from /request, keep through import/export.
[Sources] RERUN_ISSUE.md “API work needed”. Spike 1 implements G1, G2 and G4; G3 listing not built. G1 audit covered only tools used by the workflow run/rerun Selenium tests.
Evidence
What the spikes test 5
Playwright E2E (tree), plus 2 for the graph
22 + 41
Existing step-parameter API and run/rerun Selenium tests still pass with G1 on
Local runs only; no CI. About 13 of the 41 submit the expanded form.
[Sources] RERUN_ISSUE.md Spike 1 “Tests” and Spike 2 “Tests”; branch record index.md Status (“no CI”). Tree spike also has client unit tests for stepParameterTree.ts: RERUN_ISSUE.md says 10, LESSONS_LEARNED.md and spike_debrief.md say 8; the graph alt has 11. Counts are what was run locally at heads a6e08520821 / 1c4e9534043.