agentrust-trace-tests 0.3.0__tar.gz → 0.4.1__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 (74) hide show
  1. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/workflows/ci.yml +1 -1
  2. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/workflows/codeql.yml +3 -3
  3. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/workflows/contributor-check.yml +4 -1
  4. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/workflows/docs.yml +1 -1
  5. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/workflows/release.yml +2 -2
  6. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/workflows/scorecard.yml +2 -2
  7. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.gitignore +4 -0
  8. agentrust_trace_tests-0.4.1/CHANGELOG.md +38 -0
  9. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/PKG-INFO +3 -3
  10. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/README.md +1 -1
  11. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/error-codes.md +2 -2
  12. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/levels.md +7 -7
  13. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/modules/tr-env.md +1 -1
  14. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/quickstart.md +2 -2
  15. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/tutorials/writing-conformance-tests.md +2 -2
  16. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/pyproject.toml +2 -2
  17. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/requirements-docs.txt +1 -1
  18. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/schemas/trace-claim.json +3 -3
  19. agentrust_trace_tests-0.4.1/src/trace_tests/__init__.py +20 -0
  20. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/modules/tr_env.py +1 -1
  21. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/conftest.py +2 -2
  22. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/test_level0.py +1 -1
  23. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/test_level1.py +3 -3
  24. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/test_cli.py +26 -0
  25. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/test_loader.py +2 -2
  26. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/test_tr_env.py +1 -1
  27. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/test_tr_sig.py +3 -3
  28. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/vectors/invalid_missing_runtime.json +1 -1
  29. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/vectors/valid_cmcp_runtime.json +1 -1
  30. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/vectors/valid_level0.json +1 -1
  31. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/vectors/valid_level0_with_transcript.json +1 -1
  32. agentrust_trace_tests-0.3.0/CHANGELOG.md +0 -20
  33. agentrust_trace_tests-0.3.0/src/trace_tests/__init__.py +0 -3
  34. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/CODEOWNERS +0 -0
  35. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/dependabot.yml +0 -0
  36. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/.github/workflows/require-maintainer-approval.yml +0 -0
  37. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/CNAME +0 -0
  38. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/CODE_OF_CONDUCT.md +0 -0
  39. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/CONTRIBUTING.md +0 -0
  40. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/LICENSE +0 -0
  41. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/PRIVACY.md +0 -0
  42. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/SECURITY.md +0 -0
  43. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/modules/tr-anc.md +0 -0
  44. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/modules/tr-pol.md +0 -0
  45. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/modules/tr-rte.md +0 -0
  46. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/modules/tr-sca.md +0 -0
  47. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/modules/tr-sig.md +0 -0
  48. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/modules/tr-txn.md +0 -0
  49. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/modules.md +0 -0
  50. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/stylesheets/extra.css +0 -0
  51. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/docs/tutorials/ci-integration.md +0 -0
  52. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/mkdocs.yml +0 -0
  53. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/cli.py +0 -0
  54. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/loader.py +0 -0
  55. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/modules/__init__.py +0 -0
  56. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/modules/tr_anc.py +0 -0
  57. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/modules/tr_pol.py +0 -0
  58. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/modules/tr_rte.py +0 -0
  59. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/modules/tr_sca.py +0 -0
  60. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/modules/tr_sig.py +0 -0
  61. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/modules/tr_txn.py +0 -0
  62. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/result.py +0 -0
  63. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/src/trace_tests/runner.py +0 -0
  64. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/__init__.py +0 -0
  65. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/test_level0_negative.py +0 -0
  66. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/test_level2.py +0 -0
  67. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/test_schema.py +0 -0
  68. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/test_software_only_platform.py +0 -0
  69. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/__init__.py +0 -0
  70. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/test_runner.py +0 -0
  71. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/test_tr_anc.py +0 -0
  72. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/test_tr_pol.py +0 -0
  73. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/unit/test_tr_rte.py +0 -0
  74. {agentrust_trace_tests-0.3.0 → agentrust_trace_tests-0.4.1}/tests/vectors/invalid_wrong_profile.json +0 -0
