proofbundle 3.7.0__tar.gz → 3.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. {proofbundle-3.7.0/src/proofbundle.egg-info → proofbundle-3.8.0}/PKG-INFO +47 -6
  2. {proofbundle-3.7.0 → proofbundle-3.8.0}/README.md +44 -3
  3. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/MANIFEST.sha256 +4 -4
  4. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/PROGRESS.md +2 -2
  5. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/README.md +3 -3
  6. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/differential_matrix.md +3 -1
  7. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/proofbundle/readiness_pack.bundle.json +4 -4
  8. proofbundle-3.8.0/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 +1 -0
  9. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/rust_parity_scope.md +1 -1
  10. {proofbundle-3.7.0 → proofbundle-3.8.0}/pyproject.toml +82 -2
  11. proofbundle-3.8.0/scripts/check_version_and_changelog.py +381 -0
  12. proofbundle-3.8.0/scripts/finding_base_drift.py +145 -0
  13. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/findings_register.py +66 -14
  14. proofbundle-3.8.0/scripts/git-hooks/pre-commit +9 -0
  15. proofbundle-3.8.0/scripts/install_git_hooks.sh +17 -0
  16. proofbundle-3.8.0/scripts/mutant_signature_guard.py +306 -0
  17. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/mutation_check.py +145 -19
  18. proofbundle-3.8.0/scripts/pre_tag_attestation.py +184 -0
  19. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/pre_tag_audit_gate.py +106 -11
  20. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/type_confusion_gate.py +41 -2
  21. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/__init__.py +1 -1
  22. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/anchors.py +16 -0
  23. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/anchors_chia.py +18 -0
  24. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/anchors_rfc3161.py +34 -0
  25. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/checkpoint.py +75 -6
  26. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/cli.py +162 -8
  27. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/dsse.py +26 -0
  28. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/emit.py +12 -0
  29. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/evalcard.py +14 -0
  30. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/evidence_pack.py +23 -1
  31. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/persample.py +18 -0
  32. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/prereg.py +14 -0
  33. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/relation.py +67 -2
  34. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/tlogproof.py +9 -1
  35. {proofbundle-3.7.0 → proofbundle-3.8.0/src/proofbundle.egg-info}/PKG-INFO +47 -6
  36. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle.egg-info/SOURCES.txt +32 -0
  37. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle.egg-info/requires.txt +2 -2
  38. proofbundle-3.8.0/tests/_beinahe_treffer.py +105 -0
  39. proofbundle-3.8.0/tests/conftest.py +206 -0
  40. proofbundle-3.8.0/tests/fixtures/anchors/markovian_log/proof_7271/ERGEBNIS.json +36 -0
  41. proofbundle-3.8.0/tests/fixtures/anchors/markovian_log/proof_7271/ERGEBNIS_negativ.json +36 -0
  42. proofbundle-3.8.0/tests/fixtures/anchors/markovian_log/proof_7271/MANIFEST.json +116 -0
  43. proofbundle-3.8.0/tests/fixtures/anchors/markovian_log/proof_7271/README.md +114 -0
  44. proofbundle-3.8.0/tests/fixtures/anchors/markovian_log/proof_7271/SOURCES.md +36 -0
  45. proofbundle-3.8.0/tests/fixtures/anchors/markovian_log/proof_7271/keys_unabhaengig.txt +16 -0
  46. proofbundle-3.8.0/tests/fixtures/anchors/markovian_log/proof_7271/leaf_7271.raw +1 -0
  47. proofbundle-3.8.0/tests/fixtures/anchors/markovian_log/proof_7271/proof_7271.tlog-proof +29 -0
  48. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_adversarial.py +30 -0
  49. proofbundle-3.8.0/tests/test_anchors_markovian_log.py +427 -0
  50. proofbundle-3.8.0/tests/test_anchors_rfc3161_type_floor.py +124 -0
  51. proofbundle-3.8.0/tests/test_audit_index_zahlen_stimmen.py +298 -0
  52. proofbundle-3.8.0/tests/test_audit_marker_line_wrap.py +164 -0
  53. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_bughunt_361_never_raise.py +6 -2
  54. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_cosignature.py +51 -0
  55. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_cosignature_mldsa.py +9 -2
  56. proofbundle-3.8.0/tests/test_erwartungsvergleich_population_guard.py +215 -0
  57. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_experimental_enclave.py +19 -0
  58. proofbundle-3.8.0/tests/test_findings_register_identity_axis.py +148 -0
  59. proofbundle-3.8.0/tests/test_intoto_spec_diff.py +101 -0
  60. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_kbjwt.py +22 -0
  61. proofbundle-3.8.0/tests/test_load_signer_fd_hazard.py +91 -0
  62. proofbundle-3.8.0/tests/test_mutant_signature_guard.py +130 -0
  63. proofbundle-3.8.0/tests/test_mutation_isolation.py +112 -0
  64. proofbundle-3.8.0/tests/test_never_raise_population_guard.py +151 -0
  65. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_never_raise_surface_family_property.py +43 -1
  66. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_outcome_verify.py +16 -0
  67. proofbundle-3.8.0/tests/test_path_argument_type_floor.py +131 -0
  68. proofbundle-3.8.0/tests/test_pre_tag_attestation.py +181 -0
  69. proofbundle-3.8.0/tests/test_pre_tag_audit_provenance.py +181 -0
  70. proofbundle-3.8.0/tests/test_pre_tag_gate_eigenschaften.py +128 -0
  71. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_predicate_type_enforcement.py +17 -0
  72. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_public_transparency.py +14 -0
  73. proofbundle-3.8.0/tests/test_relation_gate_distance_invariance.py +187 -0
  74. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_relation_property.py +30 -5
  75. proofbundle-3.8.0/tests/test_release_integrity_gate.py +385 -0
  76. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_roadmap_frontload_foundations.py +23 -4
  77. proofbundle-3.8.0/tests/test_sdist_selftest_derivation.py +195 -0
  78. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_statuslist.py +14 -0
  79. proofbundle-3.8.0/tests/test_structural_budget_reachability.py +235 -0
  80. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_tree_context_authenticity.py +129 -3
  81. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_trust_policy.py +42 -0
  82. proofbundle-3.8.0/tests/test_verify_proof_expected_origin.py +996 -0
  83. proofbundle-3.7.0/docs/readiness_pack/proofbundle/readiness_pack.pub.b64 +0 -1
  84. proofbundle-3.7.0/scripts/check_version_and_changelog.py +0 -121
  85. proofbundle-3.7.0/tests/conftest.py +0 -96
  86. proofbundle-3.7.0/tests/test_intoto_spec_diff.py +0 -38
  87. proofbundle-3.7.0/tests/test_release_integrity_gate.py +0 -88
  88. {proofbundle-3.7.0 → proofbundle-3.8.0}/LICENSE +0 -0
  89. {proofbundle-3.7.0 → proofbundle-3.8.0}/MANIFEST.in +0 -0
  90. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/README.md +0 -0
  91. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/coherent-rewrap-fails-expected-root/bundle.json +0 -0
  92. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/coherent-rewrap-fails-expected-root/case.json +0 -0
  93. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/coherent-rewrap-verifies-no-policy/bundle.json +0 -0
  94. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/coherent-rewrap-verifies-no-policy/case.json +0 -0
  95. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/corrupted-signature/bundle.json +0 -0
  96. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/corrupted-signature/case.json +0 -0
  97. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/duplicate-json-key/bundle.json +0 -0
  98. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/duplicate-json-key/case.json +0 -0
  99. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/forged-anchor-own-frozen/bundle.json +0 -0
  100. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/forged-anchor-own-frozen/case.json +0 -0
  101. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/n1-eval-sdjwt-graft-non-eval/bundle.json +0 -0
  102. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/n1-eval-sdjwt-graft-non-eval/case.json +0 -0
  103. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/sd-jwt-forged-issuer-identity/bundle.json +0 -0
  104. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/sd-jwt-forged-issuer-identity/case.json +0 -0
  105. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/sd-jwt-signed-but-unbound/bundle.json +0 -0
  106. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/sd-jwt-signed-but-unbound/case.json +0 -0
  107. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/sd-jwt-unsigned-unauthenticated/bundle.json +0 -0
  108. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/sd-jwt-unsigned-unauthenticated/case.json +0 -0
  109. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/tampered-payload/bundle.json +0 -0
  110. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/tampered-payload/case.json +0 -0
  111. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/tree-size-expectation-mismatch/bundle.json +0 -0
  112. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/tree-size-expectation-mismatch/case.json +0 -0
  113. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/valid-minimal/bundle.json +0 -0
  114. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/bundle/valid-minimal/case.json +0 -0
  115. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/common_vocabulary.py +0 -0
  116. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/cross_format.py +0 -0
  117. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/canonicalization-root-binding/MANIFEST.json +0 -0
  118. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/canonicalization-root-binding/case.json +0 -0
  119. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs +0 -0
  120. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.jcs.ots +0 -0
  121. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/canonicalization-root-binding/decision_receipt.json +0 -0
  122. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.jcs +0 -0
  123. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/canonicalization-root-binding/evidence_eval_result.json +0 -0
  124. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/MANIFEST.json +0 -0
  125. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/case.json +0 -0
  126. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs +0 -0
  127. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.jcs.ots +0 -0
  128. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/decision_receipt.json +0 -0
  129. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.jcs +0 -0
  130. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/confirmed-anchor-lifecycle/evidence_eval_result.json +0 -0
  131. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/schema-conformant/MANIFEST.json +0 -0
  132. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/schema-conformant/case.json +0 -0
  133. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/schema-conformant/decision_receipt.jcs +0 -0
  134. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/schema-conformant/decision_receipt.jcs.ots +0 -0
  135. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/schema-conformant/decision_receipt.json +0 -0
  136. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/schema-conformant/evidence_eval_result.jcs +0 -0
  137. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/decision/crossimpl/schema-conformant/evidence_eval_result.json +0 -0
  138. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/manifest.json +0 -0
  139. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/declared-supersedes-verified/case.json +0 -0
  140. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/declared-supersedes-verified/pub.b64 +0 -0
  141. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/declared-supersedes-verified/receipt.json +0 -0
  142. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/declared-supersedes-verified/related_b.json +0 -0
  143. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/declared-unresolved/case.json +0 -0
  144. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/declared-unresolved/pub.b64 +0 -0
  145. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/declared-unresolved/receipt.json +0 -0
  146. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-accept-path/case.json +0 -0
  147. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-accept-path/policy.json +0 -0
  148. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-accept-path/pub.b64 +0 -0
  149. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-accept-path/receipt.json +0 -0
  150. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-accept-path/related_rx.json +0 -0
  151. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-correct-pass/case.json +0 -0
  152. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-correct-pass/policy.json +0 -0
  153. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-correct-pass/pub.b64 +0 -0
  154. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-correct-pass/receipt.json +0 -0
  155. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-correct-pass/related_r0.json +0 -0
  156. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-correct-pass/related_rx.json +0 -0
  157. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-no-pin-old-behavior/case.json +0 -0
  158. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-no-pin-old-behavior/policy.json +0 -0
  159. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-no-pin-old-behavior/pub.b64 +0 -0
  160. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-no-pin-old-behavior/receipt.json +0 -0
  161. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-no-pin-old-behavior/related_r0.json +0 -0
  162. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-no-pin-old-behavior/related_rx.json +0 -0
  163. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-target-mismatch/case.json +0 -0
  164. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-target-mismatch/policy.json +0 -0
  165. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-target-mismatch/pub.b64 +0 -0
  166. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-target-mismatch/receipt.json +0 -0
  167. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-target-mismatch/related_r0.json +0 -0
  168. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/decoy-parent-target-mismatch/related_rx.json +0 -0
  169. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/case.json +0 -0
  170. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/pub.b64 +0 -0
  171. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/receipt.json +0 -0
  172. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_001.json +0 -0
  173. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_002.json +0 -0
  174. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_003.json +0 -0
  175. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_004.json +0 -0
  176. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_005.json +0 -0
  177. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_006.json +0 -0
  178. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_007.json +0 -0
  179. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_008.json +0 -0
  180. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_009.json +0 -0
  181. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_010.json +0 -0
  182. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_011.json +0 -0
  183. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_012.json +0 -0
  184. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_013.json +0 -0
  185. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_014.json +0 -0
  186. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_015.json +0 -0
  187. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_016.json +0 -0
  188. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_017.json +0 -0
  189. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_018.json +0 -0
  190. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_019.json +0 -0
  191. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_020.json +0 -0
  192. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_021.json +0 -0
  193. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_022.json +0 -0
  194. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_023.json +0 -0
  195. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_024.json +0 -0
  196. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_025.json +0 -0
  197. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_026.json +0 -0
  198. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_027.json +0 -0
  199. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_028.json +0 -0
  200. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_029.json +0 -0
  201. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_030.json +0 -0
  202. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_031.json +0 -0
  203. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_032.json +0 -0
  204. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/depth-exceeded/related_033.json +0 -0
  205. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/digest-mismatch/case.json +0 -0
  206. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/digest-mismatch/policy.json +0 -0
  207. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/digest-mismatch/pub.b64 +0 -0
  208. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/digest-mismatch/receipt.json +0 -0
  209. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/digest-mismatch/related_b.json +0 -0
  210. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/generate_vectors.py +0 -0
  211. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/malformed-digest/case.json +0 -0
  212. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/malformed-digest/pub.b64 +0 -0
  213. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/malformed-digest/receipt.json +0 -0
  214. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-declared-supersedes-verified/case.json +0 -0
  215. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-declared-supersedes-verified/pub.b64 +0 -0
  216. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-declared-supersedes-verified/receipt.json +0 -0
  217. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-declared-supersedes-verified/related_b.json +0 -0
  218. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-decoy-parent-target-mismatch/case.json +0 -0
  219. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-decoy-parent-target-mismatch/policy.json +0 -0
  220. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-decoy-parent-target-mismatch/pub.b64 +0 -0
  221. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-decoy-parent-target-mismatch/receipt.json +0 -0
  222. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-decoy-parent-target-mismatch/related_r0.json +0 -0
  223. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-decoy-parent-target-mismatch/related_rx.json +0 -0
  224. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-digest-mismatch/case.json +0 -0
  225. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-digest-mismatch/policy.json +0 -0
  226. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-digest-mismatch/pub.b64 +0 -0
  227. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-digest-mismatch/receipt.json +0 -0
  228. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-digest-mismatch/related_b.json +0 -0
  229. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-relation-signer-unauthorized/case.json +0 -0
  230. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-relation-signer-unauthorized/policy.json +0 -0
  231. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-relation-signer-unauthorized/pub.b64 +0 -0
  232. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-relation-signer-unauthorized/receipt.json +0 -0
  233. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-relation-signer-unauthorized/related_b.json +0 -0
  234. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-renews/case.json +0 -0
  235. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-renews/pub.b64 +0 -0
  236. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-renews/receipt.json +0 -0
  237. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-renews/related_b.json +0 -0
  238. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-silent-landing/case.json +0 -0
  239. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-silent-landing/pub.b64 +0 -0
  240. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-silent-landing/receipt.json +0 -0
  241. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-valid-baseline/case.json +0 -0
  242. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-valid-baseline/pub.b64 +0 -0
  243. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/outcome-valid-baseline/receipt.json +0 -0
  244. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-amends/case.json +0 -0
  245. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-amends/pub.b64 +0 -0
  246. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-amends/receipt.json +0 -0
  247. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-amends/related_b.json +0 -0
  248. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-corrects/case.json +0 -0
  249. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-corrects/pub.b64 +0 -0
  250. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-corrects/receipt.json +0 -0
  251. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-corrects/related_b.json +0 -0
  252. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-derivedfrom/case.json +0 -0
  253. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-derivedfrom/pub.b64 +0 -0
  254. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-derivedfrom/receipt.json +0 -0
  255. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-derivedfrom/related_b.json +0 -0
  256. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-retracts/case.json +0 -0
  257. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-retracts/pub.b64 +0 -0
  258. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-retracts/receipt.json +0 -0
  259. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-retracts/related_b.json +0 -0
  260. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-revises/case.json +0 -0
  261. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-revises/pub.b64 +0 -0
  262. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-revises/receipt.json +0 -0
  263. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-revises/related_b.json +0 -0
  264. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/case.json +0 -0
  265. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/policy.json +0 -0
  266. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/pub.b64 +0 -0
  267. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/receipt.json +0 -0
  268. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-unauthorized/related_b.json +0 -0
  269. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-verified/case.json +0 -0
  270. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-verified/policy.json +0 -0
  271. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-verified/pub.b64 +0 -0
  272. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-verified/receipt.json +0 -0
  273. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-cross-issuer-verified/related_b.json +0 -0
  274. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-same-key-explicit/case.json +0 -0
  275. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-same-key-explicit/policy.json +0 -0
  276. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-same-key-explicit/pub.b64 +0 -0
  277. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-same-key-explicit/receipt.json +0 -0
  278. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-same-key-explicit/related_b.json +0 -0
  279. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-verified-under-not-claim/case.json +0 -0
  280. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-verified-under-not-claim/policy.json +0 -0
  281. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-verified-under-not-claim/pub.b64 +0 -0
  282. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-verified-under-not-claim/receipt.json +0 -0
  283. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/relation-signer-verified-under-not-claim/related_b.json +0 -0
  284. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/renews-vector/case.json +0 -0
  285. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/renews-vector/pub.b64 +0 -0
  286. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/renews-vector/receipt.json +0 -0
  287. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/renews-vector/related_b.json +0 -0
  288. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/retracts-then-use/case.json +0 -0
  289. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/retracts-then-use/policy.json +0 -0
  290. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/retracts-then-use/pub.b64 +0 -0
  291. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/retracts-then-use/receipt.json +0 -0
  292. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/retracts-then-use/related_r.json +0 -0
  293. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/silent-landing/case.json +0 -0
  294. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/silent-landing/pub.b64 +0 -0
  295. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/silent-landing/receipt.json +0 -0
  296. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-malformed/case.json +0 -0
  297. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-malformed/pub.b64 +0 -0
  298. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-malformed/receipt.json +0 -0
  299. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-declared-unresolved/case.json +0 -0
  300. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-declared-unresolved/pub.b64 +0 -0
  301. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-declared-unresolved/receipt.json +0 -0
  302. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-unauthorized/case.json +0 -0
  303. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-unauthorized/policy.json +0 -0
  304. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-unauthorized/pub.b64 +0 -0
  305. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-unauthorized/receipt.json +0 -0
  306. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-unauthorized/related_t.json +0 -0
  307. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-blocked/case.json +0 -0
  308. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-blocked/policy.json +0 -0
  309. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-blocked/pub.b64 +0 -0
  310. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-blocked/receipt.json +0 -0
  311. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-blocked/related_t.json +0 -0
  312. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-visible/case.json +0 -0
  313. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-visible/pub.b64 +0 -0
  314. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-visible/receipt.json +0 -0
  315. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-retracts-verified-visible/related_t.json +0 -0
  316. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-supersedes-verified/case.json +0 -0
  317. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-supersedes-verified/pub.b64 +0 -0
  318. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-supersedes-verified/receipt.json +0 -0
  319. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/statement-supersedes-verified/related_t.json +0 -0
  320. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/t1-canonical-invalid-signature/case.json +0 -0
  321. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/t1-canonical-invalid-signature/pub.b64 +0 -0
  322. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/t1-canonical-invalid-signature/receipt.json +0 -0
  323. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-ambiguous/case.json +0 -0
  324. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-ambiguous/pub.b64 +0 -0
  325. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-ambiguous/receipt.json +0 -0
  326. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-ambiguous/related_r0.json +0 -0
  327. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-correct-pass/case.json +0 -0
  328. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-correct-pass/pub.b64 +0 -0
  329. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-correct-pass/receipt.json +0 -0
  330. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-correct-pass/related_r0.json +0 -0
  331. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-mismatch/case.json +0 -0
  332. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-mismatch/pub.b64 +0 -0
  333. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-mismatch/receipt.json +0 -0
  334. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-mismatch/related_r0.json +0 -0
  335. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-missing/case.json +0 -0
  336. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-missing/pub.b64 +0 -0
  337. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-missing/receipt.json +0 -0
  338. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/target-subject-missing/related_r0.json +0 -0
  339. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/unauthorized-signer/case.json +0 -0
  340. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/unauthorized-signer/pub.b64 +0 -0
  341. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/unauthorized-signer/receipt.json +0 -0
  342. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/unauthorized-signer/related_b.json +0 -0
  343. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/valid-baseline/case.json +0 -0
  344. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/valid-baseline/pub.b64 +0 -0
  345. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/valid-baseline/receipt.json +0 -0
  346. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/wrong-payloadtype-target/case.json +0 -0
  347. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/wrong-payloadtype-target/pub.b64 +0 -0
  348. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/wrong-payloadtype-target/receipt.json +0 -0
  349. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/relation/wrong-payloadtype-target/related_t.json +0 -0
  350. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/run_conformance.py +0 -0
  351. {proofbundle-3.7.0 → proofbundle-3.8.0}/conformance/vector_schema.json +0 -0
  352. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/adr/renewal_policy.example.json +0 -0
  353. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/AUDITOR_OPEN_POINTS.md +0 -0
  354. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/OPEN_QUESTIONS.md +0 -0
  355. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/REPRODUCTION_RUNBOOK.md +0 -0
  356. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/calendar_independence.md +0 -0
  357. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/index.json +0 -0
  358. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/tamper_resistance.md +0 -0
  359. {proofbundle-3.7.0 → proofbundle-3.8.0}/docs/readiness_pack/threat_model_delta_360.md +0 -0
  360. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/README.md +0 -0
  361. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/anchors/chia-datalayer-invalid-root.json +0 -0
  362. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/anchors/chia-datalayer-valid.json +0 -0
  363. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/checkpoint_example.py +0 -0
  364. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/decision_receipt_allow.json +0 -0
  365. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/decision_receipt_deny.json +0 -0
  366. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/decision_receipt_escalate.json +0 -0
  367. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/decision_receipt_with_eval_ref.intoto.json +0 -0
  368. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/eee_receipt.py +0 -0
  369. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/example.tlog-proof +0 -0
  370. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/example_bundle.json +0 -0
  371. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/experimental_enclave.py +0 -0
  372. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/inspect_hook_example.py +0 -0
  373. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/inspect_receipt.py +0 -0
  374. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/intoto/private-model-commitment.statement.json +0 -0
  375. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/intoto/public-model.statement.json +0 -0
  376. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/intoto/release-gate.statement.json +0 -0
  377. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/intoto/svr.statement.json +0 -0
  378. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/intoto_dsse_export.py +0 -0
  379. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/lm_eval_receipt.py +0 -0
  380. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/make_example.py +0 -0
  381. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/persample_audit.py +0 -0
  382. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/pytest_plugin_example.py +0 -0
  383. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/rekor_interop.py +0 -0
  384. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/tlog_proof_example.py +0 -0
  385. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/trust_policy_decision_strict.json +0 -0
  386. {proofbundle-3.7.0 → proofbundle-3.8.0}/examples/trust_policy_strict.json +0 -0
  387. {proofbundle-3.7.0 → proofbundle-3.8.0}/formal/README.md +0 -0
  388. {proofbundle-3.7.0 → proofbundle-3.8.0}/formal/model.py +0 -0
  389. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/action-outcome-v0.1.schema.json +0 -0
  390. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/decision-receipt-v0.1.schema.json +0 -0
  391. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/eval_claim_v0_1.schema.json +0 -0
  392. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/in_toto_statement_v1.schema.json +0 -0
  393. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/proofbundle_v0_1.schema.json +0 -0
  394. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/run-ledger-v0.1.schema.json +0 -0
  395. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/trust-pack-v0.1.schema.json +0 -0
  396. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/trust_policy_v0_1.schema.json +0 -0
  397. {proofbundle-3.7.0 → proofbundle-3.8.0}/schemas/verification-summary-v0.1.schema.json +0 -0
  398. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/_build_anchor_fixture.py +0 -0
  399. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/audit_candidate_matrix.py +0 -0
  400. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/branch_base_check.py +0 -0
  401. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/build_reproducible.py +0 -0
  402. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/claims_hygiene_check.py +0 -0
  403. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/demo.sh +0 -0
  404. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/demo_tamper.sh +0 -0
  405. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/doc_link_check.py +0 -0
  406. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/fork_pr_secret_isolation.py +0 -0
  407. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/fuzz_soak.py +0 -0
  408. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/gen_findings_register.py +0 -0
  409. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/gen_synthetic_ots_fixture.py +0 -0
  410. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/readiness_pack_gate.py +0 -0
  411. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/readiness_pack_manifest.py +0 -0
  412. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/render_demo.py +0 -0
  413. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/rust_parity_gate.py +0 -0
  414. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/rust_parity_registry.json +0 -0
  415. {proofbundle-3.7.0 → proofbundle-3.8.0}/scripts/test_manifest_gate.py +0 -0
  416. {proofbundle-3.7.0 → proofbundle-3.8.0}/setup.cfg +0 -0
  417. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/_inspect_registry.py +0 -0
  418. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/_integration.py +0 -0
  419. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/_strict_json.py +0 -0
  420. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/adapters/__init__.py +0 -0
  421. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/adapters/_provenance.py +0 -0
  422. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/adapters/eee.py +0 -0
  423. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/adapters/inspect_ai.py +0 -0
  424. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/adapters/lm_eval.py +0 -0
  425. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/adapters/promptfoo.py +0 -0
  426. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/adapters/samples.py +0 -0
  427. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/anchors_chia_add.py +0 -0
  428. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/anchors_markovian.py +0 -0
  429. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/anchors_ots.py +0 -0
  430. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/anchors_rootcommit.py +0 -0
  431. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/assurance.py +0 -0
  432. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/automation_verdict.py +0 -0
  433. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/beacon.py +0 -0
  434. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/budget.py +0 -0
  435. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/bundle.py +0 -0
  436. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/canonical.py +0 -0
  437. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/decision.py +0 -0
  438. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/demo.py +0 -0
  439. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/eee_eval_schema.json +0 -0
  440. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/errors.py +0 -0
  441. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/evalclaim.py +0 -0
  442. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/experimental/__init__.py +0 -0
  443. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/experimental/enclave.py +0 -0
  444. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/hashalg.py +0 -0
  445. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/hf_evals.py +0 -0
  446. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/inspect_hook.py +0 -0
  447. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/intoto.py +0 -0
  448. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/kbjwt.py +0 -0
  449. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/merkle.py +0 -0
  450. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/outcome.py +0 -0
  451. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/policies/decision-receipt-template-v1.json +0 -0
  452. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/policies/research-preview-v1.json +0 -0
  453. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/policies/strict-eval-authenticated-root-template-v1.json +0 -0
  454. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/policies/strict-eval-template-v1.json +0 -0
  455. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/policies/strict-prereg-template-v1.json +0 -0
  456. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/policy.py +0 -0
  457. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/policy_profiles.py +0 -0
  458. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/pqsig.py +0 -0
  459. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/public_transparency.py +0 -0
  460. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/py.typed +0 -0
  461. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/pytest_plugin.py +0 -0
  462. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/relation_statement.py +0 -0
  463. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/renewal.py +0 -0
  464. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/run_ledger.py +0 -0
  465. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/sdjwt.py +0 -0
  466. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/sdjwt_issue.py +0 -0
  467. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/sdjwt_vc.py +0 -0
  468. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/signature.py +0 -0
  469. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/statuslist.py +0 -0
  470. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/subject_binding.py +0 -0
  471. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/trust_pack.py +0 -0
  472. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle/verification_summary.py +0 -0
  473. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle.egg-info/dependency_links.txt +0 -0
  474. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle.egg-info/entry_points.txt +0 -0
  475. {proofbundle-3.7.0 → proofbundle-3.8.0}/src/proofbundle.egg-info/top_level.txt +0 -0
  476. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/chia_datalayer_proof.json +0 -0
  477. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/freetsa_receipt_anchor.json +0 -0
  478. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/MANIFEST.json +0 -0
  479. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/README.md +0 -0
  480. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/MANIFEST.json +0 -0
  481. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/README.md +0 -0
  482. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/manifest.json +0 -0
  483. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-01-valid.txt +0 -0
  484. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-02-tampered-root.txt +0 -0
  485. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-03-tampered-wallet.txt +0 -0
  486. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors/rootcommit-04-tampered-proof.txt +0 -0
  487. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/manifest.json +0 -0
  488. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-01-valid.txt +0 -0
  489. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-02-tampered-root.txt +0 -0
  490. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-03-tampered-wallet.txt +0 -0
  491. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-04-tampered-sig.txt +0 -0
  492. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/rootcommit/vectors_sig/v2sig-05-tampered-proof.txt +0 -0
  493. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/01-valid.txt +0 -0
  494. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/02-unknown-id.txt +0 -0
  495. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/03-tampered-body.txt +0 -0
  496. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/04-tampered-proof.txt +0 -0
  497. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/anchors/tlog_bitcoin_anchor/vectors/manifest.json +0 -0
  498. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/checkpoint/PROVENANCE.json +0 -0
  499. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/checkpoint/gosumdb_known_keys.go +0 -0
  500. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/checkpoint/rekor_v2_checkpoint.txt +0 -0
  501. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/checkpoint/sumdb_latest.txt +0 -0
  502. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/checkpoint/trusted_root.json +0 -0
  503. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ed25519_speccheck_cases.LICENSE +0 -0
  504. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ed25519_speccheck_cases.README.md +0 -0
  505. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ed25519_speccheck_cases.json +0 -0
  506. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/eee_arc_easy.json +0 -0
  507. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/inspect_logs/safety_refusal_demo.eval +0 -0
  508. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/lm_eval_arc_easy_real.json +0 -0
  509. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/markovian_anchor_confirmed.json +0 -0
  510. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/mldsa_acvp/PROVENANCE.json +0 -0
  511. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/mldsa_acvp/mldsa_sigver_slice.json +0 -0
  512. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/PROVENANCE.json +0 -0
  513. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/block358391.json +0 -0
  514. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/hello-world.txt +0 -0
  515. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/hello-world.txt.ots +0 -0
  516. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/incomplete.txt +0 -0
  517. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/incomplete.txt.ots +0 -0
  518. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/known-and-unknown-notary.txt +0 -0
  519. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/known-and-unknown-notary.txt.ots +0 -0
  520. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/merkle2.txt +0 -0
  521. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/merkle2.txt.ots +0 -0
  522. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/synthetic-upgraded-sha256.block.json +0 -0
  523. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/synthetic-upgraded-sha256.txt +0 -0
  524. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/synthetic-upgraded-sha256.txt.ots +0 -0
  525. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/two-calendars.txt +0 -0
  526. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/ots/two-calendars.txt.ots +0 -0
  527. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/promptfoo_results_v3.json +0 -0
  528. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/rekor_inclusion_25579.json +0 -0
  529. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/rfc6962_vectors.json +0 -0
  530. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/sdjwt_disclosure_vector.json +0 -0
  531. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/sdjwt_reference_eddsa.json +0 -0
  532. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/sdjwtvc/PROVENANCE.json +0 -0
  533. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/sdjwtvc/sdjwtvc_examples.txt +0 -0
  534. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/fixtures/sdjwtvc/sdjwtvc_issuer_pubkey.json +0 -0
  535. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_adapters.py +0 -0
  536. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchor_hardening_321.py +0 -0
  537. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchor_longevity_property.py +0 -0
  538. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchor_target_trustedtime.py +0 -0
  539. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchors_chia.py +0 -0
  540. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchors_chia_add.py +0 -0
  541. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchors_chia_claims.py +0 -0
  542. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchors_generic.py +0 -0
  543. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchors_markovian.py +0 -0
  544. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchors_ots.py +0 -0
  545. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchors_rfc3161.py +0 -0
  546. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_anchors_rootcommit.py +0 -0
  547. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_assurance.py +0 -0
  548. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_audit_candidate_360.py +0 -0
  549. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_automation_verdict.py +0 -0
  550. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_beacon.py +0 -0
  551. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_branch_base_check.py +0 -0
  552. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_budget.py +0 -0
  553. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_bughunt_361_automation_failopen.py +0 -0
  554. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_bundle.py +0 -0
  555. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_bundle_robustness.py +0 -0
  556. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_canonical.py +0 -0
  557. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_checkpoint.py +0 -0
  558. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_checkpoint_external_vectors.py +0 -0
  559. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_checkpoint_quorum_property.py +0 -0
  560. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_claims_hygiene.py +0 -0
  561. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_cli.py +0 -0
  562. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_cli_eval.py +0 -0
  563. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_cli_require_anchor.py +0 -0
  564. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_conformance.py +0 -0
  565. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_conformance_retention_361.py +0 -0
  566. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_content_root_property.py +0 -0
  567. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_cross_format_singleton_361.py +0 -0
  568. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_anchors.py +0 -0
  569. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_cli.py +0 -0
  570. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_evidence.py +0 -0
  571. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_fuzz.py +0 -0
  572. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_hardening.py +0 -0
  573. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_policy.py +0 -0
  574. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_schema.py +0 -0
  575. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_validator_api.py +0 -0
  576. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_decision_verify.py +0 -0
  577. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_demo.py +0 -0
  578. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_docs_truth.py +0 -0
  579. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_dsse_adversarial.py +0 -0
  580. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_dup_key_reject.py +0 -0
  581. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_ed25519_semantics.py +0 -0
  582. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_eee.py +0 -0
  583. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_emit.py +0 -0
  584. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_enclave_assurance.py +0 -0
  585. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_eval_claim_schema.py +0 -0
  586. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_eval_evidence_class.py +0 -0
  587. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_evalcard.py +0 -0
  588. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_evalclaim.py +0 -0
  589. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_evidence_pack.py +0 -0
  590. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_examples.py +0 -0
  591. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_findings_register_rt10.py +0 -0
  592. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_fork_pr_secret_isolation.py +0 -0
  593. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_fuzz_parsers.py +0 -0
  594. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_fuzz_soak_regression.py +0 -0
  595. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_hashalg.py +0 -0
  596. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_hf_entry_verify_eee_digest.py +0 -0
  597. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_hf_evals.py +0 -0
  598. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_inspect_hook.py +0 -0
  599. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_intoto.py +0 -0
  600. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_intoto_claims_hygiene.py +0 -0
  601. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_intoto_content_root_migration.py +0 -0
  602. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_intoto_dsse.py +0 -0
  603. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_intoto_eval_result.py +0 -0
  604. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_intoto_examples.py +0 -0
  605. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_intoto_svr.py +0 -0
  606. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_jcs_mandatory_361.py +0 -0
  607. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_legacy_assurance_deprecation_361.py +0 -0
  608. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_lens_review_fixes_3_1_3.py +0 -0
  609. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_manifest_lock.json +0 -0
  610. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_merkle.py +0 -0
  611. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_merkle_consistency_property.py +0 -0
  612. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_merkle_property.py +0 -0
  613. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_mldsa_acvp_vectors.py +0 -0
  614. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_never_raise_361.py +0 -0
  615. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_never_raise_primary_arg_property.py +0 -0
  616. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_never_raise_recursion_361.py +0 -0
  617. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_official_vectors.py +0 -0
  618. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_ok_semantics.py +0 -0
  619. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_ots_calendar_hardening.py +0 -0
  620. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_ots_external_vectors.py +0 -0
  621. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_outcome_receiver_corroboration.py +0 -0
  622. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_oversized_int_guard.py +0 -0
  623. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_persample.py +0 -0
  624. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_pinned_key_validation.py +0 -0
  625. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_policy_explain_lint.py +0 -0
  626. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_policy_lifecycle_purpose.py +0 -0
  627. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_policy_profiles.py +0 -0
  628. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_policy_templates.py +0 -0
  629. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_pqsig.py +0 -0
  630. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_prereg.py +0 -0
  631. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_promptfoo.py +0 -0
  632. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_provenance.py +0 -0
  633. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_pytest_plugin.py +0 -0
  634. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_rekor_interop.py +0 -0
  635. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_relation_profile.py +0 -0
  636. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_relation_same_key_361.py +0 -0
  637. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_relation_signer_target_340.py +0 -0
  638. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_relation_statement.py +0 -0
  639. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_relation_statement_rust_parity.py +0 -0
  640. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_relation_subject_pin_361.py +0 -0
  641. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_renewal.py +0 -0
  642. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_renewal_external_token_glue.py +0 -0
  643. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_renewal_policy.py +0 -0
  644. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_renewal_signed.py +0 -0
  645. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_reproducible_build_361.py +0 -0
  646. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_rfc6962_external_vectors.py +0 -0
  647. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_root_authenticity.py +0 -0
  648. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_run_ledger.py +0 -0
  649. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_rust_parity_gate.py +0 -0
  650. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_schema.py +0 -0
  651. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_schema_parity.py +0 -0
  652. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdist_packaging_361.py +0 -0
  653. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdjwt_adversarial.py +0 -0
  654. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdjwt_duplicate_cnf.py +0 -0
  655. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdjwt_issue.py +0 -0
  656. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdjwt_reference.py +0 -0
  657. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdjwt_resource_budget.py +0 -0
  658. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdjwt_vc.py +0 -0
  659. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdjwt_verify_binding.py +0 -0
  660. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sdjwtvc_external_vectors.py +0 -0
  661. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_sibling_never_raise_361.py +0 -0
  662. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_signature.py +0 -0
  663. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_subject_binding.py +0 -0
  664. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_tlogproof.py +0 -0
  665. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_trust_pack.py +0 -0
  666. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_trust_pack_crypto_agility.py +0 -0
  667. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_trust_pack_outcome_receivers_role.py +0 -0
  668. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_trust_pack_payloadtype_negatives.py +0 -0
  669. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_verification_summary.py +0 -0
  670. {proofbundle-3.7.0 → proofbundle-3.8.0}/tests/test_verify_matrix.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proofbundle
3
- Version: 3.7.0
3
+ Version: 3.8.0
4
4
  Summary: Emit and verify portable cryptographic evidence bundles, offline: Ed25519 + RFC 6962 Merkle + optional SD-JWT.
5
5
  Author: Konrad Gruszka
6
6
  License: MIT
@@ -54,9 +54,9 @@ Provides-Extra: inspect
54
54
  Requires-Dist: inspect_ai<0.4,>=0.3.112; extra == "inspect"
55
55
  Provides-Extra: dev
56
56
  Requires-Dist: pytest>=7; extra == "dev"
57
- Requires-Dist: ruff>=0.5; extra == "dev"
57
+ Requires-Dist: ruff<0.17,>=0.5; extra == "dev"
58
58
  Requires-Dist: jsonschema>=4; extra == "dev"
59
- Requires-Dist: mypy>=1.8; extra == "dev"
59
+ Requires-Dist: mypy<3,>=1.8; extra == "dev"
60
60
  Requires-Dist: build>=1; extra == "dev"
61
61
  Requires-Dist: hypothesis>=6; extra == "dev"
62
62
  Requires-Dist: rfc8785>=0.1.4; extra == "dev"
@@ -86,11 +86,48 @@ Merkle, one file, no server, no network.
86
86
  [![Python](https://img.shields.io/pypi/pyversions/proofbundle.svg)](https://pypi.org/project/proofbundle/)
87
87
  [![License: MIT](https://img.shields.io/badge/license-MIT-D6248A.svg)](https://github.com/b7n0de/proofbundle/blob/main/LICENSE)
88
88
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.21110642.svg)](https://doi.org/10.5281/zenodo.21110642)
89
+ [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/b7n0de/proofbundle/badge)](https://scorecard.dev/viewer/?uri=github.com/b7n0de/proofbundle)
90
+
91
+ Scorecard **6.5/10** — [what the four zeros mean, in one sentence each](#what-the-scorecard-badge-says-including-the-parts-that-are-low)
89
92
 
90
93
  **Reviewing this for adoption?** Start with the 30-minute adversarial audit path: **[docs/REVIEWERS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/REVIEWERS.md)**.
91
94
 
92
95
  </div>
93
96
 
97
+ ## What the Scorecard badge says, including the parts that are low
98
+
99
+ The badge is live, so it will move. Measured 2026-08-07, re-measured 2026-08-10 with identical
100
+ per-check values (Scorecard v5.5.0 both times): **6.5 / 10**. Ten checks
101
+ score 10/10 — Security-Policy, Token-Permissions, SAST, Fuzzing, CI-Tests, Vulnerabilities,
102
+ Dangerous-Workflow, Dependency-Update-Tool, Packaging, License. Four score 0, and rather than let you
103
+ wonder, here is each cause in one sentence:
104
+
105
+ - **Maintained (0/10)** — the check wants sustained activity on the default branch over 90 days, and
106
+ this repository is younger than that window. It resolves itself with time and is not worth chasing.
107
+ - **CII-Best-Practices (0/10)** — the OpenSSF Best Practices badge has not been applied for. The
108
+ criteria were walked through honestly first:
109
+ [docs/openssf_best_practices_self_assessment.md](https://github.com/b7n0de/proofbundle/blob/main/docs/openssf_best_practices_self_assessment.md).
110
+ - **Contributors (0/10)** — it counts contributors from two or more organisations. This is a
111
+ one-person project, and the zero is an accurate description of that.
112
+ - **Signed-Releases (0/10)** — the check reads GitHub **release assets** looking for a signature file.
113
+ Every version release (`v*`) is attested (SLSA build provenance over the exact built bytes, PyPI
114
+ upload gated on a sha256 match), but that attestation lives in GitHub's attestation store and on
115
+ PyPI — not next to the release, which is where the check looks. The release workflow now also
116
+ places the provenance bundle next to the release assets; that takes effect with the next release,
117
+ and already-published releases were not modified after the fact. Nothing is re-signed — an
118
+ existing file is placed in a second location. Of the five releases the check reads, three are
119
+ corpus-review pre-releases that carry no such assets either, so the number will climb only as new
120
+ releases move through that window.
121
+
122
+ Three further checks sit in between: **Code-Review 1/10** (most commits are not reviewed by a second
123
+ person — structural for a single maintainer), **Binary-Artifacts 9/10** (the deducted point is a
124
+ checked-in wheel+sdist pair kept as a reproduction fixture in `dist_final/`, and one point is not
125
+ worth rebuilding that fixture), and **Pinned-Dependencies 3/10** / **Branch-Protection 3/10**, both
126
+ measured and not yet addressed.
127
+
128
+ Publishing a middling number with its causes is the point. A project that sells evidence cannot
129
+ withhold its own.
130
+
94
131
  ## 60-second try (offline)
95
132
 
96
133
  ```bash
@@ -117,8 +154,10 @@ Every AI eval number you read — a safety benchmark, a capability score, a lead
117
154
  **unverifiable claim**. You trust the lab. There is no portable way to check, offline, that a result
118
155
  was signed by a stated party, has not been altered, and covers the samples it claims.
119
156
 
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
157
+ proofbundle is that check: a small MIT-licensed Python tool (a compact, auditable trusted verify
158
+ core that depends only on [`cryptography`](https://cryptography.io); the package installs one more
159
+ hard dependency, the RFC 8785 canonicalizer [`rfc8785`](https://pypi.org/project/rfc8785/), used on
160
+ the emit and canonicalization paths) that turns a result into a signed receipt
122
161
  anyone can verify from a single file. In plain terms it is the cash-register receipt of an AI test
123
162
  result: it shows who claimed the number and that nobody quietly changed it, not that the test was
124
163
  good. Without a receipt there is nothing to check at all.
@@ -200,7 +239,7 @@ version history (see also [CHANGELOG.md](https://github.com/b7n0de/proofbundle/b
200
239
  ## Install
201
240
 
202
241
  ```bash
203
- pip install proofbundle # core: offline verify + plain emit (dependency-free)
242
+ pip install proofbundle # core: offline verify + plain emit (two deps: cryptography, rfc8785)
204
243
  pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer)
205
244
  pip install "proofbundle[inspect]" # inspect_ai adapter + hook
206
245
  pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures
@@ -238,6 +277,8 @@ DOI [10.5281/zenodo.21110642](https://doi.org/10.5281/zenodo.21110642); the Tech
238
277
  | The demos, tier by tier | [docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md) |
239
278
  | The normative format + verification order | [SPEC.md](https://github.com/b7n0de/proofbundle/blob/main/SPEC.md) |
240
279
  | Honest comparison to Rekor / in-toto / OMS / ValiChord | [INTEROP.md](https://github.com/b7n0de/proofbundle/blob/main/INTEROP.md) |
280
+ | What the conformance corpus does and does not establish | [CONFORMANCE.md](https://github.com/b7n0de/proofbundle/blob/main/CONFORMANCE.md) |
281
+ | The commercial boundary of the project | [docs/COMMERCIAL_BOUNDARY.md](https://github.com/b7n0de/proofbundle/blob/main/docs/COMMERCIAL_BOUNDARY.md) |
241
282
  | Regulatory mapping (and what to never claim) | [COMPLIANCE.md](https://github.com/b7n0de/proofbundle/blob/main/COMPLIANCE.md) |
242
283
  | Funders / role fit | [docs/PROJECT_BRIEF.md](https://github.com/b7n0de/proofbundle/blob/main/docs/PROJECT_BRIEF.md) |
243
284
  | **Preview:** TEE-attestation bridge (RATS/EAT, `[experimental]`) | [docs/EXPERIMENTAL_ENCLAVE.md](https://github.com/b7n0de/proofbundle/blob/main/docs/EXPERIMENTAL_ENCLAVE.md) |
@@ -19,11 +19,48 @@ Merkle, one file, no server, no network.
19
19
  [![Python](https://img.shields.io/pypi/pyversions/proofbundle.svg)](https://pypi.org/project/proofbundle/)
20
20
  [![License: MIT](https://img.shields.io/badge/license-MIT-D6248A.svg)](https://github.com/b7n0de/proofbundle/blob/main/LICENSE)
21
21
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.21110642.svg)](https://doi.org/10.5281/zenodo.21110642)
22
+ [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/b7n0de/proofbundle/badge)](https://scorecard.dev/viewer/?uri=github.com/b7n0de/proofbundle)
23
+
24
+ Scorecard **6.5/10** — [what the four zeros mean, in one sentence each](#what-the-scorecard-badge-says-including-the-parts-that-are-low)
22
25
 
23
26
  **Reviewing this for adoption?** Start with the 30-minute adversarial audit path: **[docs/REVIEWERS.md](https://github.com/b7n0de/proofbundle/blob/main/docs/REVIEWERS.md)**.
24
27
 
25
28
  </div>
26
29
 
30
+ ## What the Scorecard badge says, including the parts that are low
31
+
32
+ The badge is live, so it will move. Measured 2026-08-07, re-measured 2026-08-10 with identical
33
+ per-check values (Scorecard v5.5.0 both times): **6.5 / 10**. Ten checks
34
+ score 10/10 — Security-Policy, Token-Permissions, SAST, Fuzzing, CI-Tests, Vulnerabilities,
35
+ Dangerous-Workflow, Dependency-Update-Tool, Packaging, License. Four score 0, and rather than let you
36
+ wonder, here is each cause in one sentence:
37
+
38
+ - **Maintained (0/10)** — the check wants sustained activity on the default branch over 90 days, and
39
+ this repository is younger than that window. It resolves itself with time and is not worth chasing.
40
+ - **CII-Best-Practices (0/10)** — the OpenSSF Best Practices badge has not been applied for. The
41
+ criteria were walked through honestly first:
42
+ [docs/openssf_best_practices_self_assessment.md](https://github.com/b7n0de/proofbundle/blob/main/docs/openssf_best_practices_self_assessment.md).
43
+ - **Contributors (0/10)** — it counts contributors from two or more organisations. This is a
44
+ one-person project, and the zero is an accurate description of that.
45
+ - **Signed-Releases (0/10)** — the check reads GitHub **release assets** looking for a signature file.
46
+ Every version release (`v*`) is attested (SLSA build provenance over the exact built bytes, PyPI
47
+ upload gated on a sha256 match), but that attestation lives in GitHub's attestation store and on
48
+ PyPI — not next to the release, which is where the check looks. The release workflow now also
49
+ places the provenance bundle next to the release assets; that takes effect with the next release,
50
+ and already-published releases were not modified after the fact. Nothing is re-signed — an
51
+ existing file is placed in a second location. Of the five releases the check reads, three are
52
+ corpus-review pre-releases that carry no such assets either, so the number will climb only as new
53
+ releases move through that window.
54
+
55
+ Three further checks sit in between: **Code-Review 1/10** (most commits are not reviewed by a second
56
+ person — structural for a single maintainer), **Binary-Artifacts 9/10** (the deducted point is a
57
+ checked-in wheel+sdist pair kept as a reproduction fixture in `dist_final/`, and one point is not
58
+ worth rebuilding that fixture), and **Pinned-Dependencies 3/10** / **Branch-Protection 3/10**, both
59
+ measured and not yet addressed.
60
+
61
+ Publishing a middling number with its causes is the point. A project that sells evidence cannot
62
+ withhold its own.
63
+
27
64
  ## 60-second try (offline)
28
65
 
29
66
  ```bash
@@ -50,8 +87,10 @@ Every AI eval number you read — a safety benchmark, a capability score, a lead
50
87
  **unverifiable claim**. You trust the lab. There is no portable way to check, offline, that a result
51
88
  was signed by a stated party, has not been altered, and covers the samples it claims.
52
89
 
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
90
+ proofbundle is that check: a small MIT-licensed Python tool (a compact, auditable trusted verify
91
+ core that depends only on [`cryptography`](https://cryptography.io); the package installs one more
92
+ hard dependency, the RFC 8785 canonicalizer [`rfc8785`](https://pypi.org/project/rfc8785/), used on
93
+ the emit and canonicalization paths) that turns a result into a signed receipt
55
94
  anyone can verify from a single file. In plain terms it is the cash-register receipt of an AI test
56
95
  result: it shows who claimed the number and that nobody quietly changed it, not that the test was
57
96
  good. Without a receipt there is nothing to check at all.
@@ -133,7 +172,7 @@ version history (see also [CHANGELOG.md](https://github.com/b7n0de/proofbundle/b
133
172
  ## Install
134
173
 
135
174
  ```bash
136
- pip install proofbundle # core: offline verify + plain emit (dependency-free)
175
+ pip install proofbundle # core: offline verify + plain emit (two deps: cryptography, rfc8785)
137
176
  pip install "proofbundle[eval]" # + eval receipts, prereg, and the demo (RFC 8785 JCS canonicalizer)
138
177
  pip install "proofbundle[inspect]" # inspect_ai adapter + hook
139
178
  pip install "proofbundle[pq]" # verify ML-DSA-44 (post-quantum) witness cosignatures
@@ -171,6 +210,8 @@ DOI [10.5281/zenodo.21110642](https://doi.org/10.5281/zenodo.21110642); the Tech
171
210
  | The demos, tier by tier | [docs/DEMO.md](https://github.com/b7n0de/proofbundle/blob/main/docs/DEMO.md) |
172
211
  | The normative format + verification order | [SPEC.md](https://github.com/b7n0de/proofbundle/blob/main/SPEC.md) |
173
212
  | Honest comparison to Rekor / in-toto / OMS / ValiChord | [INTEROP.md](https://github.com/b7n0de/proofbundle/blob/main/INTEROP.md) |
213
+ | What the conformance corpus does and does not establish | [CONFORMANCE.md](https://github.com/b7n0de/proofbundle/blob/main/CONFORMANCE.md) |
214
+ | The commercial boundary of the project | [docs/COMMERCIAL_BOUNDARY.md](https://github.com/b7n0de/proofbundle/blob/main/docs/COMMERCIAL_BOUNDARY.md) |
174
215
  | Regulatory mapping (and what to never claim) | [COMPLIANCE.md](https://github.com/b7n0de/proofbundle/blob/main/COMPLIANCE.md) |
175
216
  | Funders / role fit | [docs/PROJECT_BRIEF.md](https://github.com/b7n0de/proofbundle/blob/main/docs/PROJECT_BRIEF.md) |
176
217
  | **Preview:** TEE-attestation bridge (RATS/EAT, `[experimental]`) | [docs/EXPERIMENTAL_ENCLAVE.md](https://github.com/b7n0de/proofbundle/blob/main/docs/EXPERIMENTAL_ENCLAVE.md) |
@@ -1,11 +1,11 @@
1
1
  e6e2f1ca00c1798975005315172248db3ee8fefb02b978cd12627c526dd5dc60 AUDITOR_OPEN_POINTS.md
2
2
  3d66a85ff79c0258d794e7c8d8740f8a3b7a62e6ffd9bd7dada158a939964660 OPEN_QUESTIONS.md
3
- 9a227810137e0c2321948b61737c5b4dbcc36196f017026d43a4bdb050c11445 PROGRESS.md
4
- 2c59b2de935c928140c4425ad0d402683b9482f064d760e9d9ace39cfe7b6eec README.md
3
+ f9079c57df7b037f3c4a30137c5305de42c46cb12bf1c620f6ea5ce1b7c42c82 PROGRESS.md
4
+ 6ccab20c7daef6d71c13e0dcacba24a6a18dd480b5d41418e01b5bf2983ffc9c README.md
5
5
  c9ceb3f92a2f720d901affa8defb47004b58a51029317208db641ce53d90b284 REPRODUCTION_RUNBOOK.md
6
6
  1b4e4316aaea6c962664fc08945c65a048147fdc4ad89a1e694818b934ef6fa2 calendar_independence.md
7
- f0db4c1c1449001b1d25a2712148a33293863dbf92bf1dc31a34d2465c6bb647 differential_matrix.md
7
+ 9a9a9e4956076c6c287dada5de82eb66cf259cec89a6e791088e1733a74c5ea3 differential_matrix.md
8
8
  426a22bd91c7a7529700c06570a3e55fb4c11281992d6215fc2315b12731f9cd index.json
9
- 5d4997642f7c68b902da5f811821c306cd902589cb027d5f4bc96d593f53ebd9 rust_parity_scope.md
9
+ d1d1e04e9d2de38443ec2b953c3a9c968a303e81977cb7e128468945160b56d7 rust_parity_scope.md
10
10
  f2a77cacd7fefe39450edb1857ec2ffc25a4d4c3d8d68efa094ba84ab7325708 tamper_resistance.md
11
11
  6d6a4065a1e7e071819960cef8e0117ada98e931cd62fd94341b45af4865711a threat_model_delta_360.md
@@ -1,6 +1,6 @@
1
1
  # Honest progress accounting (No-Overclaim)
2
2
 
3
- The denominator is the full distance from today (3.3.0) to "4.0.0-stable, externally audited,
3
+ The denominator is the full distance from the 3.3.0 baseline (current release: 3.8.0) to "4.0.0-stable, externally audited,
4
4
  trustworthy". This is a factual progress statement, not a forward promise, and it is deliberately
5
5
  placed in the readiness pack so an auditor reads our own honest number before forming theirs.
6
6
 
@@ -26,7 +26,7 @@ placed in the readiness pack so an auditor reads our own honest number before fo
26
26
  ## Consequence
27
27
 
28
28
  With the five front-loaded foundations plus the pre-tag audit discipline, the audit-candidate (3.6.0)
29
- is reachable at ~85% of the total distance with **practically zero avoidable rework**; the remaining
29
+ was reached at ~85% of the total distance (3.6.0 tagged 2026-07-17) with **practically zero avoidable rework**; the remaining
30
30
  ~15% is, by definition, not anticipatable — only best-prepared, which is what this pack is.
31
31
 
32
32
  ## Where this number is enforced against drift
@@ -30,9 +30,9 @@ it does not, and cannot, close on its own.
30
30
  ## Release evidence slots (front-loaded)
31
31
 
32
32
  - `3.3.1-frontload` — **filled**: the five foundations (F1–F5) + the pre-tag audit discipline (F7).
33
- - `3.4.0` — reserved: relation_signer receipts, decoy-parent F1 vectors, formal obligation O5.
34
- - `3.5.0` — reserved: relation_statement Rust parity, formal obligation O6, F4 auto-coverage.
35
- - `3.6.0` — reserved: fuzz-soak corpora, differential matrix, formal obligation O7, threat-model delta.
33
+ - `3.4.0` — **filled** (shipped under the 3.6.0 tag): relation_signer receipts, decoy-parent F1 vectors; formal obligation O5 remains reserved (see `index.json`).
34
+ - `3.5.0` — **filled** (shipped under the 3.6.0 tag): relation_statement Rust parity, F4 auto-coverage; formal obligation O6 remains reserved (see `index.json`).
35
+ - `3.6.0` — **filled**: fuzz-soak corpora, differential matrix, threat-model delta, 33-check acceptance matrix; formal obligation O7 remains reserved (see `index.json`).
36
36
 
37
37
  A `reserved` slot is declared honestly; it is not evidence yet, and nothing here counts it as such.
38
38
 
@@ -19,7 +19,9 @@ python3 tools/pb_verify_rs/crosscheck.py --matrix audit_artifacts/360/rust_diffe
19
19
 
20
20
  The artifact carries an environment freeze (cargo / rustc / python versions) so a re-run on another box
21
21
  is comparable. On the recorded run: 40 relation vectors, Python == Rust on all, and the whole 54-case
22
- conformance corpus reproduced independently by the Rust binary.
22
+ conformance corpus of that era reproduced independently by the Rust binary (the corpus has since
23
+ grown to 57 cases; the named `make conformance-crossimpl` gate re-runs the cross-check on every
24
+ invocation, 56/56 as of v3.7.0).
23
25
 
24
26
  ## Scope of coverage
25
27
 
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "schema": "proofbundle/v0.1",
3
- "payload_b64": "ZTZlMmYxY2EwMGMxNzk4OTc1MDA1MzE1MTcyMjQ4ZGIzZWU4ZmVmYjAyYjk3OGNkMTI2MjdjNTI2ZGQ1ZGM2MCAgQVVESVRPUl9PUEVOX1BPSU5UUy5tZAozZDY2YTg1ZmY3OWMwMjU4ZDc5NGU3YzhkODc0MGY4YTNiN2E2MmU2ZmZkOWJkN2RhZGExNThhOTM5OTY0NjYwICBPUEVOX1FVRVNUSU9OUy5tZAo5YTIyNzgxMDEzN2UwYzIzMjE5NDhiNjE3MzdjNWI0ZGJjYzM2MTk2ZjAxNzAyNmQ0M2E0YmRiMDUwYzExNDQ1ICBQUk9HUkVTUy5tZAoyYzU5YjJkZTkzNWM5MjgxNDBjNDQyNWFkMGQ0MDI2ODNiOTQ4MmYwNjRkNzYwZTlkOWFjZTM5Y2ZlN2I2ZWVjICBSRUFETUUubWQKYzljZWIzZjkyYTJmNzIwZDkwMWFmZmE4ZGVmYjQ3MDA0YjU4YTUxMDI5MzE3MjA4ZGI2NDFjZTUzZDkwYjI4NCAgUkVQUk9EVUNUSU9OX1JVTkJPT0subWQKMWI0ZTQzMTZhYWVhNmM5NjI2NjRmYzA4OTQ1YzY1YTA0ODE0N2ZkYzRhZDg5YTFlNjk0ODE4YjkzNGVmNmZhMiAgY2FsZW5kYXJfaW5kZXBlbmRlbmNlLm1kCmYwZGI0YzFjMTQ0OTAwMWIxZDI1YTI3MTIxNDhhMzMyOTM4NjNkYmY5MmJmMWRjMzFhMzRkMjQ2NWM2YmI2NDcgIGRpZmZlcmVudGlhbF9tYXRyaXgubWQKNDI2YTIyYmQ5MWM3YTc1Mjk3MDBjMDY1NzBhM2U1NWZiNGMxMTI4MTk5MmQ2MjE1ZmMyMzE1YjEyNzMxZjljZCAgaW5kZXguanNvbgo1ZDQ5OTc2NDJmN2M2OGI5MDJkYTVmODExODIxYzMwNmNkOTAyNTg5Y2IwMjdkNWY0YmM5NmQ1OTNmNTNlYmQ5ICBydXN0X3Bhcml0eV9zY29wZS5tZApmMmE3N2NhY2Q3ZmVmZTM5NDUwZWRiMTg1N2VjMmZmYzI1YTRkNGMzZDhkNjhlZmEwOTRiYTg0YWI3MzI1NzA4ICB0YW1wZXJfcmVzaXN0YW5jZS5tZAo2ZDZhNDA2NWExZTdlMDcxODE5OTYwY2VmOGUwMTE3YWRhOThlOTMxY2Q2MmZkOTQzNDFiNDVhZjQ4NjU3MTFhICB0aHJlYXRfbW9kZWxfZGVsdGFfMzYwLm1kCg==",
3
+ "payload_b64": "ZTZlMmYxY2EwMGMxNzk4OTc1MDA1MzE1MTcyMjQ4ZGIzZWU4ZmVmYjAyYjk3OGNkMTI2MjdjNTI2ZGQ1ZGM2MCAgQVVESVRPUl9PUEVOX1BPSU5UUy5tZAozZDY2YTg1ZmY3OWMwMjU4ZDc5NGU3YzhkODc0MGY4YTNiN2E2MmU2ZmZkOWJkN2RhZGExNThhOTM5OTY0NjYwICBPUEVOX1FVRVNUSU9OUy5tZApmOTA3OWM1N2RmN2IwMzdmM2M0YTMwMTM3YzUzMDVkZTQyYzQ2Y2IxMmJmMWM2MjBmNmVhNWNlMWI3YzQyYzgyICBQUk9HUkVTUy5tZAo2Y2NhYjIwYzdkYWVmNmQ3MWMxM2UwZGNhY2JhMjRhNmExOGRkNDgwYjVkNDE0MThlMDFiNWJmMjk4M2ZmYzljICBSRUFETUUubWQKYzljZWIzZjkyYTJmNzIwZDkwMWFmZmE4ZGVmYjQ3MDA0YjU4YTUxMDI5MzE3MjA4ZGI2NDFjZTUzZDkwYjI4NCAgUkVQUk9EVUNUSU9OX1JVTkJPT0subWQKMWI0ZTQzMTZhYWVhNmM5NjI2NjRmYzA4OTQ1YzY1YTA0ODE0N2ZkYzRhZDg5YTFlNjk0ODE4YjkzNGVmNmZhMiAgY2FsZW5kYXJfaW5kZXBlbmRlbmNlLm1kCjlhOWE5ZTQ5NTYwNzZjNmMyODdkYWRhNWRlODJlYjY2Y2YyNTljZWM4OWE2ZTc5MTA4OGUxNzMzYTc0YzVlYTMgIGRpZmZlcmVudGlhbF9tYXRyaXgubWQKNDI2YTIyYmQ5MWM3YTc1Mjk3MDBjMDY1NzBhM2U1NWZiNGMxMTI4MTk5MmQ2MjE1ZmMyMzE1YjEyNzMxZjljZCAgaW5kZXguanNvbgpkMWQxZTA0ZTlkMmRlMzg0NDNlYzJiOTUzYzNhOWM5NjhhMzAzZTgxOTc3Y2I3ZTEyODQ2ODk0NTE2MGI1NmQ3ICBydXN0X3Bhcml0eV9zY29wZS5tZApmMmE3N2NhY2Q3ZmVmZTM5NDUwZWRiMTg1N2VjMmZmYzI1YTRkNGMzZDhkNjhlZmEwOTRiYTg0YWI3MzI1NzA4ICB0YW1wZXJfcmVzaXN0YW5jZS5tZAo2ZDZhNDA2NWExZTdlMDcxODE5OTYwY2VmOGUwMTE3YWRhOThlOTMxY2Q2MmZkOTQzNDFiNDVhZjQ4NjU3MTFhICB0aHJlYXRfbW9kZWxfZGVsdGFfMzYwLm1kCg==",
4
4
  "signature": {
5
5
  "alg": "ed25519",
6
- "public_key_b64": "aQDV4VkcZW9Doag0DhpOgoMlcYPFcC36S5SrpKrOnQE=",
7
- "sig_b64": "Q0UXjBrfaA2w+pUNCQhY42UQuJRIiWkHw+iVQ/RXi3tMp7wFfjucLkcHM+Dog5WJULdgJ9A+vmXs1uxV1XNkAw=="
6
+ "public_key_b64": "GB+LMY2k3nnr1Cm64iVJLLMdiEstoP4DGflIXXN2/2Q=",
7
+ "sig_b64": "sgKuvyQ1j477RZ2MARU89S9oiopJkI7yfwRjeyTRj1P6N3N5rCMAEyMwhVvN5vupfwDo/CaJO/dVdZs3VribAA=="
8
8
  },
9
9
  "merkle": {
10
10
  "hash_alg": "sha256-rfc6962",
11
11
  "leaf_index": 0,
12
12
  "tree_size": 1,
13
13
  "inclusion_proof_b64": [],
14
- "root_b64": "EjSMLMOQQmTnf6b7nWcAdJoURNgBG2RgvRVt4Yfz1Po="
14
+ "root_b64": "jaW3qlMpoFggIW4V2uP4mdPOw3prJdMP0Mc6BXihy2o="
15
15
  }
16
16
  }
@@ -0,0 +1 @@
1
+ GB+LMY2k3nnr1Cm64iVJLLMdiEstoP4DGflIXXN2/2Q=
@@ -24,7 +24,7 @@ python3 tools/pb_verify_rs/crosscheck.py --matrix audit_artifacts/360/rust_diffe
24
24
  negative (decoy-parent, subject-mismatch, signer, lineage tiers), Python == Rust on exit-class +
25
25
  lineage on every one
26
26
 
27
- The whole conformance corpus (54 cases) is reproduced independently by the Rust binary.
27
+ The whole conformance corpus (57 cases as of v3.7.0; the `make conformance-crossimpl` gate reproduces 56/56 of its corpus cases) is reproduced independently by the Rust binary.
28
28
 
29
29
  ## Deliberately PENDING (honestly not Rust-covered, never silently accepted)
30
30
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "proofbundle"
7
- version = "3.7.0"
7
+ version = "3.8.0"
8
8
  description = "Emit and verify portable cryptographic evidence bundles, offline: Ed25519 + RFC 6962 Merkle + optional SD-JWT."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -96,7 +96,46 @@ test = ["pytest>=7", "hypothesis>=6", "PyYAML>=6", "jsonschema>=4", "sd-jwt>=0.1
96
96
  # test is bound to this range. Since v1.4.0 the project floor is Python 3.10, so no per-extra version
97
97
  # marker is needed here (inspect_ai's own >=3.10 requirement is always satisfiable on a supported base).
98
98
  inspect = ['inspect_ai>=0.3.112,<0.4']
99
- dev = ["pytest>=7", "ruff>=0.5", "jsonschema>=4", "mypy>=1.8", "build>=1", "hypothesis>=6",
99
+ # ruff is bounded, but the bound is no longer what protects this repo — `[tool.ruff.lint] select`
100
+ # is (see that section). The cap `<0.16` that stood here from 2026-07-31 to 2026-08-07 bought time
101
+ # to find out WHY 0.16 turned a green tree red. It is now measured, and it was never our code:
102
+ #
103
+ # ruff 0.16.0 expanded its DEFAULT rule set from 59 rules to 413 (Astral's v0.16.0 release; the
104
+ # default had been untouched since v0.1.0). Measured here on the identical tree @2e5807a:
105
+ # ruff 0.15.0 / 0.15.10 / 0.15.22 -> 59 default rules -> exit 0 over all 258 tracked .py
106
+ # ruff 0.16.0 / 0.16.1 / 0.16.2 -> 413 default rules -> exit 1, 1168 findings
107
+ # Top rules, re-measured on that same tree with 0.16.0: RUF100 400, UP045 181, I001 163,
108
+ # RUF059 57, EXE001 40, PLW1510 37, BLE001 36, UP006 30. NONE of them was enabled in 0.15.
109
+ # (The earlier note here cited "E402 257" and "F401 72". Both are wrong: on that tree, with
110
+ # that ruff, E402 and F401 each find ZERO. The total, 1168, was right. Corrected 2026-08-07.)
111
+ #
112
+ # So the bound stays, but for a NARROWER and honestly smaller reason: `select` fixes WHICH rules
113
+ # judge us, it cannot fix a change in what an individual rule MEANS. That residue is what `<0.17`
114
+ # still covers, and it is a much cheaper thing to re-check than a 7x rule-set swing.
115
+ #
116
+ # mypy is `mypy src`, the OTHER blocking judge in ci.yml, and it was unbounded for the same reason
117
+ # ruff was. Two things were measured on 2026-08-07 before this bound went in, and they point in
118
+ # opposite directions, so both are stated:
119
+ #
120
+ # NO FAILURE WAS FOUND. Every one of mypy 1.8.0 / 1.11.2 / 1.15.0 / 1.18.2 / 2.0.0 / 2.1.0 /
121
+ # 2.2.0 / 2.3.0 exits 0 over `src` (63 files) — across BOTH major versions. So the declared
122
+ # floor `>=1.8` is not a guess, it is verified. That is the honest state and this bound does
123
+ # not pretend otherwise: it is prospective, not a fix for something broken.
124
+ #
125
+ # THE MECHANISM IS REAL THOUGH. mypy changes CHECKING DEFAULTS at major versions: 2.0 turned on
126
+ # `--local-partial-types` and `--strict-bytes` (PEP 688: `bytearray`/`memoryview` no longer
127
+ # assignable to `bytes`) and redefined `--allow-redefinition`. This tree happens not to be
128
+ # sensitive to those three; the next major is a coin flip nobody has flipped yet.
129
+ #
130
+ # `<3` is therefore the granularity that matches where mypy actually moves, and it blocks nothing
131
+ # today (2.3.0 is well under it). A bump is a deliberate act, like ruff's.
132
+ #
133
+ # HONEST CAVEAT ON HOW THE FLOOR WAS MEASURED: the first attempt ran each pinned mypy in a bare
134
+ # venv and "found" that everything below 2.3 fails at pqsig.py:91. That was the measurement, not
135
+ # the code — those venvs had no `cryptography`, so the `type: ignore[attr-defined]` on the
136
+ # optional `slhdsa` import really is unused there. With the project's own dependency present, all
137
+ # eight versions pass. A floor claim is only worth the environment it was measured in.
138
+ dev = ["pytest>=7", "ruff>=0.5,<0.17", "jsonschema>=4", "mypy>=1.8,<3", "build>=1", "hypothesis>=6",
100
139
  "rfc8785>=0.1.4", "sd-jwt>=0.10", "PyYAML>=6", 'inspect_ai>=0.3.112,<0.4']
101
140
 
102
141
  [project.urls]
@@ -124,6 +163,47 @@ proofbundle = ["py.typed", "eee_eval_schema.json", "policies/*.json"]
124
163
  [tool.ruff]
125
164
  line-length = 100
126
165
 
166
+ [tool.ruff.lint]
167
+ # THE JUDGE'S CRITERIA ARE OURS, NOT THE VENDOR'S DEFAULT-OF-THE-DAY.
168
+ #
169
+ # `ruff check .` is a blocking CI step, so the set of enabled rules is an INPUT to a gate. Until
170
+ # 2026-08-07 this file pinned only ruff's VERSION and left the rule SELECTION implicit, which meant
171
+ # an upstream release could redefine what "green" means here without a line of our code changing.
172
+ # It did: 0.16.0 took the default from 59 rules to 413. Capping the version deferred that; every
173
+ # future cap raise would have replayed the same triage. Naming the rules removes the class.
174
+ #
175
+ # These four prefixes ARE the set that judged this repo through the whole 0.15 line — verified by
176
+ # set comparison, not by eye: `--select E4,E7,E9,F` under 0.16.2 enables exactly the same 59 rules
177
+ # that 0.15.0/0.15.10/0.15.22 enabled by default, and under that selection every one of
178
+ # 0.15.0 / 0.15.10 / 0.15.22 / 0.16.0 / 0.16.1 / 0.16.2 exits 0 over all 258 tracked .py files.
179
+ # This is also Astral's own documented way to keep the pre-0.16 behaviour.
180
+ #
181
+ # WHAT A PREFIX DOES NOT DO, said plainly because the sentence above reads stronger than it is:
182
+ # a prefix is an OPEN set. `E4` means "every E4xx rule this ruff knows", not "these fifteen". A
183
+ # future release can add a rule under one of these four prefixes and it is selected here without
184
+ # anyone choosing it — the same shape of surprise as the 0.16 default swing, just narrower. So the
185
+ # set equality above is a measurement AT a version, not a property of the config.
186
+ # Measured across the whole declared range (0.5.0, 0.15.0, 0.15.22, 0.16.0, 0.16.2), membership
187
+ # under these four prefixes: 0 rules added, 1 removed (E999, deprecated as a selectable rule).
188
+ # Eleven minor releases, no growth. That is evidence about the past, not a guarantee.
189
+ # THIS is the residue the version bound in [project.optional-dependencies] actually catches, and it
190
+ # is a better reason for that bound than the rule-semantics drift also named there. Enumerating all
191
+ # 59 rule IDs would close it completely, at the cost of a config nobody re-reads; the bound plus a
192
+ # deliberate bump was chosen instead. If that bump ever gets rubber-stamped, this trade is void.
193
+ #
194
+ # THE HALF THAT IS EASY TO MISS: 0.16 did not only ADD rules, it DROPPED 18 from the default —
195
+ # E401 E402 E701 E702 E703 E711 E712 E713 E714 E721 E731 E741 E742 E743 F403 F405 F406 F722.
196
+ # Among them `== None` (E711), `== True` (E712), type comparison by `==` (E721) and star-import
197
+ # leakage (F403/F405). Simply raising the cap would have SILENTLY STOPPED checking all eighteen,
198
+ # and nothing would have shown it: the finding count goes UP, so the regression hides inside an
199
+ # apparent tightening. All eighteen sit inside the E4/E7/E9/F prefixes below, so they keep being
200
+ # checked here. (Upstream has an open issue that this removal never reached BREAKING_CHANGES.md.)
201
+ #
202
+ # EXPANDING this set is a separate, deliberate task with its own diff — several of the 372 newly
203
+ # defaulted rules look worth adopting. The point of naming the set is that adopting them becomes a
204
+ # decision we make, at a time we choose, instead of one a `pip install` makes for us.
205
+ select = ["E4", "E7", "E9", "F"]
206
+
127
207
  [tool.mypy]
128
208
  python_version = "3.10"
129
209
  files = ["src"]