ReproKit
Executable minimal reproduction builder for Python and Node.js projects.
ReproKit starts from a project and a command that already fails. It repeatedly removes files, dependencies, and text while executing the command after every accepted reduction. The final .repro capsule is independently replayed and cryptographically checked before it is considered valid.
Quick start
Python 3.10+; Node is needed only for Node fixtures/projects. Runtime dependencies: none.
python -m pip install https://github.com/virajsabhaya23/reprokit/releases/download/v0.2.0/reprokit-0.2.0-py3-none-any.whl
python -m reprokit reduce examples/demo_project \
--command "python -S app.py" \
--out out/demo.repro \
--report out/report.json \
--junit out/report.junit.xml
Verify independently:
python -m reprokit verify out/demo.repro
Run the 20-case benchmark:
python -m reprokit benchmark benchmark/corpus.json \
--out-dir benchmark/out \
--report benchmark/results.json
What ReproKit implements
- exact failing-command capture;
- normalized deterministic failure signatures;
- lexical Python/Node reachability pre-pass;
- executable greedy file reduction;
- executable dependency-line reduction;
- executable chunk/line delta reduction;
- timeout handling;
- no-shell subprocess execution;
- environment/tool provenance capture;
- secret scanning that blocks unsafe exports by default;
- portable
.reproZIP format; - SHA-256 file manifest + capsule hash;
- safe ZIP extraction/path traversal defense;
- independent replay verification;
- JSON and JUnit reports;
- deterministic Python/Node benchmark;
- GitHub Actions, Dockerfile, and devcontainer.
Benchmark scope
benchmark/corpus.json contains 20 deterministic local reconstructions:
- 10 Python cases anchored to BugsInPy project families;
- 10 Node.js cases anchored to all ten BugsJS project families.
They validate reducer mechanics and failure preservation. They are not represented as direct archived checkouts of 20 upstream bugs.
Security model
ReproKit:
- never invokes a shell;
- sanitizes the environment passed to the failing command;
- limits execution time;
- blocks capsule creation when common secret patterns are detected unless explicitly overridden;
- rejects path traversal when verifying a capsule.
A failing project is still untrusted code. Run third-party repositories inside a container/VM.
Limitations
- v0.2 is file/text/dependency reduction, not language-AST minimization.
- Failure identity is normalized exit code + output digest; nondeterministic failures may need a future custom oracle plugin.
- The benchmark measures controlled local reduction, not maintainer acceptance rate or production adoption.
Metadata
Release files for reprokit 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| reprokit-0.2.1.tar.gz | 15.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| reprokit-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.1 kB
Release files / reprokit-0.2.1.tar.gz
| Download URL | reprokit-0.2.1.tar.gz |
|---|---|
| Size | 15.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d073e23805a581a721e538ea628ca41bb0f7bc4d51530e41f15a414873094d83
|
|
BLAKE2b-256 checksum How to use checksums |
b9facf8ca716901392c06841b36b377f1d1913758fe39be8e6286961ca10e07d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / reprokit-0.2.1-py3-none-any.whl
| Download URL | reprokit-0.2.1-py3-none-any.whl |
|---|---|
| Size | 16.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4ce7cd73551fe2f01d719b3d7c516fd09c38379332dab77f6bf2383bf926fed7
|
|
BLAKE2b-256 checksum How to use checksums |
d6757628d28b37a8050b113498160f89610af1c0d091f5541828312476427dad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency log