agentrust-trace-tests 0.1.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. agentrust_trace_tests-0.3.0/.github/CODEOWNERS +5 -0
  2. agentrust_trace_tests-0.3.0/.github/dependabot.yml +19 -0
  3. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/.github/workflows/ci.yml +2 -2
  4. agentrust_trace_tests-0.3.0/.github/workflows/codeql.yml +43 -0
  5. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/.github/workflows/contributor-check.yml +1 -1
  6. agentrust_trace_tests-0.3.0/.github/workflows/docs.yml +66 -0
  7. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/.github/workflows/release.yml +1 -1
  8. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/.github/workflows/require-maintainer-approval.yml +1 -1
  9. agentrust_trace_tests-0.3.0/.github/workflows/scorecard.yml +40 -0
  10. agentrust_trace_tests-0.3.0/CHANGELOG.md +20 -0
  11. agentrust_trace_tests-0.3.0/CNAME +1 -0
  12. agentrust_trace_tests-0.3.0/PKG-INFO +102 -0
  13. agentrust_trace_tests-0.3.0/PRIVACY.md +9 -0
  14. agentrust_trace_tests-0.3.0/README.md +65 -0
  15. agentrust_trace_tests-0.3.0/docs/error-codes.md +57 -0
  16. agentrust_trace_tests-0.3.0/docs/levels.md +167 -0
  17. agentrust_trace_tests-0.3.0/docs/modules/tr-anc.md +10 -0
  18. agentrust_trace_tests-0.3.0/docs/modules/tr-env.md +12 -0
  19. agentrust_trace_tests-0.3.0/docs/modules/tr-pol.md +10 -0
  20. agentrust_trace_tests-0.3.0/docs/modules/tr-rte.md +11 -0
  21. agentrust_trace_tests-0.3.0/docs/modules/tr-sca.md +10 -0
  22. agentrust_trace_tests-0.3.0/docs/modules/tr-sig.md +12 -0
  23. agentrust_trace_tests-0.3.0/docs/modules/tr-txn.md +10 -0
  24. agentrust_trace_tests-0.3.0/docs/modules.md +13 -0
  25. agentrust_trace_tests-0.3.0/docs/quickstart.md +114 -0
  26. agentrust_trace_tests-0.3.0/docs/stylesheets/extra.css +247 -0
  27. agentrust_trace_tests-0.3.0/docs/tutorials/ci-integration.md +209 -0
  28. agentrust_trace_tests-0.3.0/docs/tutorials/writing-conformance-tests.md +247 -0
  29. agentrust_trace_tests-0.3.0/mkdocs.yml +144 -0
  30. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/pyproject.toml +1 -1
  31. agentrust_trace_tests-0.3.0/requirements-docs.txt +6 -0
  32. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/schemas/trace-claim.json +3 -3
  33. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/__init__.py +1 -1
  34. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/loader.py +3 -1
  35. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/modules/tr_env.py +5 -3
  36. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/modules/tr_rte.py +22 -3
  37. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/modules/tr_sca.py +2 -2
  38. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/modules/tr_sig.py +29 -11
  39. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/runner.py +1 -1
  40. agentrust_trace_tests-0.3.0/tests/conftest.py +185 -0
  41. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/test_level0.py +5 -5
  42. agentrust_trace_tests-0.3.0/tests/test_level0_negative.py +268 -0
  43. agentrust_trace_tests-0.3.0/tests/test_level1.py +120 -0
  44. agentrust_trace_tests-0.3.0/tests/test_level2.py +126 -0
  45. agentrust_trace_tests-0.3.0/tests/test_software_only_platform.py +87 -0
  46. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/test_loader.py +4 -1
  47. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/test_tr_env.py +13 -1
  48. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/test_tr_rte.py +7 -0
  49. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/test_tr_sig.py +49 -0
  50. agentrust_trace_tests-0.1.0/PKG-INFO +0 -94
  51. agentrust_trace_tests-0.1.0/README.md +0 -57
  52. agentrust_trace_tests-0.1.0/tests/conftest.py +0 -39
  53. agentrust_trace_tests-0.1.0/tests/test_level1.py +0 -17
  54. agentrust_trace_tests-0.1.0/tests/test_level2.py +0 -17
  55. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/.gitignore +0 -0
  56. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/CODE_OF_CONDUCT.md +0 -0
  57. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/CONTRIBUTING.md +0 -0
  58. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/LICENSE +0 -0
  59. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/SECURITY.md +0 -0
  60. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/cli.py +0 -0
  61. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/modules/__init__.py +0 -0
  62. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/modules/tr_anc.py +0 -0
  63. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/modules/tr_pol.py +0 -0
  64. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/modules/tr_txn.py +0 -0
  65. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/src/trace_tests/result.py +0 -0
  66. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/__init__.py +0 -0
  67. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/test_schema.py +0 -0
  68. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/__init__.py +0 -0
  69. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/test_cli.py +0 -0
  70. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/test_runner.py +0 -0
  71. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/test_tr_anc.py +0 -0
  72. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/unit/test_tr_pol.py +0 -0
  73. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/vectors/invalid_missing_runtime.json +0 -0
  74. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/vectors/invalid_wrong_profile.json +0 -0
  75. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/vectors/valid_cmcp_runtime.json +0 -0
  76. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/vectors/valid_level0.json +0 -0
  77. {agentrust_trace_tests-0.1.0 → agentrust_trace_tests-0.3.0}/tests/vectors/valid_level0_with_transcript.json +0 -0
