Skip to content

sarek completeness audit (2026-08-21)

Upstream: nf-core/sarek @ 3.10.0 · Port: oxo-flow-sarek (live-verified).

Mode matrix (upstream — parameter cross-product, one workflow)

axis values
--step mapping (default) / markduplicates / prepare_recalibration / recalibrate / variant_calling / annotate
library WGS / WES / panel (--wes, --intervals, --no_intervals)
status germline / tumor-only / somatic pair (samplesheet status column)
aligner bwa-mem (default) / bwa-mem2 / dragmap / sentieon-bwamem / parabricks
tools (germline) haplotypecaller, deepvariant, freebayes, mpileup, manta, strelka, tiddit, cnvkit, indexcov, parabricks_haplotypecaller, sentieon_dnascope, sentieon_haplotyper
tools (tumor-only) mutect2, controlfreec, cnvkit, freebayes, lofreq, manta, msisensor2, mpileup, sentieon_tnscope, tiddit
tools (somatic) mutect2, ascat, controlfreec, cnvkit, freebayes, manta, strelka, indexcov, msisensorpro, muse, sentieon_tnscope, tiddit
joint calling --joint_germline (VQSR chain) / --joint_mutect2
post-calling --filter_vcfs / --normalize_vcfs / --snv_consensus_calling / --concatenate_vcfs / --tools varlociraptor
annotation snpeff / vep / merge / bcfann / snpsift (+ VEP plugins loftee/dbnsfp/condel/mastermind/phenotypes/spliceai/spliceregion)
UMI fgbio consensus / read-header / fastp / sentieon_consensus
engines GATK Spark MD+BQSR, Parabricks GPU path

34 tools across 3 statuses, all dispatch-verified by the auditor.

Gap tiers vs the port

P1 (license): Sentieon (4 entry points + 2 joint flavors — paid license secret), Parabricks (NVIDIA NGC + GPU, no conda profile), Mastermind VEP plugin (paywalled DB, user-supplied file).

P0 (portable — the large surface): dragmap + bwa-mem2 aligners; germline callers deepvariant/freebayes/mpileup/tiddit/cnvkit/indexcov; tumor-only controlfreec/lofreq/msisensor2; somatic ascat (free refs, hard-error if missing)/controlfreec/muse/msisensorpro; joint calling chains (GATK VQSR + sentieon variants); post-calling filter/normalize/consensus/concatenate + varlociraptor chain; annotation snpeff/merge/bcfann/snpsift + VEP plugin set; UMI modes; spring/bam-convert inputs; --step restarts; bbsplit contamination filter.

P2 (config): --skip_tools gates, --save_mapped/--save_output_as_bam, trim/split args, interval scatter, sex-field requirements, emit modes, cache download vs local cache.

Gates beyond licenses: AWS-hosted refs/caches (s3 ngi-igenomes + annotation-cache), ASCAT allele/loci refs (free but must be fetched), BQSR dbsnp/known-indels, Mutect2 gnomAD/PON (warn-only), sex field for ascat/controlfreec/varlociraptor. Copyleft notes: FreeBayes/Strelka/Manta GPL-family (compliance note, no runtime gate).

Verdict

The biggest audit surface of the batch — upstream is a 34-tool matrix across 3 statuses; the ported default (bwa-mem + strelka/hc subset) leaves the majority of callers and all 4 alternative aligners as P0.

Re-verification (2026-08-23, heavy group 2/3)

Engine: latest main (post-v0.14.1) · Box: tx-ubuntu · Mode: real CLI run, not dry-run (checkpoint cleared, forced real execution) · -j 2 --keep-going.

165 succeeded / 0 failed first run + 1/38/0 resume — the single resume rule was multiqc after the env fix. Coverage chain (real execution): fastp → bwa mem → gatk markduplicates → baserecalibrator/applybqsr → haplotypecaller → cnnscorevariants → filtervarianttranches → vep → bcftools/vcftools stats → multiqc. The only failure was box-side: a stale pre-built multiqc env (1.29 + rich 15 incompatible, rich.panel AttributeError); the repo yaml already pins multiqc=1.35, so no repo change — conda install multiqc=1.35 on the box. Lesson recorded in the failure catalog (shared-env caches can lag repo pins).