ca2a-runtime 0.1.0a1__tar.gz → 0.2.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 (233) hide show
  1. ca2a_runtime-0.2.0/.dockerignore +19 -0
  2. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/ci.yml +24 -9
  3. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/codeql.yml +3 -3
  4. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/contributor-check.yml +4 -1
  5. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/docker.yml +30 -5
  6. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/docs.yml +1 -1
  7. ca2a_runtime-0.2.0/.github/workflows/release.yml +106 -0
  8. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/require-maintainer-approval.yml +1 -7
  9. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/scorecard.yml +2 -2
  10. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.gitignore +3 -0
  11. ca2a_runtime-0.2.0/ADOPTERS.md +7 -0
  12. ca2a_runtime-0.2.0/CHANGELOG.md +255 -0
  13. ca2a_runtime-0.2.0/Dockerfile +30 -0
  14. ca2a_runtime-0.2.0/LIMITATIONS.md +30 -0
  15. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/PKG-INFO +55 -10
  16. ca2a_runtime-0.2.0/PRIVACY.md +9 -0
  17. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/README.md +41 -7
  18. ca2a_runtime-0.2.0/ROADMAP.md +49 -0
  19. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/SPEC.md +5 -5
  20. ca2a_runtime-0.2.0/docs/assets/og.png +0 -0
  21. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/concepts.md +2 -0
  22. ca2a_runtime-0.2.0/docs/configuration.md +73 -0
  23. ca2a_runtime-0.2.0/docs/hardware-validation.md +219 -0
  24. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/quickstart.md +17 -1
  25. ca2a_runtime-0.2.0/docs/spec/attestation.md +125 -0
  26. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/call-graph.md +6 -6
  27. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/cedar-policy.md +6 -6
  28. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/component-model.md +6 -5
  29. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/conformance.md +3 -3
  30. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/delegation-chain.md +41 -0
  31. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/error-codes.md +10 -5
  32. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/failure-modes.md +4 -2
  33. ca2a_runtime-0.2.0/docs/spec/mutual-attestation.md +210 -0
  34. ca2a_runtime-0.2.0/docs/spec/profile.md +100 -0
  35. ca2a_runtime-0.2.0/docs/spec/threat-model.md +46 -0
  36. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/trace-a2a-profile.md +1 -1
  37. ca2a_runtime-0.2.0/docs/spec/transport.md +157 -0
  38. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/verification-library.md +4 -2
  39. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/tutorials/integrating-with-a2a.md +2 -2
  40. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/tutorials/reproducing-the-claims.md +1 -1
  41. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/examples/cross-operator-delegation/README.md +4 -6
  42. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/examples/cross-operator-delegation/ca2a-config.yaml +1 -1
  43. ca2a_runtime-0.2.0/examples/cross-operator-delegation/chain.json +29 -0
  44. ca2a_runtime-0.2.0/examples/cross-operator-delegation/dag.json +27 -0
  45. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/examples/cross-operator-delegation/demo.py +8 -11
  46. ca2a_runtime-0.2.0/examples/minimal/ca2a-config.yaml +11 -0
  47. ca2a_runtime-0.2.0/examples/rejection-with-proof/README.md +90 -0
  48. ca2a_runtime-0.2.0/examples/rejection-with-proof/chain.json +42 -0
  49. ca2a_runtime-0.2.0/examples/rejection-with-proof/dag.json +55 -0
  50. ca2a_runtime-0.2.0/examples/rejection-with-proof/demo.py +211 -0
  51. ca2a_runtime-0.2.0/examples/trace-dag/README.md +37 -0
  52. ca2a_runtime-0.2.0/examples/trace-dag/demo.py +101 -0
  53. ca2a_runtime-0.2.0/experiments/hardware-validation/README.md +8 -0
  54. ca2a_runtime-0.2.0/experiments/hardware-validation/ca2a-attested-peer-azure-2026-07-27/bridge.py +226 -0
  55. ca2a_runtime-0.2.0/experiments/hardware-validation/ca2a-attested-peer-azure-2026-07-27/transcript.json +19 -0
  56. ca2a_runtime-0.2.0/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/snp_client.py +135 -0
  57. ca2a_runtime-0.2.0/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/tdx_peer.py +128 -0
  58. ca2a_runtime-0.2.0/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/transcript.json +54 -0
  59. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/mkdocs.yml +1 -0
  60. ca2a_runtime-0.2.0/overrides/main.html +88 -0
  61. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/pyproject.toml +123 -96
  62. ca2a_runtime-0.2.0/requirements-docs.txt +7 -0
  63. ca2a_runtime-0.2.0/src/ca2a_runtime/__init__.py +8 -0
  64. ca2a_runtime-0.2.0/src/ca2a_runtime/agent_manifest.py +163 -0
  65. ca2a_runtime-0.2.0/src/ca2a_runtime/attestation.py +152 -0
  66. ca2a_runtime-0.2.0/src/ca2a_runtime/bootstrap.py +138 -0
  67. ca2a_runtime-0.2.0/src/ca2a_runtime/challenge.py +95 -0
  68. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/cli.py +106 -6
  69. ca2a_runtime-0.2.0/src/ca2a_runtime/config.py +164 -0
  70. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/delegation/__init__.py +8 -0
  71. ca2a_runtime-0.2.0/src/ca2a_runtime/delegation/credential.py +314 -0
  72. ca2a_runtime-0.2.0/src/ca2a_runtime/delegation/holder.py +264 -0
  73. ca2a_runtime-0.2.0/src/ca2a_runtime/errors.py +177 -0
  74. ca2a_runtime-0.2.0/src/ca2a_runtime/node.py +112 -0
  75. ca2a_runtime-0.2.0/src/ca2a_runtime/peer.py +465 -0
  76. ca2a_runtime-0.2.0/src/ca2a_runtime/provenance.py +244 -0
  77. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/tee/__init__.py +5 -2
  78. ca2a_runtime-0.2.0/src/ca2a_runtime/tee/base.py +60 -0
  79. ca2a_runtime-0.2.0/src/ca2a_runtime/tee/binding.py +52 -0
  80. ca2a_runtime-0.2.0/src/ca2a_runtime/tee/sev_snp.py +205 -0
  81. ca2a_runtime-0.2.0/src/ca2a_runtime/tee/software.py +38 -0
  82. ca2a_runtime-0.2.0/src/ca2a_runtime/tee/tdx.py +241 -0
  83. ca2a_runtime-0.2.0/src/ca2a_runtime/tee/tpm.py +528 -0
  84. ca2a_runtime-0.2.0/src/ca2a_runtime/tee/tsm.py +149 -0
  85. ca2a_runtime-0.2.0/src/ca2a_runtime/trace_binding.py +248 -0
  86. ca2a_runtime-0.2.0/src/ca2a_runtime/transport/__init__.py +36 -0
  87. ca2a_runtime-0.2.0/src/ca2a_runtime/transport/a2a_adapter.py +270 -0
  88. ca2a_runtime-0.2.0/src/ca2a_runtime/transport/a2a_sdk.py +141 -0
  89. ca2a_runtime-0.2.0/src/ca2a_runtime/transport/client.py +193 -0
  90. ca2a_runtime-0.2.0/src/ca2a_runtime/transport/constants.py +41 -0
  91. ca2a_runtime-0.2.0/src/ca2a_runtime/transport/server.py +138 -0
  92. ca2a_runtime-0.2.0/src/ca2a_runtime/transport/wire.py +118 -0
  93. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_verify/__init__.py +8 -0
  94. ca2a_runtime-0.2.0/src/ca2a_verify/dag.py +219 -0
  95. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_verify/sev_snp.py +15 -27
  96. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_verify/tdx.py +1 -3
  97. ca2a_runtime-0.2.0/src/ca2a_verify/tpm.py +217 -0
  98. ca2a_runtime-0.2.0/src/ca2a_verify/tpm_roots.py +102 -0
  99. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_verify/verify.py +14 -7
  100. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/conformance/README.md +25 -1
  101. ca2a_runtime-0.2.0/tests/conformance/test_profile_conformance.py +739 -0
  102. ca2a_runtime-0.2.0/tests/fixtures/a2a/send_message_ca2a.json +23 -0
  103. ca2a_runtime-0.2.0/tests/fixtures/hardware/azure-vtpm-2026-07-27/README.md +71 -0
  104. ca2a_runtime-0.2.0/tests/fixtures/hardware/azure-vtpm-2026-07-27/ak.pub +9 -0
  105. ca2a_runtime-0.2.0/tests/fixtures/hardware/azure-vtpm-2026-07-27/akcert_0x01C101D0.der +0 -0
  106. ca2a_runtime-0.2.0/tests/fixtures/hardware/azure-vtpm-2026-07-27/nonce.hex +1 -0
  107. ca2a_runtime-0.2.0/tests/fixtures/hardware/azure-vtpm-2026-07-27/pcrs.bin +0 -0
  108. ca2a_runtime-0.2.0/tests/fixtures/hardware/azure-vtpm-2026-07-27/quote.msg +0 -0
  109. ca2a_runtime-0.2.0/tests/fixtures/hardware/azure-vtpm-2026-07-27/quote.sig +4 -0
  110. ca2a_runtime-0.2.0/tests/test_challenge.py +108 -0
  111. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/conftest.py +80 -7
  112. ca2a_runtime-0.2.0/tests/unit/test_a2a_adapter.py +243 -0
  113. ca2a_runtime-0.2.0/tests/unit/test_a2a_sdk_bridge.py +330 -0
  114. ca2a_runtime-0.2.0/tests/unit/test_agent_manifest_cose.py +173 -0
  115. ca2a_runtime-0.2.0/tests/unit/test_bootstrap.py +156 -0
  116. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_cedar.py +22 -1
  117. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_claim1_attenuation.py +1 -3
  118. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_claim3_scope_policy.py +10 -1
  119. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_claim6_cross_operator.py +20 -11
  120. ca2a_runtime-0.2.0/tests/unit/test_cli_start.py +108 -0
  121. ca2a_runtime-0.2.0/tests/unit/test_committed_examples_verify.py +75 -0
  122. ca2a_runtime-0.2.0/tests/unit/test_config.py +133 -0
  123. ca2a_runtime-0.2.0/tests/unit/test_container_release.py +63 -0
  124. ca2a_runtime-0.2.0/tests/unit/test_delegation.py +271 -0
  125. ca2a_runtime-0.2.0/tests/unit/test_dependency_security_floors.py +40 -0
  126. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_errors.py +8 -1
  127. ca2a_runtime-0.2.0/tests/unit/test_example_rejection_with_proof.py +70 -0
  128. ca2a_runtime-0.2.0/tests/unit/test_holder_binding.py +499 -0
  129. ca2a_runtime-0.2.0/tests/unit/test_live_call.py +289 -0
  130. ca2a_runtime-0.2.0/tests/unit/test_mutual_attestation.py +543 -0
  131. ca2a_runtime-0.2.0/tests/unit/test_peer.py +155 -0
  132. ca2a_runtime-0.2.0/tests/unit/test_peer_request.py +92 -0
  133. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_provenance.py +5 -2
  134. ca2a_runtime-0.2.0/tests/unit/test_release_artifacts.py +52 -0
  135. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_sev_snp.py +97 -31
  136. ca2a_runtime-0.2.0/tests/unit/test_snp_tdx_attest.py +512 -0
  137. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_tdx.py +63 -12
  138. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_tpm.py +83 -13
  139. ca2a_runtime-0.2.0/tests/unit/test_tpm_attest.py +511 -0
  140. ca2a_runtime-0.2.0/tests/unit/test_trace_binding.py +217 -0
  141. ca2a_runtime-0.1.0a1/.github/workflows/release.yml +0 -75
  142. ca2a_runtime-0.1.0a1/ADOPTERS.md +0 -7
  143. ca2a_runtime-0.1.0a1/CHANGELOG.md +0 -47
  144. ca2a_runtime-0.1.0a1/LIMITATIONS.md +0 -25
  145. ca2a_runtime-0.1.0a1/ROADMAP.md +0 -44
  146. ca2a_runtime-0.1.0a1/docs/configuration.md +0 -35
  147. ca2a_runtime-0.1.0a1/docs/spec/attestation.md +0 -54
  148. ca2a_runtime-0.1.0a1/docs/spec/profile.md +0 -24
  149. ca2a_runtime-0.1.0a1/docs/spec/threat-model.md +0 -37
  150. ca2a_runtime-0.1.0a1/docs/spec/transport.md +0 -71
  151. ca2a_runtime-0.1.0a1/examples/cross-operator-delegation/chain.json +0 -29
  152. ca2a_runtime-0.1.0a1/examples/cross-operator-delegation/dag.json +0 -25
  153. ca2a_runtime-0.1.0a1/examples/minimal/ca2a-config.yaml +0 -6
  154. ca2a_runtime-0.1.0a1/requirements-docs.txt +0 -7
  155. ca2a_runtime-0.1.0a1/src/ca2a_runtime/__init__.py +0 -3
  156. ca2a_runtime-0.1.0a1/src/ca2a_runtime/config.py +0 -73
  157. ca2a_runtime-0.1.0a1/src/ca2a_runtime/delegation/credential.py +0 -176
  158. ca2a_runtime-0.1.0a1/src/ca2a_runtime/errors.py +0 -83
  159. ca2a_runtime-0.1.0a1/src/ca2a_runtime/peer.py +0 -142
  160. ca2a_runtime-0.1.0a1/src/ca2a_runtime/provenance.py +0 -115
  161. ca2a_runtime-0.1.0a1/src/ca2a_runtime/tee/base.py +0 -36
  162. ca2a_runtime-0.1.0a1/src/ca2a_runtime/tee/sev_snp.py +0 -105
  163. ca2a_runtime-0.1.0a1/src/ca2a_runtime/tee/tdx.py +0 -133
  164. ca2a_runtime-0.1.0a1/src/ca2a_runtime/tee/tpm.py +0 -98
  165. ca2a_runtime-0.1.0a1/src/ca2a_verify/tpm.py +0 -72
  166. ca2a_runtime-0.1.0a1/tests/conformance/test_profile_conformance.py +0 -406
  167. ca2a_runtime-0.1.0a1/tests/unit/test_config.py +0 -59
  168. ca2a_runtime-0.1.0a1/tests/unit/test_delegation.py +0 -119
  169. ca2a_runtime-0.1.0a1/tests/unit/test_peer.py +0 -73
  170. ca2a_runtime-0.1.0a1/tests/unit/test_peer_request.py +0 -66
  171. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/CODEOWNERS +0 -0
  172. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  173. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  174. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  175. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  176. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/dependabot.yml +0 -0
  177. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/release-drafter.yml +0 -0
  178. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/.github/workflows/sbom.yml +0 -0
  179. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/CHARTER.md +0 -0
  180. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/CNAME +0 -0
  181. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/CODE_OF_CONDUCT.md +0 -0
  182. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/CONTRIBUTING.md +0 -0
  183. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/GOVERNANCE.md +0 -0
  184. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/LICENSE +0 -0
  185. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/MAINTAINERS.md +0 -0
  186. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/NOTICE +0 -0
  187. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/SECURITY.md +0 -0
  188. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/benchmarks/.gitkeep +0 -0
  189. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/assets/icon.svg +0 -0
  190. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/provenance-dag.md +0 -0
  191. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/spec/sealed-channel.md +0 -0
  192. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/stylesheets/extra.css +0 -0
  193. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/tutorials/authoring-a-delegation-credential.md +0 -0
  194. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/tutorials/emit-and-verify-provenance.md +0 -0
  195. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/docs/tutorials/verify-a-delegation-chain.md +0 -0
  196. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/examples/cross-operator-delegation/policy.cedar +0 -0
  197. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/examples/minimal/README.md +0 -0
  198. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/examples/minimal/chain.json +0 -0
  199. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/README.md +0 -0
  200. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim1-attenuation-soundness/README.md +0 -0
  201. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim1-attenuation-soundness/run.py +0 -0
  202. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim2-cross-chain-replay/README.md +0 -0
  203. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim2-cross-chain-replay/run.py +0 -0
  204. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim3-scope-policy-intersection/README.md +0 -0
  205. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim3-scope-policy-intersection/run.py +0 -0
  206. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim4-sealed-payload-confidentiality/README.md +0 -0
  207. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim4-sealed-payload-confidentiality/run.py +0 -0
  208. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim5-provenance-dag-integrity/README.md +0 -0
  209. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim5-provenance-dag-integrity/run.py +0 -0
  210. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim6-cross-operator-attestation/README.md +0 -0
  211. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/experiments/claim6-cross-operator-attestation/run.py +0 -0
  212. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/governance/ca2a-enforcement.yaml +0 -0
  213. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/scripts/gen_agt_evidence.py +0 -0
  214. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/scripts/gen_example_chain.py +0 -0
  215. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/benchmarks.py +0 -0
  216. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/canonical.py +0 -0
  217. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/cedar.py +0 -0
  218. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/channel/__init__.py +0 -0
  219. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/channel/sealed.py +0 -0
  220. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/src/ca2a_runtime/policy.py +0 -0
  221. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/__init__.py +0 -0
  222. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/conformance/__init__.py +0 -0
  223. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/conformance/conftest.py +0 -0
  224. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/fixtures/sev_snp/amd_milan_cert_chain.pem +0 -0
  225. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/fixtures/tdx/intel_sgx_root_ca.pem +0 -0
  226. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/__init__.py +0 -0
  227. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_canonical.py +0 -0
  228. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_channel_and_tee.py +0 -0
  229. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_claim2_replay.py +0 -0
  230. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_claim4_sealed.py +0 -0
  231. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_claim5_provenance.py +0 -0
  232. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_sealed_channel.py +0 -0
  233. {ca2a_runtime-0.1.0a1 → ca2a_runtime-0.2.0}/tests/unit/test_verify.py +0 -0
