From d3bcd0c7832bce8a7a84a1f0c9e2ab50c54b107f Mon Sep 17 00:00:00 2001 From: Imran Siddique Date: Mon, 27 Jul 2026 17:47:11 -0700 Subject: [PATCH] spec: TRACE v0.2, correcting an invalid EAT profile URI The v0.1 profile URI was tag:agentrust.io,2026:trace-v0.1. agentrust.io was never ours; it resolves to third-party parked addresses. RFC 4151 permits a tag URI only where the minting authority controlled the named domain on the stated date, so this identifier was invalid rather than misspelled: it asserted authority over a name whose actual owner could stand up a conflicting definition at it. v0.2 corrects it to tag:agentrust-io.com,2026:trace-v0.2 and changes nothing else. No field added, removed, or re-typed. Cutover, not coexistence: a v0.2 verifier requires the new URI and rejects the old one. Accepting both would keep the invalid identifier live indefinitely, which is the thing being fixed. Records already issued under v0.1 stay verifiable against spec/trace-v0.1.md and agentrust-trace 0.4.x, which remain published; they are v0.1 records and read as such. Co-Authored-By: Claude Opus 5 (1M context) --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- CHANGELOG.md | 12 + CONTRIBUTING.md | 2 +- README.md | 10 +- docs/crosswalks/owasp-agentic-top-10.md | 14 +- docs/glossary.md | 2 +- docs/index.md | 4 +- docs/quickstart.md | 10 +- docs/schema.md | 6 +- docs/trust-levels.md | 6 +- docs/tutorials/agt-adapter.md | 8 +- docs/tutorials/anchoring-to-the-registry.md | 4 +- .../hardware-attestation-platforms.md | 2 +- .../signing-your-first-trust-record.md | 4 +- docs/tutorials/verifying-a-trust-record.md | 4 +- docs/verification.md | 4 +- examples/action-receipts/README.md | 2 +- examples/amd-sev-snp.json | 10 +- examples/intel-tdx.json | 10 +- examples/nvidia-h100.json | 10 +- examples/tpm2.json | 14 +- mkdocs.yml | 4 +- pyproject.toml | 2 +- schema/trace-claim.json | 8 +- spec/trace-v0.1.md | 2 + spec/trace-v0.2.md | 486 ++++++++++++++++++ .../__pycache__/__init__.cpython-312.pyc | Bin 1125 -> 1067 bytes .../__pycache__/models.cpython-312.pyc | Bin 6128 -> 6862 bytes .../__pycache__/sign.cpython-312.pyc | Bin 6569 -> 11039 bytes .../__pycache__/validate.cpython-312.pyc | Bin 2269 -> 2185 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 490 -> 406 bytes .../adapters/__pycache__/agt.cpython-312.pyc | Bin 8000 -> 7929 bytes src/agentrust_trace/adapters/agt.py | 6 +- src/agentrust_trace/models.py | 2 +- src/agentrust_trace/schema/trace-v0.2.json | 285 ++++++++++ src/agentrust_trace/sign.py | 2 +- src/agentrust_trace/validate.py | 2 +- tests/__pycache__/__init__.cpython-312.pyc | Bin 231 -> 147 bytes ...eipt_fixtures.cpython-312-pytest-9.0.3.pyc | Bin 0 -> 11666 bytes ...t_agt_adapter.cpython-312-pytest-9.0.3.pyc | Bin 0 -> 16894 bytes .../test_models.cpython-312-pytest-9.0.3.pyc | Bin 0 -> 21635 bytes .../test_sign.cpython-312-pytest-9.0.3.pyc | Bin 0 -> 31433 bytes ...test_validate.cpython-312-pytest-9.0.3.pyc | Bin 0 -> 10681 bytes tests/test_agt_adapter.py | 4 +- tests/test_models.py | 84 +-- tests/test_sign.py | 2 +- 47 files changed, 908 insertions(+), 123 deletions(-) create mode 100644 spec/trace-v0.2.md create mode 100644 src/agentrust_trace/schema/trace-v0.2.json create mode 100644 tests/__pycache__/test_action_receipt_fixtures.cpython-312-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_agt_adapter.cpython-312-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_models.cpython-312-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_sign.cpython-312-pytest-9.0.3.pyc create mode 100644 tests/__pycache__/test_validate.cpython-312-pytest-9.0.3.pyc diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 6af8861..54ce87c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ labels: bug **Spec section or file** - + **Expected behavior** diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5dd2342..0e6f31e 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -12,7 +12,7 @@ ## Spec section - + ## Checklist diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f20a29..50cb6d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,18 @@ Format: [Semantic Versioning](https://semver.org/). Spec versions follow `MAJOR. ## [Unreleased] +### Changed + +- **BREAKING: TRACE v0.2 changes the EAT profile URI to `tag:agentrust-io.com,2026:trace-v0.2`** (was `tag:agentrust.io,2026:trace-v0.1`). `agentrust.io` was never a domain this project controlled; it resolves to third-party parked addresses. RFC 4151 permits a tag URI only where the minting authority controlled the named domain on the stated date, so the v0.1 identifier was invalid rather than merely misspelled: it asserted authority over a name someone else could stand up a conflicting definition at. + + **Cutover, not coexistence.** A v0.2 verifier requires the new URI and rejects the old one; it does not accept both. Dual acceptance would keep the invalid identifier live indefinitely, which is the thing being fixed. Records already issued under v0.1 stay verifiable against `spec/trace-v0.1.md` and the published `agentrust-trace` 0.4.x releases, which remain on PyPI. They are v0.1 records and are read as such. + + Nothing else in the record format changed. No field was added, removed, or re-typed, so migration for a producer is the profile string and a dependency bump. + + Moved together: `spec/trace-v0.2.md` (new, with a "Changes from v0.1" section), `spec/trace-v0.1.md` (retained, marked superseded), the root `schema/trace-claim.json` const, the packaged `agentrust_trace/schema/trace-v0.2.json`, the `eat_profile` `Literal` in `models.py`, the AGT adapter, `validate.py`'s schema resource, the four platform example records, and the docs. + +- Other `agentrust.io` URLs moved to `agentrust-io.com`: the registry and verifier hosts in the AGT adapter and the schema `$id`. + ## [0.4.0] ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 482ffdb..05a05d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,7 +16,7 @@ This adds `Signed-off-by: Your Name `. PRs without DCO sign-off ### Spec changes (normative text) -Changes to `spec/trace-v0.1.md` that affect what implementations must do. +Changes to `spec/trace-v0.2.md` that affect what implementations must do. 1. Open a GitHub issue using the **Spec change proposal** template. Describe the problem, the proposed change, and the spec section affected. 2. Allow 5 business days for comment. Changes touching wire format, cryptographic algorithms, or Trust Record required fields require 14 days. diff --git a/README.md b/README.md index 22d433c..040078b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@

