Agent Skill · cast nextflow-test-to-galaxy-test-plan
Translate Nextflow test evidence into a Galaxy workflow test plan.
← All cast skills · Source mold →
Install with Claude Code
/plugin marketplace add galaxyproject/foundry
/plugin install foundry-skills@galaxy-workflow-foundry
Then invoke as:
/foundry-skills:nextflow-test-to-galaxy-test-plan
Install with Codex
codex plugin marketplace add galaxyproject/foundry
codex plugin add foundry-skills@galaxy-workflow-foundry
Then select with /skills or invoke explicitly as:
$nextflow-test-to-galaxy-test-plan
Install with Antigravity
git clone https://github.com/galaxyproject/foundry
agy plugin install foundry/casts/claude
Then select with /skills or invoke explicitly as:
/nextflow-test-to-galaxy-test-plan
Skill Bundle
/ packaged cast
- attached files
- 10
- upfront
- 2
- on demand
- 8
- cast rev
- n/a
- validated
- 0
Produces: 1 artifact.
Consumes: 1 artifact.
Artifact Contract
/ skill handoff Produces
galaxy-test-plan
Reviewable Galaxy workflow test plan (see [[galaxy-workflow-test-plan]]): profile, fixture, snapshot, ignored-file, expected-output, rationale provenance translated from nf-test evidence.
yamlgalaxy-test-plan.yml[[galaxy-workflow-test-plan]]
Raw artifact contract
{
"id": "galaxy-test-plan",
"kind": "yaml",
"default_filename": "galaxy-test-plan.yml",
"schema": "[[galaxy-workflow-test-plan]]",
"description": "Reviewable Galaxy workflow test plan (see [[galaxy-workflow-test-plan]]): profile, fixture, snapshot, ignored-file, expected-output, rationale provenance translated from nf-test evidence."
}
Consumes
summary-nextflow
Structured Nextflow summary from [[summarize-nextflow]]; carries test_candidates, test_selection, and snapshot evidence.
Raw artifact contract
{
"id": "summary-nextflow",
"description": "Structured Nextflow summary from [[summarize-nextflow]]; carries test_candidates, test_selection, and snapshot evidence.",
"inherited_schema": "[[summary-nextflow]]",
"producers": [
"summarize-nextflow"
]
}
Attached Files
/ runtime references Load upfront
Output contract: the emitted plan conforms to [[galaxy-workflow-test-plan]]. Cast bundles the JSON Schema; validate with `foundry validate-galaxy-workflow-test-plan`.
upfront runtime verbatim hypothesis deterministic 18.0 KB
- bundle
references/schemas/galaxy-workflow-test-plan.schema.json - source
package://@galaxy-foundry/gxwf-foundry#galaxyWorkflowTestPlanSchema
Preview json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://galaxyproject.org/foundry/schemas/galaxy-workflow-test-plan.schema.json",
"$comment": "Canonical source: packages/gxwf-foundry/src/schemas/galaxy-workflow-test-plan/galaxy-workflow-test-plan.schema.json in galaxyproject/foundry. Mold frontmatter cites this schema via [[galaxy-workflow-test-plan]] wiki-links; the cast pipeline imports the `galaxyWorkflowTestPlanSchema` runtime export and serializes it into cast bundles. The on-disk artifact is YAML; validate it with `foundry validate-galaxy-workflow-test-plan`.",
"title": "Galaxy Workflow Test Plan",
"description": "Intermediate, reviewable Galaxy workflow test-plan handoff produced by a *-test-to-galaxy-test-plan Mold (nextflow, cwl, freeform, or galaxy) and consumed by implement-galaxy-workflow-test. It preserves test intent, fixture provenance, assertion intent, tolerances, label assumptions, unresolved mappings, and intentional omissions before any concrete tests-format `*-tests.yml` is authored. It is NOT the final test artifact: assertion vocabulary is referenced by family name from the tests-format schema, not duplicated here.",
"type": "object",
"additionalProperties": false,
"required": [
"plan_version",
"source",
"workflow",
"test_cases",
"unresolved",
"omissions",
"warnings"
],
"properties": {
"plan_version": {
"type": "string",
"enum": [
"1"
],
"description": "Test-plan schema major version."
},
"source": {
"$ref": "#/$defs/SourceRecord"
},
"workflow": {
"$ref": "#/$defs/WorkflowRef"
},
"test_cases": {
"type": "array",
"description": "One entry per planned Galaxy workflow test (each becomes one tests-format test entry downstream).",
"items": {
"$ref": "#/$defs/TestCase"
}
},
"unresolved": {
"type": "array",
"description": "Mappings the plan could not resolve and that implement-galaxy-workflow-test (or a reviewer) must settle before authoring the final test file.",
"items": {
"$ref": "#/$defs/UnresolvedItem"
}
},
"omissions": {
"type": "array",
"description": "Outputs or behaviors deliberately left unasserted, with rationale, so the gap is a recorded decision rather than an oversight.",
"items": {
"$ref":
...
schema
summary-nextflow
packaged Read summarized nf-test profiles, snapshot fixtures, selected test data, params, and expected outputs.
upfront runtime verbatim corpus-observed deterministic 69.9 KB
- bundle
references/schemas/summary-nextflow.schema.json - source
package://@galaxy-foundry/summarize-nextflow#summaryNextflowSchema
Preview json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://galaxyproject.org/foundry/schemas/summary-nextflow.schema.json",
"$comment": "Canonical source: packages/summarize-nextflow/src/schema/summary-nextflow.schema.json in galaxyproject/foundry. Mold frontmatter cites this schema via [[summary-nextflow]] wiki-links; the cast pipeline imports the `summaryNextflowSchema` runtime export and serializes it into cast bundles.",
"title": "Nextflow Pipeline Summary",
"description": "Structured per-source summary emitted by the summarize-nextflow Mold.\n\nPer-source schema by design — paper, Nextflow, and CWL each have their own summary shape; downstream Molds (data flow, templates, tool wrappers) consume any source's summary and handle the polymorphism.\n\nField names mirror gxy-sketches' SketchSource / ToolSpec / TestDataRef / ExpectedOutputRef where parity exists; see content/research/gxy-sketches-alignment/index.md.",
"$ref": "#/$defs/Summary",
"$defs": {
"Summary": {
"title": "Summary",
"description": "Top-level shape. Every Nextflow summary is exactly this object.",
"type": "object",
"additionalProperties": false,
"required": [
"source",
"params",
"sample_sheets",
"profiles",
"tools",
"processes",
"subworkflows",
"workflow",
"reference_assets",
"reference_rebuilds",
"test_candidates",
"test_selection"
],
"properties": {
"source": {
"$ref": "#/$defs/SourceRecord"
},
"params": {
"type": "array",
"items": {
"$ref": "#/$defs/Param"
}
},
"sample_sheets": {
"type": "array",
"items": {
"$ref": "#/$defs/SampleSheet"
},
"description": "Structured sample-sheet inputs. Each entry binds one `params[]` parameter to a row schema (column names, types, path-vs-meta classification, required flags, enums, patterns). Promoted from prose inside `params[].description` so downstream target translations (Galaxy `sample_sheet*` collections, CWL records-of-arrays) can choose collection variants without re-parsing the source pipeline. Empty array when no sample-sheet idiom is detected. Discovery sources: nf-schema `schema:` references, `samplesheetToList()` calls, and `splitCs
...
Load on demand
Interpret nf-test profiles, snapshot assertions, and Nextflow fixture conventions before translating them.
Trigger: When converting test_candidates, snapshot fixtures, test profiles, or source test-data references into a Galaxy workflow test plan.
on-demand runtime verbatim hypothesis deterministic 5.6 KB
- bundle
references/notes/component-nextflow-testing.md - source
content/research/component-nextflow-testing/index.md
Preview md
---
type: research
tags:
- source/nextflow
component: "Nextflow Testing and Test Fixtures"
status: draft
created: 2026-05-01
revised: 2026-09-15
revision: 5
summary: "nf-test patterns mapped to Galaxy planemo asserts and CWL test equivalents — backs the nextflow test-plan Molds and summarize-nextflow §7."
companions:
- "component-nextflow-testing.yml"
sources:
- "https://www.nf-test.com/"
- "https://www.nf-test.com/docs/assertions/"
- "https://www.nf-test.com/docs/assertions/snapshots/"
- "https://www.nf-test.com/docs/configuration/"
- "https://nf-co.re/docs/contributing/nf-test/assertions"
- "https://nf-co.re/docs/developing/testing/overview"
- "https://github.com/nf-core/test-datasets"
- "https://www.nextflow.io/docs/latest/config.html#config-profiles"
- "https://nf-co.re/docs/contributing/pipelines#test-data"
related_molds:
- "[[summarize-nextflow]]"
- "[[nextflow-test-to-galaxy-test-plan]]"
- "[[nextflow-test-to-cwl-test-plan]]"
- "[[implement-galaxy-workflow-test]]"
related_notes:
- "[[nextflow-test-case-selection]]"
- "[[planemo-asserts-idioms]]"
- "[[tests-format]]"
- "[[iwc-test-data-conventions]]"
- "[[component-nf-core-tools]]"
---
# Nextflow Testing and Test Fixtures
Operational grounding for three Molds:
- [[summarize-nextflow]] §7 — enumerate whole-pipeline `test_candidates[]` and make the default `test_selection` from a real nf-core or DSL2 pipeline.
- [[nextflow-test-to-galaxy-test-plan]] — translate nf-test fixtures + assertions into Galaxy equivalents.
- [[nextflow-test-to-cwl-test-plan]] — the same translation, toward CWL.
The summarize side is mostly *enumeration*: walk `tests/*.nf.test`, extract structured fields per the Mold §7 spec. The translation side is *mapping*: each nf-test assertion pattern has a (
...
Interpret nf-test profiles, snapshot assertions, and Nextflow fixture conventions before translating them.
Trigger: When converting test_candidates, snapshot fixtures, test profiles, or source test-data references into a Galaxy workflow test plan.
on-demand runtime verbatim hypothesis deterministic 11.6 KB
- bundle
references/notes/component-nextflow-testing.yml - source
content/research/component-nextflow-testing/component-nextflow-testing.yml
Preview yml
# nf-test patterns → Galaxy / CWL test equivalents.
# Companion to component-nextflow-testing.md.
#
# Rows ordered by frequency in real nf-core pipelines (snapshot block first).
mappings:
# ---- Snapshot block (nf-core canonical idiom) ----
- id: snapshot.match
nf_test_pattern: "assert snapshot(...).match()"
description: "Top-level snapshot assertion comparing serialized form of N captured values to a stored .nf.test.snap file."
galaxy_equivalent: "Per-output assertion block in <workflow>-tests.yml; no single-line analog. Decompose into per-capture assertions (rows below)."
cwl_equivalent: "cwltest expected_outputs entries per output; no single-line analog. Decompose."
target_link: "[[tests-format]]"
notes: "The whole-snapshot idiom is lossy on translation; explode into N per-capture assertions and accept the surface-area increase."
- id: snapshot.succeeded_task_count
nf_test_pattern: "workflow.trace.succeeded().size()"
description: "Count of successfully completed tasks. nf-core canonical first capture; brittle across pipeline versions but stable per release."
galaxy_equivalent: "Implicit in workflow execution success. Galaxy workflow tests pass iff the workflow completes; per-step success surfaces via has_text on log outputs."
cwl_equivalent: "Implicit in cwltest's `should_succeed` / `should_fail` boolean. No per-task count."
target_link: "[[planemo-asserts-idioms]] §1 (Plain text reports / logs)"
notes: "Drop on translation; targets verify success implicitly."
- id: snapshot.versions_yml
nf_test_pattern: "ch_versions or path('versions.yml')"
description: "The `versions` topic channel collected per process and dumped to versions.yml at workflow end. nf-core canonical second capture."
galaxy_equiv
...
Distinguish accepted IWC-style test shortcuts from assertion smells while translating tests.
Trigger: When deciding whether to use existence-only, size-only, image-dimension, or tolerant output checks.
on-demand runtime verbatim corpus-observed deterministic 5.9 KB
- bundle
references/notes/iwc-shortcuts-anti-patterns.md - source
content/research/iwc-shortcuts-anti-patterns/index.md
Preview md
---
type: research
tags:
- target/galaxy
status: draft
created: 2026-04-30
revised: 2026-09-23
revision: 3
related_notes:
- "[[galaxy-workflow-testability-design]]"
- "[[iwc-test-data-conventions]]"
- "[[planemo-asserts-idioms]]"
- "[[implement-galaxy-workflow-test]]"
- "[[tests-format]]"
- "[[iwc-conditionals-survey]]"
- "[[iwc-map-over-lifecycle-survey]]"
- "[[iwc-tabular-operations-survey]]"
- "[[iwc-transformations-survey]]"
summary: "Judgments for when weak Galaxy workflow-test assertions are useful smoke checks and when they conceal untested results."
---
# IWC test-suite shortcuts and anti-patterns
A workflow test should fail when a meaningful result is wrong. Start by naming that failure, then choose an assertion that would catch it. A size, shape, or existence check can establish that an output was produced, but it cannot establish that the analysis is correct. Keep such a **smoke check** when the result is genuinely variable or opaque, and add a stable content check or workflow checkpoint whenever one is available. Using a weak check merely because another IWC test uses it is an anti-pattern.
These authoring judgments guide [[implement-galaxy-workflow-test]]. [[planemo-asserts-idioms]] covers assertion forms, [[iwc-test-data-conventions]] covers fixtures, and [[galaxy-workflow-testability-design]] covers which intermediate results to expose as workflow outputs.
## Choose by the failure the test must catch
| Output | Useful check | Anti-pattern |
| --- | --- | --- |
| Small, byte-stable text or data | Compare with an expected `file:`. A `checksum:` can cover a large byte-stable output. | Replacing an exact comparison with size alone when exact content is stable. |
| Variable JSON or HDF5 | Assert a stable property, group, key, or count
...
Emit Galaxy/IWC-style job input fixtures, remote locations, hashes, and collection input shapes.
Trigger: When writing job inputs or deciding whether fixtures belong in test-data, Zenodo, ENA/SRA, or CVMFS.
on-demand runtime verbatim corpus-observed deterministic 11.6 KB
- bundle
references/notes/iwc-test-data-conventions.md - source
content/research/iwc-test-data-conventions/index.md
Preview md
---
type: research
tags:
- target/galaxy
status: draft
created: 2026-04-30
revised: 2026-09-23
revision: 4
related_notes:
- "[[galaxy-workflow-testability-design]]"
- "[[iwc-shortcuts-anti-patterns]]"
- "[[planemo-asserts-idioms]]"
- "[[implement-galaxy-workflow-test]]"
- "[[tests-format]]"
- "[[iwc-tabular-operations-survey]]"
summary: "IWC and Planemo workflow-test fixture shapes, file provenance, collection identifiers, input hashes, and built-in index values."
---
# IWC test data conventions
An IWC workflow test pairs each workflow with a sibling `<workflow>-tests.yml`. Each YAML test case supplies `job:` inputs under the workflow's input labels and `outputs:` assertions under its output labels. The optional `test-data/` directory holds local fixtures. These are the [IWC contribution layout](https://github.com/galaxyproject/iwc/blob/main/workflows/README.md) and [Planemo test-format](https://planemo.readthedocs.io/en/latest/test_format.html) contracts. For decisions about the workflow interface before writing fixtures, see [[galaxy-workflow-testability-design]]. For the exact supported YAML vocabulary and static validation, see [[tests-format]].
Examples below come from the cited IWC files or Planemo documentation. Corpus observations describe the workflows sampled for this note, not a rule that every IWC workflow follows.
## Fixture locations and provenance
A `class: File` input can use `path:` for a local fixture or `location:` for a URI. Planemo resolves a relative `path:` from the workflow and test directory. IWC's contribution guide recommends small inputs and suggests publishing a toy dataset to Zenodo for a permanent URL. The repository also permits an optional local `test-data/` directory. It gives no universal size cutoff or mandatory hos
...
Translate nf-test snapshot captures, helper-pruned file lists, and snapshot checksums into Galaxy workflow-test assertion intent.
Trigger: When converting nf-test snapshot fixtures, .snap sidecars, ignore files, ignore globs, or pipeline-level stable path/name captures.
on-demand runtime verbatim corpus-observed deterministic 14.3 KB
- bundle
references/notes/nextflow-snapshot-to-galaxy-assertions.md - source
content/research/nextflow-snapshot-to-galaxy-assertions/index.md
Preview md
---
type: research
title: "Nextflow nf-test snapshots to Galaxy/Planemo assertions"
tags:
- source/nextflow
- target/galaxy
status: draft
created: 2026-05-05
revised: 2026-05-05
revision: 2
related_notes:
- "[[tests-format]]"
- "[[summary-nextflow]]"
- "[[planemo-asserts-idioms]]"
- "[[iwc-test-data-conventions]]"
- "[[iwc-shortcuts-anti-patterns]]"
- "[[component-nextflow-testing]]"
related_molds:
- "[[nextflow-test-to-galaxy-test-plan]]"
- "[[implement-galaxy-workflow-test]]"
sources:
- "https://github.com/galaxyproject/foundry/issues/65"
- "https://github.com/galaxyproject/foundry/issues/142"
summary: "Translates nf-test snapshot assertions into Galaxy workflow test-format assertions, broken out by module-level vs pipeline-level test shape."
---
# Nextflow nf-test snapshots to Galaxy/Planemo assertions
Translation guide for the nf-test → Galaxy direction. Companion to [[tests-format]] (assertion vocabulary), [[planemo-asserts-idioms]] (output-type → assertion-family decision table), and [[summary-nextflow]] (source-side schema). This note maps the *snapshot* shape specifically; per-output assertion picking (size delta, image dimensions, etc.) defers to [[planemo-asserts-idioms]].
The corpus split is load-bearing: in the pinned `workflow-fixtures/pipelines/` fixture set, module-level, subworkflow-level, and pipeline-level `*.nf.test` files snapshot different things. Do not depend on exact counts from one fixture checkout; use the split as a shape distinction and re-sample the current fixture set when making inventory claims.
## 0. The framework primitive
nf-test's only assertion mechanism for content is `assert snapshot(<expr>).match()`. The framework serializes `<expr>` to JSON and writes it to a sibling `<name>.nf.test.snap` on first run
...
Preserve the upstream candidate-selection rationale and distinguish primary coverage from bootstrap-only or reference-scale cases.
Trigger: When the selected case is minimal, tiny, full-scale, stub-only, or accompanied by deferred whole-pipeline candidates.
on-demand runtime verbatim corpus-observed deterministic 9.1 KB
- bundle
references/notes/nextflow-test-case-selection.md - source
content/research/nextflow-test-case-selection/index.md
Preview md
---
type: research
title: "Selecting the first Nextflow test case"
tags:
- source/nextflow
status: draft
created: 2026-09-15
revised: 2026-09-15
revision: 2
summary: "A deterministic policy for choosing the first whole-pipeline Nextflow test case without mistaking profile names for coverage."
sources:
- "https://github.com/galaxyproject/foundry/issues/67"
- "https://www.nf-test.com/docs/configuration/"
- "https://www.nf-test.com/docs/cli/list/"
- "https://www.nextflow.io/docs/latest/config.html#config-profiles"
related_molds:
- "[[summarize-nextflow]]"
- "[[nextflow-test-to-galaxy-test-plan]]"
- "[[nextflow-test-to-cwl-test-plan]]"
related_notes:
- "[[component-nextflow-testing]]"
- "[[component-nextflow-inspect]]"
- "[[open-requirements-ledger]]"
---
# Selecting the first Nextflow test case
The first translated test should be small enough to run during workflow construction while still exercising the scientific path the translated workflow claims to implement. Profile names help find candidates, but they do not establish either property.
This note owns **selection**. [[component-nextflow-testing]] owns fixture and assertion interpretation after cases have been enumerated. [[summarize-nextflow]] owns applying the selection policy and emits both the candidate set and the decision. The two Nextflow test-plan Molds consume that decision; they must not silently choose a different case. [[run-workflow-test]] is downstream of translation and sees a Galaxy or CWL test artifact, not a Nextflow profile, so it does not use this note.
## Unit of selection
A candidate is a whole-pipeline execution, not merely a profile name:
- for nf-test, one `test(...)` case inside a `nextflow_pipeline { ... }` suite, identified by file path and test name;
- otherwise,
...
Describe Galaxy workflow-test assertion intent and tolerances for translated expected outputs.
Trigger: When turning Nextflow expected outputs or snapshots into Galaxy test-plan assertions.
on-demand runtime verbatim corpus-observed deterministic 12.3 KB
- bundle
references/notes/planemo-asserts-idioms.md - source
content/research/planemo-asserts-idioms/index.md
Preview md
---
type: research
tags:
- target/galaxy
status: draft
created: 2026-04-30
revised: 2026-09-23
revision: 7
related_notes:
- "[[galaxy-workflow-testability-design]]"
- "[[iwc-test-data-conventions]]"
- "[[iwc-shortcuts-anti-patterns]]"
- "[[implement-galaxy-workflow-test]]"
- "[[tests-format]]"
- "[[planemo-workflow-test-architecture]]"
- "[[validate-tests]]"
- "[[iwc-tabular-operations-survey]]"
- "[[galaxy-discover-datasets]]"
summary: "Choose Galaxy workflow-test output assertions by the failure they should catch, the output's stability, and the available checkpoints."
---
# Choosing Planemo workflow-test assertions
Name the wrong result a test must catch before choosing YAML syntax. For a fixed input and byte-stable output, compare the result with an expected file or checksum. For a variable result, assert the stable properties that would fail if the analysis were wrong. A size, shape, or existence check is a useful smoke test when content is genuinely variable, ideally alongside a stable checkpoint. It is an anti-pattern when it replaces a more meaningful check that is available. [[iwc-shortcuts-anti-patterns]] develops that judgment, while [[iwc-test-data-conventions]] covers input fixtures and [[tests-format]] supplies the exact assertion vocabulary.
## 1. Choose by the property, then the output type
| Output | Meaningful check to try | If the result varies |
| --- | --- | --- |
| Text report or HTML | [[tests-format#has_text_model|has_text]] for a stable result, section, or value. Use [[tests-format#has_line_model|has_line]] for a complete stable line. | Use [[tests-format#has_text_matching_model|has_text_matching]] or [[tests-format#has_line_matching_model|has_line_matching]] for a bounded variable field. Line count or size can supplement
...
schema
tests-format
packaged Use the Galaxy workflow tests schema as the assertion vocabulary when translating Nextflow test evidence into a Galaxy test plan.
Trigger: When mapping expected outputs, tolerances, snapshots, or fixture assertions into Galaxy workflow-test assertion intent.
on-demand runtime verbatim corpus-observed deterministic 201.1 KB
- bundle
references/schemas/tests-format.schema.json - source
package://@galaxy-foundry/gxwf-foundry#testsFormatSchema
Preview json
{
"$defs": {
"Collection": {
"additionalProperties": false,
"properties": {
"class": {
"const": "Collection",
"title": "Class",
"type": "string"
},
"collection_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Collection Type"
},
"elements": {
"anyOf": [
{
"items": {
"oneOf": [
{
"oneOf": [
{
"$ref": "#/$defs/LocationFile"
},
{
"$ref": "#/$defs/PathFile"
},
{
"$ref": "#/$defs/ContentsFile"
},
{
"$ref": "#/$defs/CompositeDataFile"
}
]
},
{
"$ref": "#/$defs/Collection"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Elements"
},
"identifier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Identifier"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"rows": {
"anyOf": [
{
"additionalProperties": {
"items": {},
"type": "array"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Rows"
}
},
"required": [
"class"
],
"title": "Collection",
"type": "object"
},
"CollectionAttributes": {
"additionalProperties": false,
...
SKILL.md
# nextflow-test-to-galaxy-test-plan
Follow the procedure below and use the artifact/reference sections as the runtime contract.
## When To Use
- Translate Nextflow test evidence into a Galaxy workflow test plan.
## Inputs
- Read artifact `summary-nextflow`. Schema: summary-nextflow. Produced by `summarize-nextflow`. Structured Nextflow summary from summarize-nextflow; carries test_candidates, test_selection, and snapshot evidence.
## Outputs
- Write artifact `galaxy-test-plan` as `galaxy-test-plan.yml`. Format: `yaml`. Schema: galaxy-workflow-test-plan. Reviewable Galaxy workflow test plan (see galaxy-workflow-test-plan): profile, fixture, snapshot, ignored-file, expected-output, rationale provenance translated from nf-test evidence.
## Required Tools
- None declared. Procedure should not assume external CLIs are present.
## Load Upfront
- `references/schemas/galaxy-workflow-test-plan.schema.json`: Schema file copied verbatim into the bundle. Output contract: the emitted plan conforms to galaxy-workflow-test-plan. Cast bundles the JSON Schema; validate with `foundry validate-galaxy-workflow-test-plan`.
- `references/schemas/summary-nextflow.schema.json`: Schema file copied verbatim into the bundle. Read summarized nf-test profiles, snapshot fixtures, selected test data, params, and expected outputs.
## Load On Demand
- `references/notes/component-nextflow-testing.md`: Research note copied verbatim into the bundle. Interpret nf-test profiles, snapshot assertions, and Nextflow fixture conventions before translating them. Use when: converting test_candidates, snapshot fixtures, test profiles, or source test-data references into a Galaxy workflow test plan.
- `references/notes/component-nextflow-testing.yml`: Companion file copied verbatim into the bundle. Sibling of `references/notes/component-nextflow-testing.md`; read it where that note directs.
- `references/notes/iwc-shortcuts-anti-patterns.md`: Research note copied verbatim into the bundle. Distinguish accepted IWC-style test shortcuts from assertion smells while translating tests. Use when: deciding whether to use existence-only, size-only, image-dimension, or tolerant output checks.
- `references/notes/iwc-test-data-conventions.md`: Research note copied verbatim into the bundle. Emit Galaxy/IWC-style job input fixtures, remote locations, hashes, and collection input shapes. Use when: writing job inputs or deciding whether fixtures belong in test-data, Zenodo, ENA/SRA, or CVMFS.
- `references/notes/nextflow-snapshot-to-galaxy-assertions.md`: Research note copied verbatim into the bundle. Translate nf-test snapshot captures, helper-pruned file lists, and snapshot checksums into Galaxy workflow-test assertion intent. Use when: converting nf-test snapshot fixtures, .snap sidecars, ignore files, ignore globs, or pipeline-level stable path/name captures.
- `references/notes/nextflow-test-case-selection.md`: Research note copied verbatim into the bundle. Preserve the upstream candidate-selection rationale and distinguish primary coverage from bootstrap-only or reference-scale cases. Use when: the selected case is minimal, tiny, full-scale, stub-only, or accompanied by deferred whole-pipeline candidates.
- `references/notes/planemo-asserts-idioms.md`: Research note copied verbatim into the bundle. Describe Galaxy workflow-test assertion intent and tolerances for translated expected outputs. Use when: turning Nextflow expected outputs or snapshots into Galaxy test-plan assertions.
- `references/schemas/tests-format.schema.json`: Schema file copied verbatim into the bundle. Use the Galaxy workflow tests schema as the assertion vocabulary when translating Nextflow test evidence into a Galaxy test plan. Use when: mapping expected outputs, tolerances, snapshots, or fixture assertions into Galaxy workflow-test assertion intent.
## Validation
- Validate `galaxy-test-plan.yml` before returning it: run `foundry validate-galaxy-workflow-test-plan galaxy-test-plan.yml` from `@galaxy-foundry/gxwf-foundry`. If the command is not on PATH, run `npx --package @galaxy-foundry/gxwf-foundry foundry validate-galaxy-workflow-test-plan galaxy-test-plan.yml`. This checks artifact `galaxy-test-plan` against the galaxy-workflow-test-plan schema.
## Procedure
Translate Nextflow test evidence into a Galaxy workflow test plan. The output is a reviewable YAML handoff conforming to galaxy-workflow-test-plan, not a concrete `tests-format` file: preserve profile, fixture, snapshot, ignored-file, expected-output, and rationale provenance so implement-galaxy-workflow-test can author the final Galaxy test artifact with the right labels and assertions. Because this plan is translated from real nf-test evidence, set `source.derived_from: test-evidence` and prefer `evidence: test-evidence` on the assertions it carries.
Consume the candidate selected by summarize-nextflow; do not re-rank profiles here. Use nextflow-test-case-selection to preserve whether that case is primary coverage, a topology bootstrap, or reference-scale evidence, and to keep deferred science branches visible rather than presenting one translated test as exhaustive.
## Feedback Mode
- Feedback mode is off unless the caller explicitly enables `--feedback` or supplies a feedback-ledger path.
- When enabled, read `_feedback.md` before doing the work and use its registered `foundry-feedback.ledger.yml` protocol.
- Preserve harness-owned run and phase state. Append only concrete observations about a canonical Foundry source asset or a related project that this run showed to be at fault; do not put ordinary workflow requirements in this ledger.
- Before reporting completion, make one explicit pass over the work you just did. Do not ask yourself whether anything was unclear — recall what happened: where you guessed at something the instructions should have settled, needed information this bundle does not carry, hit an instruction that contradicted another or contradicted the artifacts in front of you, used a packaged reference that did not cover your case, or did something the procedure never describes.
- Append an entry for each such event that clears the protocol's bar. If none do, append nothing and report `no feedback` explicitly. Silence and a clean pass are not the same thing, and nothing downstream can tell them apart unless you say which one it was.
- Pass the same ledger path to any subagent used for this work, and merge updates serially so one writer cannot overwrite another.
## Runtime Notes
- Do not read Foundry source files at runtime; use only files packaged in this skill bundle and user-supplied artifacts.
- Preserve declared artifact filenames unless the user or harness supplies explicit paths.
- Carry unresolved assumptions into the output artifact instead of silently inventing missing source evidence.