                       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.