@@ -17,7 +17,7 @@ jobs:
17
17
  python-version: ["3.11", "3.12", "3.13"]
18
18
  steps:
19
19
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
20
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v5.3.0
20
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v5.3.0
21
21
  with:
22
22
  python-version: ${{ matrix.python-version }}
23
23
  - name: Install package and test deps
@@ -28,16 +28,16 @@ jobs:
28
28
  uses: actions/checkout@v7
29
29
 
30
30
  - name: Initialize CodeQL
31
- uses: github/codeql-action/init@v4
31
+ uses: github/codeql-action/init@v4.37.4
32
32
  with:
33
33
  languages: python
34
34
  queries: +security-extended
35
35
 
36
36
  - name: Autobuild
37
- uses: github/codeql-action/autobuild@v4
37
+ uses: github/codeql-action/autobuild@v4.37.4
38
38
 
39
39
  - name: Perform CodeQL Analysis
40
- uses: github/codeql-action/analyze@v4
40
+ uses: github/codeql-action/analyze@v4.37.4
41
41
  continue-on-error: true
42
42
  with:
43
43
  category: /language:python
@@ -30,7 +30,10 @@ jobs:
30
30
  uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
31
31
  with:
32
32
  repository: agentrust-io/.github
33
- ref: main
33
+ # Pinned deliberately: this workflow runs on pull_request_target
34
+ # with a write-capable token, so the code it checks out must not
35
+ # track a mutable ref. Bump this SHA after reviewing the diff.
36
+ ref: 0fe4520ee71a743fcd33f409fe366ee3e1da6f86 # main as of 2026-08-01
34
37
  persist-credentials: false
35
38
  sparse-checkout: |
36
39
  scripts
@@ -30,7 +30,7 @@ jobs:
30
30
  with:
31
31
  fetch-depth: 0
32
32
 
33
- - uses: actions/setup-python@v6
33
+ - uses: actions/setup-python@v7
34
34
  with:
35
35
  python-version: "3.11"
36
36
  cache: pip
@@ -14,7 +14,7 @@ jobs:
14
14
  steps:
15
15
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
16
16
 
17
- - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
17
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
18
18
  with:
19
19
  python-version: "3.12"
20
20
 
@@ -41,4 +41,4 @@ jobs:
41
41
  name: dist
42
42
  path: dist/
43
43
 
44
- - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
44
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -26,7 +26,7 @@ jobs:
26
26
  fetch-depth: 0
27
27
 
28
28
  - name: Run Scorecard
29
- uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
29
+ uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4
30
30
  with:
31
31
  results_file: scorecard-results.sarif
32
32
  results_format: sarif
@@ -35,6 +35,6 @@ jobs:
35
35
  publish_results: false
36
36
 
37
37
  - name: Upload SARIF
38
- uses: github/codeql-action/upload-sarif@v4
38
+ uses: github/codeql-action/upload-sarif@v4.37.4
39
39
  with:
40
40
  sarif_file: scorecard-results.sarif
@@ -4,3 +4,7 @@ __pycache__/
4
4
  dist/
5
5
  *.egg-info/
6
6
  .coverage
