Logbook — shipped & next

Shipped, next, and deliberately never

ReproGuard is alpha. Every release so far has spent more effort removing false positives than adding checks — that ordering is intentional and stays the rule. The non-goals at the bottom matter as much as the plan above them.

How priorities get chosen

Four rules, applied in order. Anything that doesn't survive all four doesn't ship.

1. False positives before coverage

A check that cries wolf gets disabled within a week, and once disabled it never protects anyone again. A missing check only costs the finding it would have caught. So noise reduction outranks new codes, every release.

2. Explainable beats clever

Every finding carries a location, a plain-language description, a suggested fix and a confidence value. There is no ML scoring model and no opaque ranking — the score is a published formula you can recompute by hand.

3. Static first, execution optional

Default scans never run your code. Notebook execution exists behind --execute because it is the only way to catch some failures — and it is also slow, environment-dependent, and sometimes unsafe.

4. Never guess at code you can't parse

If a construct can't be understood, ReproGuard stays silent rather than emitting a plausible-looking finding. Silence is honest; a wrong finding costs trust.

Shipped

Four releases, in order. The later ones are mostly cleanup — which is the point.

v0.2

Correctness hardening

  • IPython magic and shell-line handling — no more bogus syntax errors on notebook cells
  • Conda environment.yml and lock-file dependency parsing
  • Path-scoped issue suppression via checks.ignore
  • Baseline and regression diffing (--baseline, --fail-new)
v0.3

GenAI category and rule engine

  • New GenAI category — 27 checks for prompts, LLM configs, agents, manifests
  • Repository hygiene checks
  • Custom rule engine: your own regex rules in .reproguard.yml
  • Profiles, auto-fixes, git-history secret scanning
  • LLM manifests and model cards
  • Parallel and kernel-aware notebook execution, GitHub Action
v0.4

Adoption and scale

  • reproguard init / explain / list
  • Incremental --since scans — seconds instead of minutes on PRs
  • Score trend history and --fail-trend
  • Dockerfile checks, CycloneDX SBOM export
  • GitLab Code Quality output, interactive HTML report
  • ~2× faster file walks and 40+ false-positive fixes
v0.5 current

Extending the edges

  • DEP004 — unpinned in-notebook pip install calls
  • SEC013 — credentials embedded in URL query strings
  • stdout streaming with -o - for piping into other tools
  • GitHub Action emits SARIF by default
  • False-positive fixes, including the HAND001 script-gating correction

Next: v0.6

Ordered by expected value per unit of risk. Nothing here is a commitment to a date.

v0.6 — in planning

Meet people where they already are

  • JupyterLab extension — scan without leaving the notebook
  • VS Code extension — inline diagnostics as you type
  • Prompt-suite drift detection — diff prompt sets across commits the way baselines diff findings
  • More --fix codes — widen auto-remediation beyond output stripping
  • Notebook diffs — report what changed between notebook versions, not just the raw JSON
v0.6 — under consideration

Correctness work queued from real scans

  • Language-aware analysis for R and Julia kernels (full AST parsing for R Markdown and Quarto is its own project, not this release)
  • dvc status integration — detect data that changed without re-training, beyond the static REPO007 file check
  • Presidio-backed deep PII mode as an opt-in extra

Later: v1.0+

Directional, not scheduled. Each of these is a product in its own right.

Platform

Team dashboard

Aggregate scan history across repositories. The local trend history is the foundation this would be built on.

Platform

REST API

Programmatic scanning and result retrieval, so ReproGuard can sit inside a larger release pipeline instead of only a CLI step.

Coverage

ML pipeline scanning

Scan whole Airflow and Kubeflow pipelines for reproducibility risk, not just individual notebooks and scripts.

Coverage

Data profiling integration

Hook into Great Expectations or whylogs so findings carry real data-quality context.

Non-goals

Things ReproGuard will not become. Saying no is what keeps the signal high.

Not a data versioning system

ReproGuard tells you a data read is unreproducible. It does not version the data. Use DVC or LakeFS for that.

Not an experiment tracker

It does not record runs, metrics or artifacts. Use MLflow or Weights & Biases.

Not a data observability platform

No lineage graphs, no catalog, no freshness SLAs. Use DataHub or Monte Carlo.

Not a production model monitor

Nothing here watches a deployed model for drift. Use Evidently, Arize or WhyLabs.

Not a linter or formatter

Style, naming and import ordering are somebody else's job. Use Ruff and Black.

Not a security scanner

The secret checks are a pre-production safety net for committed credentials, not a replacement for a real secrets scanner or a SAST pipeline.

ReproGuard's job ends where production begins: it answers "will this thing run and mean the same thing for the next person?" — nothing more.

Influence what ships

The most useful bug report is a false positive with a minimal reproduction. Those get fixed first because they're the ones costing you trust.

False positive

Open an issue with the smallest snippet that reproduces it, plus the real-world reason the code is fine. That reason usually becomes the gating rule.

Missed finding

Include the pattern and why it matters pre-production. Broad categories get a check; one-offs usually belong in a custom rule instead.

CI friction

If a gate is unusable on a real repository, that's a bug. Describe the repo shape and what you needed the gate to do.

Open an issue Full roadmap in the repo