@@ -0,0 +1,5 @@
1
+ # Default owners for all files
2
+ * @agentrust-io/maintainers
3
+
4
+ # CI/CD workflow changes
5
+ .github/workflows/ @agentrust-io/maintainers
@@ -0,0 +1,19 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "monday"
8
+ open-pull-requests-limit: 5
9
+ ignore:
10
+ - dependency-name: "*"
11
+ update-types:
12
+ - "version-update:semver-major"
13
+
14
+ - package-ecosystem: "github-actions"
15
+ directory: "/"
16
+ schedule:
17
+ interval: "weekly"
18
+ day: "monday"
19
+ open-pull-requests-limit: 5
@@ -16,8 +16,8 @@ jobs:
16
16
  matrix:
17
17
  python-version: ["3.11", "3.12", "3.13"]
18
18
  steps:
19
- - uses: actions/checkout@v4
20
- - uses: actions/setup-python@v4
19
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
20
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v5.3.0
21
21
  with:
22
22
  python-version: ${{ matrix.python-version }}
23
23
  - name: Install package and test deps
@@ -0,0 +1,43 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+ schedule:
11
+ - cron: '15 3 * * 0'
12
+
13
+ permissions:
14
+ actions: read
15
+ contents: read
16
+ security-events: write
17
+
18
+ env:
19
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
20
+
21
+ jobs:
22
+ analyze:
23
+ name: Analyze (python)
24
+ runs-on: ubuntu-latest
25
+
26
+ steps:
27
+ - name: Checkout repository
28
+ uses: actions/checkout@v7
29
+
30
+ - name: Initialize CodeQL
31
+ uses: github/codeql-action/init@v4
32
+ with:
33
+ languages: python
34
+ queries: +security-extended
35
+
36
+ - name: Autobuild
37
+ uses: github/codeql-action/autobuild@v4
38
+
39
+ - name: Perform CodeQL Analysis
40
+ uses: github/codeql-action/analyze@v4
41
+ continue-on-error: true
42
+ with:
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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
30
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
31
31
  with:
32
32
  repository: agentrust-io/.github
33
33
  ref: main