@@ -0,0 +1,19 @@
1
+ .git
2
+ .github
3
+ .venv
4
+ .mypy_cache
5
+ .pytest_cache
6
+ .ruff_cache
7
+ __pycache__
8
+ *.py[cod]
9
+ *.egg-info
10
+ benchmarks
11
+ docs
12
+ examples
13
+ experiments
14
+ governance
15
+ overrides
16
+ scripts
17
+ tests
18
+ dist
19
+ site
@@ -23,7 +23,7 @@ jobs:
23
23
  steps:
24
24
  - uses: actions/checkout@v7
25
25
 
26
- - uses: actions/setup-python@v6
26
+ - uses: actions/setup-python@v7
27
27
  with:
28
28
  python-version: ${{ matrix.python-version }}
29
29
 
@@ -36,6 +36,11 @@ jobs:
36
36
  - name: Lint
37
37
  run: ruff check src/ tests/
38
38
 
39
+ # Checked, not applied. Without this gate 34 of 77 files drifted out of
40
+ # format unnoticed, because `ruff check` does not cover formatting.
41
+ - name: Format
42
+ run: ruff format --check src/ tests/
43
+
39
44
  - name: Type check
40
45
  run: mypy src/ca2a_runtime/ src/ca2a_verify/
41
46
 
@@ -54,12 +59,22 @@ jobs:
54
59
  steps:
55
60
  - uses: actions/checkout@v7
56
61
 
57
- - uses: actions/setup-python@v6
62
+ - uses: actions/setup-python@v7
58
63
  with:
59
64
  python-version: "3.12"
60
65
 
61
- - name: Install dependencies
62
- run: python -m pip install --upgrade pip setuptools && pip install -e ".[dev]" "agent-governance-toolkit[full]>=4.1"
66
+ - name: Install dependencies
67
+ run: python -m pip install --upgrade pip setuptools && pip install -e ".[dev]"
68
+
69
+ # AGT 4.1 currently constrains cryptography below 49, while the runtime
70
+ # requires 50+ for published security fixes. Keep the scanner isolated
71
+ # so its tooling constraints cannot downgrade the package under test,
72
+ # then override that stale upper bound inside the ephemeral scanner too.
73
+ - name: Install governance tooling in an isolated environment
74
+ run: |
75
+ python -m venv .agt-venv
76
+ .agt-venv/bin/pip install "agent-governance-toolkit[full]>=4.1"
77
+ .agt-venv/bin/pip install --upgrade --no-deps "cryptography>=50.0"
63
78
 
64
79
  - name: Generate evidence file
65
80
  run: python scripts/gen_agt_evidence.py
