Changes in version 0.99.19 New in this release - README audit fixes (stale version wording, bundled-era phrasing, exprs assay guidance, pkgdown badge branch, Stargazers icon) and seq_len() uniformity in test fixtures. - Bump to 0.99.19. Changes in version 0.99.18 New in this release - Name the microarray assay exprs (not logcounts); the shared analysis-matrix dispatcher recognizes exprs as log-ready (prevents a double-log transform). BRCA vignette shows real-data code only; fallback lives in an internal helper. - BRCA numbers re-derived live on current code (CV 0.785, log-rank 3.3e-17, eta-squared 0.79; MKI67/ESR1 re-derived exactly); honest limitation documented that internal CV sits inside the matched permuted-selection band (0.744–0.785); GPL annotation drift disclosed user-facing; bounded GEO download retries (3x). - Bump to 0.99.18. Changes in version 0.99.17 New in this release - Simplify fetch_gse20685() per review: drop the redundant BiocFileCache layer (GEOquery caches the series matrix itself) and the cache parameter; unify ExpressionSet/SummarizedExperiment handling with as(, "SummarizedExperiment"). File goes from 226 to 178 lines; the remaining code is strictly probe-to-gene collapse and survival-metadata extraction. - Name the microarray assay exprs (not logcounts, which means log-transformed sequencing counts); the shared analysis-matrix dispatcher now recognizes exprs as log-ready alongside logcounts/vst, preventing a double-log transform. Pinned by cross-consumer tests. - Corrected overclaim: BRCA internal CV (0.78) does not clearly exceed a selection-driven noise control (matched permuted band 0.744–0.785); signal evidence restated as MKI67/ESR1 directions + risk separation — see vignette Limitations. - Bump to 0.99.17. Changes in version 0.99.16 New in this release - Scope fallback seed with withr::with_seed() (no global RNG side effects; clears BiocCheck set.seed WARNING) and use seq_len() (clears 1:... NOTE) in .brca_fallback_cohort(). - Bump to 0.99.16. Changes in version 0.99.15 New in this release - fetch_gse20685() handles RangedSummarizedExperiment from newer GEOquery (assay/rowData/colData branch) with sanitization-tolerant column matching; all processing wrapped in tryCatch → NULL fallback; download bounded via withr timeout (Bioconductor Appendix C). Fixes r-universe source ERROR. - case-study-brca vignette shows real-data code only; synthetic generator moved to internal .brca_fallback_cohort(); data-source provenance note, inline deaths/events-per-parameter/CV statistics, and References (Li et al. 2010) added. - case-study-impact vignette: fixed missing cutpoint in validate_external() demo; corrected stale offline-data claim. - Bump to 0.99.15. Changes in version 0.99.14 New in this release - case-study-brca vignette now uses real GSE20685 data downloaded from GEO via GEOquery and cached via BiocFileCache, with a synthetic offline fallback. Added fetch_gse20685() helper (R/geo_utils.R). - Bump to 0.99.14. Changes in version 0.99.13 New in this release - Fix isTRUE(vector) filter in R/design_audit.R (pairwise_table$redundant vector) that caused redundant_variable flag and dropped_vars to be empty on r-universe checks; restore design_audit redundancy detection (3 test failures → 0). Bump to 0.99.13. Changes in version 0.99.12 New in this release - General for-loop refactor (BiocContributions#168, DarioS): replaced all for loops with *apply/Reduce/vectorized idioms across R/, inst/report_template.Rmd, vignette case-study-confounder-audit.Rmd and the testthat helpers — 36 loops total, including the cited design_terms example (now vapply+Reduce and t shadow fix); bump to 0.99.12. Changes in version 0.99.11 New in this release - Fix NEWS.md stale inst/script → inst/scripts and qualify 3 bare plot() as graphics::plot(); bump to 0.99.11. Changes in version 0.99.10 New in this release - Fix remaining DataFrame qualification (S4Vectors::DataFrame in all vignette colData constructions) and enforce LF line endings via .gitattributes. Changes in version 0.99.9 New in this release - Fix setNames import (stats::setNames, R CMD check NOTE → OK on linux/macos/windows). Changes in version 0.99.8 New in this release - Trigger rebuild to confirm 0.99.7 methods fix is stable (R CMD check 0 WARNINGS). Changes in version 0.99.7 New in this release - Fix methods in Imports (re-add after over-trim in 0.99.6 that caused R CMD check WARNING: '::' import not declared from 'methods'). Changes in version 0.99.6 New in this release - Proactive hygiene (BiocContributions#168): full MIT LICENSE text, trimmed Imports (stats/graphics removed, Biobase dropped from Suggests), removed empty inst/extdata, renamed inst/script → inst/scripts per Bioc convention, added package-level ?rnaSentry man page, synced remaining vignette title: with numbered VignetteIndexEntry, and fixed CRLF → LF. Changes in version 0.99.5 New in this release - Zero-nit polish (BiocContributions#168): expanded Introduction to a self-contained abstract (objective, models, functions, Bioconductor motivation), added inline comparison table to Positioning, synced 3 vignette titles with numbered VignetteIndexEntry, made GEO demo conditionally evaluated (requireNamespace("GEOquery")) with BiocFileCache note, fixed inst/script to write to tempdir() (not inst/extdata), and removed remaining c()-growth / 1:n nits. Changes in version 0.99.4 New in this release - Reviewer fixes (BiocContributions#168): numbered vignettes 1.–6. for browseVignettes() ordering, removed bundled GEO data from inst/extdata in favour of GEOquery (see inst/scripts/repro_gse20685.R; vignettes now use synthetic cohorts offline with GEOquery example eval=FALSE), added Positioning and Prior Art to introductory vignette, replaced 2 vectorizable for loops with d[terms] <- cd[terms] assignment, and switched vignette colData constructions to S4Vectors::DataFrame. Changes in version 0.99.3 New in this release - Fix duplicate chunk label setup collision with inst/report_template.Rmd that caused vignette rnaSentry.Rmd to fail during R CMD build (renamed 6 vignette setup chunks to unique labels; set render_report = FALSE in the main vignette's pipeline call). Changes in version 0.99.2 New in this release - Expanded Description field in DESCRIPTION to meet BiocCheck's 3-sentence minimum. - Added unique labels to all 51 previously unlabeled vignette code chunks across 6 vignettes. Changes in version 0.99.1 New in this release - Removed inst/CITATION (no preprint/publication with DOI yet; eliminates BiocCheck WARNING). - Replaced all suppressWarnings() calls with withCallingHandlers(..., warning = function(w) invokeRestart("muffleWarning")) to eliminate the BiocCheck suppressWarnings NOTE while preserving the same graceful-failure behavior in survival model fitting. Changes in version 0.99.0 New in this release Case studies and documentation - New vignette getting-started: the exact CSV -> SummarizedExperiment bridge for your own data (read counts.csv + clinical.csv, intersect sample IDs, load_counts(), design_audit(), then run_rnaSentry()). README gains the same block under "Getting started with your own data". - The pkgdown site (https://ghrieb.github.io/rnaSentry/) is deployed from the ci branch (push or manual dispatch) so that main holds only package code, per the Bioconductor submission requirements; the case-study vignettes are live on the site. - New bundled case-study data: inst/extdata/gse20685_case_study.rds, a 3000-gene x 327-sample subset of GSE20685 (Li et al., 2010; Affymetrix GPL570) with overall-survival metadata, built via validation/repro_gse20685.R in the GitHub repository. - Three new offline-safe vignettes: case-study-brca (full pipeline on the bundled breast-cancer subset), case-study-confounder-audit (planted batch/region redundancy recovered as a minimal design), and case-study-small-cohort (the events_per_parameter guardrail and fold-level instability). - The four pipeline vignettes now carry figures, all generated from bundled offline data at build time (no network access needed): Kaplan-Meier risk groups, an adjusted Cox hazard-ratio forest, a parametric survival overlay, and a subtype-colored PCA audit scatter in case-study-brca; batch- and region-colored PC1-PC2 scatters in case-study-confounder-audit; an external-cohort Kaplan-Meier split in the main vignette; and a per-fold cross-validated concordance stripchart in case-study-small-cohort. - The case-study vignettes were re-written as a three-tier naive-vs-guarded narrative (naive analysis -> rnaSentry standing guard -> counterfactual impact), and a landing page case-study-impact adds a master impact table across the four failure modes (wrong direction, confounded design, underpowered discovery, false transfer) plus the reproducible C + C_rev = 1 invariant. The naive tiers are scripted inline (manual univariate screening, default-convention concordance, unadjusted design) and build fully offline. - README now carries a status note, four case studies (including the LUAD discovery-to-external honest negative, GSE31210 -> GSE50081), a positioning/prior-art section (asuri, signifinder, SurvMarker, mRNAsi), and a Contributing pointer. Added CONTRIBUTING.md and NEWS.md. - README gains an "Upcoming case studies" section listing three planned case studies: a clinical-covariate trap on the bundled GSE20685 subset, a batch catastrophe on the GSE31210 + GSE30219 identical-GPL570 merge, and a cross-histology LUAD -> LUSC transfer on GSE30219. They will ship as new vignettes once the analyses are finalized. Engine reproducibility - Reproducibility is now scoped with withr::with_seed() in build_signature() / run_rnaSentry(): the documented seed argument is still fully reproducible, but the caller's RNG state is left untouched (previously a set.seed() call leaked into the session). - R dependency raised to R (>= 4.5.0) to track the Bioconductor 3.21 devel build. - build_signature() and run_rnaSentry() examples are now self-contained and runnable (\donttest). Opt-in parallel cross-validation - build_signature() and run_rnaSentry() gain a BPPARAM argument (Bioc-native, BiocParallelParam). Cross-validation stays strictly serial by default (BPPARAM = NULL); parallel evaluation is opt-in and only engaged when a BiocParallelParam object (e.g. BiocParallel::SnowParam(2)) is supplied. - Reproducibility is preserved under parallelism: the documented seed continues to scope all fold partitioning inside withr::with_seed(), so per-fold evaluation is deterministic and a parallel run is bit-identical to the serial run (pinned by dedicated tests in test-build_signature.R). - BiocParallel is a Suggests-only dependency: all calls are namespace-qualified behind a requireNamespace() guard, so the package works unchanged on installations without BiocParallel. Power analysis - The simulation study (validation/simulate_study.R) gains a power analysis of external-cohort transfer: two signal tiers calibrated to effective concordance 0.608 / 0.654 show transfer power monotone in external event count, < 0.30 at ~35 events (the small-cohort trap), and = 0.80 at ~300 events for the moderate tier. All 15 simulation targets pass. Earlier in the 0.99.0 cycle - Guardrails: possibly_log_scaled (detects pre-logged data stored as counts), events_per_parameter (warns below ~5 events per signature gene), load_counts() intake audit (duplicate samples, non-integer counts, empty rows, Ensembl/non-syntactic IDs) with a flag ledger carried into the rendered report. - Signature lock: run_rnaSentry() is single-use per session and refuses a second run until lock_signature(sig, lock = FALSE) releases the lock, preventing silent gene-set re-selection after survival analysis. - External validation never recomputes the cutpoint from external data; the discovery cutpoint is applied unchanged. - Validation: a statistical-parity suite (147 blocks / 457 expectations), regression tests, the simulation study (validation/simulate_study.R), real-data face validity (validation/repro_gse20685.R), and a live GEO cross-cohort run (GSE31210 -> GSE50081, validation/repro_live_geo.R), including the documented CV-optimism (selection-leakage) finding. - Sign-convention fix: concordance now consistently uses reverse = TRUE (higher score = higher hazard), pinned by parity tests and the C + C_rev = 1 invariant.