- Specification  |  + Specification  |  Schema  |  Examples  |  Registry  |  @@ -20,7 +20,7 @@

[![License: CC BY 4.0](https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg)](LICENSE) -[![Spec](https://img.shields.io/badge/Spec-v0.1-0ea5e9)](spec/trace-v0.1.md) +[![Spec](https://img.shields.io/badge/Spec-v0.1-0ea5e9)](spec/trace-v0.2.md) [![PyPI](https://img.shields.io/pypi/v/agentrust-trace)](https://pypi.org/project/agentrust-trace/) [![CI](https://github.com/agentrust-io/trace-spec/actions/workflows/ci.yml/badge.svg)](https://github.com/agentrust-io/trace-spec/actions/workflows/ci.yml) [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white&style=flat)](https://discord.gg/grgzFEHgkj) @@ -54,7 +54,7 @@ signed = sign_record(record, key=signing_key) | | | |---|---| | ๐Ÿ“– Full documentation | [trace.agentrust-io.com](https://trace.agentrust-io.com) | -| ๐Ÿ“„ Specification | [spec/trace-v0.1.md](spec/trace-v0.1.md) | +| ๐Ÿ“„ Specification | [spec/trace-v0.2.md](spec/trace-v0.2.md) | | ๐Ÿ” Schema | [schema/trace-claim.json](schema/trace-claim.json) | | ๐Ÿ“ฆ PyPI | [agentrust-trace](https://pypi.org/project/agentrust-trace/) | | ๐Ÿงช Test suite | [trace-tests](https://github.com/agentrust-io/trace-tests) | @@ -91,7 +91,7 @@ TRACE is the evidence format. AGT and cMCP produce and consume Trust Records, so ### What is the current status of TRACE? -The current specification is TRACE v0.1, published with a conformance test suite. See the Limitations page for scope boundaries before relying on it in production. +The current specification is TRACE v0.2, published with a conformance test suite. See the Limitations page for scope boundaries before relying on it in production.