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.
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/CODEOWNERS +7 -7
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/dependabot.yml +4 -0
- ca2a_runtime-0.3.0/.github/workflows/actionlint.yml +41 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/ci.yml +46 -16
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/codeql.yml +4 -4
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/contributor-check.yml +1 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/docker.yml +10 -7
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/docs.yml +14 -5
- ca2a_runtime-0.3.0/.github/workflows/limitations-parity.yml +75 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/release-drafter.yml +7 -3
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/release.yml +22 -9
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/require-maintainer-approval.yml +1 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/sbom.yml +7 -5
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/workflows/scorecard.yml +2 -2
- ca2a_runtime-0.3.0/.github/workflows/vouch-check.yml +111 -0
- ca2a_runtime-0.3.0/.github/workflows/vouch-command.yml +89 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/ADOPTERS.md +3 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CHANGELOG.md +144 -2
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CHARTER.md +1 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CONTRIBUTING.md +17 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/GOVERNANCE.md +22 -4
- ca2a_runtime-0.3.0/LIMITATIONS.md +104 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/MAINTAINERS.md +15 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/NOTICE +1 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/PKG-INFO +28 -13
- ca2a_runtime-0.3.0/PRIVACY.md +9 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/README.md +182 -168
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/ROADMAP.md +1 -1
- ca2a_runtime-0.3.0/SPONSORS.md +20 -0
- ca2a_runtime-0.3.0/docs/assets/icon.svg +26 -0
- ca2a_runtime-0.3.0/docs/concepts.md +63 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/configuration.md +14 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/hardware-validation.md +74 -12
- ca2a_runtime-0.3.0/docs/mutual-hardware-acceptance.md +150 -0
- ca2a_runtime-0.3.0/docs/quickstart.md +125 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/attestation.md +4 -4
- ca2a_runtime-0.3.0/docs/spec/call-graph.md +50 -0
- ca2a_runtime-0.3.0/docs/spec/cedar-policy.md +44 -0
- ca2a_runtime-0.3.0/docs/spec/component-model.md +39 -0
- ca2a_runtime-0.3.0/docs/spec/delegation-chain.md +187 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/error-codes.md +18 -5
- ca2a_runtime-0.3.0/docs/spec/failure-modes.md +37 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/mutual-attestation.md +11 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/profile.md +9 -0
- ca2a_runtime-0.3.0/docs/spec/provenance-dag.md +45 -0
- ca2a_runtime-0.3.0/docs/spec/response-authentication.md +132 -0
- ca2a_runtime-0.3.0/docs/spec/response-binding-requirements.md +113 -0
- ca2a_runtime-0.3.0/docs/spec/sealed-channel.md +43 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/threat-model.md +4 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/transport.md +48 -3
- ca2a_runtime-0.3.0/docs/spec/verification-library.md +55 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/tutorials/authoring-a-delegation-credential.md +32 -12
- ca2a_runtime-0.3.0/docs/tutorials/emit-and-verify-provenance.md +104 -0
- ca2a_runtime-0.3.0/docs/tutorials/integrating-with-a2a.md +137 -0
- ca2a_runtime-0.3.0/docs/tutorials/reproducing-the-claims.md +56 -0
- ca2a_runtime-0.3.0/docs/tutorials/verify-a-delegation-chain.md +62 -0
- ca2a_runtime-0.3.0/examples/a2a-sdk/loopback.py +333 -0
- ca2a_runtime-0.3.0/examples/a2a-sdk/requirements.txt +3 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/README.md +10 -8
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/demo.py +129 -48
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/minimal/README.md +1 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/minimal/ca2a-config.yaml +4 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/rejection-with-proof/README.md +7 -5
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/rejection-with-proof/demo.py +34 -13
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/trace-dag/README.md +3 -2
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/trace-dag/demo.py +16 -7
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim1-attenuation-soundness/run.py +7 -6
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim2-cross-chain-replay/run.py +9 -8
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim3-scope-policy-intersection/run.py +9 -9
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim4-sealed-payload-confidentiality/run.py +2 -2
- ca2a_runtime-0.3.0/experiments/hardware-validation/mutual-snp-2026-09-17/README.md +58 -0
- ca2a_runtime-0.3.0/experiments/hardware-validation/mutual-snp-2026-09-17/a-to-b.json +168 -0
- ca2a_runtime-0.3.0/experiments/hardware-validation/mutual-snp-2026-09-17/b-to-a.json +168 -0
- ca2a_runtime-0.3.0/experiments/hardware-validation/mutual-snp-2026-09-17/controls.py +85 -0
- ca2a_runtime-0.3.0/hooks/seo.py +102 -0
- ca2a_runtime-0.3.0/index.md +74 -0
- ca2a_runtime-0.3.0/mkdocs.yml +212 -0
- ca2a_runtime-0.3.0/overrides/main.html +130 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/pyproject.toml +8 -7
- ca2a_runtime-0.3.0/requirements/agt-overrides.txt +16 -0
- ca2a_runtime-0.3.0/requirements/agt.in +11 -0
- ca2a_runtime-0.3.0/requirements/agt.txt +1314 -0
- ca2a_runtime-0.3.0/requirements/dev.in +27 -0
- ca2a_runtime-0.3.0/requirements/dev.txt +2380 -0
- ca2a_runtime-0.3.0/requirements/docs.txt +597 -0
- ca2a_runtime-0.3.0/requirements/release.in +5 -0
- ca2a_runtime-0.3.0/requirements/release.txt +488 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/requirements-docs.txt +2 -2
- ca2a_runtime-0.3.0/robots.txt +38 -0
- ca2a_runtime-0.3.0/scripts/gen_action_fixtures.py +233 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/agent_manifest.py +7 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/attestation.py +12 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/benchmarks.py +1 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/bootstrap.py +60 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/canonical.py +17 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/cli.py +178 -9
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/config.py +55 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/delegation/__init__.py +12 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/delegation/credential.py +101 -8
- ca2a_runtime-0.3.0/src/ca2a_runtime/delegation/revocation.py +292 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/errors.py +62 -0
- ca2a_runtime-0.3.0/src/ca2a_runtime/hardware_acceptance.py +264 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/node.py +29 -2
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/peer.py +40 -11
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/provenance.py +8 -2
- ca2a_runtime-0.3.0/src/ca2a_runtime/response.py +269 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/sev_snp.py +19 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/trace_binding.py +8 -1
- ca2a_runtime-0.3.0/src/ca2a_runtime/transport/_b64url.py +44 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/a2a_adapter.py +3 -35
- ca2a_runtime-0.3.0/src/ca2a_runtime/transport/a2a_sdk.py +294 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/client.py +90 -9
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/server.py +11 -3
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/wire.py +29 -6
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/__init__.py +2 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/dag.py +43 -14
- ca2a_runtime-0.3.0/src/ca2a_verify/sev_snp.py +186 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/tpm.py +53 -8
- ca2a_runtime-0.3.0/src/ca2a_verify/verify.py +130 -0
- ca2a_runtime-0.3.0/tests/committed_blobs.py +56 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/conformance/README.md +68 -13
- ca2a_runtime-0.3.0/tests/conformance/test_action_fixture_bundles.py +131 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/conformance/test_profile_conformance.py +168 -31
- ca2a_runtime-0.3.0/tests/conftest.py +78 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/README.md +68 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-001-verified/chain.json +29 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-001-verified/dag.json +27 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-001-verified/expected.json +10 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-002-parent-hash-mismatch/chain.json +29 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-002-parent-hash-mismatch/dag.json +27 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-002-parent-hash-mismatch/expected.json +10 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-006-policy-denial/chain.json +42 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-006-policy-denial/dag.json +55 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-006-policy-denial/expected.json +10 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-010-scope-escalation/chain.json +27 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-010-scope-escalation/dag.json +25 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-010-scope-escalation/expected.json +10 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-012-credential-expired/chain.json +33 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-012-credential-expired/dag.json +27 -0
- ca2a_runtime-0.3.0/tests/fixtures/action/action-012-credential-expired/expected.json +10 -0
- ca2a_runtime-0.3.0/tests/fixtures/response-mac-v1.json +82 -0
- ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/README.md +19 -0
- ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/ak-chain.pem +24 -0
- ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/attest.hex +1 -0
- ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/signature.hex +1 -0
- ca2a_runtime-0.3.0/tests/fixtures/tpm/bare-rsa-prefix-0016/trusted-root.pem +10 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_a2a_sdk_bridge.py +259 -6
- ca2a_runtime-0.3.0/tests/unit/test_a2a_sdk_loopback.py +243 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_agent_manifest_cose.py +31 -2
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_bootstrap.py +115 -3
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_canonical.py +19 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim1_attenuation.py +5 -5
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim2_replay.py +4 -3
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_cli_start.py +46 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_committed_examples_verify.py +18 -20
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_config.py +59 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_delegation.py +35 -11
- ca2a_runtime-0.3.0/tests/unit/test_dependency_security_floors.py +77 -0
- ca2a_runtime-0.3.0/tests/unit/test_docs_quickstart.py +39 -0
- ca2a_runtime-0.3.0/tests/unit/test_documented_experiments.py +59 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_example_rejection_with_proof.py +3 -2
- ca2a_runtime-0.3.0/tests/unit/test_hardware_acceptance.py +199 -0
- ca2a_runtime-0.3.0/tests/unit/test_lineage_cli.py +149 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_live_call.py +140 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_mutual_attestation.py +41 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_peer_request.py +48 -1
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_release_artifacts.py +1 -1
- ca2a_runtime-0.3.0/tests/unit/test_response_authentication.py +452 -0
- ca2a_runtime-0.3.0/tests/unit/test_revocation.py +475 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_sev_snp.py +215 -3
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_tpm_attest.py +157 -8
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_trace_binding.py +168 -9
- ca2a_runtime-0.3.0/tests/unit/test_verify.py +126 -0
- ca2a_runtime-0.2.0/LIMITATIONS.md +0 -30
- ca2a_runtime-0.2.0/PRIVACY.md +0 -9
- ca2a_runtime-0.2.0/docs/assets/icon.svg +0 -29
- ca2a_runtime-0.2.0/docs/concepts.md +0 -42
- ca2a_runtime-0.2.0/docs/quickstart.md +0 -78
- ca2a_runtime-0.2.0/docs/spec/call-graph.md +0 -109
- ca2a_runtime-0.2.0/docs/spec/cedar-policy.md +0 -98
- ca2a_runtime-0.2.0/docs/spec/component-model.md +0 -63
- ca2a_runtime-0.2.0/docs/spec/delegation-chain.md +0 -84
- ca2a_runtime-0.2.0/docs/spec/failure-modes.md +0 -151
- ca2a_runtime-0.2.0/docs/spec/provenance-dag.md +0 -112
- ca2a_runtime-0.2.0/docs/spec/sealed-channel.md +0 -31
- ca2a_runtime-0.2.0/docs/spec/verification-library.md +0 -29
- ca2a_runtime-0.2.0/docs/stylesheets/extra.css +0 -24
- ca2a_runtime-0.2.0/docs/tutorials/emit-and-verify-provenance.md +0 -203
- ca2a_runtime-0.2.0/docs/tutorials/integrating-with-a2a.md +0 -171
- ca2a_runtime-0.2.0/docs/tutorials/reproducing-the-claims.md +0 -188
- ca2a_runtime-0.2.0/docs/tutorials/verify-a-delegation-chain.md +0 -61
- ca2a_runtime-0.2.0/mkdocs.yml +0 -179
- ca2a_runtime-0.2.0/overrides/main.html +0 -88
- ca2a_runtime-0.2.0/src/ca2a_runtime/transport/a2a_sdk.py +0 -141
- ca2a_runtime-0.2.0/src/ca2a_verify/sev_snp.py +0 -91
- ca2a_runtime-0.2.0/src/ca2a_verify/verify.py +0 -71
- ca2a_runtime-0.2.0/tests/unit/test_dependency_security_floors.py +0 -40
- ca2a_runtime-0.2.0/tests/unit/test_verify.py +0 -64
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.dockerignore +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/.gitignore +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CNAME +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/Dockerfile +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/LICENSE +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/SECURITY.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/benchmarks/.gitkeep +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/SPEC.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/assets/og.png +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/conformance.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/docs/spec/trace-a2a-profile.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/ca2a-config.yaml +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/chain.json +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/dag.json +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/cross-operator-delegation/policy.cedar +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/minimal/chain.json +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/rejection-with-proof/chain.json +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/examples/rejection-with-proof/dag.json +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim1-attenuation-soundness/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim2-cross-chain-replay/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim3-scope-policy-intersection/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim4-sealed-payload-confidentiality/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim5-provenance-dag-integrity/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim5-provenance-dag-integrity/run.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim6-cross-operator-attestation/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/claim6-cross-operator-attestation/run.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-attested-peer-azure-2026-07-27/bridge.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-attested-peer-azure-2026-07-27/transcript.json +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/snp_client.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/tdx_peer.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/experiments/hardware-validation/ca2a-cross-tee-2026-07-27/transcript.json +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/governance/ca2a-enforcement.yaml +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/scripts/gen_agt_evidence.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/scripts/gen_example_chain.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/__init__.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/cedar.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/challenge.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/channel/__init__.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/channel/sealed.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/delegation/holder.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/policy.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/__init__.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/base.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/binding.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/software.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/tdx.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/tpm.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/tee/tsm.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/__init__.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_runtime/transport/constants.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/tdx.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/src/ca2a_verify/tpm_roots.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/__init__.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/conformance/__init__.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/conformance/conftest.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/a2a/send_message_ca2a.json +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/README.md +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/ak.pub +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/akcert_0x01C101D0.der +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/nonce.hex +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/pcrs.bin +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/quote.msg +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/hardware/azure-vtpm-2026-07-27/quote.sig +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/sev_snp/amd_milan_cert_chain.pem +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/fixtures/tdx/intel_sgx_root_ca.pem +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/test_challenge.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/__init__.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/conftest.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_a2a_adapter.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_cedar.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_channel_and_tee.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim3_scope_policy.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim4_sealed.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim5_provenance.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_claim6_cross_operator.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_container_release.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_errors.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_holder_binding.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_peer.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_provenance.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_sealed_channel.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_snp_tdx_attest.py +0 -0
- {ca2a_runtime-0.2.0 → ca2a_runtime-0.3.0}/tests/unit/test_tdx.py +0 -0
- {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
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
+
uses: github/codeql-action/autobuild@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
|
38
38
|
|
|
39
39
|
- name: Perform CodeQL Analysis
|
|
40
|
-
uses: github/codeql-action/analyze@v4.
|
|
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@
|
|
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@
|
|
30
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
28
31
|
|
|
29
32
|
- name: Build image without publishing
|
|
30
|
-
uses: docker/build-push-action@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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
|
|
44
|
-
pip install -
|
|
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
|
|
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 "$
|
|
23
|
-
--title "ca2a $
|
|
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@
|
|
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
|
|
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=
|
|
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=
|
|
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@
|
|
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:
|
|
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
|
-
|
|
91
|
-
|
|
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 $
|
|
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:
|
|
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.
|
|
41
|
+
uses: github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
|
42
42
|
with:
|
|
43
43
|
sarif_file: scorecard-results.sarif
|