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.
The proposal

Pick a few parameters. Send only those.

Picker
steps → parameters
→
Cards
in the simple form
→
Invocation
records exposed keys
→
Rerun
re-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?
Spike 1 · tree picker

A parameter tree that reads like the tool form

Add step parameters modal listing Step 2: echo with checkboxes for Threshold, Mode, Verbose flag, Run label and repeat Column names, each showing what the workflow sets it to; Column and Filter type are greyed out with lock icons; Add (3) buttonjmchilton/galaxy · workflow_run_exposed_step_params ↗
Spike 1 · rows

Rows show values, help and why a row is locked

Threshold row with its help popover open, reading Scores below this are droppedLocked Filter type row with a tooltip reading Changing this would change which parameters below apply. Set it in the expanded form.
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.
Spike 1 · run form

Each pick becomes a card with the tool’s own widget

Simple run form with a Step parameters (3) section holding cards for Threshold, Query 2 Column name and cond Minimum value, each showing the saved value and a remove button
Each card is a one-input tool form: validation, widget and parsing come free.
Spike 1 · rerun

Rerun brings the same parameters back

Rerun form showing two step parameter cards, Threshold 0.75 and Minimum value 3, labelled original runInvocation job parameters table with a rerun icon beside the Threshold, Mode and Verbose flag rows but not Column
Left: rerun re-shows the recorded keys, prefilled. Right: “rerun with this changed” from an invocation’s job parameters.
Spike 2 · graph picker

Same rows, picked from the graph

Pick step parameters from the workflow graph modal: a read-only graph with a table input, an echo tool node reading 2 of 7 parameters picked and a locked nested subworkflow node; the echo step's parameter list on the rightjmchilton/galaxy · …_alt_graph_picker ↗
Spike 2 · subworkflows

Locking subworkflows drops working overrides

Red alert: Subworkflow parameters will not be sent, listing key 2|1|threshold, above a Minimum value card
The server already applies inner subworkflow keys. A rerun of a run that set one silently falls back to the saved value.
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.
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.

Extra Slides

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
Links

A link can expose and preset parameters

Step parameters (1) section: an orange warning that 1|cond|pattern and 1|column can't be set and will not be sent, above a Minimum value card preset to 7
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.
Fallback

Runs without recorded keys still rerun in the legacy form

Top of the legacy workflow run form with an orange alert: This is the legacy workflow run form. The original run set tool step parameters. The simplified form does not support these, so they would be lost.
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.
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.
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.
Evidence

What the spikes test

10
API tests (tree spike)
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.