Agent Skill · cast

cwl-test-to-galaxy-test-plan

Translate CWL test fixtures 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:cwl-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:

$cwl-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:

/cwl-test-to-galaxy-test-plan

Skill Bundle

/ packaged cast
attached files
8
upfront
2
on demand
6
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]]) derived from CWL test fixtures, job inputs, expected outputs, and assertion 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]]) derived from CWL test fixtures, job inputs, expected outputs, and assertion evidence."
}

Consumes

summary-cwl

Structured CWL summary from [[summarize-cwl]]; lists discovered test cases, job-file paths, and expected-output references.

Raw artifact contract
{
  "id": "summary-cwl",
  "description": "Structured CWL summary from [[summarize-cwl]]; lists discovered test cases, job-file paths, and expected-output references.",
  "inherited_schema": "[[summary-cwl]]",
  "producers": [
    "summarize-cwl"
  ]
}

Attached Files

/ runtime references

Load upfront

schema

galaxy-workflow-test-plan

packaged

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-cwl

packaged

Read the CWL summary's test cases, job-file paths, expected-output references, and assertion evidence.

upfront runtime verbatim corpus-observed deterministic 19.3 KB
bundle
references/schemas/summary-cwl.schema.json
source
package://@galaxy-foundry/gxwf-foundry#summaryCwlSchema
Preview json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://galaxyproject.org/foundry/schemas/summary-cwl.schema.json",
  "$comment": "Canonical source: packages/gxwf-foundry/src/schemas/summary-cwl/summary-cwl.schema.json in galaxyproject/foundry. Mold frontmatter cites this schema via [[summary-cwl]] wiki-links; the cast pipeline imports the `summaryCwlSchema` runtime export and serializes it into cast bundles.",
  "title": "CWL Workflow Summary",
  "description": "Structured per-source summary emitted by the summarize-cwl Mold. CWL is already a typed workflow language, so this schema records validated and normalized workflow/tool structure rather than inferred pipeline semantics.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "summary_version",
    "source",
    "documents",
    "workflow_inputs",
    "workflow_outputs",
    "steps",
    "tools",
    "graph",
    "tests",
    "warnings"
  ],
  "properties": {
    "summary_version": {
      "type": "string",
      "enum": [
        "1"
      ],
      "description": "Summary schema major version."
    },
    "source": {
      "$ref": "#/$defs/SourceRecord"
    },
    "documents": {
      "$ref": "#/$defs/DocumentSet"
    },
    "workflow_inputs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/WorkflowInput"
      }
    },
    "workflow_outputs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/WorkflowOutput"
      }
    },
    "steps": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/WorkflowStep"
      }
    },
    "tools": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/CommandLineTool"
      }
    },
    "graph": {
      "$ref": "#/$defs/WorkflowGraph"
    },
    "tests": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/TestCase"
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Warning"
      }
    }
  },
  "$defs": {
    "SourceRecord": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "ecosystem",
        "workflow",
        "url",
        "version",
        "license",
        "slug",
        "cwl_version",
        "entrypoint"
      ],
      "properties": {
        "ecosystem": {
          "type": "string",
          "enum": [
            "cwl"
          ],
          "descripti
...

Load on demand

research

galaxy-workflow-testability-design

packaged

Choose which workflow outputs and promoted checkpoints make meaningful assertions.

Trigger: When deciding which outputs to assert and which labels the plan should bind to.

on-demand runtime verbatim corpus-observed deterministic 7.8 KB
bundle
references/notes/galaxy-workflow-testability-design.md
source
content/research/galaxy-workflow-testability-design/index.md
Preview md
---
type: research
tags:
  - target/galaxy
status: draft
created: 2026-05-03
revised: 2026-09-23
revision: 3
related_notes:
  - "[[iwc-workflow-testability-survey]]"
  - "[[iwc-test-data-conventions]]"
  - "[[planemo-asserts-idioms]]"
  - "[[iwc-shortcuts-anti-patterns]]"
  - "[[planemo-workflow-test-architecture]]"
  - "[[implement-galaxy-workflow-test]]"
  - "[[gxformat2-schema]]"
  - "[[gxformat2-workflow-inputs]]"
  - "[[galaxy-datatypes-conf]]"
summary: "Design guidance for Galaxy workflow inputs, outputs, and checkpoints that make IWC-style workflow tests possible."
---

# Design a Galaxy workflow that can be tested

Choose the workflow's public inputs and outputs while designing the analysis, before writing its `-tests.yml`. A workflow test supplies `job:` values by input name and checks `outputs:` by output name. It can only check results the workflow exposes. A good interface gives the test a reproducible input, an addressable result, and at least one assertion that would catch a meaningful wrong result.

This note concerns workflow design. [[iwc-test-data-conventions]] covers the test file's input fixtures, [[planemo-asserts-idioms]] covers assertion syntax, and [[iwc-shortcuts-anti-patterns]] explains when a smoke check is enough. [[iwc-workflow-testability-survey]] holds the broader corpus evidence.

## Name the public interface before writing tests

Give each input and promoted output a stable, descriptive public name. In an exported gxformat2 workflow this is commonly the entry's `id`. The structural [[gxformat2-schema]] also permits `label`. Check the **effective name in the workflow being tested** instead of assuming a step label, generated dataset name, or array position will become the test key. In the pinned [Scanpy workflow](https://github.com/galaxy
...
research

iwc-shortcuts-anti-patterns

packaged

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 
...
research

iwc-test-data-conventions

packaged

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
...
research

planemo-asserts-idioms

packaged

Describe Galaxy workflow-test assertion intent and tolerances for translated expected outputs.

Trigger: When turning CWL expected outputs 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
...
research

planemo-workflow-test-architecture

packaged

Keep the plan addressable by stable labels and artifacts Planemo can connect back to invocations, jobs, and outputs.

Trigger: When recording the labels and checkpoints the downstream test must address.

on-demand runtime verbatim corpus-observed deterministic 8.1 KB
bundle
references/notes/planemo-workflow-test-architecture.md
source
content/research/planemo-workflow-test-architecture/index.md
Preview md
---
type: research
title: "Planemo workflow-test architecture"
tags:
  - tool/planemo
  - target/galaxy
status: draft
created: 2026-05-02
revised: 2026-05-11
revision: 3
related_notes:
  - "[[galaxy-workflow-testability-design]]"
  - "[[galaxy-tool-job-failure-reference]]"
  - "[[galaxy-workflow-invocation-failure-reference]]"
  - "[[planemo-asserts-idioms]]"
related_molds:
  - "[[run-workflow-test]]"
  - "[[debug-galaxy-workflow-output]]"
  - "[[implement-galaxy-workflow-test]]"
sources:
  - "~/projects/repositories/planemo/planemo/commands/cmd_test.py"
  - "~/projects/repositories/planemo/planemo/commands/cmd_run.py"
  - "~/projects/repositories/planemo/planemo/galaxy/activity.py"
  - "~/projects/repositories/planemo/planemo/galaxy/invocations"
  - "~/projects/repositories/planemo/planemo/galaxy/config.py"
summary: "Reference for Planemo workflow test/run architecture, Galaxy modes, API polling, and noisy failure boundaries."
---

# Planemo Workflow-Test Architecture

This note describes Planemo architecture relevant to workflow tests and workflow runs. It is reference material for Molds that need to run tests or interpret Planemo artifacts, not a command-selection recipe.

## Main Commands

| User action | Command | Core behavior |
|---|---|---|
| Full workflow test | `planemo test <workflow>` ([[planemo-test]]) | Finds test definitions, starts or targets Galaxy, stages inputs, invokes workflow, checks assertions, writes reports. |
| Direct run | `planemo run <workflow> <job.yml>` | Runs one workflow/job pair and can download outputs without assertion checks. |
| Recheck assertions | `planemo workflow_test_on_invocation <tests.yml> <invocation_id>` ([[planemo-workflow_test_on_invocation]]) | Runs test assertions against an existing invocation without rerunning the wo
...
schema

tests-format

packaged

Use the Galaxy workflow tests schema as the assertion-family vocabulary when translating CWL test evidence into a Galaxy test plan.

Trigger: When mapping expected outputs, tolerances, 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


# cwl-test-to-galaxy-test-plan

Follow the procedure below and use the artifact/reference sections as the runtime contract.

## When To Use

- Translate CWL test fixtures into a Galaxy workflow test plan.

## Inputs

- Read artifact `summary-cwl`. Schema: summary-cwl. Produced by `summarize-cwl`. Structured CWL summary from summarize-cwl; lists discovered test cases, job-file paths, and expected-output references.

## 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) derived from CWL test fixtures, job inputs, expected outputs, and assertion 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-cwl.schema.json`: Schema file copied verbatim into the bundle. Read the CWL summary's test cases, job-file paths, expected-output references, and assertion evidence.

## Load On Demand

- `references/notes/galaxy-workflow-testability-design.md`: Research note copied verbatim into the bundle. Choose which workflow outputs and promoted checkpoints make meaningful assertions. Use when: deciding which outputs to assert and which labels the plan should bind to.
- `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/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 CWL expected outputs into Galaxy test-plan assertions.
- `references/notes/planemo-workflow-test-architecture.md`: Research note copied verbatim into the bundle. Keep the plan addressable by stable labels and artifacts Planemo can connect back to invocations, jobs, and outputs. Use when: recording the labels and checkpoints the downstream test must address.
- `references/schemas/tests-format.schema.json`: Schema file copied verbatim into the bundle. Use the Galaxy workflow tests schema as the assertion-family vocabulary when translating CWL test evidence into a Galaxy test plan. Use when: mapping expected outputs, tolerances, 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

Turn the CWL summary's discovered test cases into a reviewable Galaxy test plan. Preserve each case's job-file and expected-output provenance so implement-galaxy-workflow-test can author the final test against the concrete Galaxy workflow. The plan records assertion intent and open mappings, not a `tests-format` test file.

For each `tests[]` case, open its `job_path` when available. Map the declared CWL input values onto the Galaxy inputs the summary and translation imply. Keep `File` locations, `Directory` contents, `secondaryFiles`, arrays, and collection element identifiers visible where they affect the fixture or its Galaxy shape. Record the source path or URL and any known checksum. If a job file is missing or an input cannot be mapped, leave the fixture or label unresolved with a reason. A `job_path` in the summary is a pointer to inputs, not the inputs themselves.

Translate each recorded expected output into a Galaxy output to check. Use the CWL output id and any supplied path, URL, checksum, or assertion as evidence for an appropriate `tests-format` assertion family. Record what the assertion should establish, its expected value and tolerance when supported, and the source of that expectation. Do not infer a passing value from an output name or turn a checksum into a Galaxy assertion without confirming that the translated output can be compared that way. For collections and sidecars, identify the element or file that the check actually addresses.

Bind input and output labels to a concrete Galaxy draft only if one is available to inspect. Otherwise mark inferred labels as assumed or unresolved, set `workflow.label_source` accordingly, and record the mapping that implement-galaxy-workflow-test must confirm. Set `source.derived_from: test-evidence` for a plan based on discovered CWL tests, and `evidence: test-evidence` only for assertions supported by those tests. If a useful Galaxy check must instead be inferred from workflow intent, mark that assertion `evidence: intent` and explain its lower confidence.

Record unavailable fixtures, expression-dependent shapes, untranslatable assertions, and missing label or datatype mappings in `unresolved[]` or `warnings[]` as appropriate. Put outputs deliberately left unasserted in `omissions[]` with a reason. If the summary has no usable test case, report that coverage gap rather than presenting a fabricated case as translated evidence. Validate the emitted `galaxy-test-plan.yml` with `foundry validate-galaxy-workflow-test-plan` before handing it to implement-galaxy-workflow-test.

## 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.