Skip to content

v3.5.0 release candidate - #47

Open
nrminor wants to merge 10 commits into
mainfrom
v3.5.0-rc
Open

v3.5.0 release candidate#47
nrminor wants to merge 10 commits into
mainfrom
v3.5.0-rc

Conversation

@nrminor

@nrminor nrminor commented Aug 5, 2026

Copy link
Copy Markdown
Member

After #31, this release is much smaller. Its many feature addition is direct streaming of reads from SRA into our deacon enrichment, with continued support for no-enrichment runs as well. This means entire bioprojects of accessions, for example, can be put through nvd without persisting the entirety of each FASTQ onto disk first. Instead, reads are streamed directly into deacon filtering. Reads are thus only written to disk if they pass filtering with the provided index. This feature does have a downside: if you wish to download the entire FASTQs and then use nvd resumes to filter with different indexes, nvd does not currently support that. Reads must be re-downloaded from SRA each time. This was a design choice that can be adjust in the future if it poses problems, though ultimately, we do not recommend using nvd resumes to reprocess with different parameters because each resumed run will overwrite previous runs' results!

This release also introduces a skip_rapid_screen parameter, which skips our currently sourmash-based rapid screening subworkflow.

Both of these features were ultimately crucial in dholab's ability to scan our entire wastewater bioproject on SRA for Cyclospora reads during the summer 2026 outbreak.

Additional other improvements include zero-read samples more clearly being reported, development tooling moving to Mise instead of a Nix Flake+direnv, some updated pixi dependencies, and improved repository-override documentation.

@nrminor
nrminor force-pushed the v3.5.0-rc branch 3 times, most recently from 2777717 to 11204bc Compare August 11, 2026 19:03
@nrminor
nrminor force-pushed the v3.5.0-rc branch 4 times, most recently from 6e6dcab to bd42114 Compare August 16, 2026 12:41
@nrminor
nrminor marked this pull request as ready for review August 25, 2026 15:21
nrminor and others added 10 commits September 9, 2026 13:25
Remove the post-BLAST query-group gates that required a non-phage viral hit after MEGABLAST and BLASTN. Target enrichment and depletion continue to control which sequences reach BLAST, while every annotated top-hit group now proceeds directly to merging, LCA annotation, and reporting. MEGABLAST partitioning and existing hit-retention limits remain unchanged.

Delete the obsolete Nextflow processes, Python filter and summary scripts, unit tests, filter decision artifacts, and sequence-flow rows. Rename affected channels around annotated-hit semantics, publish annotated MEGABLAST and BLASTN TSVs at their result-family roots, and remove the virus-only result directories.

Describe the existing enrichment parameters as target-enrichment controls in executable help without renaming the 3.x API. Normalize the sequence-flow process input to the codebase's scalar-or-list convention because removing the filter summaries allows valid runs with a single evidence file.
Use the v3.4.0 checkout in the NVD_REPO installation example after the v3.4 release line, while preserving the existing launcher and compatibility guidance.
Bump __version__, the Nextflow manifest, pyproject, and uv.lock to 3.5.0, and
publish schemas/nvd-params.v3.5.0.schema.json as the parameter contract for the
release. The rolling nvd-params.latest.schema.json symlink and params.SCHEMA_URL
both move to it, so IDE completion and generated templates describe 3.5.

The v3.5.0 schema is a copy of the v3.4.0 contract with only $id changed. That
contract already reflects the v3.4.0 merge: the six sourmash reference and
threshold params are gone, labkey_insert_batch_size and
skip_unassembled_read_queries are present, and merge_pairs defaults to true.

The rapid-screen skip option that originally introduced this schema was dropped
during the rebase onto the v3.4.0 merge, since sourmash rapid screening no
longer exists to skip. Only its version plumbing survives here.

Also drops bin/filter_non_virus_blast_nodes.py, bin/summarize_blast_filtering.py,
and bin/test_filter_non_virus_blast_nodes.py. "feat: retain BLAST hits across
taxa" deleted all three, a bad merge resurrected them here (the
summarize_blast_filtering.py copy predating its qseqid column check), and
nothing in the pipeline referenced them.
Carry validated input and retained counts on Deacon outputs, route zero-retention samples directly to completion, and keep downstream reporting aware of samples that cannot produce contigs. Cover the empty route through workflow and MultiQC boundaries.
Upgrade Deacon to 0.16 and use its explicit interleaved-input mode for paired streams and files. Add an opt-in NVD check-pairs parameter that asks Deacon to reject mismatched CASAVA or /1 and /2 record names without changing the default compatibility policy.

Propagate the validation setting through direct, streamed, and SRA-backed paired filtering while leaving single-read, contig, and post-merge per-record filtering unchanged.
Apply the configured Deacon target index independently to both BBMerge output
classes when target enrichment and pair merging are enabled. This removes
nonmatching former mates retained by the pair-atomic initial pass while
preserving genuinely interleaved, merge-disabled, and originally single-read
paths.

Both post-merge classes are refiltered: overlap_merged_pair, and the single_read
class BBMerge emits for pairs that did not overlap. Reads that never entered
MERGE_PAIRS, meaning anything that is not Illumina interleaved, keep the initial
pass untouched, because pair-atomic retention was never a question for them.

merge_pairs defaults to true as of v3.4.0, so merging and then refiltering is
ordinary behaviour for every run that supplies a target index, not an opt-in
experiment. The gate is target enrichment plus merging, so --no-merge-pairs or
--no-enrichment turns it off.

Emit one Deacon summary per post-merge query class and publish those summaries
beneath the existing target-enrichment results at summaries/postmerge. MultiQC
reporting is unchanged; the summaries are retained for later reporting
decisions.

Exercise the semantic premise directly against the locked Deacon CLI: a single
FASTQ containing one matching and one nonmatching former mate retains only the
match and reports two sequences in and one out. Channel routing remains
intentionally reserved for end-to-end validation.
"feat!: remove sourmash rapid screening" deleted test_sourmash_reference_params
along with the six reference and threshold params it exercised, and took the
following `class TestNvdParamsDefaults:` header with it. The 24 default-value
tests below that point silently became TestNvdParamsToNextflowArgs methods.

Nothing stopped running, so nothing failed and nothing warned. pytest collects
the same 110 tests in lib/py_nvd/test_models.py before and after this change;
they are only reparented back to the class whose docstring describes them.

Reinstate the header immediately before test_default_cutoff_percent, which is
where it sat before the removal.
"feat: retain BLAST hits across taxa" reframed the virus_* parameters as generic
target-enrichment controls in models.py, deliberately leaving the 3.x parameter
names alone. schemas/nvd-params.v3.5.0.schema.json did not exist at that point,
so it inherited the v3.4.0 wording and still described a prebuilt
"vertebrate-infecting virus deacon index" driving "virus read enrichment". That
is the text IDEs show on hover, so the published contract described a narrower
feature than the pipeline implements.

Rewords eight descriptions to match the model. The schema's longer phrasing is
kept deliberately: these descriptions are hover documentation and say more than
the terse CLI help strings, so this is not a blanket sync of the two.

schemas/nvd-params.v3.4.0.schema.json is left alone. It is the published
contract for a released version whose enrichment really was described that way.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants