ca2a-runtime 0.2.0__tar.gz → 0.3.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 (289) hide show
  1. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/CODEOWNERS +7 -7
  2. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/dependabot.yml +4 -0
  3. ca2a_runtime-0.3.0/.github/workflows/actionlint.yml +41 -0
  4. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/ci.yml +46 -16
  5. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/codeql.yml +4 -4
  6. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/contributor-check.yml +1 -1
  7. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/docker.yml +10 -7
  8. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/docs.yml +14 -5
  9. ca2a_runtime-0.3.0/.github/workflows/limitations-parity.yml +75 -0
  10. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/release-drafter.yml +7 -3
  11. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/release.yml +22 -9
  12. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/require-maintainer-approval.yml +1 -1
  13. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/sbom.yml +7 -5
  14. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/scorecard.yml +2 -2
  15. ca2a_runtime-0.3.0/.github/workflows/vouch-check.yml +111 -0
  16. ca2a_runtime-0.3.0/.github/workflows/vouch-command.yml +89 -0
  17. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/ADOPTERS.md +3 -0
  18. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CHANGELOG.md +144 -2
  19. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CHARTER.md +1 -1
  20. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CONTRIBUTING.md +17 -1
  21. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/GOVERNANCE.md +22 -4
  22. ca2a_runtime-0.3.0/LIMITATIONS.md +104 -0
  23. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/MAINTAINERS.md +15 -1
  24. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/NOTICE +1 -1
  25. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/PKG-INFO +28 -13
  26. ca2a_runtime-0.3.0/PRIVACY.md +9 -0
  27. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/README.md +182 -168
  28. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/ROADMAP.md +1 -1
  29. ca2a_runtime-0.3.0/SPONSORS.md +20 -0
  30. ca2a_runtime-0.3.0/docs/assets/icon.svg +26 -0
  31. ca2a_runtime-0.3.0/docs/concepts.md +63 -0
  32. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/configuration.md +14 -1
  33. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/hardware-validation.md +74 -12
  34. ca2a_runtime-0.3.0/docs/mutual-hardware-acceptance.md +150 -0
  35. ca2a_runtime-0.3.0/docs/quickstart.md +125 -0
  36. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/attestation.md +4 -4
  37. ca2a_runtime-0.3.0/docs/spec/call-graph.md +50 -0
  38. ca2a_runtime-0.3.0/docs/spec/cedar-policy.md +44 -0
  39. ca2a_runtime-0.3.0/docs/spec/component-model.md +39 -0
  40. ca2a_runtime-0.3.0/docs/spec/delegation-chain.md +187 -0
  41. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/error-codes.md +18 -5
  42. ca2a_runtime-0.3.0/docs/spec/failure-modes.md +37 -0
  43. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/mutual-attestation.md +11 -0
  44. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/profile.md +9 -0
  45. ca2a_runtime-0.3.0/docs/spec/provenance-dag.md +45 -0
  46. ca2a_runtime-0.3.0/docs/spec/response-authentication.md +132 -0
  47. ca2a_runtime-0.3.0/docs/spec/response-binding-requirements.md +113 -0
  48. ca2a_runtime-0.3.0/docs/spec/sealed-channel.md +43 -0
  49. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/threat-model.md +4 -1
  50. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/transport.md +48 -3
  51. ca2a_runtime-0.3.0/docs/spec/verification-library.md +55 -0
  52. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/tutorials/authoring-a-delegation-credential.md +32 -12
  53. ca2a_runtime-0.3.0/docs/tutorials/emit-and-verify-provenance.md +104 -0
  54. ca2a_runtime-0.3.0/docs/tutorials/integrating-with-a2a.md +137 -0
  55. ca2a_runtime-0.3.0/docs/tutorials/reproducing-the-claims.md +56 -0
  56. ca2a_runtime-0.3.0/docs/tutorials/verify-a-delegation-chain.md +62 -0
  57. ca2a_runtime-0.3.0/examples/a2a-sdk/loopback.py +333 -0
  58. ca2a_runtime-0.3.0/examples/a2a-sdk/requirements.txt +3 -0
  59. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/README.md +10 -8
  60. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/demo.py +129 -48
  61. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/minimal/README.md +1 -1
  62. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/minimal/ca2a-config.yaml +4 -0
  63. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/rejection-with-proof/README.md +7 -5
  64. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/rejection-with-proof/demo.py +34 -13
  65. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/trace-dag/README.md +3 -2
  66. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/trace-dag/demo.py +16 -7
  67. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim1-attenuation-soundness/run.py +7 -6
  68. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim2-cross-chain-replay/run.py +9 -8
  69. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim3-scope-policy-intersection/run.py +9 -9
  70. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim4-sealed-payload-confidentiality/run.py +2 -2
  71. ca2a_runtime-0.3.0/experiments/hardware-validation/mutual-snp-2026-09-17/README.md +58 -0
  72. ca2a_runtime-0.3.0/experiments/hardware-validation/mutual-snp-2026-09-17/a-to-b.json +168 -0
  73. ca2a_runtime-0.3.0/experiments/hardware-validation/mutual-snp-2026-09-17/b-to-a.json +168 -0
  74. ca2a_runtime-0.3.0/experiments/hardware-validation/mutual-snp-2026-09-17/controls.py +85 -0
  75. ca2a_runtime-0.3.0/hooks/seo.py +102 -0
  76. ca2a_runtime-0.3.0/index.md +74 -0
  77. ca2a_runtime-0.3.0/mkdocs.yml +212 -0
  78. ca2a_runtime-0.3.0/overrides/main.html +130 -0
  79. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/pyproject.toml +8 -7
  80. ca2a_runtime-0.3.0/requirements/agt-overrides.txt +16 -0
  81. ca2a_runtime-0.3.0/requirements/agt.in +11 -0
  82. ca2a_runtime-0.3.0/requirements/agt.txt +1314 -0
  83. ca2a_runtime-0.3.0/requirements/dev.in +27 -0
  84. ca2a_runtime-0.3.0/requirements/dev.txt +2380 -0
  85. ca2a_runtime-0.3.0/requirements/docs.txt +597 -0
  86. ca2a_runtime-0.3.0/requirements/release.in +5 -0
  87. ca2a_runtime-0.3.0/requirements/release.txt +488 -0
  88. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/requirements-docs.txt +2 -2
  89. ca2a_runtime-0.3.0/robots.txt +38 -0
  90. ca2a_runtime-0.3.0/scripts/gen_action_fixtures.py +233 -0
  91. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/agent_manifest.py +7 -1
  92. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/attestation.py +12 -1
  93. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/benchmarks.py +1 -1
  94. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/bootstrap.py +60 -1
  95. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/canonical.py +17 -1
  96. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/cli.py +178 -9
  97. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/config.py +55 -0
  98. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/delegation/__init__.py +12 -0
  99. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/delegation/credential.py +101 -8
  100. ca2a_runtime-0.3.0/src/ca2a_runtime/delegation/revocation.py +292 -0
  101. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/errors.py +62 -0
  102. ca2a_runtime-0.3.0/src/ca2a_runtime/hardware_acceptance.py +264 -0
  103. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/node.py +29 -2
  104. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/peer.py +40 -11
  105. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/provenance.py +8 -2
  106. ca2a_runtime-0.3.0/src/ca2a_runtime/response.py +269 -0
  107. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/sev_snp.py +19 -0
  108. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/trace_binding.py +8 -1
  109. ca2a_runtime-0.3.0/src/ca2a_runtime/transport/_b64url.py +44 -0
  110. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/a2a_adapter.py +3 -35
  111. ca2a_runtime-0.3.0/src/ca2a_runtime/transport/a2a_sdk.py +294 -0
  112. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/client.py +90 -9
  113. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/server.py +11 -3
  114. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/wire.py +29 -6
  115. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/__init__.py +2 -0
  116. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/dag.py +43 -14
  117. ca2a_runtime-0.3.0/src/ca2a_verify/sev_snp.py +186 -0
  118. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/tpm.py +53 -8
  119. ca2a_runtime-0.3.0/src/ca2a_verify/verify.py +130 -0
  120. ca2a_runtime-0.3.0/tests/committed_blobs.py +56 -0
  121. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/conformance/README.md +68 -13
  122. ca2a_runtime-0.3.0/tests/conformance/test_action_fixture_bundles.py +131 -0
  123. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/conformance/test_profile_conformance.py +168 -31
  124. ca2a_runtime-0.3.0/tests/conftest.py +78 -0
  125. ca2a_runtime-0.3.0/tests/fixtures/action/README.md +68 -0
  126. ca2a_runtime-0.3.0/tests/fixtures/action/action-001-verified/chain.json +29 -0
  127. ca2a_runtime-0.3.0/tests/fixtures/action/action-001-verified/dag.json +27 -0
  128. ca2a_runtime-0.3.0/tests/fixtures/action/action-001-verified/expected.json +10 -0
  129. ca2a_runtime-0.3.0/tests/fixtures/action/action-002-parent-hash-mismatch/chain.json +29 -0
  130. ca2a_runtime-0.3.0/tests/fixtures/action/action-002-parent-hash-mismatch/dag.json +27 -0
  131. ca2a_runtime-0.3.0/tests/fixtures/action/action-002-parent-hash-mismatch/expected.json +10 -0
  132. ca2a_runtime-0.3.0/tests/fixtures/action/action-006-policy-denial/chain.json +42 -0
  133. ca2a_runtime-0.3.0/tests/fixtures/action/action-006-policy-denial/dag.json +55 -0
  134. ca2a_runtime-0.3.0/tests/fixtures/action/action-006-policy-denial/expected.json +10 -0
  135. ca2a_runtime-0.3.0/tests/fixtures/action/action-010-scope-escalation/chain.json +27 -0
  136. ca2a_runtime-0.3.0/tests/fixtures/action/action-010-scope-escalation/dag.json +25 -0
  137. ca2a_runtime-0.3.0/tests/fixtures/action/action-010-scope-escalation/expected.json +10 -0
  138. ca2a_runtime-0.3.0/tests/fixtures/action/action-012-credential-expired/chain.json +33 -0
  139. ca2a_runtime-0.3.0/tests/fixtures/action/action-012-credential-expired/dag.json +27 -0
  140. ca2a_runtime-0.3.0/tests/fixtures/action/action-012-credential-expired/expected.json +10 -0
  141. ca2a_runtime-0.3.0/tests/fixtures/response-mac-v1.json +82 -0
  142. ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/README.md +19 -0
  143. ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/ak-chain.pem +24 -0
  144. ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/attest.hex +1 -0
  145. ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/signature.hex +1 -0
  146. ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/trusted-root.pem +10 -0
  147. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_a2a_sdk_bridge.py +259 -6
  148. ca2a_runtime-0.3.0/tests/unit/test_a2a_sdk_loopback.py +243 -0
  149. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_agent_manifest_cose.py +31 -2
  150. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_bootstrap.py +115 -3
  151. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_canonical.py +19 -0
  152. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim1_attenuation.py +5 -5
  153. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim2_replay.py +4 -3
  154. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_cli_start.py +46 -0
  155. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_committed_examples_verify.py +18 -20
  156. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_config.py +59 -0
  157. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_delegation.py +35 -11
  158. ca2a_runtime-0.3.0/tests/unit/test_dependency_security_floors.py +77 -0
  159. ca2a_runtime-0.3.0/tests/unit/test_docs_quickstart.py +39 -0
  160. ca2a_runtime-0.3.0/tests/unit/test_documented_experiments.py +59 -0
  161. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_example_rejection_with_proof.py +3 -2
  162. ca2a_runtime-0.3.0/tests/unit/test_hardware_acceptance.py +199 -0
  163. ca2a_runtime-0.3.0/tests/unit/test_lineage_cli.py +149 -0
  164. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_live_call.py +140 -1
  165. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_mutual_attestation.py +41 -0
  166. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_peer_request.py +48 -1
  167. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_release_artifacts.py +1 -1
  168. ca2a_runtime-0.3.0/tests/unit/test_response_authentication.py +452 -0
  169. ca2a_runtime-0.3.0/tests/unit/test_revocation.py +475 -0
  170. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_sev_snp.py +215 -3
  171. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_tpm_attest.py +157 -8
  172. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_trace_binding.py +168 -9
  173. ca2a_runtime-0.3.0/tests/unit/test_verify.py +126 -0
  174. ca2a_runtime-0.2.0/LIMITATIONS.md +0 -30
  175. ca2a_runtime-0.2.0/PRIVACY.md +0 -9
  176. ca2a_runtime-0.2.0/docs/assets/icon.svg +0 -29
  177. ca2a_runtime-0.2.0/docs/concepts.md +0 -42
  178. ca2a_runtime-0.2.0/docs/quickstart.md +0 -78
  179. ca2a_runtime-0.2.0/docs/spec/call-graph.md +0 -109
  180. ca2a_runtime-0.2.0/docs/spec/cedar-policy.md +0 -98
  181. ca2a_runtime-0.2.0/docs/spec/component-model.md +0 -63
  182. ca2a_runtime-0.2.0/docs/spec/delegation-chain.md +0 -84
  183. ca2a_runtime-0.2.0/docs/spec/failure-modes.md +0 -151
  184. ca2a_runtime-0.2.0/docs/spec/provenance-dag.md +0 -112
  185. ca2a_runtime-0.2.0/docs/spec/sealed-channel.md +0 -31
  186. ca2a_runtime-0.2.0/docs/spec/verification-library.md +0 -29
  187. ca2a_runtime-0.2.0/docs/stylesheets/extra.css +0 -24
  188. ca2a_runtime-0.2.0/docs/tutorials/emit-and-verify-provenance.md +0 -203
  189. ca2a_runtime-0.2.0/docs/tutorials/integrating-with-a2a.md +0 -171
  190. ca2a_runtime-0.2.0/docs/tutorials/reproducing-the-claims.md +0 -188
  191. ca2a_runtime-0.2.0/docs/tutorials/verify-a-delegation-chain.md +0 -61
  192. ca2a_runtime-0.2.0/mkdocs.yml +0 -179
  193. ca2a_runtime-0.2.0/overrides/main.html +0 -88
  194. ca2a_runtime-0.2.0/src/ca2a_runtime/transport/a2a_sdk.py +0 -141
  195. ca2a_runtime-0.2.0/src/ca2a_verify/sev_snp.py +0 -91
  196. ca2a_runtime-0.2.0/src/ca2a_verify/verify.py +0 -71
  197. ca2a_runtime-0.2.0/tests/unit/test_dependency_security_floors.py +0 -40
  198. ca2a_runtime-0.2.0/tests/unit/test_verify.py +0 -64
  199. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.dockerignore +0 -0
  200. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  201. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  202. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  203. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  204. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.gitignore +0 -0
  205. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CNAME +0 -0
  206. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CODE_OF_CONDUCT.md +0 -0
  207. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/Dockerfile +0 -0
  208. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/LICENSE +0 -0
  209. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/SECURITY.md +0 -0
  210. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/benchmarks/.gitkeep +0 -0
  211. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/SPEC.md +0 -0
  212. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/assets/og.png +0 -0
  213. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/conformance.md +0 -0
  214. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/trace-a2a-profile.md +0 -0
  215. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/ca2a-config.yaml +0 -0
  216. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/chain.json +0 -0
  217. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/dag.json +0 -0
  218. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/policy.cedar +0 -0
  219. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/minimal/chain.json +0 -0
  220. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/rejection-with-proof/chain.json +0 -0
  221. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/rejection-with-proof/dag.json +0 -0
  222. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/README.md +0 -0
  223. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim1-attenuation-soundness/README.md +0 -0
  224. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim2-cross-chain-replay/README.md +0 -0
  225. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim3-scope-policy-intersection/README.md +0 -0
  226. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim4-sealed-payload-confidentiality/README.md +0 -0
  227. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim5-provenance-dag-integrity/README.md +0 -0
  228. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim5-provenance-dag-integrity/run.py +0 -0
  229. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim6-cross-operator-attestation/README.md +0 -0
  230. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim6-cross-operator-attestation/run.py +0 -0
  231. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/README.md +0 -0
  232. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-attested-peer-azure-2026-07-27/bridge.py +0 -0
  233. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-attested-peer-azure-2026-07-27/transcript.json +0 -0
  234. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/snp_client.py +0 -0
  235. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/tdx_peer.py +0 -0
  236. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/transcript.json +0 -0
  237. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/governance/ca2a-enforcement.yaml +0 -0
  238. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/scripts/gen_agt_evidence.py +0 -0
  239. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/scripts/gen_example_chain.py +0 -0
  240. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/__init__.py +0 -0
  241. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/cedar.py +0 -0
  242. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/challenge.py +0 -0
  243. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/channel/__init__.py +0 -0
  244. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/channel/sealed.py +0 -0
  245. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/delegation/holder.py +0 -0
  246. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/policy.py +0 -0
  247. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/__init__.py +0 -0
  248. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/base.py +0 -0
  249. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/binding.py +0 -0
  250. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/software.py +0 -0
  251. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/tdx.py +0 -0
  252. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/tpm.py +0 -0
  253. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/tsm.py +0 -0
  254. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/__init__.py +0 -0
  255. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/constants.py +0 -0
  256. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/tdx.py +0 -0
  257. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/tpm_roots.py +0 -0
  258. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/__init__.py +0 -0
  259. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/conformance/__init__.py +0 -0
  260. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/conformance/conftest.py +0 -0
  261. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/a2a/send_message_ca2a.json +0 -0
  262. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/README.md +0 -0
  263. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/ak.pub +0 -0
  264. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/akcert_0x01C101D0.der +0 -0
  265. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/nonce.hex +0 -0
  266. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/pcrs.bin +0 -0
  267. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/quote.msg +0 -0
  268. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/quote.sig +0 -0
  269. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/sev_snp/amd_milan_cert_chain.pem +0 -0
  270. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/tdx/intel_sgx_root_ca.pem +0 -0
  271. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/test_challenge.py +0 -0
  272. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/__init__.py +0 -0
  273. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/conftest.py +0 -0
  274. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_a2a_adapter.py +0 -0
  275. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_cedar.py +0 -0
  276. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_channel_and_tee.py +0 -0
  277. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim3_scope_policy.py +0 -0
  278. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim4_sealed.py +0 -0
  279. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim5_provenance.py +0 -0
  280. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim6_cross_operator.py +0 -0
  281. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_container_release.py +0 -0
  282. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_errors.py +0 -0
  283. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_holder_binding.py +0 -0
  284. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_peer.py +0 -0
  285. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_provenance.py +0 -0
  286. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_sealed_channel.py +0 -0
  287. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_snp_tdx_attest.py +0 -0
  288. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_tdx.py +0 -0
  289. {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_tpm.py +0 -0
@@ -1,14 +1,14 @@
1
1
  # Default owners for all files
2
- * @agentrust-io/maintainers
2
+ * @agentrust-io/maintainers @carloshvp @zohebk8s
3
3
 
4
4
  # Security-sensitive paths require security-reviewers sign-off
5
- src/ca2a_runtime/delegation/ @agentrust-io/security-reviewers @agentrust-io/maintainers
6
- src/ca2a_runtime/channel/ @agentrust-io/security-reviewers @agentrust-io/maintainers
7
- src/ca2a_runtime/tee/ @agentrust-io/security-reviewers @agentrust-io/maintainers
8
- src/ca2a_verify/ @agentrust-io/security-reviewers @agentrust-io/maintainers
5
+ src/ca2a_runtime/delegation/ @agentrust-io/security-reviewers @agentrust-io/maintainers @carloshvp @zohebk8s
6
+ src/ca2a_runtime/channel/ @agentrust-io/security-reviewers @agentrust-io/maintainers @carloshvp @zohebk8s
7
+ src/ca2a_runtime/tee/ @agentrust-io/security-reviewers @agentrust-io/maintainers @carloshvp @zohebk8s
8
+ src/ca2a_verify/ @agentrust-io/security-reviewers @agentrust-io/maintainers @carloshvp @zohebk8s
9
9
 
10
10
  # CI/CD workflow changes
11
- .github/workflows/ @agentrust-io/maintainers
11
+ .github/workflows/ @agentrust-io/maintainers @carloshvp @zohebk8s
12
12
 
13
13
  # Package configuration
14
- pyproject.toml @agentrust-io/maintainers
14
+ pyproject.toml @agentrust-io/maintainers @carloshvp @zohebk8s
@@ -17,3 +17,7 @@ updates:
17
17
  interval: "weekly"
18
18
  day: "monday"
19
19
  open-pull-requests-limit: 5
20
+ groups:
21
+ codeql-action:
22
+ patterns:
23
+ - "github/codeql-action*"
@@ -0,0 +1,41 @@
1
+ name: Workflow lint
2
+
3
+ # actionlint catches what a YAML parser cannot: duplicate mapping keys that
4
+ # make GitHub refuse to load a workflow, invalid ${{ }} expressions, and shell
5
+ # problems inside run: blocks. A duplicate env: key silently broke this repo
6
+ # family's release workflow once; yaml.safe_load keeps the last value without
7
+ # complaining, so local validation passed while Actions rejected the file.
8
+ on:
9
+ push:
10
+ branches: [main]
11
+ paths: ['.github/workflows/**']
12
+ pull_request:
13
+ paths: ['.github/workflows/**']
14
+ workflow_dispatch:
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ actionlint:
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
24
+
25
+ # Fetched and checksum-verified rather than run as a third-party action,
26
+ # so this check adds no new action to the supply chain it exists to guard.
27
+ - name: Install actionlint
28
+ env:
29
+ ACTIONLINT_VERSION: 1.7.12
30
+ ACTIONLINT_SHA256: 8aca8db96f1b94770f1b0d72b6dddcb1ebb8123cb3712530b08cc387b349a3d8
31
+ run: |
32
+ set -euo pipefail
33
+ archive="actionlint_${ACTIONLINT_VERSION}_linux_amd64.tar.gz"
34
+ curl -sSfL -o "$archive" \
35
+ "https://github.com/rhysd/actionlint/releases/download/v${ACTIONLINT_VERSION}/${archive}"
36
+ echo "${ACTIONLINT_SHA256} ${archive}" | sha256sum -c -
37
+ tar -xzf "$archive" actionlint
38
+ install -m 0755 actionlint /usr/local/bin/actionlint
39
+
40
+ - name: Lint workflows
41
+ run: actionlint -color
@@ -12,8 +12,13 @@ on:
12
12
  required: false
13
13
  default: ""
14
14
 
15
+ permissions:
16
+ contents: read
15
17
  jobs:
16
18
  test:
19
+ permissions:
20
+ contents: read
21
+ id-token: write # Authenticate coverage uploads with GitHub OIDC.
17
22
  runs-on: ${{ matrix.os }}
18
23
  strategy:
19
24
  matrix:
@@ -21,17 +26,26 @@ jobs:
21
26
  os: [ubuntu-latest, windows-latest]
22
27
 
23
28
  steps:
24
- - uses: actions/checkout@v7
29
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
25
30
 
26
- - uses: actions/setup-python@v7
31
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
27
32
  with:
28
33
  python-version: ${{ matrix.python-version }}
29
34
 
30
35
  - name: Install dependencies
31
- run: python -m pip install --upgrade pip setuptools && pip install -e ".[dev]"
36
+ # Third-party dependencies come from the hash-pinned lock first; the
37
+ # local package then goes in with --no-deps, because pip cannot
38
+ # hash-pin an editable install in the same invocation.
39
+ run: python -m pip install --require-hashes -r requirements/dev.txt
40
+
41
+ - name: Install local package
42
+ run: python -m pip install --no-deps -e .
32
43
 
33
44
  - name: Security scan
34
- run: pip install bandit pip-audit && bandit -r src/ -c pyproject.toml && pip-audit
45
+ # bandit and pip-audit are already in the dev extra above, so the
46
+ # scan runs against the same pinned versions rather than fetching
47
+ # whatever is current at scan time.
48
+ run: bandit -r src/ -c pyproject.toml && pip-audit
35
49
 
36
50
  - name: Lint
37
51
  run: ruff check src/ tests/
@@ -48,23 +62,31 @@ jobs:
48
62
  run: pytest tests/unit/ tests/conformance/ -v --tb=short --cov=src --cov-report=xml
49
63
 
50
64
  - name: Upload coverage report
51
- uses: codecov/codecov-action@v7
65
+ uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
52
66
  with:
53
- fail_ci_if_error: false
67
+ use_oidc: true
68
+ files: coverage.xml
69
+ fail_ci_if_error: true
54
70
 
55
71
  governance:
56
72
  runs-on: ubuntu-latest
57
73
  needs: test
58
74
 
59
75
  steps:
60
- - uses: actions/checkout@v7
76
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
61
77
 
62
- - uses: actions/setup-python@v7
78
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
63
79
  with:
64
80
  python-version: "3.12"
65
81
 
66
82
  - name: Install dependencies
67
- run: python -m pip install --upgrade pip setuptools && pip install -e ".[dev]"
83
+ # Third-party dependencies come from the hash-pinned lock first; the
84
+ # local package then goes in with --no-deps, because pip cannot
85
+ # hash-pin an editable install in the same invocation.
86
+ run: python -m pip install --require-hashes -r requirements/dev.txt
87
+
88
+ - name: Install local package
89
+ run: python -m pip install --no-deps -e .
68
90
 
69
91
  # AGT 4.1 currently constrains cryptography below 49, while the runtime
70
92
  # requires 50+ for published security fixes. Keep the scanner isolated
@@ -73,8 +95,10 @@ jobs:
73
95
  - name: Install governance tooling in an isolated environment
74
96
  run: |
75
97
  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"
98
+ # --no-deps because the lock already lists every transitive
99
+ # dependency, and pip would otherwise re-resolve and reject the
100
+ # cryptography override the compile deliberately applied.
101
+ .agt-venv/bin/pip install --require-hashes --no-deps -r requirements/agt.txt
78
102
 
79
103
  - name: Generate evidence file
80
104
  run: python scripts/gen_agt_evidence.py
@@ -89,7 +113,7 @@ jobs:
89
113
  run: .agt-venv/bin/agt --json verify --evidence agt-evidence.json > agt-attestation.json
90
114
 
91
115
  - name: Upload governance artifacts
92
- uses: actions/upload-artifact@v7
116
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.0
93
117
  with:
94
118
  name: agt-governance-${{ github.sha }}
95
119
  path: |
@@ -103,20 +127,26 @@ jobs:
103
127
  if: github.ref == 'refs/heads/main'
104
128
 
105
129
  steps:
106
- - uses: actions/checkout@v7
130
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
107
131
 
108
- - uses: actions/setup-python@v7
132
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
109
133
  with:
110
134
  python-version: "3.12"
111
135
 
112
136
  - name: Install dependencies
113
- run: python -m pip install --upgrade pip setuptools && pip install -e ".[dev]"
137
+ # Third-party dependencies come from the hash-pinned lock first; the
138
+ # local package then goes in with --no-deps, because pip cannot
139
+ # hash-pin an editable install in the same invocation.
140
+ run: python -m pip install --require-hashes -r requirements/dev.txt
141
+
142
+ - name: Install local package
143
+ run: python -m pip install --no-deps -e .
114
144
 
115
145
  - name: Run benchmark (software-only, CI gate p99 < 5ms)
116
146
  run: python -m ca2a_runtime.benchmarks --provider software-only --hops 10000 --out benchmarks/
117
147
 
118
148
  - name: Upload benchmark results
119
- uses: actions/upload-artifact@v7
149
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.0
120
150
  with:
121
151
  name: benchmark-results
122
152
  path: benchmarks/
@@ -25,19 +25,19 @@ jobs:
25
25
 
26
26
  steps:
27
27
  - name: Checkout repository
28
- uses: actions/checkout@v7
28
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
29
29
 
30
30
  - name: Initialize CodeQL
31
- uses: github/codeql-action/init@v4.37.6
31
+ uses: github/codeql-action/init@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
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.6
37
+ uses: github/codeql-action/autobuild@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
38
38
 
39
39
  - name: Perform CodeQL Analysis
40
- uses: github/codeql-action/analyze@v4.37.6
40
+ uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
41
41
  continue-on-error: true
42
42
  with:
43
43
  category: /language:python
@@ -27,7 +27,7 @@ jobs:
27
27
  github.actor != 'imran-siddique'
28
28
  steps:
29
29
  - name: Checkout org action
30
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
30
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
31
31
  with:
32
32
  repository: agentrust-io/.github
33
33
  # Pinned deliberately: this workflow runs on pull_request_target
@@ -15,6 +15,9 @@ on:
15
15
  env:
16
16
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
17
17
 
18
+ permissions:
19
+ contents: read
20
+
18
21
  jobs:
19
22
  build-pr:
20
23
  if: github.event_name == 'pull_request'
@@ -24,10 +27,10 @@ jobs:
24
27
 
25
28
  steps:
26
29
  - name: Checkout
27
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
30
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
28
31
 
29
32
  - name: Build image without publishing
30
- uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7
33
+ uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7
31
34
  with:
32
35
  context: .
33
36
  push: false
@@ -44,7 +47,7 @@ jobs:
44
47
 
45
48
  steps:
46
49
  - name: Checkout
47
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
50
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
48
51
 
49
52
  - name: Log in to GitHub Container Registry
50
53
  uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4
@@ -59,7 +62,7 @@ jobs:
59
62
 
60
63
  - name: Build and push
61
64
  id: build
62
- uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7
65
+ uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7
63
66
  with:
64
67
  context: .
65
68
  push: true
@@ -68,15 +71,15 @@ jobs:
68
71
  ghcr.io/agentrust-io/ca2a-runtime:latest
69
72
 
70
73
  - name: Install cosign
71
- uses: sigstore/cosign-installer@f713795cb21599bc4e5c4b58cbad1da852d7eeb9 # v3
74
+ uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2
72
75
 
73
76
  - name: Sign the image (keyless, by digest)
74
77
  env:
75
78
  DIGEST: ${{ steps.build.outputs.digest }}
76
- run: cosign sign --yes ghcr.io/agentrust-io/ca2a-runtime@${DIGEST}
79
+ run: cosign sign --yes "ghcr.io/agentrust-io/ca2a-runtime@${DIGEST}"
77
80
 
78
81
  - name: Attest build provenance (SLSA)
79
- uses: actions/attest-build-provenance@8beda2b7ed98355c0e97c0a63bec38ae472e66c4 # v4
82
+ uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4
80
83
  with:
81
84
  subject-name: ghcr.io/agentrust-io/ca2a-runtime
82
85
  subject-digest: ${{ steps.build.outputs.digest }}
@@ -14,6 +14,14 @@ on:
14
14
  - "ROADMAP.md"
15
15
  - "LIMITATIONS.md"
16
16
  - "CNAME"
17
+ - "overrides/**"
18
+ - "index.md"
19
+ - "CHARTER.md"
20
+ - "CODE_OF_CONDUCT.md"
21
+ - "SECURITY.md"
22
+ - "PRIVACY.md"
23
+ - "robots.txt"
24
+ - "hooks/**"
17
25
  workflow_dispatch:
18
26
 
19
27
  permissions:
@@ -29,19 +37,20 @@ jobs:
29
37
  runs-on: ubuntu-latest
30
38
 
31
39
  steps:
32
- - uses: actions/checkout@v7
40
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
33
41
  with:
34
42
  fetch-depth: 0
35
43
 
36
- - uses: actions/setup-python@v7
44
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
37
45
  with:
38
46
  python-version: "3.11"
39
47
  cache: pip
40
48
 
41
49
  - name: Install docs dependencies
42
50
  run: |
43
- pip install -r requirements-docs.txt
44
- pip install -e ".[dev]"
51
+ pip install --require-hashes -r requirements/docs.txt
52
+ pip install --require-hashes -r requirements/dev.txt
53
+ pip install --no-deps -e .
45
54
 
46
55
  - name: Configure git for gh-deploy
47
56
  run: |
@@ -55,7 +64,7 @@ jobs:
55
64
 
56
65
  if [ -d docs ]; then cp -r docs $BUILD/docs; fi
57
66
 
58
- for fname in README.md CHANGELOG.md CONTRIBUTING.md GOVERNANCE.md ROADMAP.md LIMITATIONS.md CNAME; do
67
+ for fname in index.md CHANGELOG.md CONTRIBUTING.md GOVERNANCE.md CHARTER.md CODE_OF_CONDUCT.md SECURITY.md PRIVACY.md ROADMAP.md LIMITATIONS.md SPONSORS.md CNAME robots.txt; do
59
68
  if [ -f "$fname" ]; then cp "$fname" "$BUILD/$fname"; fi
60
69
  done
61
70
 
@@ -0,0 +1,75 @@
1
+ name: Limitations parity
2
+
3
+ # The SEV-SNP platform-state caveat in LIMITATIONS.md is shared verbatim with
4
+ # agentrust-io/trace-spec and agentrust-io/cmcp, because the gap it describes is a
5
+ # property of the shared TEE provider layer rather than of any one project. Three
6
+ # hand-maintained copies of a security caveat drift, and the copy that goes stale
7
+ # is the one that quietly overstates what the project checks.
8
+ #
9
+ # The full text stays in this file on purpose: LIMITATIONS.md exists to state the
10
+ # bounds where a reader will actually meet them, not to send them somewhere else.
11
+ # This job keeps the copies honest instead of thinning them out.
12
+ #
13
+ # Same shape as the schema-parity check in agentrust-io/agentrust-io.github.io.
14
+ # Only the text between the markers is compared. The project-specific paragraph
15
+ # after the end marker is this repository's own.
16
+
17
+ on:
18
+ push:
19
+ branches: [main]
20
+ paths: ['LIMITATIONS.md', '.github/workflows/limitations-parity.yml']
21
+ pull_request:
22
+ paths: ['LIMITATIONS.md', '.github/workflows/limitations-parity.yml']
23
+ schedule:
24
+ # trace-spec can change without anything happening here, so also check daily.
25
+ - cron: '41 6 * * *'
26
+ workflow_dispatch:
27
+
28
+ permissions:
29
+ contents: read
30
+
31
+ jobs:
32
+ parity:
33
+ runs-on: ubuntu-latest
34
+ steps:
35
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
36
+
37
+ - name: Compare the shared block with trace-spec
38
+ run: |
39
+ set -euo pipefail
40
+ src=https://raw.githubusercontent.com/agentrust-io/trace-spec/main/LIMITATIONS.md
41
+ begin='<!-- shared:platform-state-appraisal begin -->'
42
+ end='<!-- shared:platform-state-appraisal end -->'
43
+
44
+ extract() {
45
+ awk -v b="$begin" -v e="$end" '
46
+ index($0, b) { grab = 1; next }
47
+ index($0, e) { grab = 0 }
48
+ grab { print }
49
+ ' "$1"
50
+ }
51
+
52
+ if ! curl -fsSL "$src" -o /tmp/upstream.md; then
53
+ echo "::error::could not fetch $src"
54
+ exit 1
55
+ fi
56
+
57
+ extract LIMITATIONS.md > /tmp/local.txt
58
+ extract /tmp/upstream.md > /tmp/remote.txt
59
+
60
+ if [ ! -s /tmp/local.txt ]; then
61
+ echo "::error::LIMITATIONS.md has no shared:platform-state-appraisal block"
62
+ exit 1
63
+ fi
64
+ if [ ! -s /tmp/remote.txt ]; then
65
+ echo "::error::trace-spec/LIMITATIONS.md has no shared:platform-state-appraisal block"
66
+ exit 1
67
+ fi
68
+
69
+ if diff -u /tmp/remote.txt /tmp/local.txt; then
70
+ echo "ok shared block matches trace-spec"
71
+ else
72
+ echo "::error::the shared block has drifted from trace-spec/LIMITATIONS.md."
73
+ echo "::error::Edit it in trace-spec first, then copy the block here."
74
+ exit 1
75
+ fi
@@ -5,21 +5,25 @@ on:
5
5
  tags:
6
6
  - "v*.*.*"
7
7
 
8
+ permissions:
9
+ contents: read
10
+
8
11
  jobs:
9
12
  draft-release:
10
13
  runs-on: ubuntu-latest
11
14
  permissions:
12
15
  contents: write
13
16
  steps:
14
- - uses: actions/checkout@v7
17
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
15
18
  with:
16
19
  fetch-depth: 0
17
20
 
18
21
  - name: Create GitHub Release
19
22
  env:
20
23
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
24
+ REF_NAME: ${{ github.ref_name }}
21
25
  run: |
22
- gh release create "${{ github.ref_name }}" \
23
- --title "ca2a ${{ github.ref_name }}" \
26
+ gh release create "$REF_NAME" \
27
+ --title "ca2a $REF_NAME" \
24
28
  --generate-notes \
25
29
  --draft
@@ -11,14 +11,14 @@ jobs:
11
11
  build:
12
12
  runs-on: ubuntu-latest
13
13
  steps:
14
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
14
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
15
15
 
16
16
  - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
17
17
  with:
18
18
  python-version: "3.12"
19
19
 
20
20
  - name: Install release tooling
21
- run: python -m pip install build twine
21
+ run: python -m pip install --require-hashes -r requirements/release.txt
22
22
 
23
23
  - name: Verify release tag matches package version
24
24
  run: |
@@ -32,17 +32,25 @@ jobs:
32
32
  run: python -m twine check dist/*
33
33
 
34
34
  - name: Install and smoke-test wheel
35
+ env:
36
+ # The tag name is data, not code: ${{ }} expands before the shell
37
+ # (and before python -c) ever sees the line.
38
+ REF_NAME: ${{ github.ref_name }}
35
39
  run: |
36
40
  python -m venv /tmp/ca2a-wheel
37
41
  /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'
42
+ /tmp/ca2a-wheel/bin/python -c 'import importlib.metadata, os, ca2a_runtime; expected=os.environ["REF_NAME"][1:]; assert importlib.metadata.version("ca2a-runtime") == expected; assert ca2a_runtime.__version__ == expected'
39
43
  /tmp/ca2a-wheel/bin/ca2a --help
40
44
 
41
45
  - name: Install and smoke-test source distribution
46
+ env:
47
+ # The tag name is data, not code: ${{ }} expands before the shell
48
+ # (and before python -c) ever sees the line.
49
+ REF_NAME: ${{ github.ref_name }}
42
50
  run: |
43
51
  python -m venv /tmp/ca2a-sdist
44
52
  /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'
53
+ /tmp/ca2a-sdist/bin/python -c 'import importlib.metadata, os, ca2a_runtime; expected=os.environ["REF_NAME"][1:]; assert importlib.metadata.version("ca2a-runtime") == expected; assert ca2a_runtime.__version__ == expected'
46
54
  /tmp/ca2a-sdist/bin/ca2a --help
47
55
 
48
56
  - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
@@ -71,14 +79,16 @@ jobs:
71
79
  contents: write # upload release assets
72
80
 
73
81
  steps:
74
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
82
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
75
83
 
76
84
  - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
77
85
  with:
78
86
  python-version: "3.12"
79
87
 
80
88
  - name: Install package
81
- run: python -m pip install --upgrade pip && pip install -e "."
89
+ run: |
90
+ python -m pip install --require-hashes -r requirements/dev.txt
91
+ python -m pip install --no-deps -e .
82
92
 
83
93
  # Isolate AGT's tooling dependencies from the release artifact. AGT 4.1
84
94
  # constrains cryptography below 49; cA2A requires 50+ security fixes. The
@@ -87,8 +97,10 @@ jobs:
87
97
  - name: Install governance tooling in an isolated environment
88
98
  run: |
89
99
  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"
100
+ # --no-deps because the lock already lists every transitive
101
+ # dependency, and pip would otherwise re-resolve and reject the
102
+ # cryptography override the compile deliberately applied.
103
+ .agt-venv/bin/pip install --require-hashes --no-deps -r requirements/agt.txt
92
104
 
93
105
  - name: Generate evidence file
94
106
  run: python scripts/gen_agt_evidence.py
@@ -101,6 +113,7 @@ jobs:
101
113
 
102
114
  - name: Attach evidence to release
103
115
  if: github.event_name == 'release'
104
- run: gh release upload ${{ github.ref_name }} agt-evidence.json agt-attestation.json
116
+ run: gh release upload "$REF_NAME" agt-evidence.json agt-attestation.json
105
117
  env:
106
118
  GITHUB_TOKEN: ${{ github.token }}
119
+ REF_NAME: ${{ github.ref_name }}
@@ -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', 'pforest', 'podcastinator', 'carloshvp', 'Qiang-Xu', 'zohebk8s'];
28
+ const MAINTAINERS = ['imran-siddique', 'pforest', 'podcastinator', 'carloshvp', 'Qiang-Xu', 'zohebk8s', 'AaronRoeF'];
29
29
 
30
30
  const author = context.payload.pull_request.user.login;
31
31
  if (MAINTAINERS.includes(author)) {
@@ -10,21 +10,23 @@ env:
10
10
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
11
11
 
12
12
  permissions:
13
- contents: write
14
- id-token: write
13
+ contents: read
15
14
 
16
15
  jobs:
17
16
  sbom:
18
17
  runs-on: ubuntu-latest
18
+ permissions:
19
+ contents: write
20
+ id-token: write
19
21
  steps:
20
- - uses: actions/checkout@v7
22
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
23
  - name: Generate SBOM
22
- uses: anchore/sbom-action@v0
24
+ uses: anchore/sbom-action@3ad7283483fc7af8ff2b4ea19663c2d5ca935e26 # v0.24.2
23
25
  with:
24
26
  format: spdx-json
25
27
  output-file: sbom.spdx.json
26
28
  - name: Upload SBOM artifact
27
- uses: actions/upload-artifact@v7
29
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
28
30
  with:
29
31
  name: sbom
30
32
  path: sbom.spdx.json
@@ -23,7 +23,7 @@ jobs:
23
23
  actions: read
24
24
  steps:
25
25
  - name: Checkout
26
- uses: actions/checkout@v7
26
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
27
27
  with:
28
28
  persist-credentials: false
29
29
  fetch-depth: 0
@@ -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.37.6
41
+ uses: github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
42
42
  with:
43
43
  sarif_file: scorecard-results.sarif