GXFORMAT2_EXPANDED_LINT_TESTING_PLAN

gxformat2 Expanded Lint Testing Plan

Add declarative YAML expectation tests for lint features that currently only have non-declarative (Python unit test) coverage. The declarative tests run in both the Python gxformat2 test suite and the TypeScript galaxy-tool-util port via synced expectations.

Context

Status

Completed (gxformat2 dfb558e + galaxy-tool-util 1e6c8a1)

Step 1: Group 1+2+3 fixtures and expectations — DONE

All structural, validation, and report lint tests implemented in both Python and TypeScript:

#CheckFormatStatus
1Missing class keyformat2done
2Missing steps key (format2)format2done
3Missing steps key (native)nativedone
4Invalid format-versionnativedone
5Invalid a_galaxy_workflow valuenativedone
6Non-integer step keynativedone
7Nested subworkflow missing steps (format2)format2done
8Nested subworkflow missing steps (native)nativedone
9Output without labelnativedone
10Step errors flagformat2done
11TestToolShed refformat2done
12Bad outputSource refformat2done
13Bad int defaultformat2done
14Bad float defaultformat2done
15Bad string defaultformat2done
16Report clean (format2)format2done
17Report bad type (format2)format2done (via validate_format2 expect_error)
18Report clean (native)nativedone
19Report bad type (native)nativedone (via validate_native expect_error)

21 new fixtures created, value_any_contains assertion mode added, subworkflow error messages fixed.

Step 2: Best practices operations and expectations — DONE

lint_best_practices_format2 and lint_best_practices_native operations added to both Python and TypeScript:

#CheckFormatStatus
20Clean (basic warnings)format2done
21No annotationformat2done
22No creatorformat2done
23No licenseformat2done
24Disconnected inputformat2done
25Step no labelformat2done
26No annotation (native)nativedone
27No creator (native)nativedone
28No license (native)nativedone
29Step no label (native)nativedone
30Bad creator identifiernativedone
31Untyped param (full bp check)nativedone
32Disconnected input (native)nativedone
33Untyped PJA (native)nativedone

Remaining Work

Step 3: Training lint operations (lower priority)

Training lint checks are gated on --training-topic. Neither the Python declarative framework nor the TS port currently support passing parameters to operations.

Option A: Add lint_native_training / lint_format2_training operation with a hardcoded training topic. Option B: Extend the declarative test case schema to support operation parameters.

#CheckProposed Test IDFixtureNotes
34Missing tagstest_lint_native_training_no_tagsreal-unicycler-assembly.gano tags field
35Wrong tagtest_lint_native_training_wrong_tagreal-hacked-unicycler-assembly-with-tags.gahas “assembly” tag but test uses different topic
36Correct tagtest_lint_native_training_correct_tagreal-hacked-unicycler-assembly-with-tags.ga

Step 4: Sync to TypeScript port (for future gxformat2 changes)

After any additional gxformat2 expectations are committed:

  1. Run GXFORMAT2_ROOT=... make sync-workflow-expectations sync-workflow-fixtures in galaxy-tool-util
  2. Wire up any new operations in declarative-normalized.test.ts
  3. Implement any new lint functions in packages/schema/src/workflow/lint.ts

Known Divergences (Python vs TypeScript)

Unresolved Questions