7
+
8
+ # Local virtual environments
9
+ .venv/
10
+ venv/
@@ -0,0 +1,38 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## v0.4.1 — 2026-08-03
6
+
7
+ ### Fixed
8
+
9
+ - **`--version` reported the wrong version.** `__version__` was a second hardcoded literal alongside `pyproject.toml` and never moved, so it sat at `0.2.0` through both the 0.3.0 and 0.4.0 releases: `trace-tests --version` printed `0.2.0` from a 0.4.0 install while `importlib.metadata` correctly returned `0.4.0`. It is now read from installed distribution metadata, so there is one source of truth and the value cannot fall behind a release again.
10
+
11
+ This mattered more than a wrong string usually would. The v0.2 profile cutover shipped in 0.4.0, and a 0.2.x suite rejects every v0.2 record, so `--version` is exactly the command someone runs to work out whether their suite matches their producer. It was the one command that could not answer.
12
+
13
+ ## v0.4.0 — 2026-07-28
14
+
15
+ ### Changed
16
+
17
+ - **BREAKING: the suite now conforms to TRACE v0.2.** `TR-ENV` requires the profile `tag:agentrust-io.com,2026:trace-v0.2` and fails a record carrying the v0.1 identifier. The v0.1 URI named `agentrust.io`, a domain this project never controlled, which RFC 4151 does not permit for a tag URI; see agentrust-io/trace-spec#107. Nothing else about the record format changed, so a producer migrates by updating the profile string and bumping `agentrust-trace` to 0.5.0.
18
+
19
+ This is a deliberate cutover rather than dual acceptance: a conformance suite that passed both identifiers would certify records minted under a domain we do not own. A v0.1 record is checked with the 0.3.x releases of this suite, which stay published.
20
+
21
+ - Registry, verifier, and documentation hosts moved from `agentrust.io` to `agentrust-io.com`.
22
+
23
+ ## v0.3.0 — 2026-07-21
24
+
25
+ - `azure-cvm-sev-snp` platform accepted (`runtime.platform`): Azure confidential VMs run SEV-SNP behind a Hyper-V paravisor (vTPM-rooted). Added to the bundled schema enum and the TR-RTE valid-platform set so Azure TRACE records pass conformance. Matches `agentrust-trace>=0.4`.
26
+
27
+ ## v0.2.0 — 2026-06-19
28
+
29
+ - DID subject support: `subject` now accepts `did:` URIs in addition to `spiffe://`.
30
+ - Embedded signature verification: plain TRACE records signed with `agentrust-trace sign_record()` are now cryptographically verified at all levels.
31
+ - SLSA Level 0: `build_provenance.slsa_level: 0` is now valid for software-only / development records.
32
+ - Software-only platform: `runtime.platform: "software-only"` accepted at Level 0.
33
+ - Private key leak detection: TR-SIG now fails records that embed a private key (`d` member) in `cnf.jwk`.
34
+
35
+ ## v0.1.0 — 2026-05-01
36
+
37
+ - Initial release with 7 test modules: TR-ENV, TR-SIG, TR-RTE, TR-POL, TR-TXN, TR-ANC, TR-SCA.
38
+ - Conformance levels 0, 1, 2.
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentrust-trace-tests
3
- Version: 0.3.0
3
+ Version: 0.4.1
4
4
  Summary: TRACE conformance test suite
5
5
  Project-URL: Homepage, https://github.com/agentrust-io/trace-tests
6
6
  Project-URL: Repository, https://github.com/agentrust-io/trace-tests
7
7
  Project-URL: Documentation, https://github.com/agentrust-io/trace-tests#readme
8
8
  Project-URL: Bug Tracker, https://github.com/agentrust-io/trace-tests/issues
9
- Author: agentrust.io
9
+ Author: agentrust-io.com
10
10
  License: Apache-2.0
11
11
  License-File: LICENSE
12
12
  Keywords: ai-agents,attestation,conformance,provenance,trace
@@ -64,7 +64,7 @@ Description-Content-Type: text/markdown
64
64
 