@@ -67,11 +82,11 @@ jobs:
67
82
  # Blocking gate: the [full] toolkit provides the ASI coverage modules
68
83
  # (10/10) and the evidence declares cA2A's governed capabilities, so strict
69
84
  # verify is COMPLETE. A regression that drops coverage or governance fails CI.
70
- - name: AGT governance verify (strict)
71
- run: agt verify --evidence agt-evidence.json
85
+ - name: AGT governance verify (strict)
86
+ run: .agt-venv/bin/agt verify --evidence agt-evidence.json
72
87
 
73
- - name: Save attestation JSON
74
- run: agt --json verify --evidence agt-evidence.json > agt-attestation.json
88
+ - name: Save attestation JSON
89
+ run: .agt-venv/bin/agt --json verify --evidence agt-evidence.json > agt-attestation.json
75
90
 
76
91
  - name: Upload governance artifacts
77
92
  uses: actions/upload-artifact@v7
@@ -90,7 +105,7 @@ jobs:
90
105
  steps:
91
106
  - uses: actions/checkout@v7
92
107
 
93
- - uses: actions/setup-python@v6
108
+ - uses: actions/setup-python@v7
94
109
  with:
95
110
  python-version: "3.12"
96
111
 
@@ -28,16 +28,16 @@ jobs:
28
28
  uses: actions/checkout@v7
