bio-assembly-qc
Assemble genomes/metagenomes and produce assembly QC artifacts.
SKILL.mdskills/bio-assembly-qc/SKILL.md
GitHubBio Assembly QC
Assemble isolate genomes or metagenomes from QC-passed reads, normalize the assembler output to one contigs.fasta per sample, and run QUAST or MetaQUAST.
Instructions
Tool guides and versions: docs/README.md.
Validate the assembly manifest and inspect a restartable execution plan before starting expensive work:
uv run --script skills/bio-assembly-qc/scripts/run_assembly_qc.py \ assemblies.tsv --out results/bio-assembly-qc --threads 4 # Inspect run_manifest.json, then execute the same plan on a compute node: uv run --script skills/bio-assembly-qc/scripts/run_assembly_qc.py \ assemblies.tsv --out results/bio-assembly-qc --threads 16 --executeThe driver rejects samples whose upstream
read_qc_statusis notpassed. It runs SPAdes (--isolate), metaSPAdes, Flye/metaFlye, or metaMDBG by mode, passes--threadsto every tool (default 4; SPAdes otherwise uses 16), normalizes the assembler output to per-samplecontigs.fasta, and chooses QUAST or MetaQUAST from the mode. It reuses a stage only when its declared outputs are non-empty and its.donemarker exists. Run--executethrough the scheduler (sbatch) for anything beyond the fixtures, not on a login node.Select an assembler based on read type, genome/metagenome scope, and sample diversity:
- Illumina short-read isolates and hybrid assemblies: SPAdes v4.0.0+ (v4.3.0 current). Use
metaSPAdesfor short-read metagenomes. - Long-read bacterial isolates (PacBio CLR, ONT): Flye v2.9.5+ for the draft assembly. Use Autocycler v0.6+ when a complete bacterial consensus genome is needed from several independent long-read assemblies; do not use it for mixed communities.
- Long-read metagenomes: Flye v2.9.5+ in
--metamode (metaFlye) as the baseline for ONT and CLR communities. - HiFi metagenomes: metaMDBG v1.1+. In its benchmark it recovered up to twice as many circularized high-quality MAGs as metaFlye on HiFi data (see docs/README.md). Keep metaFlye as a comparator when a per-sample failure is suspected.
- Very large or diverse long-read datasets where runtime limits the work: myloasm, when its read profile matches the dataset.
- The driver does not run Autocycler, hybrid SPAdes, or myloasm. Run those by hand and record the exact commands and versions.
- Illumina short-read isolates and hybrid assemblies: SPAdes v4.0.0+ (v4.3.0 current). Use
Run assembly with resource-aware settings and record exact CLI, version, thread count, and RAM ceiling.
- For very large ONT/metagenome FASTQs, use
/bio-reads-qc-mappingguidance for filtering and avoid redundant full-file raw-read preflights before filtering. Record raw file metadata (statpath, size, mtime), optionally run a small sampled check, and writeseqkit statsafter each produced read set. - Use atomic output patterns for long-running filters and assemblies: write to
.tmp, verify non-empty/readable output, thenmvinto the final path. Resume mode should skip existing final outputs only after sanity checks; when checks fail, use a tool-supported overwrite option or remove the corrupt final output before rerunning. - For Flye/metaFlye failures or interrupted jobs, prefer
--resumeor--resume-fromin the existing output directory when the prior run is structurally intact. Do not delete a large partial assembly unless logs or missing stage files show it is corrupted.
- For very large ONT/metagenome FASTQs, use
Summarize the QUAST v5.3+ or MetaQUAST
report.tsvper sample (contig count, total length, N50, largest contig) against project thresholds.For every produced
contigs.fasta, invoke/tracking-taxonomy-updatesto run the BBTools-container QuickCladepercontigdomain screen before choosing downstream genome/MAG/viral/eukaryotic workflows.Use the QuickClade domain routing table to decide the next step:
- Bacteria/Archaea ->
/bio-gene-calling,/bio-annotation, and GTDB-Tk taxonomy assignment. - Viral or virus-like ->
/bio-viromicsbefore prokaryotic MAG tooling. - Eukaryota -> eukaryote-aware gene/QC workflows and EukCC where bins or genomes are present.
- Mixed/low-confidence -> split or flag contigs before domain-specific analysis.
- Bacteria/Archaea ->
Input Requirements
Prerequisites:
- Tools declared in the project's pinned Pixi environment. See
docs/README.mdfor expected tools. - Sufficient disk and RAM for chosen assembler. Inputs:
- reads/.fastq.gz or reads/.fastq (raw or filtered reads; verify actual compression by content when suffixes are suspect).
assemblies.tsvwithsample_id,mode,read1,read2,read_qc_status, andread_platform; supported core modes areshort_isolate,long_isolate,short_metagenome,long_metagenome, andhifi_metagenome.read_platformis required forlong_isolateandlong_metagenome, and selects the Flye error model:ontgives--nano-hq,pacbio-clrgives--pacbio-raw,pacbio-hifigives--pacbio-hifi. Leave it empty for short-read modes;hifi_metagenomeaccepts onlypacbio-hifior an empty value.
Output
- results/bio-assembly-qc/run_manifest.json (validated rows, planned commands, and per-stage
statusafter--execute) - results/bio-assembly-qc/<sample_id>/assembler/ (raw assembler output)
- results/bio-assembly-qc/<sample_id>/contigs.fasta (normalized assembly)
- results/bio-assembly-qc/<sample_id>/quast/report.tsv (QUAST or MetaQUAST metrics)
- results/bio-assembly-qc/domain_routing.tsv (written by the
/tracking-taxonomy-updatesQuickClade step, not by the driver) - stdout: the last line is one JSON envelope
{ok, skill, out, manifest, warnings}(driver stdout contract in AGENTS.md)
Quality Gates
- Assembly size range and N50 distribution meet project thresholds.
- Every assembler output is normalized to a non-empty per-sample
contigs.fastabefore QC or downstream routing. - On execution failure, preserve logs and report the failed command; retry only after diagnosing the cause and recording the changed parameters. Report unmet biological thresholds as results; never tune parameters solely to pass a gate.
- Verify reads are present and readable. If
gzip -tfails on a.gz-named file, inspect magic bytes or file type before labeling it corrupt; it may be plain FASTQ with the wrong suffix. - Check available disk space before assembly.
- For large ONT/metagenome inputs, raw file metadata and post-filter
seqkit statsare recorded without redundant full-file raw preflight scans. - Long-running filter outputs use
.tmpplus atomic rename, and resume guards require a stage.donemarker before reusing non-empty outputs. - Flye/metaFlye logs are inspected before deciding whether to resume, rerun, or clean a partial output directory.
- For Autocycler isolate consensus, record each input assembler/run and confirm the sample is not a mixed community.
- QuickClade
percontigdomain screen completed or the reason for skipping it is explicitly recorded. - Domain routing table is reviewed before selecting MAG, viral, bacterial/archaeal, or eukaryotic downstream tools.
Examples
Use fixtures/assemblies.tsv as the executable short-read, long-read, and metagenome planning fixture.
Troubleshooting
Issue: Large ONT assembly workflow appears stalled before assembly
Solution: Check whether the script is doing a raw full-file preflight (gzip -t, raw seqkit stats) instead of productive filtering. For urgent routing/assembly, replace raw full scans with metadata plus sampled checks, then run filtering and post-filter stats.
Issue: Flye job timed out or was interrupted
Solution: Inspect flye.log and stage files. If the output directory is intact, resubmit with Flye resume options rather than restarting from scratch.