Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,50 @@ _Editorial 2026-07-20: internal gate codename replaced by its external name thro

## [Unreleased]

## [5.1.0] - 2026-08-31 (the profile a stranger can read · MINOR)

### Added — receipt envelope profile and its conformance vectors

`docs/RECEIPT_ENVELOPE_PROFILE.md` and the ten vectors under `conformance/envelope_profile/`
landed on `main` in #159. This release is what makes them reachable for anyone who is not
reading the repository directly.

### Fixed — the profile was not in the distribution, and no rule had removed it

**Measured before the fix:** `docs/RECEIPT_ENVELOPE_PROFILE.md` appeared **0 times** in the
sdist and **0 times** in the wheel built from `main` at `27a84db3c6dc`. The vectors were
already complete — 21 of 21 files, 10 of 10 `case.json` — because `graft conformance` covers
them.

**The cause is worth stating precisely, because the obvious explanation was wrong.** No
`prune` and no `exclude` rule matched the file. `MANIFEST.in` is an allowlist, and the file
was simply not on any line: it was missing **by absence, not by exclusion**. Looking for the
offending prune rule would have found nothing and left the document out.

One `include docs/RECEIPT_ENVELOPE_PROFILE.md` line fixes it. **Measured after the fix:** 1
occurrence in the sdist, the file readable from the archive at its full 240 lines, `docs`
entries in the sdist 19 → 20 — exactly one more. The wheel still carries 0, and that is
correct: the wheel is the import package and prose does not belong in it.

Why this matters beyond packaging: the profile says a stranger can recompute the result. A
profile that ships its vectors without the document explaining what they prove asks the
stranger to take the explanation on trust.

### Added — mutation operator freshness

`scripts/mutation_operators_fresh.py`. **It is a script, not a gate.** It reports whether the
mutation operator set has gone stale against the code it is meant to mutate; nothing blocks
on its output.

### Why MINOR and not PATCH or MAJOR

Measured against tag `v5.0.0`: 23 commits, 41 files, 2071 insertions, 32 deletions, **0 files
removed**. Across all of `src/`: **0 removed public names, 0 removed or changed signatures**
(`-def`/`-class` lines in the diff: zero). One new public function, `classify_eval_claim`, and
one private helper. New shipped material (the profile document, ten vectors) rules out PATCH;
nothing removed and no signature changed rules out MAJOR.


## [5.0.0] - 2026-08-25 (the cap runs before the work it bounds · MAJOR)

### Added — reported-version status (additive; no further major bump)
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ type: software
license: MIT
repository-code: "https://github.com/b7n0de/proofbundle"
url: "https://github.com/b7n0de/proofbundle"
version: 5.0.0
version: 5.1.0
doi: 10.5281/zenodo.21110642
keywords:
- cryptography
Expand Down
15 changes: 15 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,21 @@ graft conformance
graft formal
graft docs/readiness_pack
include docs/adr/renewal_policy.example.json

# PB-2026-0831-01: the receipt-envelope profile and its vectors landed on main in #159, but the
# profile document itself was NOT in the sdist and NOT in the wheel — measured, 0 hits in both.
# NO prune or exclude rule removed it. MANIFEST.in is an allowlist and the file was simply not on
# any line; it was missing by absence, not by exclusion. That distinction matters: looking for the
# offending prune rule would have found nothing and left the file out.
#
# The vectors under conformance/envelope_profile/ were already shipped by `graft conformance`
# (21 of 21 files, 10 of 10 case.json, measured). Only the prose document was missing, and it is
# the half a reader needs to know what the vectors prove.
#
# Named by exact path rather than `graft docs`, for the same reason the ADR example above is: a
# blanket graft would also ship documents whose internal links point at pruned repo files, which
# breaks test_docs_truth from the sdist.
include docs/RECEIPT_ENVELOPE_PROFILE.md
graft scripts

# Never ship: the Rust verifier + build artifacts, repo/CI meta, caches, VCS, big review packs.
Expand Down
2 changes: 1 addition & 1 deletion RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ The order below is the convention, not a suggestion. A release is a fact about `
## Beta / pre-release (any future pre-release line)

Historical note: the 2.0.0b1–b3 line shipped this way until **2.0.0 final** (2026-07-09); the
stable default has since moved on to the 4.x line (current: 5.0.0) and the `[experimental]` extra
stable default has since moved on to the 4.x line (current: 5.1.0) and the `[experimental]` extra
ships with normal releases.
The checklist below is the convention for any FUTURE pre-release: `pip install proofbundle` never
pulls a PEP 440 pre-release, so the current stable stays the default while a preview stabilizes.
Expand Down
4 changes: 2 additions & 2 deletions docs/readiness_pack/MANIFEST.sha256
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
c9118da583581c150090ddeef9932b8082690a8854320f41a553a3dc60835ed1 AUDITOR_OPEN_POINTS.md
3d66a85ff79c0258d794e7c8d8740f8a3b7a62e6ffd9bd7dada158a939964660 OPEN_QUESTIONS.md
248c109b3ed8d0f495fdc4bf7fe8c23a2467a91065c4cae3f6a9629df0d59d60 PROGRESS.md
940ecb46728863dad2a361c89f36da9b766f4825f8147cd3ba49126424b81819 PROGRESS.md
6ccab20c7daef6d71c13e0dcacba24a6a18dd480b5d41418e01b5bf2983ffc9c README.md
c9ceb3f92a2f720d901affa8defb47004b58a51029317208db641ce53d90b284 REPRODUCTION_RUNBOOK.md
1b4e4316aaea6c962664fc08945c65a048147fdc4ad89a1e694818b934ef6fa2 calendar_independence.md
9a9a9e4956076c6c287dada5de82eb66cf259cec89a6e791088e1733a74c5ea3 differential_matrix.md
9d638d26e51804c11b65b33f5220f1b857c47e41c6d7ebb8bf3398f8cf5b0cf3 index.json
5115c77bd80bc18cb671f5dc8632cca3781a6e5df37b6fd1ae97cc6a163436f7 index.json
d1d1e04e9d2de38443ec2b953c3a9c968a303e81977cb7e128468945160b56d7 rust_parity_scope.md
f2a77cacd7fefe39450edb1857ec2ffc25a4d4c3d8d68efa094ba84ab7325708 tamper_resistance.md
6d6a4065a1e7e071819960cef8e0117ada98e931cd62fd94341b45af4865711a threat_model_delta_360.md
2 changes: 1 addition & 1 deletion docs/readiness_pack/PROGRESS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Honest progress accounting (No-Overclaim)

The denominator is the full distance from the 3.3.0 baseline (current release: 5.0.0) to the externally
The denominator is the full distance from the 3.3.0 baseline (current release: 5.1.0) to the externally
audited, trustworthy state. That state is defined by audit completion and closed findings, not by any
version number — the audit is decoupled from the version line and happens when maturity is reached,
whatever version is current then. This is a factual progress statement, not a forward promise, and it is
Expand Down
Loading
Loading