Skip to content
Reproducible Humanities Research

To run a reproducibility checklist, you verify a fixed set of conditions — open data (or a documented reason it isn't), versioned code, a pinned environment, a single command that rebuilds every result, and outputs that match the published ones — and you confirm them on a machine that has never seen the project. The strongest single check is that clean-machine rebuild: if a stranger follows your README and one command regenerates your headline figures, you are reproducible; if not, the checklist tells you precisely which condition failed. Treat the list as a graded scale, not a moral pass/fail.

What does a working DH reproducibility checklist contain? ​

Keep it short enough to actually run. These items, in order, cover the lifecycle:

#ConditionHow you verify it
1Data available or access documentedDOI/link present; restrictions stated
2Code under version controlTagged release in Git
3Environment pinnedLock file with hashes committed
4One command rebuilds outputsmake all or a run script
5Outputs match published onesDiff against stored figures/tables
6Provenance recordedTransformation log / checksums
7Citation and licence presentCITATION.cff, licence file

How do I actually run the clean-machine test? ​

Do not trust your own laptop — it carries hidden state. Use a fresh container so only what you committed is available:

bash
docker run --rm -it -v "$PWD":/p -w /p python:3.11-slim bash
# inside, follow the README verbatim:
pip install --require-hashes -r requirements.txt
make all

Then compare. If your pipeline writes figures/ and tables/, store reference copies and diff:

bash
# numeric tables should match exactly; commit expected outputs
diff <(sort tables/summary.csv) <(sort expected/summary.csv) && echo "PASS"

Any line you had to improvise, or any output that differs, is a failing checklist item with a clear fix.

Why does reproducibility differ for humanities data? ​

Because perfect openness is not always possible. Archival material may be in copyright, personal data may be restricted, and a licensed corpus cannot be redistributed. The checklist handles this honestly: item 1 is satisfied by documenting the restriction and providing a synthetic or sample subset so the method still reproduces even when the full data cannot. Reproducibility of the pipeline and reproducibility of the data are separate goals — aim for the highest level each constraint allows.

How do I grade the result instead of pass/fail? ​

Borrow the bronze/silver/gold idea:

text
Bronze — code + data archived with a DOI, README present
Silver — pinned environment + one-command rebuild that runs clean
Gold   — automated CI rebuild on a sample + outputs verified against expected

This gives a project something to aim at and lets reviewers see where it stands, rather than a binary that discourages partial-but-real progress.

Can I make the checklist run itself? ​

Yes, and you should for anything long-lived. A continuous integration job converts the manual checklist into an automatic guard:

yaml
jobs:
  reproduce:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install --require-hashes -r requirements.txt
      - run: make smoke          # fast subset of the pipeline
      - run: python verify_outputs.py   # compares to expected/

Now every commit that breaks reproducibility fails the build on the spot, instead of surprising you years later when a reviewer tries to re-run the work.

Key Takeaways ​

  • A reproducibility checklist is a short fixed list that converts a hope into a verified yes/no.
  • The clean-machine rebuild is the strongest single test — run it in a fresh container, not your laptop.
  • Cover data, version control, pinned environment, one-command rebuild, output match, provenance, citation/licence.
  • For restricted humanities data, document the restriction and ship a sample so the method still reproduces.
  • Grade with a bronze/silver/gold scale rather than a discouraging pass/fail binary.
  • Automate the checklist in CI so reproducibility regressions fail the build immediately.

Frequently Asked Questions ​

What is a reproducibility checklist? ​

It is a short, fixed list of conditions a project must meet before you call a result reproducible — data available, code versioned, environment pinned, one command to rebuild outputs, and results that match. It turns 'I think it reproduces' into a verified yes or no.

What is the single strongest test of reproducibility? ​

The clean-machine test: on a computer that has never seen the project, follow the README and run one command; if it produces the same headline figures and tables, it reproduces. Everything else supports passing that test.

What is the difference between reproducible and replicable? ​

Reproducible means the same data and code give the same result. Replicable means a new study with new data reaches a compatible conclusion. A checklist targets reproducibility, which is the part fully in your control.

How often should I run the checklist? ​

At least at submission and before any public release or archive deposit, and ideally automatically on every change via continuous integration so regressions surface immediately.

Do I need every item to pass for the work to count? ​

No. Treat the checklist as a graded scale, not pass/fail. Some sensitive archival data can't be shared openly; document the restriction and aim for the highest achievable level rather than abandoning the effort.

Can I automate a reproducibility check? ​

Yes. A continuous integration job that builds the pinned environment, runs the pipeline on a sample and compares outputs to stored expected values catches most regressions without manual effort.