proofbundle 4.0.0__tar.gz → 5.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {proofbundle-4.0.0/src/proofbundle.egg-info → proofbundle-5.0.0}/PKG-INFO +43 -42
- {proofbundle-4.0.0 → proofbundle-5.0.0}/README.md +40 -39
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/manifest.json +11 -1
- proofbundle-5.0.0/conformance/provenance/version-status-absent-legacy-receipt/case.json +15 -0
- proofbundle-5.0.0/conformance/provenance/version-status-absent-legacy-receipt/provenance.json +4 -0
- proofbundle-5.0.0/conformance/provenance/version-status-lookalike-version-field/case.json +15 -0
- proofbundle-5.0.0/conformance/provenance/version-status-lookalike-version-field/provenance.json +6 -0
- proofbundle-5.0.0/conformance/provenance/version-status-missing-reason/case.json +17 -0
- proofbundle-5.0.0/conformance/provenance/version-status-missing-reason/provenance.json +3 -0
- proofbundle-5.0.0/conformance/provenance/version-status-not-bound/case.json +15 -0
- proofbundle-5.0.0/conformance/provenance/version-status-not-bound/provenance.json +5 -0
- proofbundle-5.0.0/conformance/provenance/version-status-not-reported/case.json +15 -0
- proofbundle-5.0.0/conformance/provenance/version-status-not-reported/provenance.json +5 -0
- proofbundle-5.0.0/conformance/provenance/version-status-not-reported-with-field/case.json +17 -0
- proofbundle-5.0.0/conformance/provenance/version-status-not-reported-with-field/provenance.json +5 -0
- proofbundle-5.0.0/conformance/provenance/version-status-reported/case.json +15 -0
- proofbundle-5.0.0/conformance/provenance/version-status-reported/provenance.json +5 -0
- proofbundle-5.0.0/conformance/provenance/version-status-reported-without-field/case.json +17 -0
- proofbundle-5.0.0/conformance/provenance/version-status-reported-without-field/provenance.json +3 -0
- proofbundle-5.0.0/conformance/provenance/version-status-unknown-literal/case.json +17 -0
- proofbundle-5.0.0/conformance/provenance/version-status-unknown-literal/provenance.json +3 -0
- proofbundle-5.0.0/conformance/provenance/version-status-unrelated-status-field/case.json +15 -0
- proofbundle-5.0.0/conformance/provenance/version-status-unrelated-status-field/provenance.json +6 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/run_conformance.py +42 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/vector_schema.json +72 -17
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/MANIFEST.sha256 +2 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/PROGRESS.md +1 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/index.json +11 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/proofbundle/readiness_pack.bundle.json +4 -4
- proofbundle-5.0.0/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 +1 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/pyproject.toml +37 -3
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/eval_claim_v0_1.schema.json +1 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/audit_candidate_matrix.py +106 -10
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/fuzz_soak.py +6 -3
- proofbundle-5.0.0/scripts/gate_qualification_harness.py +841 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/pre_tag_audit_gate.py +93 -25
- proofbundle-5.0.0/scripts/pre_tag_receipt.py +172 -0
- proofbundle-5.0.0/scripts/pre_tag_receipt_lib.py +123 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/rust_parity_gate.py +91 -15
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/rust_parity_registry.json +193 -133
- proofbundle-5.0.0/scripts/type_confusion_gate.py +696 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/__init__.py +1 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/_integration.py +10 -4
- proofbundle-5.0.0/src/proofbundle/_membership.py +79 -0
- proofbundle-5.0.0/src/proofbundle/_wire_b64.py +91 -0
- proofbundle-5.0.0/src/proofbundle/adapters/_provenance.py +255 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/adapters/eee.py +5 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/adapters/inspect_ai.py +19 -7
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/adapters/lm_eval.py +23 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/adapters/promptfoo.py +19 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/anchors.py +2 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/anchors_ots.py +32 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/anchors_rfc3161.py +18 -5
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/anchors_rootcommit.py +2 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/budget.py +76 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/bundle.py +39 -14
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/checkpoint.py +51 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/cli.py +38 -17
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/decision.py +4 -3
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/dsse.py +2 -4
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/emit.py +23 -3
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/evalclaim.py +9 -6
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/experimental/enclave.py +2 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/hf_evals.py +3 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/inspect_hook.py +14 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/kbjwt.py +38 -3
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/merkle.py +38 -5
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/outcome.py +2 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/persample.py +38 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/policy_profiles.py +6 -5
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/public_transparency.py +2 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/pytest_plugin.py +6 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/relation.py +2 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/relation_statement.py +3 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/renewal.py +208 -25
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/run_ledger.py +3 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/sdjwt.py +4 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/sdjwt_issue.py +13 -4
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/sdjwt_vc.py +16 -3
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/statuslist.py +2 -1
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/tlogproof.py +20 -7
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/verification_summary.py +4 -3
- {proofbundle-4.0.0 → proofbundle-5.0.0/src/proofbundle.egg-info}/PKG-INFO +43 -42
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle.egg-info/SOURCES.txt +47 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle.egg-info/requires.txt +2 -2
- proofbundle-5.0.0/tests/fixtures/inspect_logs/safety_refusal_demo.eval.provenance.json +15 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_adapters.py +24 -0
- proofbundle-5.0.0/tests/test_anchor_extra_arg_type_confusion.py +119 -0
- proofbundle-5.0.0/tests/test_anchors_ots_frozen_rptrust_guard.py +98 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_audit_candidate_360.py +51 -2
- proofbundle-5.0.0/tests/test_audit_candidate_ready_logic.py +62 -0
- proofbundle-5.0.0/tests/test_audit_matrix_version_pin_binding.py +135 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_cli_eval.py +49 -0
- proofbundle-5.0.0/tests/test_emitter_parser_rundlauf.py +158 -0
- proofbundle-5.0.0/tests/test_gate_population_and_nested_leaf.py +205 -0
- proofbundle-5.0.0/tests/test_gate_qualification_harness.py +320 -0
- proofbundle-5.0.0/tests/test_inspect_hook.py +175 -0
- proofbundle-5.0.0/tests/test_int_magnitude_budget_family.py +120 -0
- proofbundle-5.0.0/tests/test_iter9_deepgate_round4.py +167 -0
- proofbundle-5.0.0/tests/test_iter9_product_fixes.py +80 -0
- proofbundle-5.0.0/tests/test_kappe_vor_arbeit.py +141 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_load_signer_fd_hazard.py +72 -0
- proofbundle-5.0.0/tests/test_membership_hashable_guard.py +257 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_never_raise_surface_family_property.py +128 -2
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_pre_tag_audit_provenance.py +14 -13
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_pre_tag_gate_eigenschaften.py +7 -5
- proofbundle-5.0.0/tests/test_pre_tag_receipt_commit_flow.py +99 -0
- proofbundle-5.0.0/tests/test_pre_tag_receipt_gate.py +117 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_pytest_plugin.py +14 -0
- proofbundle-5.0.0/tests/test_render_safe_untrusted_int.py +127 -0
- proofbundle-5.0.0/tests/test_renewal_field_magnitude_never_raise.py +166 -0
- proofbundle-5.0.0/tests/test_reported_version_status.py +387 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_roadmap_frontload_foundations.py +12 -7
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_rust_parity_gate.py +14 -4
- proofbundle-5.0.0/tests/test_sdist_selftest_optional_deps.py +89 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdjwt_vc.py +28 -0
- proofbundle-5.0.0/tests/test_type_confusion_wireform.py +133 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_verify_proof_expected_origin.py +52 -3
- proofbundle-5.0.0/tests/test_wire_bytes_strict.py +217 -0
- proofbundle-5.0.0/tests/test_wurzelsammlung_schliesst_bauartefakte_aus.py +97 -0
- proofbundle-4.0.0/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 +0 -1
- proofbundle-4.0.0/scripts/type_confusion_gate.py +0 -301
- proofbundle-4.0.0/src/proofbundle/adapters/_provenance.py +0 -91
- proofbundle-4.0.0/tests/test_inspect_hook.py +0 -57
- {proofbundle-4.0.0 → proofbundle-5.0.0}/LICENSE +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/MANIFEST.in +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/README.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/coherent-rewrap-fails-expected-root/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/coherent-rewrap-fails-expected-root/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/coherent-rewrap-verifies-no-policy/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/coherent-rewrap-verifies-no-policy/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/corrupted-signature/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/corrupted-signature/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/duplicate-json-key/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/duplicate-json-key/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/forged-anchor-own-frozen/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/forged-anchor-own-frozen/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/n1-eval-sdjwt-graft-non-eval/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/n1-eval-sdjwt-graft-non-eval/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/sd-jwt-forged-issuer-identity/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/sd-jwt-forged-issuer-identity/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/sd-jwt-signed-but-unbound/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/sd-jwt-signed-but-unbound/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/sd-jwt-unsigned-unauthenticated/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/sd-jwt-unsigned-unauthenticated/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/tampered-payload/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/tampered-payload/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/tree-size-expectation-mismatch/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/tree-size-expectation-mismatch/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/valid-minimal/bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/bundle/valid-minimal/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/common_vocabulary.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/cross_format.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/canonicalization-root-binding/MANIFEST.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/canonicalization-root-binding/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.jcs +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/MANIFEST.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.jcs +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/schema-conformant/MANIFEST.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/schema-conformant/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/schema-conformant/decision_receipt.jcs +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/schema-conformant/decision_receipt.jcs.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/schema-conformant/decision_receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/schema-conformant/evidence_eval_result.jcs +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/decision/crossimpl/schema-conformant/evidence_eval_result.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/declared-supersedes-verified/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/declared-supersedes-verified/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/declared-supersedes-verified/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/declared-supersedes-verified/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/declared-unresolved/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/declared-unresolved/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/declared-unresolved/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-accept-path/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-accept-path/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-accept-path/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-accept-path/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-accept-path/related_rx.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-correct-pass/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-correct-pass/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-correct-pass/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-correct-pass/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-correct-pass/related_r0.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-correct-pass/related_rx.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-no-pin-old-behavior/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-no-pin-old-behavior/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-no-pin-old-behavior/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-no-pin-old-behavior/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-no-pin-old-behavior/related_r0.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-no-pin-old-behavior/related_rx.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-target-mismatch/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-target-mismatch/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-target-mismatch/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-target-mismatch/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-target-mismatch/related_r0.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/decoy-parent-target-mismatch/related_rx.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_001.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_002.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_003.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_004.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_005.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_006.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_007.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_008.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_009.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_010.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_011.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_012.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_013.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_014.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_015.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_016.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_017.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_018.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_019.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_020.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_021.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_022.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_023.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_024.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_025.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_026.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_027.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_028.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_029.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_030.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_031.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_032.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/depth-exceeded/related_033.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/digest-mismatch/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/digest-mismatch/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/digest-mismatch/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/digest-mismatch/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/digest-mismatch/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/generate_vectors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/malformed-digest/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/malformed-digest/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/malformed-digest/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-declared-supersedes-verified/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-declared-supersedes-verified/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-declared-supersedes-verified/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-declared-supersedes-verified/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-decoy-parent-target-mismatch/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-decoy-parent-target-mismatch/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-decoy-parent-target-mismatch/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-decoy-parent-target-mismatch/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-decoy-parent-target-mismatch/related_r0.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-decoy-parent-target-mismatch/related_rx.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-digest-mismatch/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-digest-mismatch/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-digest-mismatch/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-digest-mismatch/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-digest-mismatch/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-relation-signer-unauthorized/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-relation-signer-unauthorized/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-relation-signer-unauthorized/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-relation-signer-unauthorized/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-relation-signer-unauthorized/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-renews/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-renews/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-renews/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-renews/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-silent-landing/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-silent-landing/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-silent-landing/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-valid-baseline/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-valid-baseline/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/outcome-valid-baseline/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-amends/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-amends/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-amends/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-amends/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-corrects/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-corrects/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-corrects/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-corrects/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-derivedfrom/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-derivedfrom/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-derivedfrom/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-derivedfrom/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-retracts/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-retracts/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-retracts/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-retracts/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-revises/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-revises/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-revises/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-revises/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-verified/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-verified/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-verified/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-verified/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-cross-issuer-verified/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-same-key-explicit/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-same-key-explicit/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-same-key-explicit/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-same-key-explicit/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-same-key-explicit/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-verified-under-not-claim/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-verified-under-not-claim/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-verified-under-not-claim/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-verified-under-not-claim/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/relation-signer-verified-under-not-claim/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/renews-vector/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/renews-vector/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/renews-vector/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/renews-vector/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/retracts-then-use/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/retracts-then-use/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/retracts-then-use/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/retracts-then-use/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/retracts-then-use/related_r.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/silent-landing/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/silent-landing/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/silent-landing/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-malformed/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-malformed/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-malformed/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-declared-unresolved/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-declared-unresolved/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-declared-unresolved/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-unauthorized/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-unauthorized/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-unauthorized/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-unauthorized/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-unauthorized/related_t.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-blocked/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-blocked/policy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-blocked/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-blocked/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-blocked/related_t.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-visible/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-visible/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-visible/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-retracts-verified-visible/related_t.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-supersedes-verified/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-supersedes-verified/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-supersedes-verified/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/statement-supersedes-verified/related_t.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/t1-canonical-invalid-signature/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/t1-canonical-invalid-signature/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/t1-canonical-invalid-signature/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-ambiguous/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-ambiguous/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-ambiguous/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-ambiguous/related_r0.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-correct-pass/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-correct-pass/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-correct-pass/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-correct-pass/related_r0.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-mismatch/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-mismatch/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-mismatch/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-mismatch/related_r0.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-missing/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-missing/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-missing/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/target-subject-missing/related_r0.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/unauthorized-signer/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/unauthorized-signer/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/unauthorized-signer/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/unauthorized-signer/related_b.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/valid-baseline/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/valid-baseline/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/valid-baseline/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/wrong-payloadtype-target/case.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/wrong-payloadtype-target/pub.b64 +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/wrong-payloadtype-target/receipt.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/conformance/relation/wrong-payloadtype-target/related_t.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/adr/renewal_policy.example.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/AUDITOR_OPEN_POINTS.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/OPEN_QUESTIONS.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/README.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/REPRODUCTION_RUNBOOK.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/calendar_independence.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/differential_matrix.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/rust_parity_scope.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/tamper_resistance.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/docs/readiness_pack/threat_model_delta_360.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/README.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/anchors/chia-datalayer-invalid-root.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/anchors/chia-datalayer-valid.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/checkpoint_example.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/decision_receipt_allow.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/decision_receipt_deny.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/decision_receipt_escalate.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/decision_receipt_with_eval_ref.intoto.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/eee_receipt.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/example.tlog-proof +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/example_bundle.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/experimental_enclave.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/inspect_hook_example.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/inspect_receipt.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/intoto/private-model-commitment.statement.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/intoto/public-model.statement.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/intoto/release-gate.statement.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/intoto/svr.statement.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/intoto_dsse_export.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/lm_eval_receipt.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/make_example.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/persample_audit.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/pytest_plugin_example.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/rekor_interop.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/tlog_proof_example.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/trust_policy_decision_strict.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/examples/trust_policy_strict.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/formal/README.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/formal/model.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/action-outcome-v0.1.schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/decision-receipt-v0.1.schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/in_toto_statement_v1.schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/proofbundle_v0_1.schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/run-ledger-v0.1.schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/trust-pack-v0.1.schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/trust_policy_v0_1.schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/schemas/verification-summary-v0.1.schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/_build_anchor_fixture.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/branch_base_check.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/build_reproducible.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/check_version_and_changelog.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/claims_hygiene_check.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/demo.sh +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/demo_tamper.sh +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/doc_link_check.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/finding_base_drift.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/findings_register.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/fork_pr_secret_isolation.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/gen_findings_register.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/gen_synthetic_ots_fixture.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/git-hooks/pre-commit +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/install_git_hooks.sh +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/mutant_signature_guard.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/mutation_check.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/pre_tag_attestation.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/readiness_pack_gate.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/readiness_pack_manifest.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/render_demo.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/scripts/test_manifest_gate.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/setup.cfg +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/_inspect_registry.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/_strict_json.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/adapters/__init__.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/adapters/samples.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/anchors_chia.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/anchors_chia_add.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/anchors_markovian.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/assurance.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/automation_verdict.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/beacon.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/canonical.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/demo.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/eee_eval_schema.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/errors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/evalcard.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/evidence_pack.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/experimental/__init__.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/hashalg.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/intoto.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/policies/decision-receipt-template-v1.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/policies/research-preview-v1.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/policies/strict-eval-authenticated-root-template-v1.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/policies/strict-eval-template-v1.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/policies/strict-prereg-template-v1.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/policy.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/pqsig.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/prereg.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/py.typed +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/signature.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/subject_binding.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle/trust_pack.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle.egg-info/dependency_links.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle.egg-info/entry_points.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/src/proofbundle.egg-info/top_level.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/_beinahe_treffer.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/conftest.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/chia_datalayer_proof.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/freetsa_receipt_anchor.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/checkpoint_7397/MANIFEST.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/checkpoint_7397/checkpoint_7397.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/proof_7271/ERGEBNIS.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/proof_7271/ERGEBNIS_negativ.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/proof_7271/MANIFEST.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/proof_7271/README.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/proof_7271/SOURCES.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/proof_7271/keys_unabhaengig.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/proof_7271/leaf_7271.raw +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/markovian_log/proof_7271/proof_7271.tlog-proof +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/MANIFEST.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/README.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/MANIFEST.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/README.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/manifest.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-01-valid.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-02-tampered-root.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-03-tampered-wallet.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-04-tampered-proof.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/manifest.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-01-valid.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-02-tampered-root.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-03-tampered-wallet.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-04-tampered-sig.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-05-tampered-proof.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/01-valid.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/02-unknown-id.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/03-tampered-body.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/04-tampered-proof.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/manifest.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/checkpoint/PROVENANCE.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/checkpoint/gosumdb_known_keys.go +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/checkpoint/rekor_v2_checkpoint.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/checkpoint/sumdb_latest.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/checkpoint/trusted_root.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ed25519_speccheck_cases.LICENSE +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ed25519_speccheck_cases.README.md +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ed25519_speccheck_cases.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/eee_arc_easy.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/inspect_logs/safety_refusal_demo.eval +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/lm_eval_arc_easy_real.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/markovian_anchor_confirmed.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/mldsa_acvp/PROVENANCE.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/mldsa_acvp/mldsa_sigver_slice.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/PROVENANCE.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/block358391.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/hello-world.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/hello-world.txt.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/incomplete.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/incomplete.txt.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/known-and-unknown-notary.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/known-and-unknown-notary.txt.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/merkle2.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/merkle2.txt.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/synthetic-upgraded-sha256.block.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/synthetic-upgraded-sha256.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/synthetic-upgraded-sha256.txt.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/two-calendars.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/ots/two-calendars.txt.ots +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/promptfoo_results_v3.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/rekor_inclusion_25579.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/rfc6962_vectors.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/sdjwt_disclosure_vector.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/sdjwt_reference_eddsa.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/sdjwtvc/PROVENANCE.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/sdjwtvc/sdjwtvc_examples.txt +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/fixtures/sdjwtvc/sdjwtvc_issuer_pubkey.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_adversarial.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchor_hardening_321.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchor_longevity_property.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchor_target_trustedtime.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_chia.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_chia_add.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_chia_claims.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_generic.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_markovian.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_markovian_log.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_ots.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_rfc3161.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_rfc3161_type_floor.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_anchors_rootcommit.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_assurance.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_audit_index_zahlen_stimmen.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_audit_marker_line_wrap.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_automation_verdict.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_beacon.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_branch_base_check.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_budget.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_bughunt_361_automation_failopen.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_bughunt_361_never_raise.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_bundle.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_bundle_robustness.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_canonical.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_checkpoint.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_checkpoint_external_vectors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_checkpoint_quorum_property.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_claims_hygiene.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_cli.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_cli_require_anchor.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_conformance.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_conformance_retention_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_content_root_property.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_cosignature.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_cosignature_mldsa.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_cross_format_singleton_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_anchors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_cli.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_evidence.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_fuzz.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_hardening.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_policy.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_schema.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_validator_api.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_decision_verify.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_demo.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_docs_truth.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_dsse_adversarial.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_dup_key_reject.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_ed25519_semantics.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_eee.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_emit.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_enclave_assurance.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_erwartungsvergleich_population_guard.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_eval_claim_schema.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_eval_evidence_class.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_evalcard.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_evalclaim.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_evidence_pack.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_examples.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_experimental_enclave.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_findings_register_identity_axis.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_findings_register_rt10.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_fork_pr_secret_isolation.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_fuzz_parsers.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_fuzz_soak_regression.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_hashalg.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_hf_entry_verify_eee_digest.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_hf_evals.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_intoto.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_intoto_claims_hygiene.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_intoto_content_root_migration.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_intoto_dsse.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_intoto_eval_result.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_intoto_examples.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_intoto_spec_diff.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_intoto_svr.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_jcs_mandatory_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_kbjwt.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_legacy_assurance_deprecation_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_lens_review_fixes_3_1_3.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_manifest_lock.json +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_merkle.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_merkle_consistency_property.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_merkle_property.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_mldsa_acvp_vectors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_mutant_signature_guard.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_mutation_isolation.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_never_raise_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_never_raise_population_guard.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_never_raise_primary_arg_property.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_never_raise_recursion_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_official_vectors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_ok_semantics.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_origin_quorum_rule.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_ots_calendar_hardening.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_ots_external_vectors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_outcome_receiver_corroboration.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_outcome_verify.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_oversized_int_guard.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_path_argument_type_floor.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_persample.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_pinned_key_validation.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_policy_explain_lint.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_policy_lifecycle_purpose.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_policy_profiles.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_policy_templates.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_pqsig.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_pre_tag_attestation.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_predicate_type_enforcement.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_prereg.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_promptfoo.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_provenance.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_public_transparency.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_rekor_interop.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_relation_gate_distance_invariance.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_relation_profile.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_relation_property.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_relation_same_key_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_relation_signer_target_340.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_relation_statement.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_relation_statement_rust_parity.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_relation_subject_pin_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_release_integrity_gate.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_renewal.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_renewal_external_token_glue.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_renewal_policy.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_renewal_signed.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_reproducible_build_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_rfc6962_external_vectors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_root_authenticity.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_run_ledger.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_schema.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_schema_parity.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdist_packaging_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdist_selftest_derivation.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdjwt_adversarial.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdjwt_duplicate_cnf.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdjwt_issue.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdjwt_reference.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdjwt_resource_budget.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdjwt_verify_binding.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sdjwtvc_external_vectors.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_sibling_never_raise_361.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_signature.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_statuslist.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_structural_budget_reachability.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_subject_binding.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_tlogproof.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_tree_context_authenticity.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_trust_pack.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_trust_pack_crypto_agility.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_trust_pack_outcome_receivers_role.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_trust_pack_payloadtype_negatives.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_trust_policy.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_verification_summary.py +0 -0
- {proofbundle-4.0.0 → proofbundle-5.0.0}/tests/test_verify_matrix.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: proofbundle
|
|
3
|
-
Version:
|
|
3
|
+
Version: 5.0.0
|
|
4
4
|
Summary: Emit and verify portable cryptographic evidence bundles, offline: Ed25519 + RFC 6962 Merkle + optional SD-JWT.
|
|
5
5
|
Author: Konrad Gruszka
|
|
6
6
|
License: MIT
|
|
@@ -51,7 +51,7 @@ Requires-Dist: jsonschema>=4; extra == "test"
|
|
|
51
51
|
Requires-Dist: sd-jwt>=0.10; extra == "test"
|
|
52
52
|
Requires-Dist: rfc8785>=0.1.4; extra == "test"
|
|
53
53
|
Provides-Extra: inspect
|
|
54
|
-
Requires-Dist: inspect_ai
|
|
54
|
+
Requires-Dist: inspect_ai<=0.3.260,>=0.3.112; extra == "inspect"
|
|
55
55
|
Provides-Extra: dev
|
|
56
56
|
Requires-Dist: pytest>=7; extra == "dev"
|
|
57
57
|
Requires-Dist: ruff<0.17,>=0.5; extra == "dev"
|
|
@@ -62,7 +62,7 @@ Requires-Dist: hypothesis>=6; extra == "dev"
|
|
|
62
62
|
Requires-Dist: rfc8785>=0.1.4; extra == "dev"
|
|
63
63
|
Requires-Dist: sd-jwt>=0.10; extra == "dev"
|
|
64
64
|
Requires-Dist: PyYAML>=6; extra == "dev"
|
|
65
|
-
Requires-Dist: inspect_ai
|
|
65
|
+
Requires-Dist: inspect_ai<=0.3.260,>=0.3.112; extra == "dev"
|
|
66
66
|
Dynamic: license-file
|
|
67
67
|
|
|
68
68
|
<div align="center">
|
|
@@ -74,12 +74,6 @@ Dynamic: license-file
|
|
|
74
74
|
|
|
75
75
|
<h1>proofbundle</h1>
|
|
76
76
|
|
|
77
|
-
**AI eval results need receipts.**
|
|
78
|
-
|
|
79
|
-
Turn an AI evaluation result into one portable, offline-verifiable receipt. It proves *who signed
|
|
80
|
-
these exact bytes* and *that nothing changed since* — not that the number is true. Ed25519 + RFC 6962
|
|
81
|
-
Merkle, one file, no server, no network.
|
|
82
|
-
|
|
83
77
|
[](https://github.com/b7n0de/proofbundle/actions/workflows/ci.yml)
|
|
84
78
|
[](https://github.com/b7n0de/proofbundle/actions/workflows/demo-reproducible.yml)
|
|
85
79
|
[](https://pypi.org/project/proofbundle/)
|
|
@@ -90,10 +84,48 @@ Merkle, one file, no server, no network.
|
|
|
90
84
|
|
|
91
85
|
Scorecard **6.5/10** — [what the four zeros mean, in one sentence each](#what-the-scorecard-badge-says-including-the-parts-that-are-low)
|
|
92
86
|
|
|
87
|
+
**AI eval results need receipts.**
|
|
88
|
+
|
|
89
|
+
Turn an AI evaluation result into one portable, offline-verifiable receipt. It proves *who signed
|
|
90
|
+
these exact bytes* and *that nothing changed since* — not that the number is true. Ed25519 + RFC 6962
|
|
91
|
+
Merkle, one file, no server, no network.
|
|
92
|
+
|
|
93
93
|
**Reviewing this for adoption?** Start with the 30-minute adversarial audit path: **[docs/REVIEWERS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/REVIEWERS.md)**.
|
|
94
94
|
|
|
95
95
|
</div>
|
|
96
96
|
|
|
97
|
+
## Install
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
pip install proofbundle # core: offline verify + plain emit (two deps: cryptography, rfc8785)
|
|
101
|
+
pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer)
|
|
102
|
+
pip install "proofbundle[inspect]" # inspect_ai adapter + hook
|
|
103
|
+
pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Requires Python 3.10+. The verify path never rolls its own crypto — Ed25519 comes from
|
|
107
|
+
`cryptography`; Merkle hashing is RFC 6962.
|
|
108
|
+
|
|
109
|
+
## 60-second try (offline)
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
pip install "proofbundle[eval]"
|
|
113
|
+
proofbundle demo # honest receipt => OK, six tampers each => FAILED, sample swap caught
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
The demo runs entirely in memory and exits non-zero if any tamper slips through, so it doubles as a
|
|
117
|
+
self-test.
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# verify a real hosted receipt without writing any code — the verify runs fully offline:
|
|
121
|
+
curl -fsSL https://raw.githubusercontent.com/b7n0de/proofbundle/main/examples/example_bundle.json -o receipt.json
|
|
122
|
+
proofbundle verify receipt.json # CRYPTO: OK (exit 0 ok · 1 fail · 2 malformed · 3 policy)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Emit your own receipt, apply a trust policy, start from a shipped template, or run the Inspect-native
|
|
126
|
+
path (METR Task Standard / UK-AISI ecosystem, mockllm, no API key): **[docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md)** ·
|
|
127
|
+
Inspect walkthrough **[docs/INSPECT_HAPPY_PATH.md](https://github.com/b7n0de/proofbundle/blob/main/docs/INSPECT_HAPPY_PATH.md)**.
|
|
128
|
+
|
|
97
129
|
## What the Scorecard badge says, including the parts that are low
|
|
98
130
|
|
|
99
131
|
The badge is live, so it will move. Measured 2026-08-07, re-measured 2026-08-10 with identical
|
|
@@ -128,26 +160,6 @@ measured and not yet addressed.
|
|
|
128
160
|
Publishing a middling number with its causes is the point. A project that sells evidence cannot
|
|
129
161
|
withhold its own.
|
|
130
162
|
|
|
131
|
-
## 60-second try (offline)
|
|
132
|
-
|
|
133
|
-
```bash
|
|
134
|
-
pip install "proofbundle[eval]"
|
|
135
|
-
proofbundle demo # honest receipt => OK, six tampers each => FAILED, sample swap caught
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
The demo runs entirely in memory and exits non-zero if any tamper slips through, so it doubles as a
|
|
139
|
-
self-test.
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
# verify a real hosted receipt without writing any code — the verify runs fully offline:
|
|
143
|
-
curl -fsSL https://raw.githubusercontent.com/b7n0de/proofbundle/main/examples/example_bundle.json -o receipt.json
|
|
144
|
-
proofbundle verify receipt.json # CRYPTO: OK (exit 0 ok · 1 fail · 2 malformed · 3 policy)
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
Emit your own receipt, apply a trust policy, start from a shipped template, or run the Inspect-native
|
|
148
|
-
path (METR Task Standard / UK-AISI ecosystem, mockllm, no API key): **[docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md)** ·
|
|
149
|
-
Inspect walkthrough **[docs/INSPECT_HAPPY_PATH.md](https://github.com/b7n0de/proofbundle/blob/main/docs/INSPECT_HAPPY_PATH.md)**.
|
|
150
|
-
|
|
151
163
|
## The problem
|
|
152
164
|
|
|
153
165
|
Every AI eval number you read — a safety benchmark, a capability score, a leaderboard entry — is an
|
|
@@ -236,18 +248,6 @@ version history (see also [CHANGELOG.md](https://github.com/b7n0de/proofbundle/b
|
|
|
236
248
|
separation (executor ≠ decision maker) — never a claim that the decision was correct.
|
|
237
249
|
[decision-receipt.md](https://github.com/b7n0de/proofbundle/blob/main/docs/predicates/decision-receipt.md) · [action-outcome.md](https://github.com/b7n0de/proofbundle/blob/main/docs/predicates/action-outcome.md)
|
|
238
250
|
|
|
239
|
-
## Install
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
pip install proofbundle # core: offline verify + plain emit (two deps: cryptography, rfc8785)
|
|
243
|
-
pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer)
|
|
244
|
-
pip install "proofbundle[inspect]" # inspect_ai adapter + hook
|
|
245
|
-
pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
Requires Python 3.10+. The verify path never rolls its own crypto — Ed25519 comes from
|
|
249
|
-
`cryptography`; Merkle hashing is RFC 6962.
|
|
250
|
-
|
|
251
251
|
## Post-quantum posture (honest)
|
|
252
252
|
|
|
253
253
|
proofbundle is **not** "quantum-safe" as a whole. Its hash-based layers (SHA-256, RFC 6962 / 9162
|
|
@@ -264,7 +264,8 @@ a post-quantum *payload* signature is on the roadmap. Detail: [docs/ANCHORS.md](
|
|
|
264
264
|
If proofbundle helped your evaluation pipeline, please cite it. Machine-readable metadata is in
|
|
265
265
|
[`CITATION.cff`](https://github.com/b7n0de/proofbundle/blob/main/CITATION.cff). The archival software record is on Zenodo under concept
|
|
266
266
|
DOI [10.5281/zenodo.21110642](https://doi.org/10.5281/zenodo.21110642); the Technical Note (design write-up) under concept DOI
|
|
267
|
-
[10.5281/zenodo.21230466](https://doi.org/10.5281/zenodo.21230466)
|
|
267
|
+
[10.5281/zenodo.21230466](https://doi.org/10.5281/zenodo.21230466) — version 4.0.0 of the Note is
|
|
268
|
+
[10.5281/zenodo.22004295](https://doi.org/10.5281/zenodo.22004295) — also linked from [b7n0de.com/proofbundle](https://b7n0de.com/proofbundle).
|
|
268
269
|
|
|
269
270
|
## Docs
|
|
270
271
|
|
|
@@ -7,12 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
<h1>proofbundle</h1>
|
|
9
9
|
|
|
10
|
-
**AI eval results need receipts.**
|
|
11
|
-
|
|
12
|
-
Turn an AI evaluation result into one portable, offline-verifiable receipt. It proves *who signed
|
|
13
|
-
these exact bytes* and *that nothing changed since* — not that the number is true. Ed25519 + RFC 6962
|
|
14
|
-
Merkle, one file, no server, no network.
|
|
15
|
-
|
|
16
10
|
[](https://github.com/b7n0de/proofbundle/actions/workflows/ci.yml)
|
|
17
11
|
[](https://github.com/b7n0de/proofbundle/actions/workflows/demo-reproducible.yml)
|
|
18
12
|
[](https://pypi.org/project/proofbundle/)
|
|
@@ -23,10 +17,48 @@ Merkle, one file, no server, no network.
|
|
|
23
17
|
|
|
24
18
|
Scorecard **6.5/10** — [what the four zeros mean, in one sentence each](#what-the-scorecard-badge-says-including-the-parts-that-are-low)
|
|
25
19
|
|
|
20
|
+
**AI eval results need receipts.**
|
|
21
|
+
|
|
22
|
+
Turn an AI evaluation result into one portable, offline-verifiable receipt. It proves *who signed
|
|
23
|
+
these exact bytes* and *that nothing changed since* — not that the number is true. Ed25519 + RFC 6962
|
|
24
|
+
Merkle, one file, no server, no network.
|
|
25
|
+
|
|
26
26
|
**Reviewing this for adoption?** Start with the 30-minute adversarial audit path: **[docs/REVIEWERS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/REVIEWERS.md)**.
|
|
27
27
|
|
|
28
28
|
</div>
|
|
29
29
|
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pip install proofbundle # core: offline verify + plain emit (two deps: cryptography, rfc8785)
|
|
34
|
+
pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer)
|
|
35
|
+
pip install "proofbundle[inspect]" # inspect_ai adapter + hook
|
|
36
|
+
pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Requires Python 3.10+. The verify path never rolls its own crypto — Ed25519 comes from
|
|
40
|
+
`cryptography`; Merkle hashing is RFC 6962.
|
|
41
|
+
|
|
42
|
+
## 60-second try (offline)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pip install "proofbundle[eval]"
|
|
46
|
+
proofbundle demo # honest receipt => OK, six tampers each => FAILED, sample swap caught
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The demo runs entirely in memory and exits non-zero if any tamper slips through, so it doubles as a
|
|
50
|
+
self-test.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# verify a real hosted receipt without writing any code — the verify runs fully offline:
|
|
54
|
+
curl -fsSL https://raw.githubusercontent.com/b7n0de/proofbundle/main/examples/example_bundle.json -o receipt.json
|
|
55
|
+
proofbundle verify receipt.json # CRYPTO: OK (exit 0 ok · 1 fail · 2 malformed · 3 policy)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Emit your own receipt, apply a trust policy, start from a shipped template, or run the Inspect-native
|
|
59
|
+
path (METR Task Standard / UK-AISI ecosystem, mockllm, no API key): **[docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md)** ·
|
|
60
|
+
Inspect walkthrough **[docs/INSPECT_HAPPY_PATH.md](https://github.com/b7n0de/proofbundle/blob/main/docs/INSPECT_HAPPY_PATH.md)**.
|
|
61
|
+
|
|
30
62
|
## What the Scorecard badge says, including the parts that are low
|
|
31
63
|
|
|
32
64
|
The badge is live, so it will move. Measured 2026-08-07, re-measured 2026-08-10 with identical
|
|
@@ -61,26 +93,6 @@ measured and not yet addressed.
|
|
|
61
93
|
Publishing a middling number with its causes is the point. A project that sells evidence cannot
|
|
62
94
|
withhold its own.
|
|
63
95
|
|
|
64
|
-
## 60-second try (offline)
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
pip install "proofbundle[eval]"
|
|
68
|
-
proofbundle demo # honest receipt => OK, six tampers each => FAILED, sample swap caught
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
The demo runs entirely in memory and exits non-zero if any tamper slips through, so it doubles as a
|
|
72
|
-
self-test.
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
# verify a real hosted receipt without writing any code — the verify runs fully offline:
|
|
76
|
-
curl -fsSL https://raw.githubusercontent.com/b7n0de/proofbundle/main/examples/example_bundle.json -o receipt.json
|
|
77
|
-
proofbundle verify receipt.json # CRYPTO: OK (exit 0 ok · 1 fail · 2 malformed · 3 policy)
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
Emit your own receipt, apply a trust policy, start from a shipped template, or run the Inspect-native
|
|
81
|
-
path (METR Task Standard / UK-AISI ecosystem, mockllm, no API key): **[docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md)** ·
|
|
82
|
-
Inspect walkthrough **[docs/INSPECT_HAPPY_PATH.md](https://github.com/b7n0de/proofbundle/blob/main/docs/INSPECT_HAPPY_PATH.md)**.
|
|
83
|
-
|
|
84
96
|
## The problem
|
|
85
97
|
|
|
86
98
|
Every AI eval number you read — a safety benchmark, a capability score, a leaderboard entry — is an
|
|
@@ -169,18 +181,6 @@ version history (see also [CHANGELOG.md](https://github.com/b7n0de/proofbundle/b
|
|
|
169
181
|
separation (executor ≠ decision maker) — never a claim that the decision was correct.
|
|
170
182
|
[decision-receipt.md](https://github.com/b7n0de/proofbundle/blob/main/docs/predicates/decision-receipt.md) · [action-outcome.md](https://github.com/b7n0de/proofbundle/blob/main/docs/predicates/action-outcome.md)
|
|
171
183
|
|
|
172
|
-
## Install
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
pip install proofbundle # core: offline verify + plain emit (two deps: cryptography, rfc8785)
|
|
176
|
-
pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer)
|
|
177
|
-
pip install "proofbundle[inspect]" # inspect_ai adapter + hook
|
|
178
|
-
pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
Requires Python 3.10+. The verify path never rolls its own crypto — Ed25519 comes from
|
|
182
|
-
`cryptography`; Merkle hashing is RFC 6962.
|
|
183
|
-
|
|
184
184
|
## Post-quantum posture (honest)
|
|
185
185
|
|
|
186
186
|
proofbundle is **not** "quantum-safe" as a whole. Its hash-based layers (SHA-256, RFC 6962 / 9162
|
|
@@ -197,7 +197,8 @@ a post-quantum *payload* signature is on the roadmap. Detail: [docs/ANCHORS.md](
|
|
|
197
197
|
If proofbundle helped your evaluation pipeline, please cite it. Machine-readable metadata is in
|
|
198
198
|
[`CITATION.cff`](https://github.com/b7n0de/proofbundle/blob/main/CITATION.cff). The archival software record is on Zenodo under concept
|
|
199
199
|
DOI [10.5281/zenodo.21110642](https://doi.org/10.5281/zenodo.21110642); the Technical Note (design write-up) under concept DOI
|
|
200
|
-
[10.5281/zenodo.21230466](https://doi.org/10.5281/zenodo.21230466)
|
|
200
|
+
[10.5281/zenodo.21230466](https://doi.org/10.5281/zenodo.21230466) — version 4.0.0 of the Note is
|
|
201
|
+
[10.5281/zenodo.22004295](https://doi.org/10.5281/zenodo.22004295) — also linked from [b7n0de.com/proofbundle](https://b7n0de.com/proofbundle).
|
|
201
202
|
|
|
202
203
|
## Docs
|
|
203
204
|
|
|
@@ -58,6 +58,16 @@
|
|
|
58
58
|
"relation/statement-retracts-declared-unresolved",
|
|
59
59
|
"relation/statement-supersedes-verified",
|
|
60
60
|
"relation/statement-malformed",
|
|
61
|
-
"relation/wrong-payloadtype-target"
|
|
61
|
+
"relation/wrong-payloadtype-target",
|
|
62
|
+
"provenance/version-status-reported",
|
|
63
|
+
"provenance/version-status-not-reported",
|
|
64
|
+
"provenance/version-status-not-bound",
|
|
65
|
+
"provenance/version-status-reported-without-field",
|
|
66
|
+
"provenance/version-status-not-reported-with-field",
|
|
67
|
+
"provenance/version-status-missing-reason",
|
|
68
|
+
"provenance/version-status-unknown-literal",
|
|
69
|
+
"provenance/version-status-unrelated-status-field",
|
|
70
|
+
"provenance/version-status-absent-legacy-receipt",
|
|
71
|
+
"provenance/version-status-lookalike-version-field"
|
|
62
72
|
]
|
|
63
73
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-absent-legacy-receipt",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (jury lens 1, 2026-08-26)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": []
|
|
8
|
+
},
|
|
9
|
+
"specRefs": [
|
|
10
|
+
"EVAL_CLAIM.md",
|
|
11
|
+
"CONFORMANCE.md",
|
|
12
|
+
"CHANGELOG.md"
|
|
13
|
+
],
|
|
14
|
+
"rationale": "A receipt issued before 5.0.0 carries NO status at all and stays valid. The change is additive by requirement, not by accident: demanding a status would invalidate every receipt ever issued. This vector locks that in, so a later reading cannot quietly turn absence into a rejection."
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-lookalike-version-field",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (jury lens 1 round 2, 2026-08-26)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": []
|
|
8
|
+
},
|
|
9
|
+
"specRefs": [
|
|
10
|
+
"EVAL_CLAIM.md",
|
|
11
|
+
"CONFORMANCE.md",
|
|
12
|
+
"CHANGELOG.md"
|
|
13
|
+
],
|
|
14
|
+
"rationale": "`schema_version` ends in `_version` but is NOT a harness-reported field. Its status — even a malformed one — must produce NO finding, while the real harness field beside it is still checked. The rule governs a NAMED set, not every name that looks like a version: for a verifier a false finding (a valid receipt made to look non-conformant) is the worse error direction, and a suffix rule over-matches by construction."
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-missing-reason",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (deep-gate iteration 5, finding F-C)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": [
|
|
8
|
+
"harness_version_status=not_reported without harness_version_status_reason (reason is mandatory)"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
"specRefs": [
|
|
12
|
+
"EVAL_CLAIM.md",
|
|
13
|
+
"CONFORMANCE.md",
|
|
14
|
+
"CHANGELOG.md"
|
|
15
|
+
],
|
|
16
|
+
"rationale": "A non-`reported` status without its reason moves the ambiguity instead of closing it — which is the whole point of the rule. The reason is mandatory and its absence is non-conformant."
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-not-bound",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (deep-gate iteration 5, finding F-C)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": []
|
|
8
|
+
},
|
|
9
|
+
"specRefs": [
|
|
10
|
+
"EVAL_CLAIM.md",
|
|
11
|
+
"CONFORMANCE.md",
|
|
12
|
+
"CHANGELOG.md"
|
|
13
|
+
],
|
|
14
|
+
"rationale": "No harness version is bound for this format at all. This is the OTHER meaning that bare absence used to carry, and it is now a distinct, named state."
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-not-reported",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (deep-gate iteration 5, finding F-C)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": []
|
|
8
|
+
},
|
|
9
|
+
"specRefs": [
|
|
10
|
+
"EVAL_CLAIM.md",
|
|
11
|
+
"CONFORMANCE.md",
|
|
12
|
+
"CHANGELOG.md"
|
|
13
|
+
],
|
|
14
|
+
"rationale": "The harness RAN and reported no version. The version field stays ABSENT — writing a value the harness never reported is forbidden — and the status plus its mandatory reason say so explicitly. Before 5.0.0 this receipt was byte-indistinguishable from one where nobody bound the field at all."
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-not-reported-with-field",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (deep-gate iteration 5, finding F-C)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": [
|
|
8
|
+
"harness_version_status=not_reported but harness_version is present ('0.4.12')"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
"specRefs": [
|
|
12
|
+
"EVAL_CLAIM.md",
|
|
13
|
+
"CONFORMANCE.md",
|
|
14
|
+
"CHANGELOG.md"
|
|
15
|
+
],
|
|
16
|
+
"rationale": "The mirror contradiction: the status denies a report while the value sits right beside it. Both directions must be caught, otherwise the pair can lie in one of them."
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-reported",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (deep-gate iteration 5, finding F-C)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": []
|
|
8
|
+
},
|
|
9
|
+
"specRefs": [
|
|
10
|
+
"EVAL_CLAIM.md",
|
|
11
|
+
"CONFORMANCE.md",
|
|
12
|
+
"CHANGELOG.md"
|
|
13
|
+
],
|
|
14
|
+
"rationale": "The harness reported a version: the field is present and the status says `reported`. No reason is required — a reported version explains itself. This is the baseline case; an implementation that flags it has made the status itself a finding."
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-reported-without-field",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (deep-gate iteration 5, finding F-C)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": [
|
|
8
|
+
"harness_version_status=reported but harness_version is absent"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
"specRefs": [
|
|
12
|
+
"EVAL_CLAIM.md",
|
|
13
|
+
"CONFORMANCE.md",
|
|
14
|
+
"CHANGELOG.md"
|
|
15
|
+
],
|
|
16
|
+
"rationale": "A status that claims `reported` while the field it speaks about is absent MUST be rejected. Without this case a verifier could be told anything by the status alone."
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-unknown-literal",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (deep-gate iteration 5, finding F-C)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": [
|
|
8
|
+
"harness_version_status='maybe' is not one of ['reported', 'not_reported', 'not_bound']"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
"specRefs": [
|
|
12
|
+
"EVAL_CLAIM.md",
|
|
13
|
+
"CONFORMANCE.md",
|
|
14
|
+
"CHANGELOG.md"
|
|
15
|
+
],
|
|
16
|
+
"rationale": "Only the three English literals are conformant. An open vocabulary would let an implementation invent a fourth state and call a receipt conformant."
|
|
17
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"caseId": "provenance-version-status-unrelated-status-field",
|
|
3
|
+
"kind": "provenance_version_status",
|
|
4
|
+
"input": "provenance.json",
|
|
5
|
+
"attribution": "proofbundle 5.0.0 — reported-version status (jury lens 1, 2026-08-26)",
|
|
6
|
+
"expected": {
|
|
7
|
+
"issues": []
|
|
8
|
+
},
|
|
9
|
+
"specRefs": [
|
|
10
|
+
"EVAL_CLAIM.md",
|
|
11
|
+
"CONFORMANCE.md",
|
|
12
|
+
"CHANGELOG.md"
|
|
13
|
+
],
|
|
14
|
+
"rationale": "A provenance block may carry OTHER fields ending in `_status` (run_status, scorer_status). They are not harness-reported version fields and MUST NOT produce a finding. A verifier that invents a finding on a field it was never asked about makes a valid receipt look non-conformant — the failure this product exists against, pointed the other way. The rule follows the field suffix `_version`, not a hard-coded list, so a future `foo_version` is covered and nothing else is ever touched."
|
|
15
|
+
}
|
|
@@ -293,9 +293,50 @@ def _check_relation_statement(case: dict, case_dir: pathlib.Path, *, require_anc
|
|
|
293
293
|
return _check_relation(case, case_dir, verb="relation-statement")
|
|
294
294
|
|
|
295
295
|
|
|
296
|
+
def _check_provenance_version_status(case: dict, case_dir: pathlib.Path, *,
|
|
297
|
+
require_anchors: bool = False) -> dict:
|
|
298
|
+
"""A provenance block is checked against the reported-version status rule (v5.0.0).
|
|
299
|
+
|
|
300
|
+
WHY THIS KIND EXISTS. A harness-reported version field used to be simply ABSENT when the
|
|
301
|
+
harness reported none, so absence carried two meanings at once — "the harness reported
|
|
302
|
+
nothing" and "nobody bound this field". For a verifier that ambiguity is the failure class
|
|
303
|
+
the product exists against. v5.0.0 adds an explicit three-value status beside each such
|
|
304
|
+
field; the corpus is the original authority for that rule, so the rule needs cases here and
|
|
305
|
+
not only unit tests.
|
|
306
|
+
|
|
307
|
+
The case declares `expected.issues`: the exact list of problem sentences the verifier must
|
|
308
|
+
produce for that provenance block. An EMPTY list means the block is consistent. Declaring
|
|
309
|
+
the exact list (rather than only a count) is deliberate — a case that merely asserted "some
|
|
310
|
+
problem" would pass on the wrong problem.
|
|
311
|
+
"""
|
|
312
|
+
cid = case.get("caseId", str(case_dir))
|
|
313
|
+
exp = case.get("expected") or {}
|
|
314
|
+
if "issues" not in exp:
|
|
315
|
+
return _fail(cid, "provenance_version_status case under-declares its expectations "
|
|
316
|
+
"(fail-closed): missing `issues`")
|
|
317
|
+
name = case.get("input") or "provenance.json"
|
|
318
|
+
if pathlib.Path(name).is_absolute() or ".." in pathlib.PurePosixPath(name).parts:
|
|
319
|
+
return _fail(cid, f"input {name!r} escapes the case directory")
|
|
320
|
+
try:
|
|
321
|
+
prov = json.loads((case_dir / name).read_text())
|
|
322
|
+
except Exception as e: # noqa: BLE001
|
|
323
|
+
return _fail(cid, f"{name} unreadable ({type(e).__name__}: {e})")
|
|
324
|
+
if not isinstance(prov, dict):
|
|
325
|
+
return _fail(cid, f"{name} must contain a JSON object")
|
|
326
|
+
sys.path.insert(0, str(ROOT.parent / "src"))
|
|
327
|
+
from proofbundle.adapters._provenance import version_status_issues # noqa: PLC0415
|
|
328
|
+
got = sorted(version_status_issues(prov))
|
|
329
|
+
want = sorted(str(x) for x in exp["issues"])
|
|
330
|
+
if got != want:
|
|
331
|
+
return _fail(cid, f"issues {got!r} != expected {want!r}")
|
|
332
|
+
return {"caseId": cid, "ok": True,
|
|
333
|
+
"detail": f"{len(got)} issue(s) as expected"}
|
|
334
|
+
|
|
335
|
+
|
|
296
336
|
_DISPATCH = {"decision_crossimpl": _check_decision_crossimpl, "native_bundle": _check_native_bundle,
|
|
297
337
|
"decision_relation": _check_decision_relation, "outcome_relation": _check_outcome_relation,
|
|
298
|
-
"relation_statement": _check_relation_statement
|
|
338
|
+
"relation_statement": _check_relation_statement,
|
|
339
|
+
"provenance_version_status": _check_provenance_version_status}
|
|
299
340
|
|
|
300
341
|
|
|
301
342
|
def run(*, require_anchors: bool = False) -> int:
|