@@ -0,0 +1,66 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - "docs/**"
8
+ - "mkdocs.yml"
9
+ - "requirements-docs.txt"
10
+ - "README.md"
11
+ - "CHANGELOG.md"
12
+ - "CONTRIBUTING.md"
13
+ - "CNAME"
14
+ workflow_dispatch:
15
+
16
+ permissions:
17
+ contents: write
18
+
19
+ concurrency:
20
+ group: docs-deploy
21
+ cancel-in-progress: false
22
+
23
+ jobs:
24
+ deploy:
25
+ name: Build and deploy docs
26
+ runs-on: ubuntu-latest
27
+
28
+ steps:
29
+ - uses: actions/checkout@v7
30
+ with:
31
+ fetch-depth: 0
32
+
33
+ - uses: actions/setup-python@v6
34
+ with:
35
+ python-version: "3.11"
36
+ cache: pip
37
+
38
+ - name: Install docs dependencies
39
+ run: |
40
+ pip install -r requirements-docs.txt
41
+ pip install -e "."
42
+
43
+ - name: Configure git for gh-deploy
44
+ run: |
45
+ git config user.name "github-actions[bot]"
46
+ git config user.email "github-actions[bot]@users.noreply.github.com"
47
+
48
+ - name: Assemble docs build directory
49
+ run: |
50
+ BUILD=.docs_build
51
+ mkdir -p $BUILD
52
+
53
+ if [ -d docs ]; then cp -r docs $BUILD/docs; fi
54
+
55
+ for fname in README.md CHANGELOG.md CONTRIBUTING.md CNAME; do
56
+ if [ -f "$fname" ]; then cp "$fname" "$BUILD/$fname"; fi
57
+ done
58
+
59
+ echo "Build dir contains $(find $BUILD -type f | wc -l) files"
60
+
61
+ - name: Generate build config
62
+ run: |
63
+ sed 's|^docs_dir: \.$|docs_dir: .docs_build|' mkdocs.yml > .mkdocs_build.yml
64
+
65
+ - name: Build and deploy to GitHub Pages
66
+ run: mkdocs gh-deploy --force --clean --config-file .mkdocs_build.yml
@@ -12,7 +12,7 @@ jobs:
12
12
  build:
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
- - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
15
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
16
16
 
17
17
  - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
18
18
  with:
@@ -22,7 +22,7 @@ jobs:
22
22
  if: github.event.pull_request.base.ref == 'main'
23
23
  steps:
24
24
  - name: Check for maintainer approval
25
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
25
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
26
26
  with:
27
27
  script: |
28
28
  const MAINTAINERS = ['imran-siddique'];