29
29
 
30
30
  - name: Initialize CodeQL
31
- uses: github/codeql-action/init@v4
31
+ uses: github/codeql-action/init@v4.37.6
32
32
  with:
33
33
  languages: python
34
34
  queries: +security-extended
35
35
 
36
36
  - name: Autobuild
37
- uses: github/codeql-action/autobuild@v4
37
+ uses: github/codeql-action/autobuild@v4.37.6
38
38
 
39
39
  - name: Perform CodeQL Analysis
40
- uses: github/codeql-action/analyze@v4
40
+ uses: github/codeql-action/analyze@v4.37.6
41
41
  continue-on-error: true
42
42
  with:
43
43
  category: /language:python
@@ -30,7 +30,10 @@ jobs:
30
30
  uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
31
31
  with:
32
32
  repository: agentrust-io/.github
33
- ref: main
33
+ # Pinned deliberately: this workflow runs on pull_request_target
34
+ # with a write-capable token, so the code it checks out must not
35
+ # track a mutable ref. Bump this SHA after reviewing the diff.
36
+ ref: 0fe4520ee71a743fcd33f409fe366ee3e1da6f86 # main as of 2026-08-01
34
37
  persist-credentials: false
35
38
  sparse-checkout: |
36
39
  scripts
@@ -4,12 +4,37 @@ on:
4
4
  push:
