proofbundle 3.6.1__tar.gz → 3.6.3__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.
Files changed (638) hide show
  1. proofbundle-3.6.3/PKG-INFO +272 -0
  2. proofbundle-3.6.3/README.md +205 -0
  3. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/README.md +10 -7
  4. proofbundle-3.6.3/conformance/decision/crossimpl/canonicalization-root-binding/case.json +26 -0
  5. proofbundle-3.6.3/conformance/decision/crossimpl/schema-conformant/MANIFEST.json +13 -0
  6. proofbundle-3.6.3/conformance/decision/crossimpl/schema-conformant/case.json +42 -0
  7. proofbundle-3.6.3/conformance/decision/crossimpl/schema-conformant/decision_receipt.jcs +1 -0
  8. proofbundle-3.6.3/conformance/decision/crossimpl/schema-conformant/decision_receipt.jcs.ots +0 -0
  9. proofbundle-3.6.3/conformance/decision/crossimpl/schema-conformant/decision_receipt.json +90 -0
  10. proofbundle-3.6.3/conformance/decision/crossimpl/schema-conformant/evidence_eval_result.jcs +1 -0
  11. proofbundle-3.6.3/conformance/decision/crossimpl/schema-conformant/evidence_eval_result.json +30 -0
  12. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/manifest.json +1 -0
  13. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/generate_vectors.py +2 -2
  14. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/wrong-payloadtype-target/case.json +1 -1
  15. {proofbundle-3.6.1 → proofbundle-3.6.3}/pyproject.toml +7 -1
  16. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/findings_register.py +1 -1
  17. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/mutation_check.py +34 -2
  18. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/rust_parity_registry.json +12 -0
  19. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/__init__.py +1 -1
  20. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/adapters/inspect_ai.py +36 -4
  21. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/anchors.py +35 -3
  22. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/anchors_chia_add.py +32 -12
  23. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/anchors_ots.py +2 -2
  24. proofbundle-3.6.3/src/proofbundle/anchors_rootcommit.py +269 -0
  25. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/assurance.py +10 -4
  26. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/automation_verdict.py +17 -4
  27. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/bundle.py +41 -9
  28. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/canonical.py +7 -0
  29. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/checkpoint.py +27 -3
  30. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/cli.py +122 -53
  31. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/decision.py +27 -4
  32. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/dsse.py +13 -3
  33. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/evalcard.py +32 -5
  34. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/evalclaim.py +36 -7
  35. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/evidence_pack.py +11 -2
  36. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/experimental/enclave.py +5 -2
  37. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/hf_evals.py +15 -3
  38. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/intoto.py +8 -2
  39. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/kbjwt.py +17 -1
  40. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/outcome.py +35 -5
  41. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/persample.py +21 -4
  42. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/policy.py +111 -54
  43. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/policy_profiles.py +15 -6
  44. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/pqsig.py +5 -0
  45. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/prereg.py +11 -0
  46. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/public_transparency.py +6 -1
  47. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/relation.py +45 -9
  48. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/relation_statement.py +11 -2
  49. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/renewal.py +25 -5
  50. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/sdjwt.py +7 -0
  51. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/sdjwt_issue.py +18 -4
  52. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/sdjwt_vc.py +22 -2
  53. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/signature.py +17 -10
  54. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/statuslist.py +7 -0
  55. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/subject_binding.py +34 -13
  56. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/tlogproof.py +35 -20
  57. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/trust_pack.py +34 -12
  58. proofbundle-3.6.3/src/proofbundle.egg-info/PKG-INFO +272 -0
  59. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle.egg-info/SOURCES.txt +33 -0
  60. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle.egg-info/requires.txt +3 -0
  61. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/MANIFEST.json +55 -0
  62. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/README.md +31 -0
  63. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/MANIFEST.json +102 -0
  64. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/README.md +70 -0
  65. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/manifest.json +51 -0
  66. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-01-valid.txt +15 -0
  67. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-02-tampered-root.txt +15 -0
  68. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-03-tampered-wallet.txt +15 -0
  69. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-04-tampered-proof.txt +15 -0
  70. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/manifest.json +61 -0
  71. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-01-valid.txt +15 -0
  72. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-02-tampered-root.txt +15 -0
  73. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-03-tampered-wallet.txt +15 -0
  74. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-04-tampered-sig.txt +15 -0
  75. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-05-tampered-proof.txt +15 -0
  76. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/01-valid.txt +10 -0
  77. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/02-unknown-id.txt +9 -0
  78. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/03-tampered-body.txt +5 -0
  79. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/04-tampered-proof.txt +9 -0
  80. proofbundle-3.6.3/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/manifest.json +43 -0
  81. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_adapters.py +38 -0
  82. proofbundle-3.6.3/tests/test_anchors_markovian.py +330 -0
  83. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchors_ots.py +1 -1
  84. proofbundle-3.6.3/tests/test_anchors_rootcommit.py +175 -0
  85. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_budget.py +9 -3
  86. proofbundle-3.6.3/tests/test_bughunt_361_automation_failopen.py +131 -0
  87. proofbundle-3.6.3/tests/test_bughunt_361_never_raise.py +443 -0
  88. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_conformance_retention_361.py +3 -3
  89. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_evidence_pack.py +1 -1
  90. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_hf_entry_verify_eee_digest.py +7 -2
  91. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_intoto_claims_hygiene.py +6 -4
  92. proofbundle-3.6.3/tests/test_never_raise_primary_arg_property.py +79 -0
  93. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_never_raise_recursion_361.py +1 -1
  94. proofbundle-3.6.3/tests/test_never_raise_surface_family_property.py +327 -0
  95. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_ots_calendar_hardening.py +1 -1
  96. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_policy_explain_lint.py +1 -1
  97. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sibling_never_raise_361.py +9 -4
  98. proofbundle-3.6.1/PKG-INFO +0 -382
  99. proofbundle-3.6.1/README.md +0 -317
  100. proofbundle-3.6.1/conformance/decision/crossimpl/canonicalization-root-binding/case.json +0 -24
  101. proofbundle-3.6.1/src/proofbundle.egg-info/PKG-INFO +0 -382
  102. proofbundle-3.6.1/tests/test_anchors_markovian.py +0 -172
  103. {proofbundle-3.6.1 → proofbundle-3.6.3}/LICENSE +0 -0
  104. {proofbundle-3.6.1 → proofbundle-3.6.3}/MANIFEST.in +0 -0
  105. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/coherent-rewrap-fails-expected-root/bundle.json +0 -0
  106. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/coherent-rewrap-fails-expected-root/case.json +0 -0
  107. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/coherent-rewrap-verifies-no-policy/bundle.json +0 -0
  108. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/coherent-rewrap-verifies-no-policy/case.json +0 -0
  109. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/corrupted-signature/bundle.json +0 -0
  110. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/corrupted-signature/case.json +0 -0
  111. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/duplicate-json-key/bundle.json +0 -0
  112. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/duplicate-json-key/case.json +0 -0
  113. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/forged-anchor-own-frozen/bundle.json +0 -0
  114. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/forged-anchor-own-frozen/case.json +0 -0
  115. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/n1-eval-sdjwt-graft-non-eval/bundle.json +0 -0
  116. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/n1-eval-sdjwt-graft-non-eval/case.json +0 -0
  117. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/sd-jwt-forged-issuer-identity/bundle.json +0 -0
  118. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/sd-jwt-forged-issuer-identity/case.json +0 -0
  119. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/sd-jwt-signed-but-unbound/bundle.json +0 -0
  120. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/sd-jwt-signed-but-unbound/case.json +0 -0
  121. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/sd-jwt-unsigned-unauthenticated/bundle.json +0 -0
  122. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/sd-jwt-unsigned-unauthenticated/case.json +0 -0
  123. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/tampered-payload/bundle.json +0 -0
  124. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/tampered-payload/case.json +0 -0
  125. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/tree-size-expectation-mismatch/bundle.json +0 -0
  126. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/tree-size-expectation-mismatch/case.json +0 -0
  127. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/valid-minimal/bundle.json +0 -0
  128. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/bundle/valid-minimal/case.json +0 -0
  129. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/common_vocabulary.py +0 -0
  130. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/cross_format.py +0 -0
  131. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/canonicalization-root-binding/MANIFEST.json +0 -0
  132. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs +0 -0
  133. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs.ots +0 -0
  134. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.json +0 -0
  135. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.jcs +0 -0
  136. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.json +0 -0
  137. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/MANIFEST.json +0 -0
  138. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/case.json +0 -0
  139. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs +0 -0
  140. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs.ots +0 -0
  141. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.json +0 -0
  142. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.jcs +0 -0
  143. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.json +0 -0
  144. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/declared-supersedes-verified/case.json +0 -0
  145. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/declared-supersedes-verified/pub.b64 +0 -0
  146. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/declared-supersedes-verified/receipt.json +0 -0
  147. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/declared-supersedes-verified/related_b.json +0 -0
  148. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/declared-unresolved/case.json +0 -0
  149. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/declared-unresolved/pub.b64 +0 -0
  150. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/declared-unresolved/receipt.json +0 -0
  151. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-accept-path/case.json +0 -0
  152. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-accept-path/policy.json +0 -0
  153. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-accept-path/pub.b64 +0 -0
  154. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-accept-path/receipt.json +0 -0
  155. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-accept-path/related_rx.json +0 -0
  156. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-correct-pass/case.json +0 -0
  157. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-correct-pass/policy.json +0 -0
  158. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-correct-pass/pub.b64 +0 -0
  159. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-correct-pass/receipt.json +0 -0
  160. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-correct-pass/related_r0.json +0 -0
  161. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-correct-pass/related_rx.json +0 -0
  162. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-no-pin-old-behavior/case.json +0 -0
  163. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-no-pin-old-behavior/policy.json +0 -0
  164. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-no-pin-old-behavior/pub.b64 +0 -0
  165. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-no-pin-old-behavior/receipt.json +0 -0
  166. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-no-pin-old-behavior/related_r0.json +0 -0
  167. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-no-pin-old-behavior/related_rx.json +0 -0
  168. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-target-mismatch/case.json +0 -0
  169. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-target-mismatch/policy.json +0 -0
  170. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-target-mismatch/pub.b64 +0 -0
  171. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-target-mismatch/receipt.json +0 -0
  172. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-target-mismatch/related_r0.json +0 -0
  173. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/decoy-parent-target-mismatch/related_rx.json +0 -0
  174. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/case.json +0 -0
  175. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/pub.b64 +0 -0
  176. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/receipt.json +0 -0
  177. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_001.json +0 -0
  178. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_002.json +0 -0
  179. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_003.json +0 -0
  180. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_004.json +0 -0
  181. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_005.json +0 -0
  182. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_006.json +0 -0
  183. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_007.json +0 -0
  184. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_008.json +0 -0
  185. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_009.json +0 -0
  186. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_010.json +0 -0
  187. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_011.json +0 -0
  188. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_012.json +0 -0
  189. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_013.json +0 -0
  190. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_014.json +0 -0
  191. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_015.json +0 -0
  192. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_016.json +0 -0
  193. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_017.json +0 -0
  194. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_018.json +0 -0
  195. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_019.json +0 -0
  196. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_020.json +0 -0
  197. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_021.json +0 -0
  198. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_022.json +0 -0
  199. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_023.json +0 -0
  200. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_024.json +0 -0
  201. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_025.json +0 -0
  202. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_026.json +0 -0
  203. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_027.json +0 -0
  204. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_028.json +0 -0
  205. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_029.json +0 -0
  206. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_030.json +0 -0
  207. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_031.json +0 -0
  208. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_032.json +0 -0
  209. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/depth-exceeded/related_033.json +0 -0
  210. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/digest-mismatch/case.json +0 -0
  211. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/digest-mismatch/policy.json +0 -0
  212. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/digest-mismatch/pub.b64 +0 -0
  213. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/digest-mismatch/receipt.json +0 -0
  214. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/digest-mismatch/related_b.json +0 -0
  215. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/malformed-digest/case.json +0 -0
  216. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/malformed-digest/pub.b64 +0 -0
  217. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/malformed-digest/receipt.json +0 -0
  218. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-declared-supersedes-verified/case.json +0 -0
  219. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-declared-supersedes-verified/pub.b64 +0 -0
  220. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-declared-supersedes-verified/receipt.json +0 -0
  221. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-declared-supersedes-verified/related_b.json +0 -0
  222. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-decoy-parent-target-mismatch/case.json +0 -0
  223. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-decoy-parent-target-mismatch/policy.json +0 -0
  224. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-decoy-parent-target-mismatch/pub.b64 +0 -0
  225. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-decoy-parent-target-mismatch/receipt.json +0 -0
  226. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-decoy-parent-target-mismatch/related_r0.json +0 -0
  227. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-decoy-parent-target-mismatch/related_rx.json +0 -0
  228. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-digest-mismatch/case.json +0 -0
  229. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-digest-mismatch/policy.json +0 -0
  230. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-digest-mismatch/pub.b64 +0 -0
  231. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-digest-mismatch/receipt.json +0 -0
  232. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-digest-mismatch/related_b.json +0 -0
  233. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-relation-signer-unauthorized/case.json +0 -0
  234. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-relation-signer-unauthorized/policy.json +0 -0
  235. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-relation-signer-unauthorized/pub.b64 +0 -0
  236. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-relation-signer-unauthorized/receipt.json +0 -0
  237. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-relation-signer-unauthorized/related_b.json +0 -0
  238. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-renews/case.json +0 -0
  239. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-renews/pub.b64 +0 -0
  240. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-renews/receipt.json +0 -0
  241. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-renews/related_b.json +0 -0
  242. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-silent-landing/case.json +0 -0
  243. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-silent-landing/pub.b64 +0 -0
  244. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-silent-landing/receipt.json +0 -0
  245. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-valid-baseline/case.json +0 -0
  246. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-valid-baseline/pub.b64 +0 -0
  247. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/outcome-valid-baseline/receipt.json +0 -0
  248. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-amends/case.json +0 -0
  249. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-amends/pub.b64 +0 -0
  250. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-amends/receipt.json +0 -0
  251. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-amends/related_b.json +0 -0
  252. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-corrects/case.json +0 -0
  253. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-corrects/pub.b64 +0 -0
  254. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-corrects/receipt.json +0 -0
  255. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-corrects/related_b.json +0 -0
  256. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-derivedfrom/case.json +0 -0
  257. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-derivedfrom/pub.b64 +0 -0
  258. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-derivedfrom/receipt.json +0 -0
  259. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-derivedfrom/related_b.json +0 -0
  260. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-retracts/case.json +0 -0
  261. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-retracts/pub.b64 +0 -0
  262. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-retracts/receipt.json +0 -0
  263. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-retracts/related_b.json +0 -0
  264. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-revises/case.json +0 -0
  265. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-revises/pub.b64 +0 -0
  266. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-revises/receipt.json +0 -0
  267. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-revises/related_b.json +0 -0
  268. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-unauthorized/case.json +0 -0
  269. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-unauthorized/policy.json +0 -0
  270. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-unauthorized/pub.b64 +0 -0
  271. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-unauthorized/receipt.json +0 -0
  272. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-unauthorized/related_b.json +0 -0
  273. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-verified/case.json +0 -0
  274. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-verified/policy.json +0 -0
  275. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-verified/pub.b64 +0 -0
  276. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-verified/receipt.json +0 -0
  277. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-cross-issuer-verified/related_b.json +0 -0
  278. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-same-key-explicit/case.json +0 -0
  279. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-same-key-explicit/policy.json +0 -0
  280. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-same-key-explicit/pub.b64 +0 -0
  281. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-same-key-explicit/receipt.json +0 -0
  282. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-same-key-explicit/related_b.json +0 -0
  283. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-verified-under-not-claim/case.json +0 -0
  284. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-verified-under-not-claim/policy.json +0 -0
  285. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-verified-under-not-claim/pub.b64 +0 -0
  286. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-verified-under-not-claim/receipt.json +0 -0
  287. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/relation-signer-verified-under-not-claim/related_b.json +0 -0
  288. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/renews-vector/case.json +0 -0
  289. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/renews-vector/pub.b64 +0 -0
  290. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/renews-vector/receipt.json +0 -0
  291. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/renews-vector/related_b.json +0 -0
  292. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/retracts-then-use/case.json +0 -0
  293. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/retracts-then-use/policy.json +0 -0
  294. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/retracts-then-use/pub.b64 +0 -0
  295. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/retracts-then-use/receipt.json +0 -0
  296. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/retracts-then-use/related_r.json +0 -0
  297. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/silent-landing/case.json +0 -0
  298. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/silent-landing/pub.b64 +0 -0
  299. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/silent-landing/receipt.json +0 -0
  300. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-malformed/case.json +0 -0
  301. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-malformed/pub.b64 +0 -0
  302. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-malformed/receipt.json +0 -0
  303. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-declared-unresolved/case.json +0 -0
  304. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-declared-unresolved/pub.b64 +0 -0
  305. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-declared-unresolved/receipt.json +0 -0
  306. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-unauthorized/case.json +0 -0
  307. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-unauthorized/policy.json +0 -0
  308. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-unauthorized/pub.b64 +0 -0
  309. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-unauthorized/receipt.json +0 -0
  310. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-unauthorized/related_t.json +0 -0
  311. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-blocked/case.json +0 -0
  312. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-blocked/policy.json +0 -0
  313. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-blocked/pub.b64 +0 -0
  314. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-blocked/receipt.json +0 -0
  315. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-blocked/related_t.json +0 -0
  316. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-visible/case.json +0 -0
  317. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-visible/pub.b64 +0 -0
  318. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-visible/receipt.json +0 -0
  319. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-retracts-verified-visible/related_t.json +0 -0
  320. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-supersedes-verified/case.json +0 -0
  321. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-supersedes-verified/pub.b64 +0 -0
  322. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-supersedes-verified/receipt.json +0 -0
  323. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/statement-supersedes-verified/related_t.json +0 -0
  324. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/t1-canonical-invalid-signature/case.json +0 -0
  325. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/t1-canonical-invalid-signature/pub.b64 +0 -0
  326. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/t1-canonical-invalid-signature/receipt.json +0 -0
  327. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-ambiguous/case.json +0 -0
  328. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-ambiguous/pub.b64 +0 -0
  329. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-ambiguous/receipt.json +0 -0
  330. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-ambiguous/related_r0.json +0 -0
  331. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-correct-pass/case.json +0 -0
  332. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-correct-pass/pub.b64 +0 -0
  333. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-correct-pass/receipt.json +0 -0
  334. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-correct-pass/related_r0.json +0 -0
  335. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-mismatch/case.json +0 -0
  336. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-mismatch/pub.b64 +0 -0
  337. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-mismatch/receipt.json +0 -0
  338. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-mismatch/related_r0.json +0 -0
  339. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-missing/case.json +0 -0
  340. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-missing/pub.b64 +0 -0
  341. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-missing/receipt.json +0 -0
  342. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/target-subject-missing/related_r0.json +0 -0
  343. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/unauthorized-signer/case.json +0 -0
  344. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/unauthorized-signer/pub.b64 +0 -0
  345. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/unauthorized-signer/receipt.json +0 -0
  346. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/unauthorized-signer/related_b.json +0 -0
  347. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/valid-baseline/case.json +0 -0
  348. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/valid-baseline/pub.b64 +0 -0
  349. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/valid-baseline/receipt.json +0 -0
  350. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/wrong-payloadtype-target/pub.b64 +0 -0
  351. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/wrong-payloadtype-target/receipt.json +0 -0
  352. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/relation/wrong-payloadtype-target/related_t.json +0 -0
  353. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/run_conformance.py +0 -0
  354. {proofbundle-3.6.1 → proofbundle-3.6.3}/conformance/vector_schema.json +0 -0
  355. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/adr/renewal_policy.example.json +0 -0
  356. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/AUDITOR_OPEN_POINTS.md +0 -0
  357. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/MANIFEST.sha256 +0 -0
  358. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/OPEN_QUESTIONS.md +0 -0
  359. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/PROGRESS.md +0 -0
  360. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/README.md +0 -0
  361. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/REPRODUCTION_RUNBOOK.md +0 -0
  362. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/calendar_independence.md +0 -0
  363. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/differential_matrix.md +0 -0
  364. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/index.json +0 -0
  365. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/proofbundle/readiness_pack.bundle.json +0 -0
  366. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 +0 -0
  367. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/rust_parity_scope.md +0 -0
  368. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/tamper_resistance.md +0 -0
  369. {proofbundle-3.6.1 → proofbundle-3.6.3}/docs/readiness_pack/threat_model_delta_360.md +0 -0
  370. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/README.md +0 -0
  371. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/anchors/chia-datalayer-invalid-root.json +0 -0
  372. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/anchors/chia-datalayer-valid.json +0 -0
  373. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/checkpoint_example.py +0 -0
  374. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/decision_receipt_allow.json +0 -0
  375. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/decision_receipt_deny.json +0 -0
  376. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/decision_receipt_escalate.json +0 -0
  377. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/decision_receipt_with_eval_ref.intoto.json +0 -0
  378. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/eee_receipt.py +0 -0
  379. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/example.tlog-proof +0 -0
  380. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/example_bundle.json +0 -0
  381. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/experimental_enclave.py +0 -0
  382. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/inspect_hook_example.py +0 -0
  383. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/inspect_receipt.py +0 -0
  384. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/intoto/private-model-commitment.statement.json +0 -0
  385. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/intoto/public-model.statement.json +0 -0
  386. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/intoto/release-gate.statement.json +0 -0
  387. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/intoto/svr.statement.json +0 -0
  388. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/intoto_dsse_export.py +0 -0
  389. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/lm_eval_receipt.py +0 -0
  390. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/make_example.py +0 -0
  391. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/persample_audit.py +0 -0
  392. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/pytest_plugin_example.py +0 -0
  393. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/rekor_interop.py +0 -0
  394. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/tlog_proof_example.py +0 -0
  395. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/trust_policy_decision_strict.json +0 -0
  396. {proofbundle-3.6.1 → proofbundle-3.6.3}/examples/trust_policy_strict.json +0 -0
  397. {proofbundle-3.6.1 → proofbundle-3.6.3}/formal/README.md +0 -0
  398. {proofbundle-3.6.1 → proofbundle-3.6.3}/formal/model.py +0 -0
  399. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/action-outcome-v0.1.schema.json +0 -0
  400. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/decision-receipt-v0.1.schema.json +0 -0
  401. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/eval_claim_v0_1.schema.json +0 -0
  402. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/in_toto_statement_v1.schema.json +0 -0
  403. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/proofbundle_v0_1.schema.json +0 -0
  404. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/run-ledger-v0.1.schema.json +0 -0
  405. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/trust-pack-v0.1.schema.json +0 -0
  406. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/trust_policy_v0_1.schema.json +0 -0
  407. {proofbundle-3.6.1 → proofbundle-3.6.3}/schemas/verification-summary-v0.1.schema.json +0 -0
  408. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/_build_anchor_fixture.py +0 -0
  409. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/audit_candidate_matrix.py +0 -0
  410. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/branch_base_check.py +0 -0
  411. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/build_reproducible.py +0 -0
  412. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/check_version_and_changelog.py +0 -0
  413. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/claims_hygiene_check.py +0 -0
  414. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/demo.sh +0 -0
  415. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/demo_tamper.sh +0 -0
  416. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/doc_link_check.py +0 -0
  417. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/fork_pr_secret_isolation.py +0 -0
  418. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/fuzz_soak.py +0 -0
  419. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/gen_findings_register.py +0 -0
  420. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/gen_synthetic_ots_fixture.py +0 -0
  421. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/pre_tag_audit_gate.py +0 -0
  422. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/readiness_pack_gate.py +0 -0
  423. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/readiness_pack_manifest.py +0 -0
  424. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/render_demo.py +0 -0
  425. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/rust_parity_gate.py +0 -0
  426. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/test_manifest_gate.py +0 -0
  427. {proofbundle-3.6.1 → proofbundle-3.6.3}/scripts/type_confusion_gate.py +0 -0
  428. {proofbundle-3.6.1 → proofbundle-3.6.3}/setup.cfg +0 -0
  429. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/_inspect_registry.py +0 -0
  430. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/_integration.py +0 -0
  431. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/_strict_json.py +0 -0
  432. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/adapters/__init__.py +0 -0
  433. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/adapters/_provenance.py +0 -0
  434. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/adapters/eee.py +0 -0
  435. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/adapters/lm_eval.py +0 -0
  436. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/adapters/promptfoo.py +0 -0
  437. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/adapters/samples.py +0 -0
  438. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/anchors_chia.py +0 -0
  439. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/anchors_markovian.py +0 -0
  440. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/anchors_rfc3161.py +0 -0
  441. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/beacon.py +0 -0
  442. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/budget.py +0 -0
  443. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/demo.py +0 -0
  444. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/eee_eval_schema.json +0 -0
  445. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/emit.py +0 -0
  446. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/errors.py +0 -0
  447. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/experimental/__init__.py +0 -0
  448. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/hashalg.py +0 -0
  449. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/inspect_hook.py +0 -0
  450. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/merkle.py +0 -0
  451. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/policies/decision-receipt-template-v1.json +0 -0
  452. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/policies/research-preview-v1.json +0 -0
  453. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/policies/strict-eval-authenticated-root-template-v1.json +0 -0
  454. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/policies/strict-eval-template-v1.json +0 -0
  455. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/policies/strict-prereg-template-v1.json +0 -0
  456. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/py.typed +0 -0
  457. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/pytest_plugin.py +0 -0
  458. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/run_ledger.py +0 -0
  459. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle/verification_summary.py +0 -0
  460. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle.egg-info/dependency_links.txt +0 -0
  461. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle.egg-info/entry_points.txt +0 -0
  462. {proofbundle-3.6.1 → proofbundle-3.6.3}/src/proofbundle.egg-info/top_level.txt +0 -0
  463. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/conftest.py +0 -0
  464. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/anchors/chia_datalayer_proof.json +0 -0
  465. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/anchors/freetsa_receipt_anchor.json +0 -0
  466. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/checkpoint/PROVENANCE.json +0 -0
  467. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/checkpoint/gosumdb_known_keys.go +0 -0
  468. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/checkpoint/rekor_v2_checkpoint.txt +0 -0
  469. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/checkpoint/sumdb_latest.txt +0 -0
  470. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/checkpoint/trusted_root.json +0 -0
  471. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ed25519_speccheck_cases.LICENSE +0 -0
  472. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ed25519_speccheck_cases.README.md +0 -0
  473. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ed25519_speccheck_cases.json +0 -0
  474. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/eee_arc_easy.json +0 -0
  475. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/inspect_logs/safety_refusal_demo.eval +0 -0
  476. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/lm_eval_arc_easy_real.json +0 -0
  477. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/markovian_anchor_confirmed.json +0 -0
  478. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/mldsa_acvp/PROVENANCE.json +0 -0
  479. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/mldsa_acvp/mldsa_sigver_slice.json +0 -0
  480. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/PROVENANCE.json +0 -0
  481. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/block358391.json +0 -0
  482. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/hello-world.txt +0 -0
  483. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/hello-world.txt.ots +0 -0
  484. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/incomplete.txt +0 -0
  485. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/incomplete.txt.ots +0 -0
  486. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/known-and-unknown-notary.txt +0 -0
  487. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/known-and-unknown-notary.txt.ots +0 -0
  488. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/merkle2.txt +0 -0
  489. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/merkle2.txt.ots +0 -0
  490. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/synthetic-upgraded-sha256.block.json +0 -0
  491. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/synthetic-upgraded-sha256.txt +0 -0
  492. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/synthetic-upgraded-sha256.txt.ots +0 -0
  493. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/two-calendars.txt +0 -0
  494. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/ots/two-calendars.txt.ots +0 -0
  495. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/promptfoo_results_v3.json +0 -0
  496. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/rekor_inclusion_25579.json +0 -0
  497. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/rfc6962_vectors.json +0 -0
  498. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/sdjwt_disclosure_vector.json +0 -0
  499. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/sdjwt_reference_eddsa.json +0 -0
  500. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/sdjwtvc/PROVENANCE.json +0 -0
  501. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/sdjwtvc/sdjwtvc_examples.txt +0 -0
  502. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/fixtures/sdjwtvc/sdjwtvc_issuer_pubkey.json +0 -0
  503. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_adversarial.py +0 -0
  504. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchor_hardening_321.py +0 -0
  505. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchor_longevity_property.py +0 -0
  506. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchor_target_trustedtime.py +0 -0
  507. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchors_chia.py +0 -0
  508. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchors_chia_add.py +0 -0
  509. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchors_chia_claims.py +0 -0
  510. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchors_generic.py +0 -0
  511. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_anchors_rfc3161.py +0 -0
  512. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_assurance.py +0 -0
  513. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_audit_candidate_360.py +0 -0
  514. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_automation_verdict.py +0 -0
  515. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_beacon.py +0 -0
  516. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_branch_base_check.py +0 -0
  517. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_bundle.py +0 -0
  518. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_bundle_robustness.py +0 -0
  519. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_canonical.py +0 -0
  520. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_checkpoint.py +0 -0
  521. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_checkpoint_external_vectors.py +0 -0
  522. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_checkpoint_quorum_property.py +0 -0
  523. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_claims_hygiene.py +0 -0
  524. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_cli.py +0 -0
  525. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_cli_eval.py +0 -0
  526. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_cli_require_anchor.py +0 -0
  527. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_conformance.py +0 -0
  528. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_content_root_property.py +0 -0
  529. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_cosignature.py +0 -0
  530. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_cosignature_mldsa.py +0 -0
  531. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_cross_format_singleton_361.py +0 -0
  532. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_anchors.py +0 -0
  533. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_cli.py +0 -0
  534. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_evidence.py +0 -0
  535. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_fuzz.py +0 -0
  536. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_hardening.py +0 -0
  537. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_policy.py +0 -0
  538. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_schema.py +0 -0
  539. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_validator_api.py +0 -0
  540. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_decision_verify.py +0 -0
  541. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_demo.py +0 -0
  542. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_docs_truth.py +0 -0
  543. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_dsse_adversarial.py +0 -0
  544. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_dup_key_reject.py +0 -0
  545. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_ed25519_semantics.py +0 -0
  546. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_eee.py +0 -0
  547. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_emit.py +0 -0
  548. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_enclave_assurance.py +0 -0
  549. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_eval_claim_schema.py +0 -0
  550. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_eval_evidence_class.py +0 -0
  551. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_evalcard.py +0 -0
  552. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_evalclaim.py +0 -0
  553. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_examples.py +0 -0
  554. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_experimental_enclave.py +0 -0
  555. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_findings_register_rt10.py +0 -0
  556. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_fork_pr_secret_isolation.py +0 -0
  557. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_fuzz_parsers.py +0 -0
  558. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_fuzz_soak_regression.py +0 -0
  559. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_hashalg.py +0 -0
  560. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_hf_evals.py +0 -0
  561. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_inspect_hook.py +0 -0
  562. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_intoto.py +0 -0
  563. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_intoto_content_root_migration.py +0 -0
  564. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_intoto_dsse.py +0 -0
  565. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_intoto_eval_result.py +0 -0
  566. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_intoto_examples.py +0 -0
  567. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_intoto_spec_diff.py +0 -0
  568. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_intoto_svr.py +0 -0
  569. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_jcs_mandatory_361.py +0 -0
  570. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_kbjwt.py +0 -0
  571. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_legacy_assurance_deprecation_361.py +0 -0
  572. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_lens_review_fixes_3_1_3.py +0 -0
  573. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_manifest_lock.json +0 -0
  574. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_merkle.py +0 -0
  575. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_merkle_consistency_property.py +0 -0
  576. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_merkle_property.py +0 -0
  577. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_mldsa_acvp_vectors.py +0 -0
  578. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_never_raise_361.py +0 -0
  579. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_official_vectors.py +0 -0
  580. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_ok_semantics.py +0 -0
  581. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_ots_external_vectors.py +0 -0
  582. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_outcome_receiver_corroboration.py +0 -0
  583. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_outcome_verify.py +0 -0
  584. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_oversized_int_guard.py +0 -0
  585. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_persample.py +0 -0
  586. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_pinned_key_validation.py +0 -0
  587. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_policy_lifecycle_purpose.py +0 -0
  588. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_policy_profiles.py +0 -0
  589. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_policy_templates.py +0 -0
  590. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_pqsig.py +0 -0
  591. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_predicate_type_enforcement.py +0 -0
  592. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_prereg.py +0 -0
  593. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_promptfoo.py +0 -0
  594. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_provenance.py +0 -0
  595. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_public_transparency.py +0 -0
  596. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_pytest_plugin.py +0 -0
  597. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_rekor_interop.py +0 -0
  598. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_relation_profile.py +0 -0
  599. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_relation_property.py +0 -0
  600. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_relation_same_key_361.py +0 -0
  601. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_relation_signer_target_340.py +0 -0
  602. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_relation_statement.py +0 -0
  603. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_relation_statement_rust_parity.py +0 -0
  604. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_relation_subject_pin_361.py +0 -0
  605. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_release_integrity_gate.py +0 -0
  606. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_renewal.py +0 -0
  607. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_renewal_external_token_glue.py +0 -0
  608. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_renewal_policy.py +0 -0
  609. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_renewal_signed.py +0 -0
  610. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_reproducible_build_361.py +0 -0
  611. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_rfc6962_external_vectors.py +0 -0
  612. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_roadmap_frontload_foundations.py +0 -0
  613. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_root_authenticity.py +0 -0
  614. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_run_ledger.py +0 -0
  615. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_rust_parity_gate.py +0 -0
  616. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_schema.py +0 -0
  617. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_schema_parity.py +0 -0
  618. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdist_packaging_361.py +0 -0
  619. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdjwt_adversarial.py +0 -0
  620. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdjwt_duplicate_cnf.py +0 -0
  621. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdjwt_issue.py +0 -0
  622. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdjwt_reference.py +0 -0
  623. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdjwt_resource_budget.py +0 -0
  624. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdjwt_vc.py +0 -0
  625. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdjwt_verify_binding.py +0 -0
  626. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_sdjwtvc_external_vectors.py +0 -0
  627. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_signature.py +0 -0
  628. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_statuslist.py +0 -0
  629. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_subject_binding.py +0 -0
  630. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_tlogproof.py +0 -0
  631. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_tree_context_authenticity.py +0 -0
  632. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_trust_pack.py +0 -0
  633. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_trust_pack_crypto_agility.py +0 -0
  634. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_trust_pack_outcome_receivers_role.py +0 -0
  635. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_trust_pack_payloadtype_negatives.py +0 -0
  636. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_trust_policy.py +0 -0
  637. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_verification_summary.py +0 -0
  638. {proofbundle-3.6.1 → proofbundle-3.6.3}/tests/test_verify_matrix.py +0 -0
