diff --git a/CROSS_IMPLEMENTATION_REPORT.md b/CROSS_IMPLEMENTATION_REPORT.md index d60910c..5483518 100644 --- a/CROSS_IMPLEMENTATION_REPORT.md +++ b/CROSS_IMPLEMENTATION_REPORT.md @@ -83,7 +83,7 @@ these cases independently (§7 "Zweitverifier reproduziert den Conformance-Corpu to CONFIRM a genuine relying-party-supplied anchor, which no corpus case exercises (`--bitcoin-header` is not an allowed conformance verifyArg). -**All 14 of the 14 corpus cases are reproduced independently** (`crosscheck.py`, exit 0). Research note: +**All corpus cases are reproduced independently** (`crosscheck.py`, exit 0 — 14/14 on the recorded 3.2.0-era run this report documents; the corpus has since grown to 57 cases and the named `make conformance-crossimpl` gate re-runs the cross-check on the current corpus, 56/56 as of v3.7.0). Research note: a SOTA review (2026) confirms OpenTimestamps-over-Bitcoin as the strongest trust-minimized long-term *archival* anchor (permissionless, offline-verifiable, no trusted third party) — correctly used here as an OPTIONAL layer, not the primary trust — with Sigsum / RFC 3161 / transparency logs as lower-latency diff --git a/INTEGRATIONS.md b/INTEGRATIONS.md index f612e98..dd9d655 100644 --- a/INTEGRATIONS.md +++ b/INTEGRATIONS.md @@ -72,6 +72,29 @@ derives from the canonical `config.tests` JSON (the test suite IS the dataset). v1/v2 files are rejected with a clear message — re-export with a current promptfoo. In CI this composes with the GitHub Action: run promptfoo, emit the receipt, attach both to the run. +## lm-evaluation-harness (results_*.json adapter, v0.6; sample-count provenance since v3.7.0) + +EleutherAI's lm-evaluation-harness writes a results JSON per run. The adapter is file-based — no +lm_eval import: + +```python +from proofbundle.adapters import from_lm_eval_results +from proofbundle.evalclaim import emit_eval_receipt +from proofbundle import generate_signer + +claim, salts = from_lm_eval_results("results.json", "arc_easy", "acc", comparator=">=", + threshold="0.30", timestamp="2026-07-01T12:00:00Z") +receipt = emit_eval_receipt(claim, generate_signer()) +``` + +Metric keys resolve with the harness suffix convention (`acc` matches `acc,none`). The signed +provenance carries `git_hash`, task version, n-shot, sibling stderr — and, since 3.7.0, the +sample counts from the harness `n-samples` block: `effective_samples`, `original_samples` and +`skipped_samples`, validated fail-closed (negative counts raise; `effective > original` clamps +`skipped_samples` to 0 with both raw counts visible; `effective = 0` keeps the honest `n` +fallback). A silently subsetted run can no longer present itself as a full run under the same +signed claim. See `examples/lm_eval_receipt.py` for a complete offline round-trip. + ## Hugging Face Community Evals (`.eval_results/*.yaml`, v1.4) HF's Community Evals accept per-benchmark result entries with an optional string `verifyToken` diff --git a/README.md b/README.md index 330f88f..62b7950 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,10 @@ Every AI eval number you read — a safety benchmark, a capability score, a lead **unverifiable claim**. You trust the lab. There is no portable way to check, offline, that a result was signed by a stated party, has not been altered, and covers the samples it claims. -proofbundle is that check: a small MIT-licensed Python tool (a compact, auditable trusted core that -depends only on [`cryptography`](https://cryptography.io)) that turns a result into a signed receipt +proofbundle is that check: a small MIT-licensed Python tool (a compact, auditable trusted verify +core that depends only on [`cryptography`](https://cryptography.io); the package installs one more +hard dependency, the RFC 8785 canonicalizer [`rfc8785`](https://pypi.org/project/rfc8785/), used on +the emit and canonicalization paths) that turns a result into a signed receipt anyone can verify from a single file. In plain terms it is the cash-register receipt of an AI test result: it shows who claimed the number and that nobody quietly changed it, not that the test was good. Without a receipt there is nothing to check at all. @@ -133,7 +135,7 @@ version history (see also [CHANGELOG.md](https://github.com/b7n0de/proofbundle/b ## Install ```bash -pip install proofbundle # core: offline verify + plain emit (dependency-free) +pip install proofbundle # core: offline verify + plain emit (two deps: cryptography, rfc8785) pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer) pip install "proofbundle[inspect]" # inspect_ai adapter + hook pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures @@ -171,6 +173,8 @@ DOI [10.5281/zenodo.21110642](https://doi.org/10.5281/zenodo.21110642); the Tech | The demos, tier by tier | [docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md) | | The normative format + verification order | [SPEC.md](https://github.com/b7n0de/proofbundle/blob/main/SPEC.md) | | Honest comparison to Rekor / in-toto / OMS / ValiChord | [INTEROP.md](https://github.com/b7n0de/proofbundle/blob/main/INTEROP.md) | +| What the conformance corpus does and does not establish | [CONFORMANCE.md](https://github.com/b7n0de/proofbundle/blob/main/CONFORMANCE.md) | +| The commercial boundary of the project | [docs/COMMERCIAL_BOUNDARY.md](https://github.com/b7n0de/proofbundle/blob/main/docs/COMMERCIAL_BOUNDARY.md) | | Regulatory mapping (and what to never claim) | [COMPLIANCE.md](https://github.com/b7n0de/proofbundle/blob/main/COMPLIANCE.md) | | Funders / role fit | [docs/PROJECT_BRIEF.md](https://github.com/b7n0de/proofbundle/blob/main/docs/PROJECT_BRIEF.md) | | **Preview:** TEE-attestation bridge (RATS/EAT, `[experimental]`) | [docs/EXPERIMENTAL_ENCLAVE.md](https://github.com/b7n0de/proofbundle/blob/main/docs/EXPERIMENTAL_ENCLAVE.md) | diff --git a/RELEASE.md b/RELEASE.md index 7664cef..e37fa7b 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -45,8 +45,9 @@ 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); since -then the 2.x line is the stable default and the `[experimental]` extra ships with normal releases. +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 3.x line (current: 3.7.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. @@ -66,15 +67,21 @@ pulls a PEP 440 pre-release, so the current stable stays the default while a pre The version bump, changelog, and doc edits happen **on the branch, inside the PR** — the tag comes after the merge (see *Release ordering* above). -- [ ] Bump `version` in `pyproject.toml` **and** `__version__` in `src/proofbundle/__init__.py` - (they must match — CI/pitch cite the version). +- [ ] Bump `version` in `pyproject.toml`, `__version__` in `src/proofbundle/__init__.py` **and** + `version:` in `CITATION.cff` (all three must match — `scripts/check_version_and_changelog.py` + and the release-integrity CI job enforce the three-file single-sourcing). - [ ] Update `CHANGELOG.md` (Keep-a-Changelog + SemVer; note any breaking change explicitly). -- [ ] Update the test-count and version strings in `README.md` if they changed. +- [ ] README.md deliberately hard-codes no test-count or version strings (live badges + CI output are the source); only touch README claims that the release genuinely changes. - [ ] `make all` green locally (lint + typecheck + tests); `make tamper-demo` exits 0; `make mutation` reports all operators killed (documented-equivalent survivor excepted). - [ ] Open the PR; confirm the CI matrix is green on all supported Pythons **and** the `crypto-floor` job; **the Owner merges** the PR to the target branch (`main`, or `release/*` then merge-back). +- [ ] Pre-tag adversarial audit (docs/PRE_TAG_AUDIT.md): run the six-lens internal audit on the + release candidate and land the real record as `audit_artifacts//*.md` — the + `scripts/pre_tag_audit_gate.py --strict` step in `release.yml` **blocks the build without it**, + and the version-coupled F7 test requires the record as soon as the version is bumped (so the + audit belongs in the release-prep PR, not after the merge). - [ ] On the **merged** target-branch HEAD (never the feature branch), confirm CI is green, then `git tag vX.Y.Z` there and push the tag. - [ ] Watch the `build-and-attest` job: note the printed attested wheel/sdist sha256. diff --git a/docs/GRANT_MILESTONES.md b/docs/GRANT_MILESTONES.md index 8608f3c..b47720e 100644 --- a/docs/GRANT_MILESTONES.md +++ b/docs/GRANT_MILESTONES.md @@ -13,11 +13,13 @@ funding/OSTIF briefing for M3. ## M2 — External interop fixture — DONE 2026-07-11 -Two externally produced decision-receipt vectors vendored digest-pinned and -credited under `conformance/decision/crossimpl/` (one Bitcoin-confirmed anchor, -block 957504, verified offline; canonicalization byte-identical). Honest gap -recorded: external fixture does not yet satisfy the strict v0.1 predicate schema -(12 findings, expected-fail, regeneration upstream in progress). +Externally produced decision-receipt vectors vendored digest-pinned and credited +under `conformance/decision/crossimpl/`. The upstream regeneration recorded here +as an honest gap has since completed (2026-07-19): the schema-conformant case +(`decision-crossimpl-schema-conformant`, Bitcoin block 958761) now satisfies the +strict decision-receipt/v0.1 predicate schema with zero findings, alongside the +original confirmed-anchor lifecycle case (block 957504, kept as the externally +confirmed anchor-lifecycle vector); a third historical case is marked superseded. ## M3 — Independent audit started — pending (OSTIF sourcing) diff --git a/docs/INSPECT_HAPPY_PATH.md b/docs/INSPECT_HAPPY_PATH.md index da6b6db..2a5214e 100644 --- a/docs/INSPECT_HAPPY_PATH.md +++ b/docs/INSPECT_HAPPY_PATH.md @@ -94,6 +94,6 @@ Changing one byte of the signed payload breaks the signature. That is the whole ## 6. Attach to a paper or model card Ship `proofbundle_receipt_.json` alongside the result and publish your `issuer` key. See -[examples/](../examples/) for adapter snippets, and [../INTEROP.md](../INTEROP.md) for lm-eval and +[examples/](../examples/) for adapter snippets, and [../INTEGRATIONS.md](../INTEGRATIONS.md) for lm-eval and promptfoo. What a receipt proves and does not prove is in [../THREAT_MODEL.md](../THREAT_MODEL.md): authorship and integrity, never that the number is true. diff --git a/docs/TESTING_STRATEGY.md b/docs/TESTING_STRATEGY.md index 18ee470..76539d4 100644 --- a/docs/TESTING_STRATEGY.md +++ b/docs/TESTING_STRATEGY.md @@ -6,7 +6,7 @@ methods in use, why, and the honest state of each (SOTA references at the end). ## Layers 1. **Fixed unit + negative vectors.** Every crypto-critical verify path has malformed / tamper / wrong-key - / boundary vectors that must fail closed. This is the baseline (~1180 tests). + / boundary vectors that must fail closed. This is the bulk of the suite (the full suite currently counts 2041 tests). 2. **Differential / interop.** A second, independent implementation verifies the same artifact (BBS cross-impl, the SD-JWT reference fixture, the O8 Rust verifier reproducing the conformance corpus). Catches spec-divergence a single implementation cannot see. diff --git a/docs/audit/AUDIT_SCOPE.md b/docs/audit/AUDIT_SCOPE.md index 26facb3..f4afaf9 100644 --- a/docs/audit/AUDIT_SCOPE.md +++ b/docs/audit/AUDIT_SCOPE.md @@ -1,5 +1,10 @@ # Audit Scope — external independent security review (pre-Stable) +> **Historical snapshot (3.2.0 era).** This file is an unmaintained earlier draft kept for +> provenance; its counts (14 conformance cases, 1121 tests) reflect that era. The maintained +> successor is [`docs/AUDIT_SCOPE.md`](../AUDIT_SCOPE.md); current counts live in +> `conformance/manifest.json` and the CI test output. + proofbundle stays classifier `4 - Beta` until an EXTERNAL, independent security audit completes (O9 + the Stable gate). This file defines the scope that audit should cover, so the review is bounded and the findings map to concrete modules. It is a scope document, not a claim of having been audited. diff --git a/docs/readiness_pack/MANIFEST.sha256 b/docs/readiness_pack/MANIFEST.sha256 index ad8d55d..6172537 100644 --- a/docs/readiness_pack/MANIFEST.sha256 +++ b/docs/readiness_pack/MANIFEST.sha256 @@ -1,11 +1,11 @@ e6e2f1ca00c1798975005315172248db3ee8fefb02b978cd12627c526dd5dc60 AUDITOR_OPEN_POINTS.md 3d66a85ff79c0258d794e7c8d8740f8a3b7a62e6ffd9bd7dada158a939964660 OPEN_QUESTIONS.md -9a227810137e0c2321948b61737c5b4dbcc36196f017026d43a4bdb050c11445 PROGRESS.md -2c59b2de935c928140c4425ad0d402683b9482f064d760e9d9ace39cfe7b6eec README.md +292c01cf4ddb288915f46f8b234caa5583a48b6d0dfcca38d8db6d88bbe6ceb6 PROGRESS.md +6ccab20c7daef6d71c13e0dcacba24a6a18dd480b5d41418e01b5bf2983ffc9c README.md c9ceb3f92a2f720d901affa8defb47004b58a51029317208db641ce53d90b284 REPRODUCTION_RUNBOOK.md 1b4e4316aaea6c962664fc08945c65a048147fdc4ad89a1e694818b934ef6fa2 calendar_independence.md -f0db4c1c1449001b1d25a2712148a33293863dbf92bf1dc31a34d2465c6bb647 differential_matrix.md +9a9a9e4956076c6c287dada5de82eb66cf259cec89a6e791088e1733a74c5ea3 differential_matrix.md 426a22bd91c7a7529700c06570a3e55fb4c11281992d6215fc2315b12731f9cd index.json -5d4997642f7c68b902da5f811821c306cd902589cb027d5f4bc96d593f53ebd9 rust_parity_scope.md +d1d1e04e9d2de38443ec2b953c3a9c968a303e81977cb7e128468945160b56d7 rust_parity_scope.md f2a77cacd7fefe39450edb1857ec2ffc25a4d4c3d8d68efa094ba84ab7325708 tamper_resistance.md 6d6a4065a1e7e071819960cef8e0117ada98e931cd62fd94341b45af4865711a threat_model_delta_360.md diff --git a/docs/readiness_pack/PROGRESS.md b/docs/readiness_pack/PROGRESS.md index 228faa7..0ee9787 100644 --- a/docs/readiness_pack/PROGRESS.md +++ b/docs/readiness_pack/PROGRESS.md @@ -1,6 +1,6 @@ # Honest progress accounting (No-Overclaim) -The denominator is the full distance from today (3.3.0) to "4.0.0-stable, externally audited, +The denominator is the full distance from the 3.3.0 baseline (current release: 3.7.0) to "4.0.0-stable, externally audited, trustworthy". This is a factual progress statement, not a forward promise, and it is deliberately placed in the readiness pack so an auditor reads our own honest number before forming theirs. @@ -26,7 +26,7 @@ placed in the readiness pack so an auditor reads our own honest number before fo ## Consequence With the five front-loaded foundations plus the pre-tag audit discipline, the audit-candidate (3.6.0) -is reachable at ~85% of the total distance with **practically zero avoidable rework**; the remaining +was reached at ~85% of the total distance (3.6.0 tagged 2026-07-17) with **practically zero avoidable rework**; the remaining ~15% is, by definition, not anticipatable — only best-prepared, which is what this pack is. ## Where this number is enforced against drift diff --git a/docs/readiness_pack/README.md b/docs/readiness_pack/README.md index d3acef9..a75426b 100644 --- a/docs/readiness_pack/README.md +++ b/docs/readiness_pack/README.md @@ -30,9 +30,9 @@ it does not, and cannot, close on its own. ## Release evidence slots (front-loaded) - `3.3.1-frontload` — **filled**: the five foundations (F1–F5) + the pre-tag audit discipline (F7). -- `3.4.0` — reserved: relation_signer receipts, decoy-parent F1 vectors, formal obligation O5. -- `3.5.0` — reserved: relation_statement Rust parity, formal obligation O6, F4 auto-coverage. -- `3.6.0` — reserved: fuzz-soak corpora, differential matrix, formal obligation O7, threat-model delta. +- `3.4.0` — **filled** (shipped under the 3.6.0 tag): relation_signer receipts, decoy-parent F1 vectors; formal obligation O5 remains reserved (see `index.json`). +- `3.5.0` — **filled** (shipped under the 3.6.0 tag): relation_statement Rust parity, F4 auto-coverage; formal obligation O6 remains reserved (see `index.json`). +- `3.6.0` — **filled**: fuzz-soak corpora, differential matrix, threat-model delta, 33-check acceptance matrix; formal obligation O7 remains reserved (see `index.json`). A `reserved` slot is declared honestly; it is not evidence yet, and nothing here counts it as such. diff --git a/docs/readiness_pack/differential_matrix.md b/docs/readiness_pack/differential_matrix.md index 620af3d..d615e30 100644 --- a/docs/readiness_pack/differential_matrix.md +++ b/docs/readiness_pack/differential_matrix.md @@ -19,7 +19,9 @@ python3 tools/pb_verify_rs/crosscheck.py --matrix audit_artifacts/360/rust_diffe The artifact carries an environment freeze (cargo / rustc / python versions) so a re-run on another box is comparable. On the recorded run: 40 relation vectors, Python == Rust on all, and the whole 54-case -conformance corpus reproduced independently by the Rust binary. +conformance corpus of that era reproduced independently by the Rust binary (the corpus has since +grown to 57 cases; the named `make conformance-crossimpl` gate re-runs the cross-check on every +invocation, 56/56 as of v3.7.0). ## Scope of coverage diff --git a/docs/readiness_pack/proofbundle/readiness_pack.bundle.json b/docs/readiness_pack/proofbundle/readiness_pack.bundle.json index 515681e..0c84193 100644 --- a/docs/readiness_pack/proofbundle/readiness_pack.bundle.json +++ b/docs/readiness_pack/proofbundle/readiness_pack.bundle.json @@ -1,16 +1,16 @@ { "schema": "proofbundle/v0.1", - "payload_b64": "ZTZlMmYxY2EwMGMxNzk4OTc1MDA1MzE1MTcyMjQ4ZGIzZWU4ZmVmYjAyYjk3OGNkMTI2MjdjNTI2ZGQ1ZGM2MCAgQVVESVRPUl9PUEVOX1BPSU5UUy5tZAozZDY2YTg1ZmY3OWMwMjU4ZDc5NGU3YzhkODc0MGY4YTNiN2E2MmU2ZmZkOWJkN2RhZGExNThhOTM5OTY0NjYwICBPUEVOX1FVRVNUSU9OUy5tZAo5YTIyNzgxMDEzN2UwYzIzMjE5NDhiNjE3MzdjNWI0ZGJjYzM2MTk2ZjAxNzAyNmQ0M2E0YmRiMDUwYzExNDQ1ICBQUk9HUkVTUy5tZAoyYzU5YjJkZTkzNWM5MjgxNDBjNDQyNWFkMGQ0MDI2ODNiOTQ4MmYwNjRkNzYwZTlkOWFjZTM5Y2ZlN2I2ZWVjICBSRUFETUUubWQKYzljZWIzZjkyYTJmNzIwZDkwMWFmZmE4ZGVmYjQ3MDA0YjU4YTUxMDI5MzE3MjA4ZGI2NDFjZTUzZDkwYjI4NCAgUkVQUk9EVUNUSU9OX1JVTkJPT0subWQKMWI0ZTQzMTZhYWVhNmM5NjI2NjRmYzA4OTQ1YzY1YTA0ODE0N2ZkYzRhZDg5YTFlNjk0ODE4YjkzNGVmNmZhMiAgY2FsZW5kYXJfaW5kZXBlbmRlbmNlLm1kCmYwZGI0YzFjMTQ0OTAwMWIxZDI1YTI3MTIxNDhhMzMyOTM4NjNkYmY5MmJmMWRjMzFhMzRkMjQ2NWM2YmI2NDcgIGRpZmZlcmVudGlhbF9tYXRyaXgubWQKNDI2YTIyYmQ5MWM3YTc1Mjk3MDBjMDY1NzBhM2U1NWZiNGMxMTI4MTk5MmQ2MjE1ZmMyMzE1YjEyNzMxZjljZCAgaW5kZXguanNvbgo1ZDQ5OTc2NDJmN2M2OGI5MDJkYTVmODExODIxYzMwNmNkOTAyNTg5Y2IwMjdkNWY0YmM5NmQ1OTNmNTNlYmQ5ICBydXN0X3Bhcml0eV9zY29wZS5tZApmMmE3N2NhY2Q3ZmVmZTM5NDUwZWRiMTg1N2VjMmZmYzI1YTRkNGMzZDhkNjhlZmEwOTRiYTg0YWI3MzI1NzA4ICB0YW1wZXJfcmVzaXN0YW5jZS5tZAo2ZDZhNDA2NWExZTdlMDcxODE5OTYwY2VmOGUwMTE3YWRhOThlOTMxY2Q2MmZkOTQzNDFiNDVhZjQ4NjU3MTFhICB0aHJlYXRfbW9kZWxfZGVsdGFfMzYwLm1kCg==", + "payload_b64": "ZTZlMmYxY2EwMGMxNzk4OTc1MDA1MzE1MTcyMjQ4ZGIzZWU4ZmVmYjAyYjk3OGNkMTI2MjdjNTI2ZGQ1ZGM2MCAgQVVESVRPUl9PUEVOX1BPSU5UUy5tZAozZDY2YTg1ZmY3OWMwMjU4ZDc5NGU3YzhkODc0MGY4YTNiN2E2MmU2ZmZkOWJkN2RhZGExNThhOTM5OTY0NjYwICBPUEVOX1FVRVNUSU9OUy5tZAoyOTJjMDFjZjRkZGIyODg5MTVmNDZmOGIyMzRjYWE1NTgzYTQ4YjZkMGRmY2NhMzhkOGRiNmQ4OGJiZTZjZWI2ICBQUk9HUkVTUy5tZAo2Y2NhYjIwYzdkYWVmNmQ3MWMxM2UwZGNhY2JhMjRhNmExOGRkNDgwYjVkNDE0MThlMDFiNWJmMjk4M2ZmYzljICBSRUFETUUubWQKYzljZWIzZjkyYTJmNzIwZDkwMWFmZmE4ZGVmYjQ3MDA0YjU4YTUxMDI5MzE3MjA4ZGI2NDFjZTUzZDkwYjI4NCAgUkVQUk9EVUNUSU9OX1JVTkJPT0subWQKMWI0ZTQzMTZhYWVhNmM5NjI2NjRmYzA4OTQ1YzY1YTA0ODE0N2ZkYzRhZDg5YTFlNjk0ODE4YjkzNGVmNmZhMiAgY2FsZW5kYXJfaW5kZXBlbmRlbmNlLm1kCjlhOWE5ZTQ5NTYwNzZjNmMyODdkYWRhNWRlODJlYjY2Y2YyNTljZWM4OWE2ZTc5MTA4OGUxNzMzYTc0YzVlYTMgIGRpZmZlcmVudGlhbF9tYXRyaXgubWQKNDI2YTIyYmQ5MWM3YTc1Mjk3MDBjMDY1NzBhM2U1NWZiNGMxMTI4MTk5MmQ2MjE1ZmMyMzE1YjEyNzMxZjljZCAgaW5kZXguanNvbgpkMWQxZTA0ZTlkMmRlMzg0NDNlYzJiOTUzYzNhOWM5NjhhMzAzZTgxOTc3Y2I3ZTEyODQ2ODk0NTE2MGI1NmQ3ICBydXN0X3Bhcml0eV9zY29wZS5tZApmMmE3N2NhY2Q3ZmVmZTM5NDUwZWRiMTg1N2VjMmZmYzI1YTRkNGMzZDhkNjhlZmEwOTRiYTg0YWI3MzI1NzA4ICB0YW1wZXJfcmVzaXN0YW5jZS5tZAo2ZDZhNDA2NWExZTdlMDcxODE5OTYwY2VmOGUwMTE3YWRhOThlOTMxY2Q2MmZkOTQzNDFiNDVhZjQ4NjU3MTFhICB0aHJlYXRfbW9kZWxfZGVsdGFfMzYwLm1kCg==", "signature": { "alg": "ed25519", - "public_key_b64": "aQDV4VkcZW9Doag0DhpOgoMlcYPFcC36S5SrpKrOnQE=", - "sig_b64": "Q0UXjBrfaA2w+pUNCQhY42UQuJRIiWkHw+iVQ/RXi3tMp7wFfjucLkcHM+Dog5WJULdgJ9A+vmXs1uxV1XNkAw==" + "public_key_b64": "m5+3/jNLkag2YWmDXlmbWsCydYmazy1PeaXLAFmqPAU=", + "sig_b64": "y+3kN124U2UKTyK2LKX7TKLotGvxrxDzvL2AVxvMbd1MtpNlrUWWR0Zws9vG1sfHLI2AYWbegi738/9qLJg5AQ==" }, "merkle": { "hash_alg": "sha256-rfc6962", "leaf_index": 0, "tree_size": 1, "inclusion_proof_b64": [], - "root_b64": "EjSMLMOQQmTnf6b7nWcAdJoURNgBG2RgvRVt4Yfz1Po=" + "root_b64": "QDxzwZlLqS5oPl2MfvUcmbL9xs25UMPNrum6X/9uEng=" } } diff --git a/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 b/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 index b6a0f74..e41e267 100644 --- a/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 +++ b/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 @@ -1 +1 @@ -aQDV4VkcZW9Doag0DhpOgoMlcYPFcC36S5SrpKrOnQE= +m5+3/jNLkag2YWmDXlmbWsCydYmazy1PeaXLAFmqPAU= diff --git a/docs/readiness_pack/rust_parity_scope.md b/docs/readiness_pack/rust_parity_scope.md index 98cfc18..60b9c0c 100644 --- a/docs/readiness_pack/rust_parity_scope.md +++ b/docs/readiness_pack/rust_parity_scope.md @@ -24,7 +24,7 @@ python3 tools/pb_verify_rs/crosscheck.py --matrix audit_artifacts/360/rust_diffe negative (decoy-parent, subject-mismatch, signer, lineage tiers), Python == Rust on exit-class + lineage on every one -The whole conformance corpus (54 cases) is reproduced independently by the Rust binary. +The whole conformance corpus (57 cases as of v3.7.0; the `make conformance-crossimpl` gate reproduces 56/56 of its corpus cases) is reproduced independently by the Rust binary. ## Deliberately PENDING (honestly not Rust-covered, never silently accepted)