The Requirements Donkey: deterministic auditing of whether code honors its implied, documented, and specified requirements. Computes the PPI (Polysemy Preservation Index). Local, zero-exfiltration -- your code never leaves; only the verdict does.
Project description
The Requirements Donkey + PPI — open standard & reference implementation
The public, verifiable home of the PPI (Polysemy Preservation Index) and the Requirements Donkey that computes it. Every number on doloop.io/ppi recomputes byte-identically from these files. No model sits in the verdict path.
What's here
PPI_STANDARD.md— the open standard: the formula, the 6 dimensions, the versioned inputs.reqdonkey/— the reference implementation (deterministic):dim1.pycode-internal consistency (validation taint via the Semgrep witness; error-handling- resource-cleanup + type-hints via
ast; a non-adoption FLOOR so unused readings aren't penalized) ·dim2.pydoc-reader (reqlex@v1lexicon + RFC/CWE refs + undoc-API) ·dim3.pycode↔doc concordance + the provenance tell ·dim4.pyspec-conformance (vendoredMUSTclauses; Heartbleed vs RFC 6520 §4) ·ppi.pythe scalar ·ratchet.pythe per-tenant memory ·record.pythe unified Requirement (3 provenance sources, one shape).
- resource-cleanup + type-hints via
THEORIES.md— the falsifiable ledger: every claim has a test that could have failed.ppi_benchmark.json— the published corpus + PPI rows.global_norms.py/global_norms.json— the global norms derived from the corpus (dim 6).designs/— the design recommendations behind each dimension.
Install + run (local, zero-exfiltration)
pip install -e . # from this directory; PyPI name `reqdonkey` (publish pending)
reqdonkey /path/to/repo # the PPI, the inferred requirements, and the gaps
reqdonkey /path/to/repo --json
Same repo + same versioned inputs (ppi@v0, reqlex@v1, classes@v0, the vendored specs, the
pinned witness) → byte-identical PPI, gaps, and provenance tell.
Badge
Show your construction score. In CI, emit the shields endpoint JSON and serve it (commit it, or publish to a gist / Pages):
reqdonkey . --no-ratchet --badge > ppi-badge.json
Then in your README:

Color tracks the global bar (doloop.io/ppi): brightgreen ≥ 0.85, green ≥ 0.78, yellow ≥ 0.6.
Reproduce the benchmark + the global norms
modal run modal_benchmark.py # the corpus (or run reqdonkey per repo)
python3 global_norms.py # the global norms from the corpus
The method (why it's a moat, not a tool)
Witnesses (Semgrep today; Infer/CodeQL next) do the dataflow — the commodity a competent engineer gets for free. doloop's layer is the part no analyzer does: it infers the requirement from the codebase's own consistency (≥4 sites, ≥70% adherence → the norm; deviations = gaps; otherwise no requirement — no crying wolf), reads the docs and the governing specs, derives the global norms from the corpus, and collapses everything to the reproducible PPI. The inference + the 6-dimension framework + the published standards are ours; the witness is anyone's.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reqdonkey-0.1.0.tar.gz.
File metadata
- Download URL: reqdonkey-0.1.0.tar.gz
- Upload date:
- Size: 18.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
179517252a22faec89c8d763bd218bb3e22d0620f565ea95dfa1da28a274937c
|
|
| MD5 |
5fcd8b7a2594e8a3a22c2be88b5e1d23
|
|
| BLAKE2b-256 |
a8362880e8a6b249c99565aa877e4c64c7c127a1bf78377aa35dd7599b2799ec
|
File details
Details for the file reqdonkey-0.1.0-py3-none-any.whl.
File metadata
- Download URL: reqdonkey-0.1.0-py3-none-any.whl
- Upload date:
- Size: 19.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81099b77ef4aa647c45df0eb3e5b9aa7b38718276d1641260c83ee228a0310eb
|
|
| MD5 |
b85053ac75be55ea06dbaad6cc20ef82
|
|
| BLAKE2b-256 |
5bda03c2c29104fe8757c05907146a10c34b3043f84965f133e7ad09b4e0102f
|