5
5
  tags:
6
6
  - "v*"
7
+ pull_request:
8
+ paths:
9
+ - "Dockerfile"
10
+ - ".dockerignore"
11
+ - "pyproject.toml"
12
+ - "src/**"
13
+ - ".github/workflows/docker.yml"
7
14
 
8
15
  env:
9
16
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
10
17
 
11
18
  jobs:
19
+ build-pr:
20
+ if: github.event_name == 'pull_request'
21
+ runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: read
24
+
25
+ steps:
26
+ - name: Checkout
27
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
28
+
29
+ - name: Build image without publishing
30
+ uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7
31
+ with:
32
+ context: .
33
+ push: false
34
+ tags: ghcr.io/agentrust-io/ca2a-runtime:${{ github.sha }}
35
+
12
36
  build-and-push:
37
+ if: startsWith(github.ref, 'refs/tags/')
13
38
  runs-on: ubuntu-latest
14
39
  permissions:
15
40
  contents: read
@@ -19,10 +44,10 @@ jobs:
19
44
 
20
45
  steps:
21
46
  - name: Checkout
22
- uses: actions/checkout@v7
47
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
23
48
 
24
49
  - name: Log in to GitHub Container Registry
25
- uses: docker/login-action@v4
50
+ uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4
26
51
  with:
