PJA_DEBRIEF

PickValueModule Post Job Actions — Debrief

What was done

Added PJA support to PickValueModule — change datatype, rename, tags, remove tags, column set. Users can configure these in the workflow editor UI and they execute during workflow invocation without a Job object.

Backend (lib/galaxy/workflow/modules.py)

Backend (lib/galaxy/job_execution/actions/post.py)

Frontend

gxformat2 (~/projects/worktrees/gxformat2/branch/pick_value)

Framework workflow tests (4 tests, all passing)

TestPJAsAssertion
pick_value_change_datatypechange_datatype: txtftype: txt
pick_value_renamerename: "picked_result"metadata.name
pick_value_add_tagadd_tags: [picktag]metadata.tags
pick_value_multi_pjachange_datatype + rename + add_tagall three

What works well

Known issues

1. Bug: PJAs applied to skipped outputs

Severity: High

In first_or_skip mode when all inputs are null, a skipped HDA (expression.json) is created and _apply_post_job_actions runs unconditionally. ChangeDatatypeAction would corrupt the skipped HDA’s datatype away from expression.json, breaking downstream skip detection.

The job-based ChangeDatatypeAction.execute() has a if job.state == SKIPPED: return guard, but execute_on_mapped_over does not.

Fix: Add skip guard at top of _apply_post_job_actions:

if self._is_null_or_skipped(output):
    return

2. _to_pja fallback key parsing

Severity: Low

When value is neither dict nor PostJobAction, action_type defaults to the full concatenated key (e.g., "ChangeDatatypeActionoutput" instead of "ChangeDatatypeAction"). Unlikely to hit — frontend always sends dicts, from_workflow_step produces PostJobAction objects.

3. ColumnSetAction.execute_on_mapped_over on HDCA

Severity: Low

Would fail on collection output (all_non_null mode) since collections lack .metadata. Low probability — column set on a collection is unusual.

Test gaps

Files changed

FileChange
lib/galaxy/workflow/modules.pyPJA round-trip + execution
lib/galaxy/job_execution/actions/post.pyexecute_on_mapped_over for ChangeDatatypeAction, ColumnSetAction
client/.../FormPickValue.vueFormSection PJA UI
client/.../FormDefault.vueWire PJA events + pass props
client/.../NodeInspector.vueForward onChangePostJobActions from FormDefault
client/.../FormPickValue.test.tsType assertion fix for Vue 2 compat
lib/galaxy_test/workflow/pick_value_*.gxwf*.yml4 framework test pairs
gxformat2/converter.pyPJA handling in transform_pick_value
gxformat2/export.pyPJA export for pick_value round-trip