Releases: SybilGambleyyu/pdf-change-benchmark
Release list
PDFCAB 1.24.1
Corrects the public installation instructions. PDFCAB is currently distributed through checksummed GitHub Release artifacts; the former bare PyPI command did not resolve to a published package.
No fixture or scoring behavior changed from 1.24.0.
PDFCAB 1.24.0
Adds an unsigned terminal-footer control for PFP015 and updates the semantic-signature tail control with the new general terminal-footer event.
The deterministic fixture set now contains 161 paired PDFs. It is validated against PDFFence 1.24.0 at 161/161 process-bound score cases; artifacts are fixed-timestamp reproducible and checksummed.
PDFCAB 1.23.0
Terminal-footer signature control
This 160th paired fixture keeps an older semantic signature bound to its historical revision, then appends unlinked bytes after the final PDF footer. The expected contract is the established own-revision event and PFP013, plus stored-byte evidence.
It tests static review evidence only; it does not claim cryptographic signature validity.
Validation
- 90 source tests and Ruff passed.
- PDFFence 1.23 scored every fixture through the process-bound public CLI: 160/160.
- Fixed-timestamp wheel and source archive builds were byte-identical; Twine checks passed.
- Fresh Python 3.12/3.13 wheel installs and Python 3.12 source-archive installs passed
pip check, fixture verification, and the complete score.
See SHA256SUMS for release-asset hashes.
PDFCAB 1.22.0
Adds a 159th deterministic paired-PDF control for PFP014. Both signatures remain correctly bounded to their own historical revision after a later incremental update; only the candidate widens the excluded gap before direct /Contents.
The fixture isolates historical Contents coverage from current-file PFP011 and endpoint-only PFP013 evidence.
Validation: 89 tests, Ruff, deterministic fixture regeneration, reproducible wheel/sdist builds, and 159/159 process-bound scoring against PDFFence 1.22.0.
PDFCAB 1.21.0
Own-revision signature coverage fixture
Adds the 158th deterministic fixture pair, signature.own_revision_coverage_required, for PFP013.
Both PDFs retain an older semantic signature after a later incremental update, so neither range reaches the current physical end. Only the baseline reaches its own signing revision footer; the candidate stops before it. The public contract expects the own-revision inventory event and PFP013 only.
Validation: 88 tests, Ruff, reproducible wheel/sdist builds, and an exact 158/158 process-bound score against PDFFence 1.21.0. Public truth remains aggregate-only and does not disclose offsets, signature contents, certificates, or hashes.
PDFCAB 1.20.0
Direct ByteRange signature values benchmark
- Adds a 157th deterministic fixture pair for a semantic signature dictionary whose current ByteRange and exact direct
/Contentsgap remain intact while one top-level value becomes indirect. - Requires
signature_direct_value_inventory_changedand PFP012 only; PFP009 through PFP011 remain quiet. - Extends the process-bound PDFFence adapter mapping with PFP012.
The control is static object-layout evidence, not signature validity, digest, certificate, trust, transform, or permission validation.
Validation: 87 tests, Ruff, reproducible wheel/source builds, clean Python 3.12/3.13 wheel and Python 3.12 source-archive installs, and installed PDFFence 1.20 scores of 157/157.
SHA-256
pdf_change_benchmark-1.20.0-py3-none-any.whl:830d3073650fd07bc01301ed60f09f4f63ce44fd62af68aaefdb76f521416f9epdf_change_benchmark-1.20.0.tar.gz:3f96e1acc5c07206c6e82e19e1170b518cd341eb419d900b7107453febbbec0d
PDF Change Assurance Benchmark 1.19.0
Adds a deterministic Contents-bound signature coverage control. Both ByteRanges still reach the current file end, but the candidate’s excluded gap no longer exactly matches direct /Contents; the expected result is the generic coverage change plus PFP011.
Validation: 86 tests, reproducible wheel and source builds, Twine checks, and 156/156 process-bound PDFFence checks.
PDFCAB 1.18.0
Current coverage requirement control
- Adds a deterministic pair where both PDFs retain the same well-formed semantic ByteRange before their current physical ends.
- The candidate adds a distinct incremental revision, while coverage counts remain unchanged.
- Requires PFP010 and no coverage-change event, distinguishing a current-boundary requirement from PFP009's regression-only behavior.
The fixture asserts only static public outputs; it makes no signature-validity, certificate, permission, or trust claim and publishes no offset, signature content, or hash.
Verification
85 tests and Ruff passed; the PDFFence 1.18 source candidate scored 155/155 through the process-bound public CLI. Two fixed-timestamp builds produced identical wheel and source archives, and clean wheel/source installs passed pip check, fixture verification, and the complete score.
PDFCAB 1.17.0
Signature boundary controls
- Adds a field-root signature fixture where a valid incremental update leaves a well-formed ByteRange behind the current physical file end.
- Adds a private
/PieceInfo/Type /Sigand/ByteRangelookalike fixture that must not create signature inventory evidence. - Extends the public change contract with
signature_byte_range_coverage_changedand PFP009.
The deterministic corpus now contains 154 paired fixtures. It checks only fixed public static-analysis outputs and never asserts signature validity or publishes offsets, signature contents, certificates, digests, or private fingerprints.
Verification
84 tests and Ruff passed; the PDFFence 1.17 source candidate scored 154/154 through the process-bound public CLI. Two fixed-timestamp builds produced identical wheel and source archives, and clean wheel/source installs passed pip check, fixture verification, and the complete score.
PDF Change Assurance Benchmark 1.16.0
PDF Change Assurance Benchmark 1.16.0
The corpus now contains 152 deterministic paired-PDF cases. Two new controls
keep action-shaped data under a private /PieceInfo branch: one rewrites a
private action subtype and one adds a private additional-action container.
Their expected results are stored bytes alone, or reachability plus stored
bytes, with no active-content inventory evidence.
These controls caught the prior PDFFence 1.15.0 inventory false positive while
retaining coverage for standard semantic action roots and /Next chains.
The release was rebuilt, verified from clean installations on Python 3.12 and
3.13, and scored 152 of 152 cases through the public PDFFence CLI. See the
fixture contract and validation notes.
Verify downloads with SHA256SUMS.