27
52
  registry: ghcr.io
28
53
  username: ${{ github.actor }}
@@ -34,7 +59,7 @@ jobs:
34
59
 
35
60
  - name: Build and push
36
61
  id: build
37
- uses: docker/build-push-action@v7
62
+ uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7
38
63
  with:
39
64
  context: .
40
65
  push: true
@@ -43,7 +68,7 @@ jobs:
43
68
  ghcr.io/agentrust-io/ca2a-runtime:latest
44
69
 
45
70
  - name: Install cosign
46
- uses: sigstore/cosign-installer@v3
71
+ uses: sigstore/cosign-installer@f713795cb21599bc4e5c4b58cbad1da852d7eeb9 # v3
47
72
 
48
73
  - name: Sign the image (keyless, by digest)
49
74
  env:
@@ -51,7 +76,7 @@ jobs:
51
76
  run: cosign sign --yes ghcr.io/agentrust-io/ca2a-runtime@${DIGEST}
52
77
 
53
78
  - name: Attest build provenance (SLSA)
54
- uses: actions/attest-build-provenance@v4
79
+ uses: actions/attest-build-provenance@8beda2b7ed98355c0e97c0a63bec38ae472e66c4 # v4
55
80
  with:
56
81
  subject-name: ghcr.io/agentrust-io/ca2a-runtime
57
82
  subject-digest: ${{ steps.build.outputs.digest }}
@@ -33,7 +33,7 @@ jobs:
33
33
  with:
34
34
  fetch-depth: 0
35
35
 
36
- - uses: actions/setup-python@v6
36
+ - uses: actions/setup-python@v7
37
37
  with:
38
38
  python-version: "3.11"
39
39
  cache: pip
