MANIFEST

Figure asset MANIFEST

Capture/generation procedures and source provenance for every figure asset. Mirrors the role of galaxy-notebooks/figures/MANIFEST.md but, because this is a tooling paper, most entries are reproducible commands rather than Galaxy object IDs. Re-running the commands here regenerates the asset; that reproducibility is itself part of the paper’s argument.

Environment (verified 2026-06-18)

Warm the tool cache (prerequisite for state/connection/roundtrip assets)

WF=~/projects/repositories/iwc/workflows/sars-cov-2-variant-calling/sars-cov-2-pe-illumina-artic-variant-calling/pe-artic-variation.ga
C=/tmp/gxwf_si/cache
galaxy-tool-cache populate-workflow "$WF" --cache-dir "$C"   # ~25 tools, network (ToolShed TRS)
galaxy-tool-cache list --cache-dir "$C"

Main figures

fig1_stack — Format 2 / gxwf stack diagram

fig2_layers — validation depth layers

fig3_vscode — schema-aware editing in VS Code

fig4_corpus — IWC corpus validate + round-trip results

# Cache all corpus tools first (large, network-heavy):
for wf in $(find ~/projects/repositories/iwc/workflows -name '*.ga'); do
  galaxy-tool-cache populate-workflow "$wf" --cache-dir "$C"; done
gxwf validate-tree ~/projects/repositories/iwc/workflows --strict --cache-dir "$C" --json > captures/corpus-validate.json
gxwf roundtrip-tree ~/projects/repositories/iwc/workflows --cache-dir "$C" --json > captures/corpus-roundtrip.json

Supporting figures

figS1_encoding — native vs Format 2 for one step

gxwf convert "$WF" --to format2 --stateful --cache-dir "$C" --output captures/pe-artic.gxwf.yml

figS2_depth — planted errors and real diagnostics (= “Listing 1”)

cp captures/pe-artic.gxwf.yml captures/pe-artic-broken.gxwf.yml
# plant (for the final figure, put each in a SEPARATE step so errors don't cascade):
#   illegal select:  single_paired_selector: paired_collection -> paired_coll
#   misspelled key:  disable_adapter_trimming -> disable_adaptor_trimming
#   type mismatch:   overrepresentation_analysis: false -> maybe
gxwf validate captures/pe-artic-broken.gxwf.yml --cache-dir "$C" --json > captures/validate-broken.json

figS3_connections — collection / map-over validation

gxwf validate "$WF" --cache-dir "$C" --connections          # clean baseline: 46 ok, 0 invalid, 0 skip
gxwf mermaid "$WF" --annotate-connections --cache-dir "$C" figures/figS3_mapover.mmd
# panel (b): build one invalid variant (list:paired output -> paired input, no flatten) and run --connections

figS4_native_parity, figS5_legacy_quickfix, figS6_conditional_completion, figS7_cache — VS Code GUI screenshots

figS8_browser — gxwf-ui browser editor

figS9_conversion — bidirectional conversion + roundtrip

gxwf roundtrip "$WF" --cache-dir "$C" --brief     # panel (b): 23/25 ok, 54 benign, 0 real
gxwf tool-search bwa --max-results 8 > captures/tool-search-bwa.txt
gxwf tool-versions iuc/bwa_mem2/bwa_mem2_idx
gxwf tool-revisions devteam/bwa/bwa --latest

Web-mode GUI captures (capture-kit/web-shots/)

Curated screenshots from the browser extension host (vscode-test-web), captured 2026-06-19 against the web_tool_resolution_fixes build (galaxy-workflows-vscode, @galaxy-tool-util/* 1.8.2) at a fixed 1280×800 viewport, light theme. ToolShed was reached through a local CORS proxy configured via the workspace setting galaxyWorkflows.toolShed.url (settable per-workspace after the machinewindow scope fix). Earlier exploratory/uncached frames were removed.

FileSubjectShowsFigure role
format2-toolstate-select-dropdown.pngclean macs2-demo.gxwf.ymlselect-value completion (format: → BAM/BAMPE/BED), no squigglesfig3_vscode (schema-aware editing)
format2-toolstate-property-name.pngclean macs2-demo.gxwf.ymlparameter-name completion inside state: with type badgesfig3_vscode
format2-toolstate-diagnostic.pngmacs2-demo-broken.gxwf.yml (format: BAMX)invalid-select error: squiggle + Problems “Invalid value ‘BAMX’ for ‘format’. Must be one of: BAM, BAMPE, BED”; Workflow Tools view + CodeLensfig3_vscode
format2-toolstate-hover.pngclean macs2-demo.gxwf.ymlhover card on format: param name · select · option labels (BAM/BAMPE/BED with help)fig3_vscode
autocomplete-toolstate-select-dropdown.pngkrona-demo-broken.ga (native)select-value completion alongside live diagnosticsfigS4_native_parity
autocomplete-toolstate-property-name.pngkrona-demo-broken.ga (native)parameter-name completion inside tool_statefigS4_native_parity
legacy-toolstate-quickfix.pngkrona-legacy.ga (string-encoded tool_state)gutter lightbulb + Quick Fix “Clean workflow (convert tool_state to object form)” on the legacy string valuefigS5_legacy_quickfix (before)
legacy-toolstate-objectform.pngkrona-legacy.ga after applying the fixtool_state expanded to object form, validates clean (“No problems”), Workflow Tools populatedfigS5_legacy_quickfix (after)
conditional-completion-text.pngkrona-demo.gxwf.yml step 4 type_of_data_selector: textparam completion inside the conditional offers only inputfigS6_conditional_completion (case A)
conditional-completion-taxonomy.pngkrona-demo.gxwf.yml step 4 type_of_data_selector: taxonomyparam completion offers input and max_rank — the extra key exposed only by the taxonomy casefigS6_conditional_completion (case B)
toolshed-search-dropdown.pngInsert Tool Step (query fastqc)ToolShed-search QuickPick: tool name · owner/repo, description, “Open in ToolShed” buttonfigS10_toolsearch (GUI variant)

Conditional choice for S6: kraken2’s single_paired conditional is not usable here — every case exposes the same input_sequences key (only the data arity differs), so the offered keys don’t visibly change. taxonomy_krona_chart’s type_of_data conditional is the right subject: the taxonomy case adds max_rank (a select 0–21) that the text case lacks, making the case-dependent key set visible in the completion list.

Fixture note: capture-kit/krona-legacy.ga was corrected on 2026-06-19 — it carried 5 stray step-level connected_paths: {} fields (in-memory-only derived data that @galaxy-tool-util strips on serialize and the native schema rejects), which produced 5 “Property connected_paths is not allowed” errors inconsistent with its documented “clean except legacy encoding” purpose. Removed via jq while preserving the string-encoded tool_state, so the file now shows only the legacy-encoding Hint/quick-fix.

Working captures

Live under /tmp/gxwf_si/captures/ during authoring (not committed): tool-search-bwa.txt, connections-ok.txt, validate-broken.txt, plus pe-artic.gxwf.yml / pe-artic-broken.gxwf.yml. Promote the curated subset into si/ (see supporting-information.md) once the worked example is finalized.