Skip to content

feat: NACHO 3.0.0 - #139

Merged
mcanouil merged 86 commits into
mainfrom
feat/nacho-3
Oct 18, 2026
Merged

mcanouil merged 86 commits into
mainfrom
feat/nacho-3

Conversation

@mcanouil

@mcanouil mcanouil commented Oct 11, 2026 •

Copy link
Copy Markdown
Owner

This brings NACHO 3 to main, ready for the 3.0.0 release.

NACHO 3 is a breaking release.
The object is now an S7 class, read with nacho_counts(), nacho_samples(), nacho_probes() and nacho_qc().
Quality control follows the nSolver thresholds by default, and a legacy preset gives back the NACHO 2 calls.
The report is built with Quarto, as HTML or a Typst PDF.
The app is rebuilt on bslib, with linked interactive plots, a guided tour, a background import with an upload preview, a sortable Samples table, and an Export page that also writes an R script of the analysis.

The NACHO app on the example data: the summary strip, the QC metrics plots, the Samples table and the Export page.

NEWS.md lists the changes since 2.0.8, and the article "Moving from NACHO 2" maps the old code to the new.
The branch holds 42 pull requests, each reviewed before it merged.

# Conflicts:
#	tests/testthat/test-autoplot.R
PCL needs three usable positive controls, since a correlation on two
points is always 1 and passed QC without assessing linearity.
A rebuild now warns only about samples whose positive factor was usable
before, so normalise() does not repeat what load_rcc() already said.
The other fixtures come from nSolver 4.0.0.3 and 2.3.
GSE346526 holds RCC files from the most recent nSolver version on GEO,
so the tests also cover data written today.
Whole-blood RNA raises LIG_NEG_A together with red blood cell miRNAs such
as miR-451a, so most samples of a whole-blood study fail Ligation_NEG.
GSE303669 and GSE317496, two independent PAXgene studies on GEO, show it.
load_rcc() now warns when more than half of the samples fail, gives the
miR-451a level, and points to relaxing the threshold rather than
dropping the samples.
The rule itself is unchanged.
The upload name went into file paths as given, and zip entries with ../
or absolute paths were extracted as given, which R before 4.5.1 does not
sanitise.
Upload names are now reduced to their base name, and an archive with an
entry outside its folder is refused before extraction.
An id column named like a computed column, such as ID or Date, was
dropped while building the object, and the validator then failed with
an unrelated message.
load_rcc() and as_nacho() now stop early and ask to rename the column.
A housekeeping gene name that matched no probe, such as a typo, gave a
NaN House_factor and NaN normalised counts while QC still passed.
load_rcc() and normalise() now stop and name the unknown genes.
dirname() gives forward slashes on Windows while the temporary folder
uses backslashes, so the upload-name test failed there.
Rewrite the development section for readers of the package: one sentence per line, active voice, plainer wording, and the PlexSet fix listed under R/app.R now that inst/app/ only wraps it.
Drop fixes and speed-ups to features that are new in 3.0.0, and fold the behaviour that still matters into the matching feature entries.
The selected point kept growing into a dark disc that hid the box and the points next to it. It now keeps its fill, grows a little and gets a rose ring, which stays apart from the group and flag colours.
All app figures, the README animation and the quick-start plot now show the current app. The script clears the sample selection and the focus before the shots that should not show them.
An id column called status, reason, n_flags, lane, lane_status or <metric>_status was overwritten by nacho_qc(), so the sample ids read pass or fail. load_rcc() and as_nacho() now refuse those names.
GSE270837 was measured on an nCounter SPRINT, so the vignette now uses its binding density limits.
With Preset and Imaging both open, the sidebar ran far below the
window. Each page now opens the threshold section that matches it,
such as Imaging on QC metrics, and folds the others.
Take the screenshots 1192 pixels tall, so the sidebar and most pages
fit, and give the animation a matching height instead of the gifski
default that squashed its frames.
@mcanouil
mcanouil merged commit e897918 into main Oct 18, 2026
7 of 8 checks passed
@mcanouil
mcanouil deleted the feat/nacho-3 branch October 18, 2026 22:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Type: Enhancement 💡 Issues related to enhancements, improvements, new features, or new analyses

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] font_family_exists() lists every system font on each call [Bug] girafe() rebuilds the Liberation font set even when font_set is supplied

1 participant