@@ -0,0 +1,106 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
15
+
16
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
17
+ with:
18
+ python-version: "3.12"
19
+
20
+ - name: Install release tooling
21
+ run: python -m pip install build twine
22
+
23
+ - name: Verify release tag matches package version
24
+ run: |
25
+ package_version="$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
26
+ test "${GITHUB_REF_NAME}" = "v${package_version}"
27
+
28
+ - name: Build distributions
29
+ run: python -m build
30
+
31
+ - name: Check distribution metadata
32
+ run: python -m twine check dist/*
33
+
34
+ - name: Install and smoke-test wheel
35
+ run: |
36
+ python -m venv /tmp/ca2a-wheel
37
+ /tmp/ca2a-wheel/bin/python -m pip install dist/*.whl
38
+ /tmp/ca2a-wheel/bin/python -c 'import importlib.metadata, ca2a_runtime; expected="${{ github.ref_name }}"[1:]; assert importlib.metadata.version("ca2a-runtime") == expected; assert ca2a_runtime.__version__ == expected'
39
+ /tmp/ca2a-wheel/bin/ca2a --help
40
+
41
+ - name: Install and smoke-test source distribution
42
+ run: |
43
+ python -m venv /tmp/ca2a-sdist
44
+ /tmp/ca2a-sdist/bin/python -m pip install dist/*.tar.gz
45
+ /tmp/ca2a-sdist/bin/python -c 'import importlib.metadata, ca2a_runtime; expected="${{ github.ref_name }}"[1:]; assert importlib.metadata.version("ca2a-runtime") == expected; assert ca2a_runtime.__version__ == expected'
46
+ /tmp/ca2a-sdist/bin/ca2a --help
47
+
48
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
49
+ with:
50
+ name: dist
51
+ path: dist/
52
+
53
+ publish:
54
+ needs: build
55
+ runs-on: ubuntu-latest
56
+ environment: pypi
57
+ permissions:
58
+ id-token: write # OIDC trusted publishing, no API tokens
59
+ steps:
60
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
61
+ with:
62
+ name: dist
63
+ path: dist/
64
+
65
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
66
+
67
+ governance-release:
68
+ needs: publish
69
+ runs-on: ubuntu-latest
70
+ permissions:
71
+ contents: write # upload release assets
72
+
73
+ steps:
74
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
75
+
76
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
77
+ with:
78
+ python-version: "3.12"
79
+
80
+ - name: Install package
81
+ run: python -m pip install --upgrade pip && pip install -e "."
82
+
83
+ # Isolate AGT's tooling dependencies from the release artifact. AGT 4.1
84
+ # constrains cryptography below 49; cA2A requires 50+ security fixes. The
85
+ # ephemeral scanner is upgraded too so the release gate runs no known-
86
+ # vulnerable cryptography build while that upstream bound is stale.
87
+ - name: Install governance tooling in an isolated environment
88
+ run: |
89
+ python -m venv .agt-venv
90
+ .agt-venv/bin/pip install "agent-governance-toolkit[full]>=4.1"
91
+ .agt-venv/bin/pip install --upgrade --no-deps "cryptography>=50.0"
92
+
93
+ - name: Generate evidence file
94
+ run: python scripts/gen_agt_evidence.py
95
+
96
+ - name: AGT governance verify (strict)
97
+ run: .agt-venv/bin/agt verify --evidence agt-evidence.json
98
+
99
+ - name: Save attestation JSON
100
+ run: .agt-venv/bin/agt --json verify --evidence agt-evidence.json > agt-attestation.json
101
+
102
+ - name: Attach evidence to release
103
+ if: github.event_name == 'release'
104
+ run: gh release upload ${{ github.ref_name }} agt-evidence.json agt-attestation.json
105
+ env:
106
+ GITHUB_TOKEN: ${{ github.token }}
@@ -25,7 +25,7 @@ jobs:
25
25
  uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
26
26
  with:
27
27
  script: |
28
- const MAINTAINERS = ['imran-siddique'];
28
+ const MAINTAINERS = ['imran-siddique', 'pforest', 'podcastinator', 'carloshvp', 'Qiang-Xu', 'zohebk8s'];
29
29
 
30
30
  const author = context.payload.pull_request.user.login;
31
31
  if (MAINTAINERS.includes(author)) {
@@ -33,12 +33,6 @@ jobs:
33
33
  return;
34
34
  }
35
35
 
36
- const association = context.payload.pull_request.author_association;
37
- if (association === 'MEMBER' || association === 'OWNER') {
38
- core.info(`Author is ${association}, skipping gate`);
39
- return;
40
- }
41
-
42
36
  // Both pull_request_target and pull_request_review payloads
43
37
  // carry the PR at context.payload.pull_request.
44
38
  const prNumber = context.payload.pull_request.number;
@@ -29,7 +29,7 @@ jobs:
29
29
  fetch-depth: 0
30
30
 
31
31
  - name: Run Scorecard
32
- uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
32
+ uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4
33
33
  with:
34
34
  results_file: scorecard-results.sarif
35
35
  results_format: sarif
@@ -38,6 +38,6 @@ jobs:
38
38
  publish_results: true
39
39
 
40
40
  - name: Upload SARIF
41
- uses: github/codeql-action/upload-sarif@v4
41
+ uses: github/codeql-action/upload-sarif@v4.37.6
42
42
  with:
43
43
  sarif_file: scorecard-results.sarif
@@ -31,3 +31,6 @@ agt-evidence.json
31
31
  agt-attestation.json
32
32
  sbom.spdx.json
33
33
  scorecard-results.sarif
34
+
35
+ # Generated example output (ephemeral keys + timestamps)
36
+ examples/trace-dag/dag.json
@@ -0,0 +1,7 @@
1
+ # Adopters
2
+
3
+ Organizations using cA2A in production or evaluation are listed here.
4
+
5
+ To add yours, open a PR adding a line with your organization, the use case, and the month you started. Anything you are not able to say publicly, leave out; a one-line entry is worth more than a case study you have to get approved.
6
+
7
+ cA2A is available as a Developer Preview, so evaluations are especially useful even when they do not become entries here: open a [Discussion](https://github.com/orgs/agentrust-io/discussions) or contact the maintainers listed in [MAINTAINERS.md](MAINTAINERS.md).