@@ -0,0 +1,272 @@
1
+ Metadata-Version: 2.4
2
+ Name: proofbundle
3
+ Version: 3.6.3
4
+ Summary: Emit and verify portable cryptographic evidence bundles, offline: Ed25519 + RFC 6962 Merkle + optional SD-JWT.
5
+ Author: Konrad Gruszka
6
+ License: MIT
7
+ Project-URL: Homepage, https://b7n0de.com
8
+ Project-URL: Repository, https://github.com/b7n0de/proofbundle
9
+ Project-URL: Issues, https://github.com/b7n0de/proofbundle/issues
10
+ Project-URL: Changelog, https://github.com/b7n0de/proofbundle/blob/main/CHANGELOG.md
11
+ Project-URL: Documentation, https://github.com/b7n0de/proofbundle#readme
12
+ Keywords: cryptography,merkle,transparency-log,ed25519,sd-jwt,verifiable-credentials,attestation,provenance,rfc6962
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Topic :: Security :: Cryptography
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: cryptography>=42
27
+ Requires-Dist: rfc8785>=0.1.4
28
+ Provides-Extra: sdjwt
29
+ Provides-Extra: eval
30
+ Requires-Dist: rfc8785>=0.1.4; extra == "eval"
31
+ Provides-Extra: anchors
32
+ Requires-Dist: rfc3161-client>=1.0.6; extra == "anchors"
33
+ Requires-Dist: opentimestamps<0.5,>=0.4.5; extra == "anchors"
34
+ Requires-Dist: rfc8785>=0.1.4; extra == "anchors"
35
+ Provides-Extra: adapters
36
+ Provides-Extra: chia
37
+ Provides-Extra: experimental
38
+ Provides-Extra: pq
39
+ Requires-Dist: cryptography>=48; extra == "pq"
40
+ Provides-Extra: rootcommit
41
+ Requires-Dist: ecdsa>=0.18; extra == "rootcommit"
42
+ Provides-Extra: formal
43
+ Requires-Dist: z3-solver>=4.12; extra == "formal"
44
+ Provides-Extra: pytest
45
+ Requires-Dist: pytest>=7; extra == "pytest"
46
+ Provides-Extra: test
47
+ Requires-Dist: pytest>=7; extra == "test"
48
+ Requires-Dist: hypothesis>=6; extra == "test"
49
+ Requires-Dist: PyYAML>=6; extra == "test"
50
+ Requires-Dist: jsonschema>=4; extra == "test"
51
+ Requires-Dist: sd-jwt>=0.10; extra == "test"
52
+ Requires-Dist: rfc8785>=0.1.4; extra == "test"
53
+ Provides-Extra: inspect
54
+ Requires-Dist: inspect_ai<0.4,>=0.3.112; extra == "inspect"
55
+ Provides-Extra: dev
56
+ Requires-Dist: pytest>=7; extra == "dev"
57
+ Requires-Dist: ruff>=0.5; extra == "dev"
58
+ Requires-Dist: jsonschema>=4; extra == "dev"
59
+ Requires-Dist: mypy>=1.8; extra == "dev"
60
+ Requires-Dist: build>=1; extra == "dev"
61
+ Requires-Dist: hypothesis>=6; extra == "dev"
62
+ Requires-Dist: rfc8785>=0.1.4; extra == "dev"
63
+ Requires-Dist: sd-jwt>=0.10; extra == "dev"
64
+ Requires-Dist: PyYAML>=6; extra == "dev"
65
+ Requires-Dist: inspect_ai<0.4,>=0.3.112; extra == "dev"
66
+ Dynamic: license-file
67
+
68
+ <div align="center">
69
+
70
+ <picture>
71
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/b7n0de/proofbundle/main/assets/b7n0de-hase-logo-dark.png">
72
+ <img alt="b7n0de, Verified AI Work, pink rabbit mascot over the B7N0DE wordmark" src="https://raw.githubusercontent.com/b7n0de/proofbundle/main/assets/b7n0de-hase-logo.png" width="200">
73
+ </picture>
74
+
75
+ <h1>proofbundle</h1>
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
+ [![CI](https://github.com/b7n0de/proofbundle/actions/workflows/ci.yml/badge.svg)](https://github.com/b7n0de/proofbundle/actions/workflows/ci.yml)
84
+ [![demo reproducible](https://github.com/b7n0de/proofbundle/actions/workflows/demo-reproducible.yml/badge.svg)](https://github.com/b7n0de/proofbundle/actions/workflows/demo-reproducible.yml)
85
+ [![PyPI](https://img.shields.io/pypi/v/proofbundle.svg)](https://pypi.org/project/proofbundle/)
86
+ [![Python](https://img.shields.io/pypi/pyversions/proofbundle.svg)](https://pypi.org/project/proofbundle/)
87
+ [![License: MIT](https://img.shields.io/badge/license-MIT-D6248A.svg)](https://github.com/b7n0de/proofbundle/blob/main/LICENSE)
88
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.21110642.svg)](https://doi.org/10.5281/zenodo.21110642)
89
+
90
+ **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)**.
91
+
92
+ </div>
93
+
94
+ ## 60-second try (offline)
95
+
96
+ ```bash
97
+ pip install "proofbundle[eval]"
98
+ proofbundle demo # honest receipt => OK, six tampers each => FAILED, sample swap caught
99
+ ```
100
+
101
+ The demo runs entirely in memory and exits non-zero if any tamper slips through, so it doubles as a
102
+ self-test.
103
+
104
+ ```bash
105
+ # verify a real hosted receipt without writing any code — the verify runs fully offline:
106
+ curl -fsSL https://raw.githubusercontent.com/b7n0de/proofbundle/main/examples/example_bundle.json -o receipt.json
107
+ proofbundle verify receipt.json # CRYPTO: OK (exit 0 ok · 1 fail · 2 malformed · 3 policy)
108
+ ```
109
+
110
+ Emit your own receipt, apply a trust policy, start from a shipped template, or run the Inspect-native
111
+ path (METR Task Standard / UK-AISI ecosystem, mockllm, no API key): **[docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md)** ·
112
+ Inspect walkthrough **[docs/INSPECT_HAPPY_PATH.md](https://github.com/b7n0de/proofbundle/blob/main/docs/INSPECT_HAPPY_PATH.md)**.
113
+
114
+ ## The problem
115
+
116
+ Every AI eval number you read — a safety benchmark, a capability score, a leaderboard entry — is an
117
+ **unverifiable claim**. You trust the lab. There is no portable way to check, offline, that a result
118
+ was signed by a stated party, has not been altered, and covers the samples it claims.
119
+
120
+ proofbundle is that check: a small MIT-licensed Python tool (a compact, auditable trusted core that
121
+ depends only on [`cryptography`](https://cryptography.io)) that turns a result into a signed receipt
122
+ anyone can verify from a single file. In plain terms it is the cash-register receipt of an AI test
123
+ result: it shows who claimed the number and that nobody quietly changed it, not that the test was
124
+ good. Without a receipt there is nothing to check at all.
125
+
126
+ ## What a receipt proves, and what it doesn't
127
+
128
+ | ✅ It proves | ❌ It does **not** prove |
129
+ |---|---|
130
+ | These exact bytes were signed by this key (**authorship**) | That the number is **true** |
131
+ | Nothing changed since signing (**integrity**, Ed25519 + RFC 6962) | That the **issuer is honest** |
132
+ | The result is attributable to a stated issuer | That the **eval was well-designed** |
133
+ | A threshold was met while hiding the model/dataset (salted commitments) | That there was **no cherry-picking** — unless pre-registered |
134
+ | Optionally: individual samples, offline-auditable (per-sample Merkle) | That the **computation was correct** — that needs a TEE or independent reproduction |
135
+
136
+ This boundary is the point, not a weakness. A receipt makes a claim **attributable, tamper-evident,
137
+ and — with pre-registration and per-sample auditing — bounded and spot-checkable**. Full detail:
138
+ **[THREAT_MODEL.md](https://github.com/b7n0de/proofbundle/blob/main/THREAT_MODEL.md)**.
139
+
140
+ ## How it fits together
141
+
142
+ *(diagram renders on GitHub — [view it there](https://github.com/b7n0de/proofbundle#how-it-fits-together); PyPI shows the source)*
143
+
144
+ ```mermaid
145
+ flowchart LR
146
+ H["eval harness<br/>inspect_ai · lm-eval · promptfoo · pytest"] --> A["adapter → signed claim<br/>salted commitments · provenance · samples root"]
147
+ A --> R["receipt<br/>one portable file"]
148
+ R --> V{{"proofbundle verify — offline"}}
149
+ V --> C["signature · Merkle inclusion · SD-JWT/KB ·<br/>witness quorum · status list · sample openings"]
150
+ C --> OK(["CRYPTO: OK / FAILED"])
151
+ style V fill:#D6248A,stroke:#D6248A,color:#fff
152
+ style OK fill:#D6248A,stroke:#D6248A,color:#fff
153
+ ```
154
+
155
+ proofbundle is a **practical, released, offline verifier — complementary to TEE and zero-knowledge
156
+ approaches**, not a replacement for any of them. The neighbourhood, honest about the line each one
157
+ crosses that a receipt does not (maturity labels stated so nothing reads as a settled standard):
158
+
159
+ | Neighbour | What it contributes that a receipt does not | Maturity |
160
+ |---|---|---|
161
+ | **K-Veritas** ([arXiv 2605.08586](https://arxiv.org/abs/2605.08586)) | the academic case for tamper-evident, execution-bound experiment reports | preprint |
162
+ | **Attestable Audits** ([arXiv 2506.23706](https://arxiv.org/abs/2506.23706)) | that the computation actually ran, inside a trusted enclave | preprint |
163
+ | **BenchJack** ([arXiv 2605.12673](https://arxiv.org/abs/2605.12673)) | whether the benchmark itself is gameable (reward-hacking) | preprint |
164
+ | **Evaluation Cards** ([arXiv 2606.09809](https://arxiv.org/abs/2606.09809)) | a structured, human-facing account of what a result means | preprint |
165
+ | in-toto / Sigstore, SCITT / Rekor v2, OpenSSF Model Signing | artifact-provenance, public transparency, model-artifact signing | stable |
166
+
167
+ Tool-by-tool comparison: **[INTEROP.md](https://github.com/b7n0de/proofbundle/blob/main/INTEROP.md)**.
168
+
169
+ ## What's in the box
170
+
171
+ Each line is a one-sentence summary; the linked doc carries the exact flags, exit codes and
172
+ version history (see also [CHANGELOG.md](https://github.com/b7n0de/proofbundle/blob/main/CHANGELOG.md)).
173
+
174
+ - **Core** — Ed25519 signature + RFC 6962 / 9162 Merkle inclusion, verified fully offline against a
175
+ real [Sigstore Rekor](https://docs.sigstore.dev/) proof, so correctness is not self-referential.
176
+ - **Eval receipts** — a signed claim (`metric ⋈ threshold`, `n`, salted model/dataset commitments,
177
+ assurance level, provenance) from your run. [EVAL_CLAIM.md](https://github.com/b7n0de/proofbundle/blob/main/EVAL_CLAIM.md)
178
+ - **Selective disclosure** — SD-JWT ([RFC 9901](https://datatracker.ietf.org/doc/rfc9901/)) with Key
179
+ Binding: prove a threshold while withholding the exact score (unsigned or unbound disclosures fail closed).
180
+ - **Transparency-log interop** — C2SP `tlog-checkpoint` / cosignature / `.tlog-proof`, with
181
+ post-quantum **ML-DSA-44** witness cosignatures and optional Token-Status-List revocation.
182
+ - **Per-sample audit** — an auditor challenges random indices (fresh nonce or **public randomness
183
+ beacon**); 300 samples catch 1% sample-doctoring at 95% confidence, regardless of run size — a
184
+ challenge the issuer chose itself does not give this guarantee.
185
+ - **Pre-registration** — `proofbundle prereg <plan>` commits to the protocol before the run, so
186
+ best-of-many publishing becomes visible.
187
+ - **Integrations** — opt-in inspect_ai end-of-task hook, pytest plugin, and a Hugging Face Community
188
+ Evals bridge. [INTEGRATIONS.md](https://github.com/b7n0de/proofbundle/blob/main/INTEGRATIONS.md)
189
+ - **External time anchors** *(beta, `[anchors]` extra)* — optional evidence of *when* a receipt
190
+ existed, from a party the producer does not control; RFC 3161 and OpenTimestamps built in, plus a
191
+ bring-your-own-type interface. Trust comes only from the relying party. [docs/ANCHORS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/ANCHORS.md)
192
+ - **Universal content root** *(`jcs-sha256-v1`)* — SHA-256 over the RFC 8785 (JCS) canonical bytes of
193
+ the full pre-signature statement, so a content root survives counter-signing and key rotation;
194
+ cross-implementation interop proven. [ADR 0002](https://github.com/b7n0de/proofbundle/blob/main/docs/adr/0002-universal-content-root.md)
195
+ - **Decision & action-outcome receipts** — a signed *decision* (verdict, policy boundary,
196
+ digest-bound evidence, and what was *not* checked) and a separately signed *outcome* with role
197
+ separation (executor ≠ decision maker) — never a claim that the decision was correct.
198
+ [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)
199
+
200
+ ## Install
201
+
202
+ ```bash
203
+ pip install proofbundle # core: offline verify + plain emit (dependency-free)
204
+ pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer)
205
+ pip install "proofbundle[inspect]" # inspect_ai adapter + hook
206
+ pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures
207
+ ```
208
+
209
+ Requires Python 3.10+. The verify path never rolls its own crypto — Ed25519 comes from
210
+ `cryptography`; Merkle hashing is RFC 6962.
211
+
212
+ ## Post-quantum posture (honest)
213
+
214
+ proofbundle is **not** "quantum-safe" as a whole. Its hash-based layers (SHA-256, RFC 6962 / 9162
215
+ Merkle, RFC 8785 canonicalization, and the OpenTimestamps / `chia-datalayer` anchors) stay secure —
216
+ Grover only halves SHA-256's effective strength, leaving a ~128-bit quantum margin. The Ed25519
217
+ receipt signature (and the RFC 3161 anchor's classical TSA certificate) are quantum-vulnerable to
218
+ Shor. The attack that matters is **back-dated forgery**, and the defense is a hash-based time anchor:
219
+ it proves the original receipt existed *before* any such capability, so a forged receipt has no
220
+ matching anchor. The witness side already carries post-quantum **ML-DSA-44** (FIPS 204) cosignatures;
221
+ a post-quantum *payload* signature is on the roadmap. Detail: [docs/ANCHORS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/ANCHORS.md).
222
+
223
+ ## Cite this work
224
+
225
+ If proofbundle helped your evaluation pipeline, please cite it. Machine-readable metadata is in
226
+ [`CITATION.cff`](https://github.com/b7n0de/proofbundle/blob/main/CITATION.cff). The archival software record is on Zenodo under concept
227
+ DOI [10.5281/zenodo.21110642](https://doi.org/10.5281/zenodo.21110642); the Technical Note (design write-up) under concept DOI
228
+ [10.5281/zenodo.21230466](https://doi.org/10.5281/zenodo.21230466), also linked from [b7n0de.com/proofbundle](https://b7n0de.com/proofbundle).
229
+
230
+ ## Docs
231
+
232
+ | For… | Read |
233
+ |---|---|
234
+ | Skeptics (why not SHA-256 / Sigstore / trust the issuer) | [docs/FAQ.md](https://github.com/b7n0de/proofbundle/blob/main/docs/FAQ.md) |
235
+ | New to this? plain-terms glossary | [docs/GLOSSARY.md](https://github.com/b7n0de/proofbundle/blob/main/docs/GLOSSARY.md) |
236
+ | Reviewers (30-minute adversarial audit path) | [docs/REVIEWERS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/REVIEWERS.md) |
237
+ | Where every trust anchor comes from | [docs/TRUST_ANCHORS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/TRUST_ANCHORS.md) |
238
+ | The demos, tier by tier | [docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md) |
239
+ | The normative format + verification order | [SPEC.md](https://github.com/b7n0de/proofbundle/blob/main/SPEC.md) |
240
+ | Honest comparison to Rekor / in-toto / OMS / ValiChord | [INTEROP.md](https://github.com/b7n0de/proofbundle/blob/main/INTEROP.md) |
241
+ | Regulatory mapping (and what to never claim) | [COMPLIANCE.md](https://github.com/b7n0de/proofbundle/blob/main/COMPLIANCE.md) |
242
+ | Funders / role fit | [docs/PROJECT_BRIEF.md](https://github.com/b7n0de/proofbundle/blob/main/docs/PROJECT_BRIEF.md) |
243
+ | **Preview:** TEE-attestation bridge (RATS/EAT, `[experimental]`) | [docs/EXPERIMENTAL_ENCLAVE.md](https://github.com/b7n0de/proofbundle/blob/main/docs/EXPERIMENTAL_ENCLAVE.md) |
244
+
245
+ ## Status, scope and roadmap
246
+
247
+ Beta, SemVer-committed, with a CI test suite behind a mutation gate + property-based parser fuzzing.
248
+ Correctness is anchored to external RFC 6962 vectors and a real Rekor proof, not just its own
249
+ bundles; releases carry PEP 740 / SLSA build provenance. It is **not** a log service, a full in-toto
250
+ client, a TEE, a consensus network, or a compliance product by itself — it is the small, offline,
251
+ standards-native receipt layer between them. Security policy: [SECURITY.md](https://github.com/b7n0de/proofbundle/blob/main/SECURITY.md).
252
+
253
+ **Roadmap (stated honestly, not yet built):** a post-quantum *payload* signature (today the
254
+ post-quantum coverage is witness-side ML-DSA-44 only), and a CLI flag to select the content-root
255
+ algorithm (`jcs-sha256-v1` is the signed default). **Already shipped at preview/experimental
256
+ maturity** (install extra `[experimental]`, API/wire-format may still change): a TEE-attestation
257
+ bridge (RATS/EAT, RFC 9334 + RFC 9711) making `assurance_level = enclave_attested` independently
258
+ verifiable — [docs/EXPERIMENTAL_ENCLAVE.md](https://github.com/b7n0de/proofbundle/blob/main/docs/EXPERIMENTAL_ENCLAVE.md).
259
+
260
+ ## Contributing
261
+
262
+ See [CONTRIBUTING.md](https://github.com/b7n0de/proofbundle/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/b7n0de/proofbundle/blob/main/CODE_OF_CONDUCT.md). Good first issues are labeled
263
+ [`good-first-issue`](https://github.com/b7n0de/proofbundle/labels/good-first-issue); security findings go through [SECURITY.md](https://github.com/b7n0de/proofbundle/blob/main/SECURITY.md).
264
+ The verifier core aims to stay small, dependency-light, and correct.
265
+
266
+ ## License
267
+
268
+ MIT — see [LICENSE](https://github.com/b7n0de/proofbundle/blob/main/LICENSE).
269
+
270
+ ---
271
+
272
+ <p align="center"><sub>proofbundle is part of <b>b7n0de</b>, Verified AI Work · <a href="https://b7n0de.com">b7n0de.com</a></sub></p>
@@ -0,0 +1,205 @@
1
+ <div align="center">
2
+
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/b7n0de/proofbundle/main/assets/b7n0de-hase-logo-dark.png">
5
+ <img alt="b7n0de, Verified AI Work, pink rabbit mascot over the B7N0DE wordmark" src="https://raw.githubusercontent.com/b7n0de/proofbundle/main/assets/b7n0de-hase-logo.png" width="200">
6
+ </picture>
7
+
8
+ <h1>proofbundle</h1>
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
+ [![CI](https://github.com/b7n0de/proofbundle/actions/workflows/ci.yml/badge.svg)](https://github.com/b7n0de/proofbundle/actions/workflows/ci.yml)
17
+ [![demo reproducible](https://github.com/b7n0de/proofbundle/actions/workflows/demo-reproducible.yml/badge.svg)](https://github.com/b7n0de/proofbundle/actions/workflows/demo-reproducible.yml)
18
+ [![PyPI](https://img.shields.io/pypi/v/proofbundle.svg)](https://pypi.org/project/proofbundle/)
19
+ [![Python](https://img.shields.io/pypi/pyversions/proofbundle.svg)](https://pypi.org/project/proofbundle/)
20
+ [![License: MIT](https://img.shields.io/badge/license-MIT-D6248A.svg)](https://github.com/b7n0de/proofbundle/blob/main/LICENSE)
21
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.21110642.svg)](https://doi.org/10.5281/zenodo.21110642)
22
+
23
+ **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)**.
24
+
25
+ </div>
26
+
27
+ ## 60-second try (offline)
28
+
29
+ ```bash
30
+ pip install "proofbundle[eval]"
31
+ proofbundle demo # honest receipt => OK, six tampers each => FAILED, sample swap caught
32
+ ```
33
+
34
+ The demo runs entirely in memory and exits non-zero if any tamper slips through, so it doubles as a
35
+ self-test.
36
+
37
+ ```bash
38
+ # verify a real hosted receipt without writing any code — the verify runs fully offline:
39
+ curl -fsSL https://raw.githubusercontent.com/b7n0de/proofbundle/main/examples/example_bundle.json -o receipt.json
40
+ proofbundle verify receipt.json # CRYPTO: OK (exit 0 ok · 1 fail · 2 malformed · 3 policy)
41
+ ```
42
+
43
+ Emit your own receipt, apply a trust policy, start from a shipped template, or run the Inspect-native
44
+ path (METR Task Standard / UK-AISI ecosystem, mockllm, no API key): **[docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md)** ·
45
+ Inspect walkthrough **[docs/INSPECT_HAPPY_PATH.md](https://github.com/b7n0de/proofbundle/blob/main/docs/INSPECT_HAPPY_PATH.md)**.
46
+
47
+ ## The problem
48
+
49
+ Every AI eval number you read — a safety benchmark, a capability score, a leaderboard entry — is an
50
+ **unverifiable claim**. You trust the lab. There is no portable way to check, offline, that a result
51
+ was signed by a stated party, has not been altered, and covers the samples it claims.
52
+
53
+ proofbundle is that check: a small MIT-licensed Python tool (a compact, auditable trusted core that
54
+ depends only on [`cryptography`](https://cryptography.io)) that turns a result into a signed receipt
55
+ anyone can verify from a single file. In plain terms it is the cash-register receipt of an AI test
56
+ result: it shows who claimed the number and that nobody quietly changed it, not that the test was
57
+ good. Without a receipt there is nothing to check at all.
58
+
59
+ ## What a receipt proves, and what it doesn't
60
+
61
+ | ✅ It proves | ❌ It does **not** prove |
62
+ |---|---|
63
+ | These exact bytes were signed by this key (**authorship**) | That the number is **true** |
64
+ | Nothing changed since signing (**integrity**, Ed25519 + RFC 6962) | That the **issuer is honest** |
65
+ | The result is attributable to a stated issuer | That the **eval was well-designed** |
66
+ | A threshold was met while hiding the model/dataset (salted commitments) | That there was **no cherry-picking** — unless pre-registered |
67
+ | Optionally: individual samples, offline-auditable (per-sample Merkle) | That the **computation was correct** — that needs a TEE or independent reproduction |
68
+
69
+ This boundary is the point, not a weakness. A receipt makes a claim **attributable, tamper-evident,
70
+ and — with pre-registration and per-sample auditing — bounded and spot-checkable**. Full detail:
71
+ **[THREAT_MODEL.md](https://github.com/b7n0de/proofbundle/blob/main/THREAT_MODEL.md)**.
72
+
73
+ ## How it fits together
74
+
75
+ *(diagram renders on GitHub — [view it there](https://github.com/b7n0de/proofbundle#how-it-fits-together); PyPI shows the source)*
76
+
77
+ ```mermaid
78
+ flowchart LR
79
+ H["eval harness<br/>inspect_ai · lm-eval · promptfoo · pytest"] --> A["adapter → signed claim<br/>salted commitments · provenance · samples root"]
80
+ A --> R["receipt<br/>one portable file"]
81
+ R --> V{{"proofbundle verify — offline"}}
82
+ V --> C["signature · Merkle inclusion · SD-JWT/KB ·<br/>witness quorum · status list · sample openings"]
83
+ C --> OK(["CRYPTO: OK / FAILED"])
84
+ style V fill:#D6248A,stroke:#D6248A,color:#fff
85
+ style OK fill:#D6248A,stroke:#D6248A,color:#fff
86
+ ```
87
+
88
+ proofbundle is a **practical, released, offline verifier — complementary to TEE and zero-knowledge
89
+ approaches**, not a replacement for any of them. The neighbourhood, honest about the line each one
90
+ crosses that a receipt does not (maturity labels stated so nothing reads as a settled standard):
91
+
92
+ | Neighbour | What it contributes that a receipt does not | Maturity |
93
+ |---|---|---|
94
+ | **K-Veritas** ([arXiv 2605.08586](https://arxiv.org/abs/2605.08586)) | the academic case for tamper-evident, execution-bound experiment reports | preprint |
95
+ | **Attestable Audits** ([arXiv 2506.23706](https://arxiv.org/abs/2506.23706)) | that the computation actually ran, inside a trusted enclave | preprint |
96
+ | **BenchJack** ([arXiv 2605.12673](https://arxiv.org/abs/2605.12673)) | whether the benchmark itself is gameable (reward-hacking) | preprint |
97
+ | **Evaluation Cards** ([arXiv 2606.09809](https://arxiv.org/abs/2606.09809)) | a structured, human-facing account of what a result means | preprint |
98
+ | in-toto / Sigstore, SCITT / Rekor v2, OpenSSF Model Signing | artifact-provenance, public transparency, model-artifact signing | stable |
99
+
100
+ Tool-by-tool comparison: **[INTEROP.md](https://github.com/b7n0de/proofbundle/blob/main/INTEROP.md)**.
101
+
102
+ ## What's in the box
103
+
104
+ Each line is a one-sentence summary; the linked doc carries the exact flags, exit codes and
105
+ version history (see also [CHANGELOG.md](https://github.com/b7n0de/proofbundle/blob/main/CHANGELOG.md)).
106
+
107
+ - **Core** — Ed25519 signature + RFC 6962 / 9162 Merkle inclusion, verified fully offline against a
108
+ real [Sigstore Rekor](https://docs.sigstore.dev/) proof, so correctness is not self-referential.
109
+ - **Eval receipts** — a signed claim (`metric ⋈ threshold`, `n`, salted model/dataset commitments,
110
+ assurance level, provenance) from your run. [EVAL_CLAIM.md](https://github.com/b7n0de/proofbundle/blob/main/EVAL_CLAIM.md)
111
+ - **Selective disclosure** — SD-JWT ([RFC 9901](https://datatracker.ietf.org/doc/rfc9901/)) with Key
112
+ Binding: prove a threshold while withholding the exact score (unsigned or unbound disclosures fail closed).
113
+ - **Transparency-log interop** — C2SP `tlog-checkpoint` / cosignature / `.tlog-proof`, with
114
+ post-quantum **ML-DSA-44** witness cosignatures and optional Token-Status-List revocation.
115
+ - **Per-sample audit** — an auditor challenges random indices (fresh nonce or **public randomness
116
+ beacon**); 300 samples catch 1% sample-doctoring at 95% confidence, regardless of run size — a
117
+ challenge the issuer chose itself does not give this guarantee.
118
+ - **Pre-registration** — `proofbundle prereg <plan>` commits to the protocol before the run, so
119
+ best-of-many publishing becomes visible.
120
+ - **Integrations** — opt-in inspect_ai end-of-task hook, pytest plugin, and a Hugging Face Community
121
+ Evals bridge. [INTEGRATIONS.md](https://github.com/b7n0de/proofbundle/blob/main/INTEGRATIONS.md)
122
+ - **External time anchors** *(beta, `[anchors]` extra)* — optional evidence of *when* a receipt
123
+ existed, from a party the producer does not control; RFC 3161 and OpenTimestamps built in, plus a
124
+ bring-your-own-type interface. Trust comes only from the relying party. [docs/ANCHORS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/ANCHORS.md)
125
+ - **Universal content root** *(`jcs-sha256-v1`)* — SHA-256 over the RFC 8785 (JCS) canonical bytes of
126
+ the full pre-signature statement, so a content root survives counter-signing and key rotation;
127
+ cross-implementation interop proven. [ADR 0002](https://github.com/b7n0de/proofbundle/blob/main/docs/adr/0002-universal-content-root.md)
128
+ - **Decision & action-outcome receipts** — a signed *decision* (verdict, policy boundary,
129
+ digest-bound evidence, and what was *not* checked) and a separately signed *outcome* with role
130
+ separation (executor ≠ decision maker) — never a claim that the decision was correct.
131
+ [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)
132
+
133
+ ## Install
134
+
135
+ ```bash
136
+ pip install proofbundle # core: offline verify + plain emit (dependency-free)
137
+ pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer)
138
+ pip install "proofbundle[inspect]" # inspect_ai adapter + hook
139
+ pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures
140
+ ```
141
+
142
+ Requires Python 3.10+. The verify path never rolls its own crypto — Ed25519 comes from
143
+ `cryptography`; Merkle hashing is RFC 6962.
144
+
145
+ ## Post-quantum posture (honest)
146
+
147
+ proofbundle is **not** "quantum-safe" as a whole. Its hash-based layers (SHA-256, RFC 6962 / 9162
148
+ Merkle, RFC 8785 canonicalization, and the OpenTimestamps / `chia-datalayer` anchors) stay secure —
149
+ Grover only halves SHA-256's effective strength, leaving a ~128-bit quantum margin. The Ed25519
150
+ receipt signature (and the RFC 3161 anchor's classical TSA certificate) are quantum-vulnerable to
151
+ Shor. The attack that matters is **back-dated forgery**, and the defense is a hash-based time anchor:
152
+ it proves the original receipt existed *before* any such capability, so a forged receipt has no
153
+ matching anchor. The witness side already carries post-quantum **ML-DSA-44** (FIPS 204) cosignatures;
154
+ a post-quantum *payload* signature is on the roadmap. Detail: [docs/ANCHORS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/ANCHORS.md).
155
+
156
+ ## Cite this work
157
+
158
+ If proofbundle helped your evaluation pipeline, please cite it. Machine-readable metadata is in
159
+ [`CITATION.cff`](https://github.com/b7n0de/proofbundle/blob/main/CITATION.cff). The archival software record is on Zenodo under concept
160
+ DOI [10.5281/zenodo.21110642](https://doi.org/10.5281/zenodo.21110642); the Technical Note (design write-up) under concept DOI
161
+ [10.5281/zenodo.21230466](https://doi.org/10.5281/zenodo.21230466), also linked from [b7n0de.com/proofbundle](https://b7n0de.com/proofbundle).
162
+
163
+ ## Docs
164
+
165
+ | For… | Read |
166
+ |---|---|
167
+ | Skeptics (why not SHA-256 / Sigstore / trust the issuer) | [docs/FAQ.md](https://github.com/b7n0de/proofbundle/blob/main/docs/FAQ.md) |
168
+ | New to this? plain-terms glossary | [docs/GLOSSARY.md](https://github.com/b7n0de/proofbundle/blob/main/docs/GLOSSARY.md) |
169
+ | Reviewers (30-minute adversarial audit path) | [docs/REVIEWERS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/REVIEWERS.md) |
170
+ | Where every trust anchor comes from | [docs/TRUST_ANCHORS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/TRUST_ANCHORS.md) |
171
+ | The demos, tier by tier | [docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md) |
172
+ | The normative format + verification order | [SPEC.md](https://github.com/b7n0de/proofbundle/blob/main/SPEC.md) |
173
+ | Honest comparison to Rekor / in-toto / OMS / ValiChord | [INTEROP.md](https://github.com/b7n0de/proofbundle/blob/main/INTEROP.md) |
174
+ | Regulatory mapping (and what to never claim) | [COMPLIANCE.md](https://github.com/b7n0de/proofbundle/blob/main/COMPLIANCE.md) |
175
+ | Funders / role fit | [docs/PROJECT_BRIEF.md](https://github.com/b7n0de/proofbundle/blob/main/docs/PROJECT_BRIEF.md) |
176
+ | **Preview:** TEE-attestation bridge (RATS/EAT, `[experimental]`) | [docs/EXPERIMENTAL_ENCLAVE.md](https://github.com/b7n0de/proofbundle/blob/main/docs/EXPERIMENTAL_ENCLAVE.md) |
177
+
178
+ ## Status, scope and roadmap
179
+
180
+ Beta, SemVer-committed, with a CI test suite behind a mutation gate + property-based parser fuzzing.
181
+ Correctness is anchored to external RFC 6962 vectors and a real Rekor proof, not just its own
182
+ bundles; releases carry PEP 740 / SLSA build provenance. It is **not** a log service, a full in-toto
183
+ client, a TEE, a consensus network, or a compliance product by itself — it is the small, offline,
184
+ standards-native receipt layer between them. Security policy: [SECURITY.md](https://github.com/b7n0de/proofbundle/blob/main/SECURITY.md).
185
+
186
+ **Roadmap (stated honestly, not yet built):** a post-quantum *payload* signature (today the
187
+ post-quantum coverage is witness-side ML-DSA-44 only), and a CLI flag to select the content-root
188
+ algorithm (`jcs-sha256-v1` is the signed default). **Already shipped at preview/experimental
189
+ maturity** (install extra `[experimental]`, API/wire-format may still change): a TEE-attestation
190
+ bridge (RATS/EAT, RFC 9334 + RFC 9711) making `assurance_level = enclave_attested` independently
191
+ verifiable — [docs/EXPERIMENTAL_ENCLAVE.md](https://github.com/b7n0de/proofbundle/blob/main/docs/EXPERIMENTAL_ENCLAVE.md).
192
+
193
+ ## Contributing
194
+
195
+ See [CONTRIBUTING.md](https://github.com/b7n0de/proofbundle/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/b7n0de/proofbundle/blob/main/CODE_OF_CONDUCT.md). Good first issues are labeled
196
+ [`good-first-issue`](https://github.com/b7n0de/proofbundle/labels/good-first-issue); security findings go through [SECURITY.md](https://github.com/b7n0de/proofbundle/blob/main/SECURITY.md).
197
+ The verifier core aims to stay small, dependency-light, and correct.
198
+
199
+ ## License
200
+
201
+ MIT — see [LICENSE](https://github.com/b7n0de/proofbundle/blob/main/LICENSE).
202
+
203
+ ---
204
+
205
+ <p align="center"><sub>proofbundle is part of <b>b7n0de</b>, Verified AI Work · <a href="https://b7n0de.com">b7n0de.com</a></sub></p>
@@ -57,14 +57,17 @@ Bishop-Fox parser-differential defense), a single flipped payload byte fails the
57
57
 
58
58
  | caseId | proves | does NOT prove |
59
59
  |---|---|---|
60
+ | `decision-crossimpl-schema-conformant` | **full end-to-end `decision-receipt/v0.1` conformance cross-impl**: RFC 8785 canonicalization + content-root binding, the predicate validates clean in NORMAL **and** STRICT mode (0 findings), **and** a confirmed Bitcoin anchor at block 958761 (OTS-committed root matches the real block merkle root, independently fetched from blockstream.info + blockchain.info, verified offline) | that the decision was *correct* — the anchor fixes existence and evidence binding, never correctness |
60
61
  | `decision-crossimpl-confirmed-anchor-lifecycle` | RFC 8785 canonicalization + content-root binding cross-impl, **and** a confirmed Bitcoin anchor at block 957504 (OTS proof committed root matches the real block merkle root, independently fetched, verified offline) | `decision-receipt/v0.1` schema conformance (predicate reports 12 findings) |
61
- | `decision-crossimpl-canonicalization-root-binding` | RFC 8785 canonicalization + content-root binding cross-impl | schema conformance (12 findings, expected-fail) **and** a confirmed anchor (still pending) |
62
-
63
- Both vectors are contributed by MarkovianProtocol / Colin (audit-anchor), vendored digest-pinned
64
- as pure data, credited. The gap between "canonicalization proven" and "full v0.1 conformance" is
65
- recorded in `audit_artifacts/crossimpl_fixture_gap_20260711.md`; a case graduates to a full
66
- end-to-end `decision-receipt/v0.1` conformance case after a schema-conformant regeneration and a
67
- confirmed anchor.
62
+ | `decision-crossimpl-canonicalization-root-binding` *(historical — superseded by `decision-crossimpl-schema-conformant`)* | RFC 8785 canonicalization + content-root binding cross-impl | schema conformance (12 findings, expected-fail) **and** a confirmed anchor (still pending) |
63
+
64
+ All three vectors are contributed by MarkovianProtocol / Colin (audit-anchor), vendored digest-pinned
65
+ as pure data, credited (MIT / SigmaSynth LLC). The gap between "canonicalization proven" and "full v0.1
66
+ conformance", recorded in `audit_artifacts/crossimpl_fixture_gap_20260711.md`, is now closed: **full
67
+ decision-receipt/v0.1 conformance: done (graduated 2026-07-19, block 958761)** with
68
+ `decision-crossimpl-schema-conformant`. The canonicalization-only iteration is retained as a historical
69
+ case (CONFORMANCE.md rule 5, no silent changes: a regeneration is a new case, the old one kept, so its
70
+ historical green run stays reproducible).
68
71
 
69
72
  ## Adding a case
70
73
 
@@ -0,0 +1,26 @@
1
+ {
2
+ "caseId": "decision-crossimpl-canonicalization-root-binding",
3
+ "kind": "decision_crossimpl",
4
+ "input": "canonicalization-root-binding",
5
+ "status": "historical",
6
+ "supersededBy": "decision-crossimpl-schema-conformant",
7
+ "attribution": "MarkovianProtocol / Colin — audit-anchor@3abe69f (examples/decision-receipt)",
8
+ "expected": {
9
+ "jcs_byte_identical": true,
10
+ "content_roots_match_manifest": true,
11
+ "evidence_ref_binds_content_root": true,
12
+ "decision_content_root": "ff05e3e0126e31090511f9e42494bbde4d86c9b1a9a0a9570850c42e8546029b",
13
+ "evidence_content_root": "323adb188f840e90331c920b32a73f348acc5caea8d40f9a84ea384d46c258d4",
14
+ "decision_predicate_findings": 12,
15
+ "schema_conformant": false,
16
+ "anchor": {
17
+ "status": "pending",
18
+ "note": "Re-anchored against the frozen v0.1 URIs; submitted to calendars, not yet confirmed on Bitcoin. No block height. Graduates to a confirmed case after an ots upgrade pins its block."
19
+ }
20
+ },
21
+ "specRefs": [
22
+ "docs/predicates/decision-receipt.md#7.1",
23
+ "SPEC.md"
24
+ ],
25
+ "rationale": "[HISTORICAL ITERATION — superseded by decision-crossimpl-schema-conformant (graduated 2026-07-19, Bitcoin block 958761); retained per CONFORMANCE.md rule 5 (no silent changes: a regeneration is a new case, the old one kept). Vendored bytes and the expected block are unchanged from acceptance — this case still proves exactly what it did, so its historical green run stays reproducible.] The regenerated fixture against the frozen/vendored v0.1 URIs. It proves RFC 8785 canonicalization and content-root binding cross-implementation: the .jcs bytes are byte-identical with proofbundle's canonical output and both content roots recompute to the MANIFEST values (evidence 323adb18…, decision ff05e3e0…), and the evidenceRef binds the evidence content root. It does NOT prove decision-receipt/v0.1 schema conformance — the predicate reports 12 findings, recorded as an expected-fail rather than hidden — and its anchor is still pending. This is the honest 'what it proves today' case; it graduates to a full end-to-end conformance case after a schema-conformant regeneration and a confirmed Bitcoin anchor."
26
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "rule": "anchor root = SHA-256 over RFC 8785 (JCS) canonical statement bytes (content root); signatures are a separate layer.",
3
+ "predicate_uri": "https://b7n0de.com/proofbundle/predicates/decision-receipt/v0.1",
4
+ "evidence_uri": "https://b7n0de.com/attestation/eval-result/v0.1",
5
+ "evidence_content_root_sha256": "323adb188f840e90331c920b32a73f348acc5caea8d40f9a84ea384d46c258d4",
6
+ "decision_content_root_sha256": "97e1d74b810a9fea454ac890c0e17f8a401fb4abbf42827a39aea30846de2fb5",
7
+ "anchored_file": "decision_receipt.jcs",
8
+ "evidenceRefs_bind_to": "evidence content root (survives re-signing / counter-signing / key rotation)",
9
+ "note": "predicateType URIs frozen against proofbundle v2.1.0 (2026-07-10); they are inside the anchored bytes.",
10
+ "parameters_file": "parameters.json",
11
+ "parameters_digest_sha256": "6bb2b8c062d77a0369a13e291e1c3f3171ee656cb935f5e24c76298d91b77e84",
12
+ "fixture_note": "conformance fixture: the acme-intent-classifier scenario is illustrative, not a production decision"
13
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "caseId": "decision-crossimpl-schema-conformant",
3
+ "kind": "decision_crossimpl",
4
+ "input": "schema-conformant",
5
+ "attribution": "MarkovianProtocol / Colin — audit-anchor@ff6a000 (examples/decision-receipt). MIT License, Copyright (c) 2026 SigmaSynth LLC. Vendored as pure data; no local edits to the vendored bytes.",
6
+ "expected": {
7
+ "jcs_byte_identical": true,
8
+ "content_roots_match_manifest": true,
9
+ "evidence_ref_binds_content_root": true,
10
+ "decision_content_root": "97e1d74b810a9fea454ac890c0e17f8a401fb4abbf42827a39aea30846de2fb5",
11
+ "evidence_content_root": "323adb188f840e90331c920b32a73f348acc5caea8d40f9a84ea384d46c258d4",
12
+ "decision_predicate_findings": 0,
13
+ "schema_conformant": true,
14
+ "anchor": {
15
+ "height": 958761,
16
+ "status": "confirmed",
17
+ "frozen": {
18
+ "bitcoinBlockHeaderMerkleRootsByHeight": {
19
+ "958761": "a8e521caf1a50d99240c1808c276cd75e3a3f24f292836593908a16a3ea24f8c"
20
+ }
21
+ },
22
+ "independent_source": {
23
+ "provider": "blockstream.info + blockchain.info",
24
+ "block_hash": "00000000000000000001b882ed05ae87bce809336f7cc3d52947c1c128b34dd2",
25
+ "merkle_root_display_be": "8c4fa23e6aa10839593628294ff2a3e375cd76c208180c24990da5f1ca21e5a8",
26
+ "note": "Block 958761 header independently fetched from two providers (blockstream.info and blockchain.info), same block hash and merkle root. The frozen value is the block-internal (little-endian) merkle root that OpenTimestamps commits to; it is the byte-reverse of the big-endian value block explorers display. Fetched once, offline-verifiable forever against any Bitcoin block header for height 958761."
27
+ },
28
+ "rpTrust": {
29
+ "bitcoinBlockHeaderMerkleRootsByHeight": {
30
+ "958761": "a8e521caf1a50d99240c1808c276cd75e3a3f24f292836593908a16a3ea24f8c"
31
+ }
32
+ },
33
+ "_wp_a1_note": "WP-A1: bitcoinBlockHeaderMerkleRootsByHeight under rpTrust is RELYING-PARTY trust (independently sourced from independent_source above); frozen is kept as producer evidence only and is NEVER trusted. A confirmed verdict requires the relying-party header. The same OTS proof WITHOUT the relying-party header reports needs_rp_trust, not confirmed."
34
+ }
35
+ },
36
+ "specRefs": [
37
+ "docs/predicates/decision-receipt.md#7.1",
38
+ "docs/ANCHORS.md",
39
+ "SPEC.md"
40
+ ],
41
+ "rationale": "The first full end-to-end decision-receipt/v0.1 conformance case in the corpus: a second, independent implementation (MarkovianProtocol / audit-anchor) produces a decision-receipt statement pair whose .jcs bytes are byte-identical with proofbundle's RFC 8785 canonical output, whose content roots recompute to the MANIFEST values (evidence 323adb18…, decision 97e1d74b…), whose evidenceRef binds the evidence content root, whose predicate validates clean against decision-receipt/v0.1 in NORMAL and STRICT mode (0 findings — schema-conformant), and whose OpenTimestamps proof carries a confirmed BitcoinBlockHeaderAttestation at height 958761 (the OTS-committed merkle root matches the real block merkle root independently fetched from blockstream.info and blockchain.info, verified offline against the relying-party header, never by contacting a calendar). This GRADUATES the canonicalization-only cross-impl iteration: it supersedes decision-crossimpl-canonicalization-root-binding (regenerated 3abe69f, decision root ff05e3e0…, schema expected-fail with 12 findings, anchor pending), which is retained as a historical iteration per CONFORMANCE.md rule 5 (no silent changes; a regeneration is a new case, the old one kept). Colin re-anchored once more (a35dee8 -> ff6a000) against the enforced schema and confirmed the Bitcoin anchor. Vendored digest-pinned as pure data, credited (MIT / SigmaSynth LLC)."
42
+ }
@@ -0,0 +1 @@
1
+ {"_type":"https://in-toto.io/Statement/v1","predicate":{"agent":{"id":"agent://acme/deploy-pipeline","version":"1.4.2"},"decidedAt":"2026-07-09T14:20:00Z","decision":{"reasonCodes":["eval.metrics.above-threshold"],"verdict":"ALLOW"},"decisionChangeConditions":[{"conditionType":"metricRegression","description":"accuracy on holdout-2026-06 below 0.90","requiredEvidenceType":"evalResult"},{"conditionType":"policyChange","description":"any listed notChecked property becomes a release requirement"}],"decisionId":"urn:uuid:87a3e6d6-321c-4ea4-85be-3c9941e600a6","decisionMaker":{"id":"https://github.com/MarkovianProtocol/audit-anchor/decision-gate/v1"},"decisionType":"preActionAuthorization","evidenceRefs":[{"digest":{"sha256":"323adb188f840e90331c920b32a73f348acc5caea8d40f9a84ea384d46c258d4"},"predicateType":"https://b7n0de.com/attestation/eval-result/v0.1","relation":"evalResult"}],"inputSnapshot":[{"digest":{"sha256":"bb8601c1fc3cf1dc3e829652df409b1bdd9e866e18f25bf7750c9f8702096edc"},"name":"deployment input bundle"}],"notChecked":["fairness-subgroup-parity","adversarial-robustness"],"policyBoundary":{"decisionPath":"release.gate.prod.allow","policyDigest":{"sha256":"8c561dd1f0c5eb47c9353a60d573dccda3ee30b1a820ccb08660466a36450be9"},"policyEngine":"audit-anchor","policyId":"release-gate/prod"},"principal":{"id":"workload://acme/release-engineering"},"privacy":{"rawInputsIncluded":false,"redactionProfile":"none-required"},"proposedAction":{"actionType":"model.deploy","parametersDigest":{"sha256":"6bb2b8c062d77a0369a13e291e1c3f3171ee656cb935f5e24c76298d91b77e84"},"target":{"digest":{"sha256":"2f0aea2dae36951bbf0eb604a98041cc78ec55f85bf84bb5a6bea96f38c8922e"},"name":"deploy/acme-intent-classifier@1.4.2"}},"schemaVersion":"0.1.0"},"predicateType":"https://b7n0de.com/proofbundle/predicates/decision-receipt/v0.1","subject":[{"digest":{"sha256":"2f0aea2dae36951bbf0eb604a98041cc78ec55f85bf84bb5a6bea96f38c8922e"},"name":"deploy/acme-intent-classifier@1.4.2"}]}