Skip to content

ReproCheck 0.11.0b1

Pre-release
Pre-release

Choose a tag to compare

@RafaelMoreiraDev RafaelMoreiraDev released this 28 Sep 16:41
· 13 commits to main since this release

ReproCheck 0.11.0b1

This is the first public beta of ReproCheck.

ReproCheck audits a Python project for reproducibility problems that are cheap to
fix and expensive to discover later: an untracked data path, a floating action
tag, a dependency pinned in one file and missing from another. It reads the
project, writes a report, and can apply one safe fix with an audit trail.

What it does

  • Deterministic static audit. One rule per problem, each with a stable id
    (RC002, RC140, ...), a severity, a confidence and the evidence it fired on.
    The same tree always produces the same findings: no model, no heuristics that
    change between runs, no network calls.
  • Python and dependency consistency checks. A single version declaration
    where there should be one, dependencies declared in one place and used in
    another, unpinned or conflicting requirements across pyproject.toml,
    requirements*.txt and lock files.
  • GitHub Actions reference checks. Floating action tags, and a version
    declared by one file and required by another.
  • Reproduction attempt in an isolated working copy. reprocheck reproduce
    builds an environment for the project in a temporary workspace. The analysed
    project is never modified, and a fresh baseline is compared against the saved
    one so any difference is visible.
  • Optional runtime checks. --runtime-checks imports the project and runs
    pytest collection. It never executes test functions.
  • Human-readable reports. JSON for machines, Markdown for people, plus a
    terminal summary.
  • Baselines and diffs. Save a report as a reference and compare the next one
    against it, so "what changed since the last run" is an answer, not a diff of
    two JSON files by hand.
  • Deterministic fix suggestions. The suggestion engine reads the same facts
    as the checks, so a proposal can never contain a pattern the check did not
    prove was missing.
  • Safe fix application and rollback. --apply writes a backup and a JSON
    audit record for every change; --rollback restores the original bytes.

Install

pip install reprocheck==0.11.0b1

Requires Python 3.11 or newer. One runtime dependency, packaging.

reprocheck scan .
reprocheck suggest .

Beta limitations

Please read these before trusting a report.

  • environment.yml and Conda are not analysed. Dependencies are read from
    pyproject.toml and requirements*.txt.
  • CI that does not run on GitHub Actions is not analysed.
  • setup.py and setup.cfg have limited coverage.
  • A project whose version is derived from .git can fail to reproduce from a
    copy, because the copy is not a repository.
  • A virtual environment is not a security sandbox. reproduce runs the
    analysed project's build backend, and --runtime-checks imports its code,
    with your privileges. See SECURITY.md
    before pointing it at code you do not trust, and use a container or a VM.
  • Only RC140 has an applicable fix at the moment, one suggestion at a time.
    There is no "apply all" and no interactive prompt.
  • PASS means only that the checks which ran succeeded. Anything under
    Not verified — the full test suite, external datasets, remote URLs, index
    state — remains unknown.
  • ReproCheck reports facts about a repository. It is not proof that a
    scientific study is reproducible
    , and it does not attempt to establish that.

Verified

  • Python 3.11.16, 3.12.3 and 3.13.15: full suite green locally, and green in
    GitHub Actions on the same matrix.
  • Wheel and sdist installed and smoke-tested in clean environments, from this
    release and from the TestPyPI index.
  • pint, astropy and napari produce identical findings from an installed
    release, a locally built wheel and the published artifact.

Assets

reprocheck-0.11.0b1-py3-none-any.whl 171.713 bytes, sha256 3186b8a2…
reprocheck-0.11.0b1.tar.gz 272.613 bytes, sha256 190cd8e7…

The sha256 digests of these files are identical to the ones computed locally
before upload, on both PyPI and TestPyPI.

Reporting

Bugs and feature requests: https://github.com/RafaelMoreiraDev/ReproCheck/issues
Support scope: SUPPORT.md
Security: SECURITY.md