65
65
  > **Test suite v0.2.** Tracks [TRACE Spec v0.2](https://github.com/agentrust-io/trace-spec).
66
66
 
67
- Conformance tests for TRACE — Trust Runtime Attestation and Compliance Evidence. Run this suite against your implementation to verify it meets the spec before claiming TRACE compliance.
67
+ Conformance tests for TRACE (Trust Runtime Attestation and Compliance Evidence). Run this suite against your implementation to verify it meets the spec before claiming TRACE compliance.
68
68
 
69
69
  Seven test modules covering the full specification: envelope structure, signature algorithms, TEE runtime claims, policy binding, tool-call transcripts, SCITT transparency anchoring, and supply chain provenance.
70
70
 
@@ -27,7 +27,7 @@
27
27
 
28
28
  > **Test suite v0.2.** Tracks [TRACE Spec v0.2](https://github.com/agentrust-io/trace-spec).
29
29
 
30
- Conformance tests for TRACE — Trust Runtime Attestation and Compliance Evidence. Run this suite against your implementation to verify it meets the spec before claiming TRACE compliance.
30
+ Conformance tests for TRACE (Trust Runtime Attestation and Compliance Evidence). Run this suite against your implementation to verify it meets the spec before claiming TRACE compliance.
31
31
 
32
32
  Seven test modules covering the full specification: envelope structure, signature algorithms, TEE runtime claims, policy binding, tool-call transcripts, SCITT transparency anchoring, and supply chain provenance.
33
33
 
@@ -6,7 +6,7 @@ All TRACE test failures emit a structured error code of the form `TR-<MODULE>-<N
6
6
 
7
7
  | Code | Description | How to fix |
8
8
  |------|-------------|------------|
9
- | TR-ENV-001 | Missing or invalid `eat_profile` URI | Set `eat_profile` to `"tag:agentrust.io,2026:trace-v0.1"` |
9
+ | TR-ENV-001 | Missing or invalid `eat_profile` URI | Set `eat_profile` to `"tag:agentrust-io.com,2026:trace-v0.2"` |
10
10
  | TR-ENV-002 | `iat` is missing, not an integer, or out of range | Set `iat` to a Unix timestamp integer (e.g. `int(time.time())`) |
11
11
  | TR-ENV-003 | `subject` does not match SPIFFE URI or DID pattern | Use `spiffe://<trust-domain>/<path>` or a `did:` URI |
12
12
  | TR-ENV-004 | One or more required fields are absent | Add the missing field(s); check the [Schema Reference](https://trace.agentrust-io.com/schema) for the full required set |
@@ -47,7 +47,7 @@ All TRACE test failures emit a structured error code of the form `TR-<MODULE>-<N
47
47
  | Code | Description | How to fix |
48
48
  |------|-------------|------------|
49
49
  | TR-ANC-001 | `transparency` field missing or empty | Submit the record to a SCITT transparency log and set `transparency` to the returned receipt URI |
50
- | TR-ANC-002 | `transparency` URI does not use `https://` scheme | Only `https://` URIs are accepted; update the URI or use the agentrust registry at `https://registry.agentrust.io` |
50
+ | TR-ANC-002 | `transparency` URI does not use `https://` scheme | Only `https://` URIs are accepted; update the URI or use the agentrust registry at `https://registry.agentrust-io.com` |
51
51
 
52
52
  ## TR-SCA — Provenance
53
53
 
@@ -16,7 +16,7 @@ Level 0 records are signed with a software key. The `runtime.platform` must be `
16
16
 
17
17
  ```json
18
18
  {
19
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
19
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
20
20
  "iat": 1750000000,
21
21
  "subject": "spiffe://trust.example.org/agent/my-agent",
22
22
  "model": {
@@ -41,7 +41,7 @@ Level 0 records are signed with a software key. The `runtime.platform` must be `
41
41
  "status": "none",
42
42
  "verifier": "https://verifier.example.org"
43
43
  },
44
- "transparency": "https://registry.agentrust.io/claim/placeholder",
44
+ "transparency": "https://registry.agentrust-io.com/claim/placeholder",
45
45
  "cnf": {
46
46
  "jwk": {
47
47
  "kty": "OKP",
@@ -73,7 +73,7 @@ Level 1 adds hardware attestation. `runtime.platform` must be one of: `tpm2`, `s
73
73
 
74
74
  ```json
75
75
  {
76
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
76
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
77
77
  "iat": 1750000000,
78
78
  "subject": "spiffe://trust.example.org/agent/my-agent",
79
79
  "model": {
@@ -96,9 +96,9 @@ Level 1 adds hardware attestation. `runtime.platform` must be one of: `tpm2`, `s
96
96
  },
97
97
  "appraisal": {
98
98
  "status": "affirming",
99
- "verifier": "https://verifier.agentrust.io"
99
+ "verifier": "https://verifier.agentrust-io.com"
100
100
  },
101
- "transparency": "https://registry.agentrust.io/claim/placeholder",
101
+ "transparency": "https://registry.agentrust-io.com/claim/placeholder",
102
102
  "cnf": {
103
103
  "jwk": {
104
104
  "kty": "OKP",
@@ -133,9 +133,9 @@ Level 2 adds tool transcript and transparency anchor requirements. The `transpar
133
133
  "hash": "sha256:c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4",
134
134
  "call_count": 4
135
135
  },
136
- "transparency": "https://registry.agentrust.io/claim/01J3XKWP4NQZ8R5HT6YD7VMBCE",
136
+ "transparency": "https://registry.agentrust-io.com/claim/01J3XKWP4NQZ8R5HT6YD7VMBCE",
137
137
  "anchor": {
138
- "log_id": "https://registry.agentrust.io",
138
+ "log_id": "https://registry.agentrust-io.com",
139
139
  "leaf_hash": "sha256:f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5"
140
140
  }
141
141
  }
@@ -6,7 +6,7 @@ Tests the top-level EAT envelope structure of a TRACE Trust Record.
6
6
 
7
7
  | Test ID | Description | Positive Case | Negative Case |
8
8
  |---------|-------------|---------------|---------------|
9
- | TR-ENV-001 | `eat_profile` present and correct URI | `tag:agentrust.io,2026:trace-v0.1` | missing or wrong |
9
+ | TR-ENV-001 | `eat_profile` present and correct URI | `tag:agentrust-io.com,2026:trace-v0.2` | missing or wrong |
10
10
  | TR-ENV-002 | `iat` is a valid Unix timestamp | integer, reasonable range | string, future date |
11
11
  | TR-ENV-003 | `subject` matches SPIFFE URI or DID | `spiffe://trust.example/agent/x` or `did:key:z6Mk...` | bare string |
12
12
  | TR-ENV-004 | Required fields present | all of: eat_profile, iat, subject, model, runtime, policy, data_class, build_provenance, appraisal | missing any |
@@ -22,7 +22,7 @@ from agentrust_trace import generate_key, sign_record
22
22
  key = generate_key()
23
23
 
24
24
  record = {
25
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
25
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
26
26
  "iat": int(time.time()),
27
27
  "subject": "spiffe://trust.example.org/agent/sample",
28
28
  "model": {
@@ -49,7 +49,7 @@ record = {
49
49
  "status": "none",
50
50
  "verifier": "https://verifier.example.org",
51
51
  },
52
- "transparency": "https://registry.agentrust.io/claim/placeholder",
52
+ "transparency": "https://registry.agentrust-io.com/claim/placeholder",
53
53
  }
54
54
 
55
55
  signed = sign_record(record, key)
@@ -193,7 +193,7 @@ def build_signed_cmcp_record(platform: str = "tpm2") -> dict:
193
193
  record = {
194
194
  "cmcp_version": "1.0",
195
195
  "trace": {
196
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
196
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
197
197
  "iat": int(time.time()) - 30,
198
198
  "subject": "spiffe://cmcp.gateway/session/my-test",
199
199
  "runtime": {
@@ -228,7 +228,7 @@ Common codes you will encounter:
228
228
 
229
229
  | Code | Field | Fix |
230
230
  |------|-------|-----|
231
- | TR-ENV-001 | `eat_profile` | Must be `tag:agentrust.io,2026:trace-v0.1` |
231
+ | TR-ENV-001 | `eat_profile` | Must be `tag:agentrust-io.com,2026:trace-v0.2` |
232
232
  | TR-ENV-002 | `iat` | Must be a Unix timestamp in the last 24 hours |
233
233
  | TR-SIG-001 | `signature` | Signature missing or does not verify |
234
234
  | TR-SIG-002 | `cnf.jwk` | Key must be OKP/Ed25519 |
@@ -4,12 +4,12 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "agentrust-trace-tests"
7
- version = "0.3.0"
7
+ version = "0.4.1"
8
8
  description = "TRACE conformance test suite"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
11
11
  authors = [
12
- { name = "agentrust.io" },
12
+ { name = "agentrust-io.com" },
13
13
  ]
14
14
  keywords = ["trace", "conformance", "attestation", "ai-agents", "provenance"]
15
15
  classifiers = [
@@ -1,5 +1,5 @@
1
1
  mkdocs>=1.6.1
2
- mkdocs-material>=9.7.6
2
+ mkdocs-material>=9.7.7
3
3
  mkdocs-minify-plugin>=0.8
4
4
  pymdown-extensions>=11.0.1
5
5
  mkdocstrings[python]>=1.0.6
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://agentrust.io/schema/trace-v0.1.json",
3
+ "$id": "https://agentrust-io.com/schema/trace-v0.1.json",
4
4
  "title": "TRACE Trust Record",
5
- "description": "A TRACE v0.1 Trust Record — hardware-attested governance evidence for an AI agent execution.",
5
+ "description": "A TRACE v0.2 Trust Record — hardware-attested governance evidence for an AI agent execution.",
6
6
  "type": "object",
7
7
  "required": [
8
8
  "eat_profile", "iat", "subject", "model", "runtime", "policy",
9
9
  "data_class", "build_provenance", "appraisal", "transparency", "cnf"
10
10
  ],
11
11
  "properties": {
12
- "eat_profile": {"type": "string", "const": "tag:agentrust.io,2026:trace-v0.1"},
12
+ "eat_profile": {"type": "string", "const": "tag:agentrust-io.com,2026:trace-v0.2"},
13
13
  "iat": {"type": "integer", "minimum": 1700000000},
14
14
  "subject": {"type": "string", "pattern": "^(spiffe://|did:)"},
15
15
  "model": {
@@ -0,0 +1,20 @@
1
+ """TRACE conformance test suite."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ # Read the version from installed distribution metadata rather than restating it
6
+ # here. `pyproject.toml` is what the build and PyPI publish, so a second literal
7
+ # in this file is a copy that can fall behind silently: it sat at "0.2.0" through
8
+ # both the 0.3.0 and 0.4.0 releases, so `trace-tests --version` reported 0.2.0
9
+ # from a 0.4.0 install. That is worse than cosmetic, because the v0.2 profile
10
+ # cutover landed in 0.4.0 and `--version` is the command someone runs to find out
11
+ # whether they have a suite that accepts v0.2 records.
12
+ try:
13
+ __version__ = version("agentrust-trace-tests")
14
+ except PackageNotFoundError: # pragma: no cover - source tree with no install
15
+ # Importable without being installed (e.g. PYTHONPATH against a checkout).
16
+ # There is no metadata to read here, and guessing a number would reintroduce
17
+ # the drift this exists to prevent.
18
+ __version__ = "0.0.0+unknown"
19
+
20
+ __all__ = ["__version__"]
@@ -8,7 +8,7 @@ from typing import Any
8
8
 
9
9
  from trace_tests.result import Finding, Status
10
10
 
11
- _PROFILE = "tag:agentrust.io,2026:trace-v0.1"
11
+ _PROFILE = "tag:agentrust-io.com,2026:trace-v0.2"
12
12
  _SUBJECT_RE = re.compile(r'^(spiffe://[^/]+/.+|did:[a-z0-9]+:.+)$')
13
13
  _IAT_MIN = 1_700_000_000
14
14
 
@@ -41,7 +41,7 @@ def _build_signed_cmcp_record(*, platform: str = "tpm2", nonce: str | None = Non
41
41
  iat = int(time.time()) - 30 # fresh but not future-dated
42
42
 
43
43
  trace: dict = {
44
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
44
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
45
45
  "iat": iat,
46
46
  "subject": "spiffe://cmcp.gateway/session/conformance-test",
47
47
  "runtime": {
@@ -135,7 +135,7 @@ def _build_software_only_record() -> dict:
135
135
  record: dict = {
136
136
  "cmcp_version": "1.0",
137
137
  "trace": {
138
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
138
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
139
139
  "iat": iat,
140
140
  "subject": "spiffe://cmcp.gateway/session/level2-test",
141
141
  "runtime": {
@@ -18,7 +18,7 @@ class TestLevel0Conformance:
18
18
  jsonschema.validate(valid_level0, schema)
19
19
 
20
20
  def test_eat_profile_sentinel(self, valid_level0):
21
- assert valid_level0["eat_profile"] == "tag:agentrust.io,2026:trace-v0.1"
21
+ assert valid_level0["eat_profile"] == "tag:agentrust-io.com,2026:trace-v0.2"
22
22
 
23
23
  def test_iat_is_positive_integer(self, valid_level0):
24
24
  assert isinstance(valid_level0["iat"], int)
@@ -48,11 +48,11 @@ class TestLevel1Conformance:
48
48
 
49
49
  In the cMCP profile the eat_profile field inside trace serves the role
50
50
  of the COSE protected header content-type: it binds the record to the
51
- TRACE v0.1 specification and prevents cross-profile replay.
51
+ TRACE v0.2 specification and prevents cross-profile replay.
52
52
  """
53
53
  trace = signed_eat_fixture["trace"]
54
- assert trace.get("eat_profile") == "tag:agentrust.io,2026:trace-v0.1", (
55
- "trace.eat_profile must be 'tag:agentrust.io,2026:trace-v0.1'"
54
+ assert trace.get("eat_profile") == "tag:agentrust-io.com,2026:trace-v0.2", (
55
+ "trace.eat_profile must be 'tag:agentrust-io.com,2026:trace-v0.2'"
56
56
  )
57
57
 
58
58
  def test_signature_verifies_against_cnf_key(self, signed_eat_fixture):
@@ -57,3 +57,29 @@ def test_partial_cmcp_envelope_is_rejected(tmp_path):
57
57
  result = CliRunner().invoke(main, ["verify", "--record", str(p), "--level", "0"])
58
58
  assert result.exit_code == 2, result.output
59
59
  assert "partial cmcp-runtime envelope" in result.output
60
+
61
+
62
+ def test_version_matches_distribution_metadata():
63
+ """`--version` must report the installed distribution version.
64
+
65
+ `__version__` was a second hardcoded literal alongside `pyproject.toml` and
66
+ fell behind through two releases, so a 0.4.0 install reported 0.2.0. Since
67
+ the v0.2 profile cutover shipped in 0.4.0, `--version` was the one command
68
+ that could not tell you whether your suite accepts v0.2 records.
69
+ """
70
+ from importlib.metadata import version
71
+
72
+ expected = version("agentrust-trace-tests")
73
+ result = CliRunner().invoke(main, ["--version"])
74
+
75
+ assert result.exit_code == 0, result.output
76
+ assert expected in result.output, f"expected {expected!r} in {result.output!r}"
77
+
78
+
79
+ def test_dunder_version_is_not_a_stale_literal():
80
+ """Guard against reverting to a hardcoded `__version__`."""
81
+ from importlib.metadata import version
82
+
83
+ import trace_tests
84
+
85
+ assert trace_tests.__version__ == version("agentrust-trace-tests")
@@ -13,13 +13,13 @@ from trace_tests.loader import LoadError, load_record
13
13
 
14
14
  VALID_CMCP = {
15
15
  "cmcp_version": "1.0",
16
- "trace": {"eat_profile": "tag:agentrust.io,2026:trace-v0.1"},
16
+ "trace": {"eat_profile": "tag:agentrust-io.com,2026:trace-v0.2"},
17
17
  "gateway": {"session_id": "s1"},
18
18
  "signature": "sig",
19
19
  }
20
20
 
21
21
  VALID_TRACE = {
22
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
22
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
23
23
  "iat": 1748000000,
24
24
  "subject": "spiffe://example.org/agent/test",
25
25
  }
@@ -6,7 +6,7 @@ from trace_tests.modules.tr_env import check
6
6
  from trace_tests.result import Status
7
7
 
8
8
  _VALID = {
9
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
9
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
10
10
  "iat": int(time.time()) - 600, # fresh: 10 minutes old
11
11
  "subject": "spiffe://example.org/agent/test",
12
12
  "cnf": {"jwk": {"kty": "OKP", "crv": "Ed25519", "x": "dGVzdA"}},
@@ -28,7 +28,7 @@ def _make_signed_record() -> dict:
28
28
  record = {
29
29
  "cmcp_version": "1.0",
30
30
  "trace": {
31
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
31
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
32
32
  "iat": 1748000000,
33
33
  "subject": "spiffe://cmcp.gateway/session/unit-test",
34
34
  "runtime": {
@@ -111,7 +111,7 @@ def test_plain_trace_embedded_ed25519_signature_passes():
111
111
  x = _b64url(pub.public_bytes_raw())
112
112
 
113
113
  trace: dict = {
114
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
114
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
115
115
  "iat": 1748000000,
116
116
  "subject": "did:mesh:spiffe://example.org/agent/test",
117
117
  "runtime": {"platform": "software-only", "measurement": "sha256:" + "a" * 64},
@@ -135,7 +135,7 @@ def test_plain_trace_tampered_embedded_signature_fails():
135
135
  x = _b64url(pub.public_bytes_raw())
136
136
 
137
137
  trace: dict = {
138
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
138
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
139
139
  "iat": 1748000000,
140
140
  "subject": "did:mesh:spiffe://example.org/agent/test",
141
141
  "runtime": {"platform": "software-only", "measurement": "sha256:" + "a" * 64},
@@ -1,5 +1,5 @@
1
1
  {
2
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
2
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
3
3
  "iat": 1748000000,
4
4
  "subject": "spiffe://example.org/agent/test/001",
5
5
  "model": {"provider": "anthropic", "model_id": "claude-sonnet-4-5"},
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "cmcp_version": "1.0",
3
3
  "trace": {
4
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
4
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
5
5
  "iat": 1748000000,
6
6
  "subject": "spiffe://cmcp.gateway/session/test-session-001",
7
7
  "runtime": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
2
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
3
3
  "iat": 1748000000,
4
4
  "subject": "spiffe://example.org/agent/credit-risk/01926b4c-1234-7abc-9def-000000000001",
5
5
  "model": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
2
+ "eat_profile": "tag:agentrust-io.com,2026:trace-v0.2",
3
3
  "iat": 1748000001,
4
4
  "subject": "spiffe://example.org/agent/payments/01926b4c-1234-7abc-9def-000000000002",
5
5
  "model": {
@@ -1,20 +0,0 @@
1
- # Changelog
2
-
3
- ## Unreleased
4
-
5
- ## v0.3.0 — 2026-07-21
6
-
7
- - `azure-cvm-sev-snp` platform accepted (`runtime.platform`): Azure confidential VMs run SEV-SNP behind a Hyper-V paravisor (vTPM-rooted). Added to the bundled schema enum and the TR-RTE valid-platform set so Azure TRACE records pass conformance. Matches `agentrust-trace>=0.4`.
8
-
9
- ## v0.2.0 — 2026-06-19
10
-
11
- - DID subject support: `subject` now accepts `did:` URIs in addition to `spiffe://`.
12
- - Embedded signature verification: plain TRACE records signed with `agentrust-trace sign_record()` are now cryptographically verified at all levels.
13
- - SLSA Level 0: `build_provenance.slsa_level: 0` is now valid for software-only / development records.
14
- - Software-only platform: `runtime.platform: "software-only"` accepted at Level 0.
15
- - Private key leak detection: TR-SIG now fails records that embed a private key (`d` member) in `cnf.jwk`.
16
-
17
- ## v0.1.0 — 2026-05-01
18
-
19
- - Initial release with 7 test modules: TR-ENV, TR-SIG, TR-RTE, TR-POL, TR-TXN, TR-ANC, TR-SCA.
20
- - Conformance levels 0, 1, 2.
@@ -1,3 +0,0 @@
1
- """TRACE conformance test suite."""
2
-
3
- __version__ = "0.2.0"