PageProof
Mutation-aware pagination consistency verifier for REST/GraphQL-style list APIs.
PageProof tests a property ordinary one-request API tests cannot answer:
Does a complete traversal still satisfy the API's declared visibility, ordering, continuation, and scope guarantees while the collection changes between pages?
Quick start
Python 3.10+. Runtime has no third-party dependencies.
python -m pip install https://github.com/virajsabhaya23/pageproof/releases/download/v0.1.0/pageproof-0.1.0-py3-none-any.whl
python -m pageproof verify examples/offset_concurrent_insert.json \
--out out/report.json \
--junit out/report.junit.xml \
--sarif out/report.sarif.json \
--minimized out/minimized.json
Unsafe contracts exit 2.
Safe control:
python -m pageproof verify examples/safe_cursor.json
Benchmark:
python -m pageproof benchmark benchmark/corpus.json \
--out benchmark/results.json
What is implemented
- offset, keyset/cursor, and Relay-style cursor traversal models;
- snapshot, stable-boundary, and best-effort consistency contracts;
- deterministic insert/delete/sort-key mutation schedules;
- duplicate and omission detection;
- monotonic/tie-break ordering checks;
- cursor round-trip checks;
- gateway/SDK continuation-token preservation checks;
- traversal termination;
- scope/filter preservation;
- deterministic SHA-256 result certificates;
- JSON, JUnit, and SARIF output;
- 50-case regression/seeded/safe benchmark;
- CI workflow and evidence manifests.
Corpus interpretation
The 15 issue/release-grounded cases are minimal semantic reproductions of the reported pagination failure class, not copies of the upstream products. They are tagged with their upstream source URL.
The local benchmark does not pretend to be a live run of Schemathesis or RESTler. Those baselines require their actual toolchains and are separately documented as an external validation step.
Security
Default verification is local and mutates only in-memory fixture state. No production endpoint is modified. Contract files cannot execute commands.
Limitations
- v0.1 is a deterministic reference engine rather than an arbitrary remote API traffic driver.
- GraphQL Relay semantics are represented by the connection/cursor contract, not a GraphQL parser.
- A live collection must declare its consistency model; PageProof does not impose snapshot semantics on best-effort APIs.
- Actual Schemathesis and RESTler comparative execution remains required before claiming superiority over those systems.
Metadata
Release files for pageproof 0.1.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 | |
|---|---|---|---|
| pageproof-0.1.1.tar.gz | 13.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pageproof-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.7 kB
Release files / pageproof-0.1.1.tar.gz
| Download URL | pageproof-0.1.1.tar.gz |
|---|---|
| Size | 13.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
182d4bdda4a80e479852aba6b1a1d1c55963cfe0b38464a167bb7a2d68ed6f38
|
|
BLAKE2b-256 checksum How to use checksums |
621baf2997b1b3b633fa036df408aeed2c12d961c9729faaa23fb12c9e4e9996
|
| 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 / pageproof-0.1.1-py3-none-any.whl
| Download URL | pageproof-0.1.1-py3-none-any.whl |
|---|---|
| Size | 14.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5978fbc1b592979f4b452d906813d62e228d161be83f3a913083d553a0921c68
|
|
BLAKE2b-256 checksum How to use checksums |
1bfb11cf5fd7d2a20f310eebdd918d9a45a6e28d4146a5c0843bdd1330101678
|
| 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