Changes in version 0.2.0 (2026-06-20) - risk_score() gains a major_version_grace parameter (default 1L) -- when the installed version is one or more major versions ahead of an entry's from_version, the entry is suppressed entirely. This prevents historically wide version windows (e.g. a major package rewrite from several years ago) from generating false-positive flags for users who are already well past the breaking-change transition. - check_db_staleness() gains a from_version_major_threshold parameter (default 1L) -- flags database entries where the current CRAN release is one or more major versions ahead of from_version, indicating the window floor may be too wide and the entry may need its from_version raised or the entry closed. New status values: "stale_ceiling" (the previous "stale" status, renamed for clarity) and "stale_floor". Changes in version 0.1.5 - Fixed remaining relative URI in README.md -- CODE_OF_CONDUCT.md link now uses the full absolute GitHub URL. Resolves CRAN pre-check NOTE: "Found the following (possibly) invalid file URI". - Updated MatchIt::matchit database entry: narrowed from_version from 3.0.2 to 4.6.99 to reflect that the 3.x -> 4.x rewrite is long complete and active users are on 4.x. Changes in version 0.1.4 - Fixed invalid relative URIs in README.md -- CODE_OF_CONDUCT.md and CONTRIBUTING.md links now use absolute GitHub URLs. Resolves CRAN pre-check NOTE: "Found the following (possibly) invalid file URI". Changes in version 0.1.3 - Added CONTRIBUTING.md with guidelines for contributing to the package and to the breaking-changes database (reproducr-db). - Added CODE_OF_CONDUCT.md (Contributor Covenant). - Added LICENSE and LICENSE.md files for the MIT licence. - Fixed bug in .resolve_current_versions() where packages appearing in multiple library paths caused a "more elements supplied than there are to replace" error. Now takes only the first match. - Improved test coverage from 82% to 86%. Added tests/testthat/test-utils.R covering .parse_renv_lock(), .hash_object(), .renv_lock_exists(), .get_os(), .pad(), and .version_in_window(). - CONTRIBUTING.md, LICENSE.md, CODE_OF_CONDUCT.md, and codecov.yml added to .Rbuildignore -- present in the GitHub repository but excluded from the CRAN tarball. - Added Codecov integration -- coverage badge now shown in README. - Added GitHub issue templates (bug report, feature request, database entry suggestion) and PR template. Changes in version 0.1.2 Breaking-changes database - check_db_staleness() now skips entries marked closed = TRUE -- these are intentionally closed version windows (e.g. historical base R changes) that should not be flagged as stale. Five base R entries (stats::sample, stats::rnorm, stats::runif, stats::rbinom, stats::hclust) are now marked closed in reproducr-db. - Updated 19 stale to_version ceilings in reproducr-db to cover current CRAN releases (dplyr, ggplot2, tidyr, purrr, readr, stringr, data.table, lme4, broom, caret). - Added caret::train as a new database entry (version window 6.0.99 to 7.0.9). - Added closed and closed_reason fields to the reproducr-db JSON schema. Reports and badges - repro_report() HTML output now uses commonmark for proper Markdown rendering -- tables, headers, and code blocks render correctly in all browsers. Falls back gracefully with a message if commonmark is not installed. Added commonmark to Suggests. - Risk register in the "pharma" report style is now a compact summary table rather than individual cards -- more readable in regulated workflows. - repro_badge() moved to its own file (R/repro_badge.R). Bug fixes - Fixed non-ASCII characters (em dashes) across all R source files -- certify.R, utils.R, check_db_staleness.R, reproducr-package.R, audit_script.R, risk_score.R, repro_report.R. Resolves R CMD check WARNING on Windows. Infrastructure - Migrated all repositories to the repro-stats GitHub organisation. - Added reproducr-cmc to the gallery -- a CMC statistical package covering dissolution f2 (ICH Q1B), stability shelf-life (ICH Q1E), and assay method validation (ICH Q2(R1)). Pharma-style QC report, renv locked, 20 certified outputs. Changes in version 0.1.1 - Fixed audit_script(renv = TRUE) incorrectly falling back to the installed library when a valid renv.lock was present. The regex parser was matching the R version field in the lockfile header, causing a length mismatch. Now uses jsonlite when available for robust JSON parsing, with a corrected regex fallback. - Fixed audit_script() to skip prose lines in .Rmd and .qmd files -- only lines inside fenced ```{r} code blocks are now parsed. Previously, inline backtick references like `stats::sample()` in prose were incorrectly detected as qualified calls, producing false positives when auditing vignettes. - Added check_db_staleness() -- compares to_version ceilings in the breaking-changes database against current CRAN releases. Returns a tidy staleness_report data frame with "ok", "stale", or "unknown" status per entry. A weekly GitHub Actions workflow opens an issue in reproducr-db automatically when stale entries are detected. - Narrowed version windows for base R RNG entries (stats::rnorm, stats::rbinom, stats::runif, stats::sample) from to_version = "4.9.9" to "3.6.9". Users on modern R (>= 4.x) were being falsely flagged for a 2019 change they are all on the same side of. - Narrowed version window for stats::hclust from "4.9.9" to "4.0.9" for the same reason. - Added version window design principles to R/breaking_changes_db.R and expanded vignette("contributing-to-the-database") with three rules for setting to_version and a quick-reference table. - Launched reproducr-db -- a companion repository for community-contributed breaking-change entries. All 29 existing entries are available as JSON files with a validation CI workflow on every PR. - Added jsonlite to Suggests to support robust renv.lock parsing. - Added spelling wordlist (inst/WORDLIST) -- no spelling errors. Changes in version 0.1.0 - audit_script() -- parse .R, .Rmd, and .qmd files to extract all qualified pkg::fn calls with version resolution from renv.lock or the installed library. - risk_score() -- three independent risk checks: "changelog" (curated database of known breaking changes), "seed_check" (flags stochastic functions without a nearby set.seed()), and "locale_check" (flags locale-sensitive operations). - certify() -- hash and store analytical outputs as a signed baseline. - check_drift() -- compare current outputs against a stored baseline; reports "ok", "drifted", "missing", and "new" statuses. - list_certs() -- inspect all certifications stored in a project's .reproducr.rds file. - repro_report() -- render audit reports in three styles ("minimal", "academic", "pharma") and three formats ("text", "md", "html"). - repro_badge() -- generate a shields.io reproducibility status badge and optionally insert it into README.md. - Initial breaking-changes database covering dplyr, tidyr, ggplot2, readr, purrr, stringr, lubridate, broom, data.table, lme4, and base R (R 3.6.0 RNG changes, R 4.0.0 hclust() tie-breaking).