@@ -0,0 +1,40 @@
1
+ name: OpenSSF Scorecard
2
+
3
+ on:
4
+ branch_protection_rule:
5
+ schedule:
6
+ - cron: '30 4 * * 1'
7
+ push:
8
+ branches:
9
+ - main
10
+
11
+ permissions: read-all
12
+
13
+ jobs:
14
+ scorecard:
15
+ runs-on: ubuntu-latest
16
+ permissions:
17
+ security-events: write
18
+ id-token: write
19
+ contents: read
20
+ actions: read
21
+ steps:
22
+ - name: Checkout
23
+ uses: actions/checkout@v7
24
+ with:
25
+ persist-credentials: false
26
+ fetch-depth: 0
27
+
28
+ - name: Run Scorecard
29
+ uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
30
+ with:
31
+ results_file: scorecard-results.sarif
32
+ results_format: sarif
33
+ # publish_results requires a public repo; flip to true after the
34
+ # 2026-06-23 public launch.
35
+ publish_results: false
36
+
37
+ - name: Upload SARIF
38
+ uses: github/codeql-action/upload-sarif@v4
39
+ with:
40
+ sarif_file: scorecard-results.sarif
@@ -0,0 +1,20 @@
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.
@@ -0,0 +1 @@
1
+ tests.agentrust-io.com
@@ -0,0 +1,102 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentrust-trace-tests
3
+ Version: 0.3.0
4
+ Summary: TRACE conformance test suite
5
+ Project-URL: Homepage, https://github.com/agentrust-io/trace-tests
6
+ Project-URL: Repository, https://github.com/agentrust-io/trace-tests
7
+ Project-URL: Documentation, https://github.com/agentrust-io/trace-tests#readme
8
+ Project-URL: Bug Tracker, https://github.com/agentrust-io/trace-tests/issues
9
+ Author: agentrust.io
10
+ License: Apache-2.0
11
+ License-File: LICENSE
12
+ Keywords: ai-agents,attestation,conformance,provenance,trace
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: Apache Software License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Security
21
+ Classifier: Topic :: Software Development :: Testing
22
+ Requires-Python: >=3.11
23
+ Requires-Dist: click>=8.1
24
+ Requires-Dist: cryptography>=42
25
+ Requires-Dist: jsonschema>=4.23
26
+ Provides-Extra: dev
27
+ Requires-Dist: bandit; extra == 'dev'
28
+ Requires-Dist: mypy; extra == 'dev'
29
+ Requires-Dist: pip-audit; extra == 'dev'
30
+ Requires-Dist: pytest-cov; extra == 'dev'
31
+ Requires-Dist: pytest>=8.0; extra == 'dev'
32
+ Requires-Dist: ruff; extra == 'dev'
33
+ Provides-Extra: test
34
+ Requires-Dist: pytest-cov; extra == 'test'
35
+ Requires-Dist: pytest>=8.0; extra == 'test'
36
+ Description-Content-Type: text/markdown
37
+
38
+ <p align="center">
39
+ <img src="docs/assets/icon.svg" width="96" height="96" alt="TRACE Tests"/>
40
+ </p>
41
+
42
+ # TRACE Conformance Test Suite
43
+
44
+ ### Verify your TRACE implementation before shipping
45
+
46
+ <p align="center">
47
+ <a href="https://tests.agentrust-io.com">
48
+ <img src="https://img.shields.io/badge/%F0%9F%93%96_Full_Documentation-tests.agentrust--io.com-C17817?style=for-the-badge&logoColor=white" alt="Full Documentation" height="40">
49
+ </a>
50
+ </p>
51
+
52
+ <p align="center">
53
+ <a href="docs/quickstart.md">Quick Start</a> &nbsp;|&nbsp;
54
+ <a href="docs/modules.md">Test Modules</a> &nbsp;|&nbsp;
55
+ <a href="docs/levels.md">Conformance Levels</a> &nbsp;|&nbsp;
56
+ <a href="CHANGELOG.md">Changelog</a>
57
+ </p>
58
+
59
+ [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
60
+ [![TRACE Spec](https://img.shields.io/badge/TRACE-Spec_v0.2-0ea5e9)](https://github.com/agentrust-io/trace-spec)
61
+ [![Tests](https://img.shields.io/badge/Conformance_Tests-7_modules-green)]()
62
+ [![CI](https://github.com/agentrust-io/trace-tests/actions/workflows/ci.yml/badge.svg)](https://github.com/agentrust-io/trace-tests/actions/workflows/ci.yml)
63
+ [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white&style=flat)](https://discord.gg/9JWNpH7E)
64
+
65
+ > **Test suite v0.2.** Tracks [TRACE Spec v0.2](https://github.com/agentrust-io/trace-spec).
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.
68
+
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
+
71
+ ## Quick start
72
+
73
+ ```bash
74
+ pip install trace-tests
75
+ trace-tests verify --record path/to/trust-record.jwt --level 1
76
+ ```
77
+
78
+ ## Test modules
79
+
80
+ | Module | ID | Tests |
81
+ |---|---|---|
82
+ | Envelope | `TR-ENV` | EAT structure, required fields, `iat` validity |
83
+ | Signature | `TR-SIG` | ES256/ES384/EdDSA, key binding, chain |
84
+ | Runtime | `TR-RTE` | TEE platform, measurement format, RIM URI |
85
+ | Policy | `TR-POL` | Bundle hash, enforcement mode, TEE binding |
86
+ | Transcript | `TR-TXN` | Tool-call transcript hash binding (Phase 2+) |
87
+ | Transparency | `TR-ANC` | SCITT receipt URI, inclusion proof |
88
+ | Provenance | `TR-SCA` | SLSA level, builder URI, digest format |
89
+
90
+ ## Resources
91
+
92
+ | | |
93
+ |---|---|
94
+ | 📖 Full documentation | [tests.agentrust-io.com](https://tests.agentrust-io.com) |
95
+ | 📄 TRACE Specification | [trace-spec](https://github.com/agentrust-io/trace-spec) |
96
+ | 🗂 Test schemas | [schemas/](schemas/) |
97
+ | 💬 Discussions | [GitHub Discussions](https://github.com/orgs/agentrust-io/discussions) |
98
+ | 📋 Changelog | [CHANGELOG.md](CHANGELOG.md) |
99
+
100
+ ## Contributing
101
+
102
+ See [CONTRIBUTING.md](CONTRIBUTING.md). New test cases must include a normative spec reference, a positive case, and a negative case with a structured error code (`TR-<MODULE>-<NNN>`).
@@ -0,0 +1,9 @@
1
+ # Privacy
2
+
3
+ agentrust-trace-tests (the TRACE conformance suite) collects and transmits no personal data.
4
+
5
+ It runs locally as a command-line tool. It processes only the inputs you give it, entirely on your machine, and sends no telemetry, analytics, or usage data to agentrust-io, OPAQUE, or any third party. There is no account, login, or tracking, and no cookies or background network calls.
6
+
7
+ It reads only the record file you pass on the command line and makes no outbound calls.
8
+
9
+ Uninstalling removes it completely. Questions or corrections: https://github.com/agentrust-io/trace-tests/issues
@@ -0,0 +1,65 @@
1
+ <p align="center">
2
+ <img src="docs/assets/icon.svg" width="96" height="96" alt="TRACE Tests"/>
3
+ </p>
4
+
5
+ # TRACE Conformance Test Suite
6
+
7
+ ### Verify your TRACE implementation before shipping
8
+
9
+ <p align="center">
10
+ <a href="https://tests.agentrust-io.com">
11
+ <img src="https://img.shields.io/badge/%F0%9F%93%96_Full_Documentation-tests.agentrust--io.com-C17817?style=for-the-badge&logoColor=white" alt="Full Documentation" height="40">
12
+ </a>
13
+ </p>
14
+
15
+ <p align="center">
16
+ <a href="docs/quickstart.md">Quick Start</a> &nbsp;|&nbsp;
17
+ <a href="docs/modules.md">Test Modules</a> &nbsp;|&nbsp;
18
+ <a href="docs/levels.md">Conformance Levels</a> &nbsp;|&nbsp;
19
+ <a href="CHANGELOG.md">Changelog</a>
20
+ </p>
21
+
22
+ [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
23
+ [![TRACE Spec](https://img.shields.io/badge/TRACE-Spec_v0.2-0ea5e9)](https://github.com/agentrust-io/trace-spec)
24
+ [![Tests](https://img.shields.io/badge/Conformance_Tests-7_modules-green)]()
25
+ [![CI](https://github.com/agentrust-io/trace-tests/actions/workflows/ci.yml/badge.svg)](https://github.com/agentrust-io/trace-tests/actions/workflows/ci.yml)
26
+ [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white&style=flat)](https://discord.gg/9JWNpH7E)
27
+
28
+ > **Test suite v0.2.** Tracks [TRACE Spec v0.2](https://github.com/agentrust-io/trace-spec).
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.
31
+
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
+
34
+ ## Quick start
35
+
36
+ ```bash
37
+ pip install trace-tests
38
+ trace-tests verify --record path/to/trust-record.jwt --level 1
39
+ ```
40
+
41
+ ## Test modules
42
+
43
+ | Module | ID | Tests |
44
+ |---|---|---|
45
+ | Envelope | `TR-ENV` | EAT structure, required fields, `iat` validity |
46
+ | Signature | `TR-SIG` | ES256/ES384/EdDSA, key binding, chain |
47
+ | Runtime | `TR-RTE` | TEE platform, measurement format, RIM URI |
48
+ | Policy | `TR-POL` | Bundle hash, enforcement mode, TEE binding |
49
+ | Transcript | `TR-TXN` | Tool-call transcript hash binding (Phase 2+) |
50
+ | Transparency | `TR-ANC` | SCITT receipt URI, inclusion proof |
51
+ | Provenance | `TR-SCA` | SLSA level, builder URI, digest format |
52
+
53
+ ## Resources
54
+
55
+ | | |
56
+ |---|---|
57
+ | 📖 Full documentation | [tests.agentrust-io.com](https://tests.agentrust-io.com) |
58
+ | 📄 TRACE Specification | [trace-spec](https://github.com/agentrust-io/trace-spec) |
59
+ | 🗂 Test schemas | [schemas/](schemas/) |
60
+ | 💬 Discussions | [GitHub Discussions](https://github.com/orgs/agentrust-io/discussions) |
61
+ | 📋 Changelog | [CHANGELOG.md](CHANGELOG.md) |
62
+
63
+ ## Contributing
64
+
65
+ See [CONTRIBUTING.md](CONTRIBUTING.md). New test cases must include a normative spec reference, a positive case, and a negative case with a structured error code (`TR-<MODULE>-<NNN>`).
@@ -0,0 +1,57 @@
1
+ # Error Codes
2
+
3
+ All TRACE test failures emit a structured error code of the form `TR-<MODULE>-<NNN>`.
4
+
5
+ ## TR-ENV — Envelope
6
+
7
+ | Code | Description | How to fix |
8
+ |------|-------------|------------|
9
+ | TR-ENV-001 | Missing or invalid `eat_profile` URI | Set `eat_profile` to `"tag:agentrust.io,2026:trace-v0.1"` |
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
+ | TR-ENV-003 | `subject` does not match SPIFFE URI or DID pattern | Use `spiffe://<trust-domain>/<path>` or a `did:` URI |
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 |
13
+
14
+ ## TR-SIG — Signature
15
+
16
+ | Code | Description | How to fix |
17
+ |------|-------------|------------|
18
+ | TR-SIG-001 | Signature algorithm is not Ed25519 | Generate an Ed25519 key (`generate_key()`) and re-sign; ES256 and RS256 are not accepted |
19
+ | TR-SIG-002 | `cnf.jwk` missing or malformed | Populate `cnf.jwk` with the OKP public key `{"kty":"OKP","crv":"Ed25519","x":"..."}` — `sign_record()` does this automatically |
20
+ | TR-SIG-003 | Signature verification failed | Re-sign the record with `sign_record(record, key)`; the record fields must not have changed after signing |
21
+ | TR-SIG-004 | Private key material (`d` member) found in `cnf.jwk` | Remove the `d` field before embedding the JWK; `key_to_jwk()` returns the public-only form |
22
+
23
+ ## TR-RTE — Runtime
24
+
25
+ | Code | Description | How to fix |
26
+ |------|-------------|------------|
27
+ | TR-RTE-001 | `runtime.platform` is not a recognised TEE enum value | Use one of: `software-only`, `tpm2`, `sev-snp`, `tdx`, `opaque` |
28
+ | TR-RTE-002 | `runtime.measurement` is not a valid `sha256:` digest | Provide a 64-character hex digest prefixed with `sha256:`; for Level 0 all-zeros is conventional |
29
+ | TR-RTE-003 | RIM URI present but does not resolve to a valid reference image | Remove `runtime.rim_uri` if not using a RIM, or ensure the URI returns a valid reference manifest over HTTPS |
30
+
31
+ ## TR-POL — Policy
32
+
33
+ | Code | Description | How to fix |
34
+ |------|-------------|------------|
35
+ | TR-POL-001 | `policy.bundle_hash` is not a valid `sha256:` digest | Compute `sha256:` + hex digest of your Cedar policy bundle bytes |
36
+ | TR-POL-002 | `policy.enforcement_mode` is not `enforce`, `advisory`, or `silent` | Replace `"strict"` or `"monitor"` with `"enforce"`, `"advisory"`, or `"silent"` |
37
+
38
+ ## TR-TXN — Transcript
39
+
40
+ | Code | Description | How to fix |
41
+ |------|-------------|------------|
42
+ | TR-TXN-001 | `tool_transcript.hash` is not a valid `sha256:` digest | Set `tool_transcript.hash` to `sha256:` + 64 hex chars of the Merkle root of the tool call log |
43
+ | TR-TXN-002 | `tool_transcript.call_count` is negative or not an integer | Set `tool_transcript.call_count` to a non-negative integer (0 is valid for sessions with no tool calls) |
44
+
45
+ ## TR-ANC — Transparency
46
+
47
+ | Code | Description | How to fix |
48
+ |------|-------------|------------|
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` |
51
+
52
+ ## TR-SCA — Provenance
53
+
54
+ | Code | Description | How to fix |
55
+ |------|-------------|------------|
56
+ | TR-SCA-001 | `build_provenance.slsa_level` is not 0–4 | Set `build_provenance.slsa_level` to an integer 0–4 matching your SLSA build level |
57
+ | TR-SCA-002 | `build_provenance.digest` is not a valid `sha256:` digest | Set `build_provenance.digest` to `sha256:` + 64 hex chars of the container image or artifact digest |
@@ -0,0 +1,167 @@
1
+ # Conformance Levels
2
+
3
+ TRACE defines three conformance levels. Higher levels require all lower-level modules plus additional ones.
4
+
5
+ | Level | Required Modules | Use Case |
6
+ |-------|-----------------|----------|
7
+ | **0** | TR-ENV, TR-SIG, TR-POL | Software-only development and staging |
8
+ | **1** | Level 0 + TR-RTE, TR-SCA | Production TEE-attested records |
9
+ | **2** | Level 1 + TR-TXN, TR-ANC | Full records with transparency anchoring |
10
+
11
+ ## Level 0 — Software-only
12
+
13
+ Level 0 records are signed with a software key. The `runtime.platform` must be `"software-only"`. All-zero measurement is conventional for development use.
14
+
15
+ **Minimum conformant Level 0 record:**
16
+
17
+ ```json
18
+ {
19
+ "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
20
+ "iat": 1750000000,
21
+ "subject": "spiffe://trust.example.org/agent/my-agent",
22
+ "model": {
23
+ "provider": "anthropic",
24
+ "model_id": "claude-sonnet-4-6",
25
+ "version": "20251001"
26
+ },
27
+ "runtime": {
28
+ "platform": "software-only",
29
+ "measurement": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
30
+ },
31
+ "policy": {
32
+ "bundle_hash": "sha256:b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3",
33
+ "enforcement_mode": "enforce"
34
+ },
35
+ "data_class": "internal",
36
+ "build_provenance": {
37
+ "slsa_level": 1,
38
+ "digest": "sha256:e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6"
39
+ },
40
+ "appraisal": {
41
+ "status": "none",
42
+ "verifier": "https://verifier.example.org"
43
+ },
44
+ "transparency": "https://registry.agentrust.io/claim/placeholder",
45
+ "cnf": {
46
+ "jwk": {
47
+ "kty": "OKP",
48
+ "crv": "Ed25519",
49
+ "x": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"
50
+ }
51
+ },
52
+ "signature": "eyJhbGciOiJFZERTQSJ9..."
53
+ }
54
+ ```
55
+
56
+ **Modules tested:** TR-ENV, TR-SIG, TR-POL
57
+
58
+ **What causes a Level 0 failure:**
59
+
60
+ - `eat_profile` missing or wrong value — TR-ENV-001
61
+ - `runtime.platform` is a TEE value (e.g. `sev-snp`) but Level 0 is requested — TR-RTE-001 does not apply, but TR-ENV still checks the envelope
62
+ - `policy.enforcement_mode` is `"strict"` or `"monitor"` — TR-POL-002
63
+ - `cnf.jwk` missing or contains private key material (`d` field) — TR-SIG-002, TR-SIG-004
64
+ - Signature does not verify against `cnf.jwk` — TR-SIG-003
65
+
66
+ ---
67
+
68
+ ## Level 1 — TEE Attestation
69
+
70
+ Level 1 adds hardware attestation. `runtime.platform` must be one of: `tpm2`, `sev-snp`, `tdx`, `opaque`. The measurement must be non-zero. `appraisal.status` must be `"affirming"`.
71
+
72
+ **Minimum conformant Level 1 record** (changes from Level 0 in bold context):
73
+
74
+ ```json
75
+ {
76
+ "eat_profile": "tag:agentrust.io,2026:trace-v0.1",
77
+ "iat": 1750000000,
78
+ "subject": "spiffe://trust.example.org/agent/my-agent",
79
+ "model": {
80
+ "provider": "anthropic",
81
+ "model_id": "claude-sonnet-4-6",
82
+ "version": "20251001"
83
+ },
84
+ "runtime": {
85
+ "platform": "sev-snp",
86
+ "measurement": "sha256:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"
87
+ },
88
+ "policy": {
89
+ "bundle_hash": "sha256:b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3",
90
+ "enforcement_mode": "enforce"
91
+ },
92
+ "data_class": "confidential",
93
+ "build_provenance": {
94
+ "slsa_level": 2,
95
+ "digest": "sha256:e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6"
96
+ },
97
+ "appraisal": {
98
+ "status": "affirming",
99
+ "verifier": "https://verifier.agentrust.io"
100
+ },
101
+ "transparency": "https://registry.agentrust.io/claim/placeholder",
102
+ "cnf": {
103
+ "jwk": {
104
+ "kty": "OKP",
105
+ "crv": "Ed25519",
106
+ "x": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"
107
+ }
108
+ },
109
+ "signature": "eyJhbGciOiJFZERTQSJ9..."
110
+ }
111
+ ```
112
+
113
+ **Modules tested:** TR-ENV, TR-SIG, TR-POL, TR-RTE, TR-SCA
114
+
115
+ **What causes a Level 1 failure over Level 0:**
116
+
117
+ - `runtime.platform` is `"software-only"` — TR-RTE-001
118
+ - `runtime.measurement` is all zeros — TR-RTE-002 (all-zero is invalid at Level 1)
119
+ - `build_provenance` missing entirely — TR-SCA-001, TR-SCA-002
120
+ - `appraisal.status` is `"none"` — while not a hard schema violation, a conformant Level 1 record should carry `"affirming"`
121
+
122
+ ---
123
+
124
+ ## Level 2 — Transparency Anchoring
125
+
126
+ Level 2 adds tool transcript and transparency anchor requirements. The `transparency` field must be a resolvable HTTPS URI pointing to a SCITT receipt, not the placeholder value.
127
+
128
+ **Minimum conformant Level 2 record** (additional fields over Level 1):
129
+
130
+ ```json
131
+ {
132
+ "tool_transcript": {
133
+ "hash": "sha256:c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4",
134
+ "call_count": 4
135
+ },
136
+ "transparency": "https://registry.agentrust.io/claim/01J3XKWP4NQZ8R5HT6YD7VMBCE",
137
+ "anchor": {
138
+ "log_id": "https://registry.agentrust.io",
139
+ "leaf_hash": "sha256:f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5"
140
+ }
141
+ }
142
+ ```
143
+
144
+ **Modules tested:** TR-ENV, TR-SIG, TR-POL, TR-RTE, TR-SCA, TR-TXN, TR-ANC
145
+
146
+ **What causes a Level 2 failure over Level 1:**
147
+
148
+ - `tool_transcript.hash` missing or not a valid `sha256:` digest — TR-TXN-001
149
+ - `tool_transcript.call_count` negative or not an integer — TR-TXN-002
150
+ - `transparency` is the placeholder URI, missing, or not HTTPS — TR-ANC-001
151
+ - `anchor.leaf_hash` missing or not a valid `sha256:` digest — TR-ANC-002
152
+
153
+ ---
154
+
155
+ ## Choosing a level
156
+
157
+ - Use **Level 0** during development. Records can use `runtime.platform: "software-only"` and `build_provenance.slsa_level: 0`.
158
+ - Use **Level 1** for production deployments in a TEE (AMD SEV-SNP, Intel TDX, NVIDIA H100).
159
+ - Use **Level 2** when you need an auditable, tamper-evident log with a SCITT transparency service.
160
+
161
+ The certification program (launching 2027) will require Level 1 at minimum.
162
+
163
+ ## Related
164
+
165
+ - [Error Codes](error-codes.md) — every TR-* error with description and fix
166
+ - [Test Modules](modules/index.md) — per-module test lists with positive and negative cases
167
+ - [TRACE Trust Levels](https://trace.agentrust-io.com/trust-levels) — full specification of what each level proves
@@ -0,0 +1,10 @@
1
+ # TR-ANC — Transparency
2
+
3
+ Tests transparency anchoring via SCITT.
4
+
5
+ ## Required at Level 2+
6
+
7
+ | Test ID | Description | Positive Case | Negative Case |
8
+ |---------|-------------|---------------|---------------|
9
+ | TR-ANC-001 | `transparency` is a non-empty URI | `https://transparency.example/entries/abc123` | missing field, empty string |
10
+ | TR-ANC-002 | URI scheme is `https://` | `https://` prefix | `http://`, bare path, `ipfs://` |