F2 · Synthetic scenario pipelines on both engines¶
Done 2026-10-26 · commit b2687d8 · 11 / 11 scenarios on Nextflow 26.10.3, 25.10.9 and Snakemake 9.27.1 (one scenario repeated once after a known engine fault)
What changed¶
-
tests/pipelines/synthetic/holds two twin pipelines, one per engine:nextflow/main.nfandsnakemake/workflow/Snakefile;- the same three stages (
qc, then a gate,align, then a gate,quant); - deterministic task bodies (
bin/synth.py); - injected failures: exit, OOM, OOM once, timeout, flaky.
-
scenarios.yamllists 11 PR scenarios and 1 nightly stress scenario.run_scenarios.pychecks:- the run's exit code;
- outputs that must or must not exist;
- per-process task counts, with their exit codes and attempts;
- cached tasks after a resume.
-
Known engine faults. These are listed with their log signature. A matching failure is repeated once and reported as
PASS*. - Specs changed:
- dev environment §10.1: what the corpus proves;
- schedulers §3.5: a new failure class, and "classify from the record, not from the exit code".
Why¶
Spectio's gates rely on engine mechanisms: a generated Nextflow config with -resume, and Snakemake --until. Those had to be proven on both engines before any code depends on them. See checking scenarios.
Prompt: Thomas's request for real Snakemake and Nextflow tests. Decision: decision log, 2026-10-26, real pipelines.
Evidence¶
$ python3 run_scenarios.py --engine nextflow --nextflow nextflow-25.10.9 --workdir /tmp/sc/nf25
PASS nextflow happy 15.9s
PASS nextflow gate_qc_then_resume 24.8s
…
PASS nextflow timeout_fatal 35.9s
PASS nextflow dynamic_fanout 17.0s
PASS nextflow fanout_medium 45.9s
$ python3 run_scenarios.py --engine snakemake --workdir /tmp/sc/smk # full suite, with the known-fault rule
PASS snakemake happy 4.1s
…
PASS* snakemake oom_once_retry 8.2s [repeated after known engine fault: lost-retry-at-checkpoint-update]
…
PASS snakemake fanout_medium 12.8s
The full Snakemake run made before the known-fault rule existed failed on oom_once_retry (10 / 11). Full tables and the findings: spike note.
Figures and media¶
The task counts are measured (Nextflow 26.10.3, local executor). The cluster, runner, share link and phone show the planned flow; they are not built yet. Click the figure for the full size.
Findings and open questions¶
- Snakemake 9.27.1 drops a retried job when a checkpoint updates the DAG at the same moment ("BUG: Out of jobs ready to be started"). This happened in 4 of the 18 executions of
oom_once_retryin this session (two full suites, loops of 8 and 6, and 2 repeats, both of which passed). A plain rerun completes. - Nextflow 25.10.9 reports no exit code for a local time-limit kill. 26.10.3 reports 143.
- Not covered here: the SLURM (sind) and Kubernetes (kind) legs need cgroup v2 Docker. They are steps T3 and T4.

