diff --git a/CHANGELOG.md b/CHANGELOG.md index ffedb63..5cf984f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- **BREAKING: TRACE records now carry the v0.2 profile** `tag:agentrust-io.com,2026:trace-v0.2`. Pins move to `agentrust-trace>=0.5` and `agentrust-trace-tests>=0.4,<0.5`, which have to move together: the conformance suite cut over rather than dual-accepting, so 0.4.0 of the suite fails a v0.1 record and 0.3.x fails a v0.2 one. The v0.1 URI named `agentrust.io`, a domain this project never controlled, which RFC 4151 does not permit for a tag URI (agentrust-io/trace-spec#107). Nothing else about the record format changed. + +### Changed + - **Extension URI moved to `https://agentrust-io.com/extensions/ca2a/v0.1`.** The previous `agentrust.io` host is not ours: it resolves to parked AWS addresses. An extension identifier is something we are asking other operators to copy into their Agent Cards, so it must not depend on a domain we do not control. A2A treats these URIs as identifiers rather than fetchable URLs, so nothing breaks functionally, but any peer pinning the old string must update. The adapter constant, the transport spec, the fixture, and the test that pins the constant all move together. ### Fixed diff --git a/pyproject.toml b/pyproject.toml index 888d70c..3b15984 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,107 +1,107 @@ -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[project] -name = "ca2a-runtime" -version = "0.1.0a1" -description = "Confidential agent-to-agent runtime: attested, attenuated delegation and sealed peer channels for A2A" -readme = "README.md" -license = { text = "MIT" } -authors = [ - { name = "AgenTrust Contributors", email = "oss@agentrust-io.com" }, -] -keywords = ["a2a", "agent-to-agent", "delegation", "tee", "attestation", "confidential-computing", "ai-agents"] -classifiers = [ - "Development Status :: 3 - Alpha", - "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", - "Topic :: Security", -] -requires-python = ">=3.11" -dependencies = [ - "cryptography>=42.0", - "pyyaml>=6.0", - "cedarpy>=4.8", - # TRACE record models + RFC 8785 signing, reused rather than reimplemented - # (see ROADMAP Tier 0). Pin a compatible minor; cross-repo skew is a known - # risk documented in LIMITATIONS.md. - "agentrust-trace>=0.4", - # Shared hardware-attestation verification (generic cert-chain verifier, - # SNP/TDX/TPM primitives) consumed via PyPI instead of duplicated per repo. - "agent-manifest>=0.5", - "rfc8785>=0.1", -] - -[project.optional-dependencies] -dev = [ - "pytest>=8.0", - "pytest-asyncio>=0.23", - "pytest-cov>=5.0", - "ruff>=0.4", - "mypy>=1.10", - "types-pyyaml", - "bandit[toml]>=1.7", - "pip-audit>=2.6", - # Conformance suite: asserts emitted records pass the TRACE Level checks. - "agentrust-trace-tests>=0.2,<0.3", -] - -[project.scripts] -ca2a = "ca2a_runtime.cli:main" - -[project.urls] -Homepage = "https://github.com/agentrust-io/ca2a" -Repository = "https://github.com/agentrust-io/ca2a" -Documentation = "https://github.com/agentrust-io/ca2a/tree/main/docs" -"Bug Tracker" = "https://github.com/agentrust-io/ca2a/issues" - -[tool.hatch.build.targets.wheel] -packages = ["src/ca2a_runtime", "src/ca2a_verify"] - -[tool.pytest.ini_options] -testpaths = ["tests"] -asyncio_mode = "auto" -addopts = "-v --tb=short" -pythonpath = ["src"] - -[tool.ruff] -src = ["src"] -line-length = 100 -target-version = "py311" - -[tool.ruff.lint] -select = ["E", "F", "W", "I", "UP", "B", "C4", "PIE", "T20", "RET", "SIM"] -ignore = ["E501"] - -[tool.ruff.lint.per-file-ignores] -"src/ca2a_runtime/benchmarks.py" = ["T201"] -"src/ca2a_runtime/cli.py" = ["T201"] -"scripts/gen_example_chain.py" = ["T201"] -"scripts/gen_agt_evidence.py" = ["T201"] -"examples/**/*.py" = ["T201"] - -[tool.bandit] -skips = ["B101"] - -[tool.coverage.run] -source = ["src"] -omit = ["*/cli.py", "*/benchmarks.py"] - -[tool.coverage.report] -fail_under = 70 - -[tool.mypy] -python_version = "3.11" -strict = true -ignore_missing_imports = true -warn_return_any = false -files = ["src/ca2a_runtime", "src/ca2a_verify"] - -[[tool.mypy.overrides]] -module = ["ca2a_runtime.tee.sev_snp", "ca2a_runtime.tee.tdx", "ca2a_runtime.tee.tpm", "ca2a_runtime.cedar", "ca2a_verify.tdx", "ca2a_verify.tpm", "ca2a_runtime.channel.sealed"] -warn_unused_ignores = false +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "ca2a-runtime" +version = "0.1.0a1" +description = "Confidential agent-to-agent runtime: attested, attenuated delegation and sealed peer channels for A2A" +readme = "README.md" +license = { text = "MIT" } +authors = [ + { name = "AgenTrust Contributors", email = "oss@agentrust-io.com" }, +] +keywords = ["a2a", "agent-to-agent", "delegation", "tee", "attestation", "confidential-computing", "ai-agents"] +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Topic :: Security", +] +requires-python = ">=3.11" +dependencies = [ + "cryptography>=42.0", + "pyyaml>=6.0", + "cedarpy>=4.8", + # TRACE record models + RFC 8785 signing, reused rather than reimplemented + # (see ROADMAP Tier 0). Pin a compatible minor; cross-repo skew is a known + # risk documented in LIMITATIONS.md. + "agentrust-trace>=0.5", + # Shared hardware-attestation verification (generic cert-chain verifier, + # SNP/TDX/TPM primitives) consumed via PyPI instead of duplicated per repo. + "agent-manifest>=0.5", + "rfc8785>=0.1", +] + +[project.optional-dependencies] +dev = [ + "pytest>=8.0", + "pytest-asyncio>=0.23", + "pytest-cov>=5.0", + "ruff>=0.4", + "mypy>=1.10", + "types-pyyaml", + "bandit[toml]>=1.7", + "pip-audit>=2.6", + # Conformance suite: asserts emitted records pass the TRACE Level checks. + "agentrust-trace-tests>=0.4,<0.5", +] + +[project.scripts] +ca2a = "ca2a_runtime.cli:main" + +[project.urls] +Homepage = "https://github.com/agentrust-io/ca2a" +Repository = "https://github.com/agentrust-io/ca2a" +Documentation = "https://github.com/agentrust-io/ca2a/tree/main/docs" +"Bug Tracker" = "https://github.com/agentrust-io/ca2a/issues" + +[tool.hatch.build.targets.wheel] +packages = ["src/ca2a_runtime", "src/ca2a_verify"] + +[tool.pytest.ini_options] +testpaths = ["tests"] +asyncio_mode = "auto" +addopts = "-v --tb=short" +pythonpath = ["src"] + +[tool.ruff] +src = ["src"] +line-length = 100 +target-version = "py311" + +[tool.ruff.lint] +select = ["E", "F", "W", "I", "UP", "B", "C4", "PIE", "T20", "RET", "SIM"] +ignore = ["E501"] + +[tool.ruff.lint.per-file-ignores] +"src/ca2a_runtime/benchmarks.py" = ["T201"] +"src/ca2a_runtime/cli.py" = ["T201"] +"scripts/gen_example_chain.py" = ["T201"] +"scripts/gen_agt_evidence.py" = ["T201"] +"examples/**/*.py" = ["T201"] + +[tool.bandit] +skips = ["B101"] + +[tool.coverage.run] +source = ["src"] +omit = ["*/cli.py", "*/benchmarks.py"] + +[tool.coverage.report] +fail_under = 70 + +[tool.mypy] +python_version = "3.11" +strict = true +ignore_missing_imports = true +warn_return_any = false +files = ["src/ca2a_runtime", "src/ca2a_verify"] + +[[tool.mypy.overrides]] +module = ["ca2a_runtime.tee.sev_snp", "ca2a_runtime.tee.tdx", "ca2a_runtime.tee.tpm", "ca2a_runtime.cedar", "ca2a_verify.tdx", "ca2a_verify.tpm", "ca2a_runtime.channel.sealed"] +warn_unused_ignores = false diff --git a/src/ca2a_runtime/trace_binding.py b/src/ca2a_runtime/trace_binding.py index 709e1d9..cb6800a 100644 --- a/src/ca2a_runtime/trace_binding.py +++ b/src/ca2a_runtime/trace_binding.py @@ -28,8 +28,8 @@ from agentrust_trace import sign_record from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey -# The frozen TRACE v0.1 profile URI. Every record's eat_profile equals this. -EAT_PROFILE = "tag:agentrust.io,2026:trace-v0.1" +# The frozen TRACE v0.2 profile URI. Every record's eat_profile equals this. +EAT_PROFILE = "tag:agentrust-io.com,2026:trace-v0.2" # The platform value for a software-attestation (no hardware TEE) run. Records # emitted with this platform are honestly Level 0 only: trace-tests fails a