agentrust-trace-tests 0.5.0__tar.gz → 0.6.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 (167) hide show
  1. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/dependabot.yml +4 -0
  2. agentrust_trace_tests-0.6.0/.github/workflows/actionlint.yml +41 -0
  3. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/workflows/ci.yml +10 -2
  4. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/workflows/codeql.yml +4 -5
  5. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/workflows/contributor-check.yml +1 -1
  6. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/workflows/docs.yml +16 -5
  7. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/workflows/release.yml +2 -2
  8. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/workflows/require-maintainer-approval.yml +1 -7
  9. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/workflows/scorecard.yml +2 -2
  10. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/CHANGELOG.md +62 -0
  11. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/CONTRIBUTING.md +8 -0
  12. agentrust_trace_tests-0.6.0/LIMITATIONS.md +103 -0
  13. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/PKG-INFO +33 -10
  14. agentrust_trace_tests-0.6.0/PRIVACY.md +9 -0
  15. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/README.md +30 -8
  16. agentrust_trace_tests-0.6.0/SPONSORS.md +19 -0
  17. agentrust_trace_tests-0.6.0/docs/assets/icon.svg +22 -0
  18. agentrust_trace_tests-0.6.0/docs/error-codes.md +70 -0
  19. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/docs/levels.md +48 -23
  20. agentrust_trace_tests-0.6.0/docs/modules/tr-anc.md +10 -0
  21. agentrust_trace_tests-0.6.0/docs/modules/tr-apr.md +51 -0
  22. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/docs/modules/tr-env.md +2 -1
  23. agentrust_trace_tests-0.6.0/docs/modules/tr-pol.md +32 -0
  24. agentrust_trace_tests-0.6.0/docs/modules/tr-rte.md +16 -0
  25. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/docs/modules/tr-sca.md +1 -1
  26. agentrust_trace_tests-0.6.0/docs/modules/tr-sig.md +12 -0
  27. agentrust_trace_tests-0.6.0/docs/modules.md +14 -0
  28. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/docs/quickstart.md +37 -10
  29. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/docs/tutorials/writing-conformance-tests.md +6 -6
  30. agentrust_trace_tests-0.6.0/hooks/seo.py +102 -0
  31. agentrust_trace_tests-0.6.0/index.md +107 -0
  32. agentrust_trace_tests-0.6.0/measurement/README.md +50 -0
  33. agentrust_trace_tests-0.6.0/measurement/REPORT.md +182 -0
  34. agentrust_trace_tests-0.6.0/measurement/scripts/enum_drift.py +159 -0
  35. agentrust_trace_tests-0.6.0/measurement/scripts/mutate_modules.py +247 -0
  36. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/mkdocs.yml +61 -31
  37. agentrust_trace_tests-0.6.0/overrides/main.html +125 -0
  38. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/pyproject.toml +4 -1
  39. agentrust_trace_tests-0.6.0/requirements/docs.txt +597 -0
  40. agentrust_trace_tests-0.6.0/requirements/release.in +4 -0
  41. agentrust_trace_tests-0.6.0/requirements/release.txt +18 -0
  42. agentrust_trace_tests-0.6.0/requirements/test.in +12 -0
  43. agentrust_trace_tests-0.6.0/requirements/test.txt +512 -0
  44. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/requirements-docs.txt +2 -2
  45. agentrust_trace_tests-0.6.0/robots.txt +38 -0
  46. agentrust_trace_tests-0.6.0/schemas/trace-claim.json +486 -0
  47. agentrust_trace_tests-0.6.0/src/trace_tests/accounting.py +1099 -0
  48. agentrust_trace_tests-0.6.0/src/trace_tests/cli.py +377 -0
  49. agentrust_trace_tests-0.6.0/src/trace_tests/inclusion.py +110 -0
  50. agentrust_trace_tests-0.6.0/src/trace_tests/modules/tr_anc.py +81 -0
  51. agentrust_trace_tests-0.6.0/src/trace_tests/modules/tr_apr.py +235 -0
  52. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/src/trace_tests/modules/tr_env.py +24 -0
  53. agentrust_trace_tests-0.6.0/src/trace_tests/modules/tr_pol.py +302 -0
  54. agentrust_trace_tests-0.6.0/src/trace_tests/modules/tr_rte.py +145 -0
  55. agentrust_trace_tests-0.6.0/src/trace_tests/modules/tr_sca.py +101 -0
  56. agentrust_trace_tests-0.6.0/src/trace_tests/modules/tr_sig.py +247 -0
  57. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/src/trace_tests/modules/tr_txn.py +5 -1
  58. agentrust_trace_tests-0.6.0/src/trace_tests/modules/unverified.py +65 -0
  59. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/src/trace_tests/report.py +240 -58
  60. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/src/trace_tests/result.py +4 -3
  61. agentrust_trace_tests-0.6.0/src/trace_tests/runner.py +194 -0
  62. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/conftest.py +77 -1
  63. agentrust_trace_tests-0.6.0/tests/test_canonicalization_boundary.py +150 -0
  64. agentrust_trace_tests-0.6.0/tests/test_canonicalization_refusals.py +100 -0
  65. agentrust_trace_tests-0.6.0/tests/test_digest_parity.py +151 -0
  66. agentrust_trace_tests-0.6.0/tests/test_docs_match_the_modules.py +301 -0
  67. agentrust_trace_tests-0.6.0/tests/test_enum_parity.py +64 -0
  68. agentrust_trace_tests-0.6.0/tests/test_findings_are_self_consistent.py +150 -0
  69. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/test_level0.py +3 -2
  70. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/test_level0_negative.py +143 -2
  71. agentrust_trace_tests-0.6.0/tests/test_level_failure_policy.py +65 -0
  72. agentrust_trace_tests-0.6.0/tests/test_measurement_harness.py +303 -0
  73. agentrust_trace_tests-0.6.0/tests/test_modules_never_raise.py +308 -0
  74. agentrust_trace_tests-0.6.0/tests/test_obligation_accounting.py +1577 -0
  75. agentrust_trace_tests-0.6.0/tests/test_openshell_import.py +55 -0
  76. agentrust_trace_tests-0.6.0/tests/test_packaged_schema_accepts_real_records.py +61 -0
  77. agentrust_trace_tests-0.6.0/tests/test_policy_resolution.py +246 -0
  78. agentrust_trace_tests-0.6.0/tests/test_policy_resolution_cli.py +169 -0
  79. agentrust_trace_tests-0.6.0/tests/test_policy_resolution_completeness.py +242 -0
  80. agentrust_trace_tests-0.6.0/tests/test_policy_resolution_reproduces.py +106 -0
  81. agentrust_trace_tests-0.6.0/tests/test_tr_anc_inclusion.py +177 -0
  82. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/unit/test_cli.py +11 -1
  83. agentrust_trace_tests-0.6.0/tests/unit/test_cli_policy_dir.py +136 -0
  84. agentrust_trace_tests-0.6.0/tests/unit/test_tr_anc.py +49 -0
  85. agentrust_trace_tests-0.6.0/tests/unit/test_tr_apr.py +233 -0
  86. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/unit/test_tr_env.py +33 -0
  87. agentrust_trace_tests-0.6.0/tests/unit/test_tr_pol_resolution.py +184 -0
  88. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/unit/test_tr_rte.py +24 -3
  89. agentrust_trace_tests-0.6.0/tests/unit/test_tr_sca.py +67 -0
  90. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/unit/test_tr_sig.py +49 -0
  91. agentrust_trace_tests-0.6.0/tests/unit/test_tr_txn.py +102 -0
  92. agentrust_trace_tests-0.6.0/tests/vectors/canonicalization/01-non-ascii-values.json +51 -0
  93. agentrust_trace_tests-0.6.0/tests/vectors/canonicalization/02-non-bmp-values.json +51 -0
  94. agentrust_trace_tests-0.6.0/tests/vectors/canonicalization/03-utf16-key-order.json +53 -0
  95. agentrust_trace_tests-0.6.0/tests/vectors/canonicalization/04-utf16-key-order-nested.json +55 -0
  96. agentrust_trace_tests-0.6.0/tests/vectors/invalid_canonical_integer_out_of_range.json +70 -0
  97. agentrust_trace_tests-0.6.0/tests/vectors/invalid_canonical_lone_surrogate.json +70 -0
  98. agentrust_trace_tests-0.6.0/tests/vectors/invalid_canonical_non_finite_float.json +70 -0
  99. agentrust_trace_tests-0.6.0/tests/vectors/invalid_canonical_plain_trace.json +34 -0
  100. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/.gitattributes +13 -0
  101. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/01-no-policy-uri.json +61 -0
  102. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/02-resolved-and-matches.json +62 -0
  103. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/03-digest-mismatch-minimal-mutation.json +62 -0
  104. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/04-digest-mismatch-different-object.json +62 -0
  105. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/05-referent-unreachable-no-route.json +62 -0
  106. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/06-resolved-and-matches-sha384.json +62 -0
  107. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/07-digest-bound-to-other-referent.json +62 -0
  108. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/08-policy-uri-is-a-relative-reference.json +62 -0
  109. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/09-sha384-bound-to-other-referent.json +62 -0
  110. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/10-policy-uri-carries-a-space.json +62 -0
  111. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/11-referent-unreachable-route-fails.json +62 -0
  112. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/README.md +192 -0
  113. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/gen_policy_resolution.py +540 -0
  114. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/policies/policy-bundle-base.json +18 -0
  115. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/policies/policy-bundle-onebyte.json +18 -0
  116. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/policies/policy-bundle-other.json +21 -0
  117. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/policies/policy-bundle-unrelated.json +13 -0
  118. agentrust_trace_tests-0.6.0/tests/vectors/policy-resolution/resolutions.json +7 -0
  119. agentrust_trace_tests-0.6.0/tests/vectors/signed_delegated_hop.json +38 -0
  120. agentrust_trace_tests-0.6.0/tests/vectors/signed_root.json +34 -0
  121. agentrust_trace_tests-0.6.0/tests/vectors/valid_appraisal_full.json +39 -0
  122. agentrust_trace_tests-0.6.0/tests/vectors/valid_openshell_import.json +43 -0
  123. agentrust_trace_tests-0.5.0/PRIVACY.md +0 -9
  124. agentrust_trace_tests-0.5.0/docs/error-codes.md +0 -57
  125. agentrust_trace_tests-0.5.0/docs/modules/tr-anc.md +0 -10
  126. agentrust_trace_tests-0.5.0/docs/modules/tr-pol.md +0 -10
  127. agentrust_trace_tests-0.5.0/docs/modules/tr-rte.md +0 -11
  128. agentrust_trace_tests-0.5.0/docs/modules/tr-sig.md +0 -12
  129. agentrust_trace_tests-0.5.0/docs/modules.md +0 -13
  130. agentrust_trace_tests-0.5.0/docs/stylesheets/extra.css +0 -247
  131. agentrust_trace_tests-0.5.0/overrides/main.html +0 -87
  132. agentrust_trace_tests-0.5.0/schemas/trace-claim.json +0 -104
  133. agentrust_trace_tests-0.5.0/src/trace_tests/cli.py +0 -211
  134. agentrust_trace_tests-0.5.0/src/trace_tests/modules/tr_anc.py +0 -34
  135. agentrust_trace_tests-0.5.0/src/trace_tests/modules/tr_pol.py +0 -40
  136. agentrust_trace_tests-0.5.0/src/trace_tests/modules/tr_rte.py +0 -76
  137. agentrust_trace_tests-0.5.0/src/trace_tests/modules/tr_sca.py +0 -43
  138. agentrust_trace_tests-0.5.0/src/trace_tests/modules/tr_sig.py +0 -148
  139. agentrust_trace_tests-0.5.0/src/trace_tests/runner.py +0 -55
  140. agentrust_trace_tests-0.5.0/tests/unit/test_tr_anc.py +0 -28
  141. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.github/CODEOWNERS +0 -0
  142. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/.gitignore +0 -0
  143. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/CNAME +0 -0
  144. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/CODE_OF_CONDUCT.md +0 -0
  145. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/LICENSE +0 -0
  146. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/SECURITY.md +0 -0
  147. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/docs/assets/og.png +0 -0
  148. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/docs/modules/tr-txn.md +0 -0
  149. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/docs/tutorials/ci-integration.md +0 -0
  150. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/src/trace_tests/__init__.py +0 -0
  151. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/src/trace_tests/loader.py +0 -0
  152. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/src/trace_tests/modules/__init__.py +0 -0
  153. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/__init__.py +0 -0
  154. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/test_level1.py +0 -0
  155. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/test_level2.py +0 -0
  156. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/test_report.py +0 -0
  157. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/test_schema.py +0 -0
  158. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/test_software_only_platform.py +0 -0
  159. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/unit/__init__.py +0 -0
  160. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/unit/test_loader.py +0 -0
  161. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/unit/test_runner.py +0 -0
  162. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/unit/test_tr_pol.py +0 -0
  163. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/vectors/invalid_missing_runtime.json +0 -0
  164. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/vectors/invalid_wrong_profile.json +0 -0
  165. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/vectors/valid_cmcp_runtime.json +0 -0
  166. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/vectors/valid_level0.json +0 -0
  167. {agentrust_trace_tests-0.5.0 → agentrust_trace_tests-0.6.0}/tests/vectors/valid_level0_with_transcript.json +0 -0
@@ -17,3 +17,7 @@ updates:
17
17
  interval: "weekly"
18
18
  day: "monday"
19
19
  open-pull-requests-limit: 5
20
+ groups:
21
+ codeql-action:
22
+ patterns:
23
+ - "github/codeql-action*"
@@ -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
@@ -9,6 +9,9 @@ on:
9
9
  env:
10
10
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
11
11
 
12
+ permissions:
13
+ contents: read
14
+
12
15
  jobs:
13
16
  test:
14
17
  runs-on: ubuntu-latest
@@ -16,12 +19,17 @@ jobs:
16
19
  matrix:
17
20
  python-version: ["3.11", "3.12", "3.13"]
18
21
  steps:
19
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
22
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
20
23
  - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v5.3.0
21
24
  with:
22
25
  python-version: ${{ matrix.python-version }}
23
26
  - name: Install package and test deps
24
- run: pip install -e ".[test]"
27
+ # Third-party dependencies come from the hash-pinned lock first; the
28
+ # local package then goes in with --no-deps, because pip cannot
29
+ # hash-pin an editable install in the same invocation.
30
+ run: |
31
+ pip install --require-hashes -r requirements/test.txt
32
+ pip install --no-deps -e .
25
33
  - name: Level 0 conformance (schema + structural)
26
34
  run: python -m pytest -v -m "level0 or negative" --tb=short
27
35
  - name: Unit tests (modules and CLI)
@@ -25,19 +25,18 @@ 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.37.4
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.4
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.37.4
41
- continue-on-error: true
40
+ uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
42
41
  with:
43
42
  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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
@@ -11,6 +11,15 @@ on:
11
11
  - "CHANGELOG.md"
12
12
  - "CONTRIBUTING.md"
13
13
  - "CNAME"
14
+ - "measurement/**"
15
+ - "PRIVACY.md"
16
+ - "overrides/**"
17
+ - "hooks/**"
18
+ - "robots.txt"
19
+ - "index.md"
20
+ - "CODE_OF_CONDUCT.md"
21
+ - "LIMITATIONS.md"
22
+ - "SPONSORS.md"
14
23
  workflow_dispatch:
15
24
 
16
25
  permissions:
@@ -26,19 +35,19 @@ jobs:
26
35
  runs-on: ubuntu-latest
27
36
 
28
37
  steps:
29
- - uses: actions/checkout@v7
38
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
30
39
  with:
31
40
  fetch-depth: 0
32
41
 
33
- - uses: actions/setup-python@v7
42
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
34
43
  with:
35
44
  python-version: "3.11"
36
45
  cache: pip
37
46
 
38
47
  - name: Install docs dependencies
39
48
  run: |
40
- pip install -r requirements-docs.txt
41
- pip install -e "."
49
+ pip install --require-hashes -r requirements/docs.txt
50
+ pip install --no-deps -e .
42
51
 
43
52
  - name: Configure git for gh-deploy
44
53
  run: |
@@ -51,8 +60,10 @@ jobs:
51
60
  mkdir -p $BUILD
52
61
 
53
62
  if [ -d docs ]; then cp -r docs $BUILD/docs; fi
63
+ # measurement/REPORT.md is in the nav as Self-verification.
64
+ if [ -d measurement ]; then cp -r measurement $BUILD/measurement; fi
54
65
 
55
- for fname in README.md CHANGELOG.md CONTRIBUTING.md CNAME; do
66
+ for fname in index.md CHANGELOG.md CONTRIBUTING.md CODE_OF_CONDUCT.md LIMITATIONS.md SPONSORS.md PRIVACY.md CNAME robots.txt; do
56
67
  if [ -f "$fname" ]; then cp "$fname" "$BUILD/$fname"; fi
57
68
  done
58
69
 
@@ -12,14 +12,14 @@ jobs:
12
12
  build:
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
15
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
16
16
 
17
17
  - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
18
18
  with:
19
19
  python-version: "3.12"
20
20
 
21
21
  - name: Install build
22
- run: python -m pip install build
22
+ run: python -m pip install --require-hashes -r requirements/release.txt
23
23
 
24
24
  - name: Build distributions
25
25
  run: python -m build
@@ -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'];
28
+ const MAINTAINERS = ['imran-siddique', 'lywinged', 'pforest', 'Qiang-Xu'];
29
29
 
30
30
  const author = context.payload.pull_request.user.login;
31
31
  if (MAINTAINERS.includes(author)) {
@@ -33,12 +33,6 @@ jobs:
33
33
  return;
34
34
  }
35
35
 
36
- const association = context.payload.pull_request.author_association;
37
- if (association === 'MEMBER' || association === 'OWNER') {
38
- core.info(`Author is ${association}, skipping gate`);
39
- return;
40
- }
41
-
42
36
  // Both pull_request_target and pull_request_review payloads
43
37
  // carry the PR at context.payload.pull_request.
44
38
  const prNumber = context.payload.pull_request.number;
@@ -20,7 +20,7 @@ jobs:
20
20
  actions: read
21
21
  steps:
22
22
  - name: Checkout
23
- uses: actions/checkout@v7
23
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
24
24
  with:
25
25
  persist-credentials: false
26
26
  fetch-depth: 0
@@ -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.37.4
38
+ uses: github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
39
39
  with:
40
40
  sarif_file: scorecard-results.sarif
@@ -2,6 +2,68 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v0.6.0 - 2026-09-25
6
+
7
+ ### Changed
8
+
9
+ - **Level 2 now verifies the anchor instead of parsing its URI (#79, closes #70).**
10
+ `TR-ANC-001` only ever checked that `transparency` was a well-formed https URI,
11
+ so any record could clear Level 2 by typing a string. The new `TR-ANC-002`
12
+ replays the record's RFC 9162 inclusion proof against the committed Merkle
13
+ root, offline and standard library only. The receipt is passed with the new
14
+ `--receipt` option on `verify` and `report`; without one, `TR-ANC-002` fails.
15
+ A record that passed Level 2 on 0.5.1 without a receipt will fail it on 0.6.0.
16
+
17
+ ### Added
18
+
19
+ - **`TR-ENV-005`: `cnf.jwk` must carry no private key material (#98).** A record
20
+ carrying its own private key (`d` and the other private JWK members) passed
21
+ the whole suite, because `TR-ENV-004` only checked that `kty` was present. The
22
+ packaged `schemas/trace-claim.json` copy is closed the same way. This is the
23
+ trace-tests half of GHSA-vc4p-h84j-7qxj; trace-spec#296 fixed the other two
24
+ schema copies.
25
+ - **`TR-APR`: appraisal well-formedness at every level (#82, closes #63).**
26
+ `appraisal` is required by the schema and no module read it. Five codes now
27
+ check the status enum, the verifier URI and appraisal timing. No network, no
28
+ filesystem, no resolver.
29
+ - **`TR-POL-003` resolves `policy_uri` against `bundle_hash` (#69).** A
30
+ `policy_resolver` callable on `runner.run` and a `--policy-dir` option on the
31
+ CLI supply the policy bytes; the check compares their digest to the record.
32
+ - Machine-readable execution accounting in CLI JSON reports for the bounded
33
+ `TR-APR-001`, `TR-POL-003` and `TR-SCA-002` pilot (#93). Accounted findings
34
+ and accounting come from one immutable execution snapshot; unreconciled
35
+ accounting is rejected on that path, the operational policy-correspondence rule
36
+ is separated from supporting schema locators and all carry value digests for
37
+ comparison against the referenced trace-spec bytes, scheduler non-execution
38
+ carries a reason, and existing verdict policy and CLI exit behavior are unchanged.
39
+
40
+ ### Fixed
41
+
42
+ - `TR-SIG` reports a record with no RFC 8785 canonical form (an integer outside
43
+ the safe range, a non-finite float) as a finding instead of raising and ending
44
+ the run (#86).
45
+ - Malformed arrays or objects in `policy.enforcement_mode`, `runtime.platform`,
46
+ `build_provenance.slsa_level` and `cnf.jwk.kty` raised
47
+ `TypeError` before the runner could return findings; boolean SLSA levels
48
+ passed as `1` and `0`. Both are now findings (#85, closes #84).
49
+
50
+ ### Internal
51
+
52
+ - The finding to level failure decision lives in one place, read by both the
53
+ CLI and the JSON report (#88).
54
+ - Release and CI actions pinned to SHAs with a token permissions floor (#97);
55
+ CI installs from hash-pinned locks (#101); actionlint and a test-environment
56
+ guard added (#100).
57
+
58
+ ## v0.5.1 — 2026-08-22
59
+
60
+ - Level 1 and Level 2 verification now requires a verifier-issued challenge via
61
+ `--expected-nonce` and checks it against the signed `runtime.nonce` using
62
+ constant-time comparison. Previously nonce binding existed only as an
63
+ assertion over the repository's own pytest fixture; the shipped runner and
64
+ CLI could report conformance for a fresh signed record containing an
65
+ attacker-chosen or replayed nonce.
66
+
5
67
  ## v0.5.0 — 2026-08-09
6
68
 
7
69
  ### Added
@@ -9,6 +9,14 @@ Thank you for your interest in contributing to the TRACE test suite.
9
9
  3. Commit using [Conventional Commits](https://www.conventionalcommits.org)
10
10
  4. Open a pull request against `main`
11
11
 
12
+ ## Using AI to contribute
13
+
14
+ Use agents. A lot of this was built with them and saying otherwise would be dishonest.
15
+
16
+ The rule is that you have to understand what you submit. If you cannot explain what your change does and how it interacts with the rest of the system, with the agent closed, do not open the pull request. Reviewing a change nobody can explain costs more than writing it did, and it becomes someone else's problem the moment it merges.
17
+
18
+ That is a rule about understanding, not about tooling.
19
+
12
20
  ## Reporting Security Issues
13
21
 
14
22
  Use [GitHub Security Advisories](https://github.com/agentrust-io/trace-tests/security/advisories/new) rather than public issues.
@@ -0,0 +1,103 @@
1
+ # Known Limitations
2
+
3
+ What this suite does **not** establish. A conformance report is only useful if the reader knows
4
+ what it was never checking, so this is the companion to the report rather than a footnote to it.
5
+
6
+ ## What a pass means
7
+
8
+ **A pass describes the record, not the agent.**
9
+ Conformance means the record is well formed, internally consistent, and carries what its level
10
+ requires. It says nothing about whether the agent behaved well, whether the policy it ran under
11
+ was a sensible policy, or whether the run should have been allowed. A record of a bad run passes
12
+ exactly as cleanly as a record of a good one.
13
+
14
+ **The suite is one implementation, not the definition.**
15
+ [trace-spec](https://github.com/agentrust-io/trace-spec) is normative. Where this suite and the
16
+ specification disagree, the specification is what other implementations were written against and
17
+ the disagreement is a bug worth reporting here.
18
+
19
+ ## Where the checks stop
20
+
21
+ **`TR-RTE` checks the shape of the attestation fields, not the attestation.**
22
+ It validates that `runtime.platform` is a recognised value, that `runtime.measurement` is a well
23
+ formed digest, and that the RIM URI parses. It does not obtain a quote, and it does not verify one
24
+ against AMD, Intel or a TPM manufacturer root. A record can satisfy `TR-RTE` at Level 1 carrying a
25
+ syntactically perfect measurement that no hardware ever produced. Verifying the quote against the
26
+ silicon vendor is the relying party's job, and `cmcp_verify` is where that happens.
27
+
28
+ **`TR-ANC-002` proves inclusion relative to the receipt you hand it.**
29
+ It replays the audit path against the Merkle root carried in that receipt. It does not fetch the
30
+ `transparency` URI, and it does not establish that the root is one a public log actually
31
+ published. A self-consistent receipt over a tree the submitter built themselves will pass. What
32
+ the check rules out is a record that has been modified since anchoring, or that was never in the
33
+ tree the receipt commits to. Establishing that the tree is real is a separate step and is not in
34
+ scope here.
35
+
36
+ `TR-ANC-001` is explicit that it checks the pointer rather than the anchor. Supplying no receipt
37
+ fails `TR-ANC-002`, so Level 2 cannot be reached on a well formed URI alone.
38
+
39
+ ## Statuses that are easy to misread
40
+
41
+ **`UNVERIFIED` is about reachability, not correctness.**
42
+ It means the check could not be run against the evidence the record cites. The evidence may be
43
+ perfectly good and simply out of reach. It is deliberately held apart from a skip so that it can
44
+ never be read as a benign omission.
45
+
46
+ Whether an unverified finding fails a run is decided per code, in
47
+ `src/trace_tests/modules/unverified.py`, not by one blanket rule. `TR-POL-003` is tolerated until
48
+ Level 2; anything the table does not name fails from Level 1, so a newly added code fails closed
49
+ rather than turning a run quietly permissive.
50
+
51
+ **A `TR-ENV` profile failure is a version mismatch before it is a defect.**
52
+ Suite 0.4.0 and later require v0.2 records. Run against a v0.1 record, the profile sentinel
53
+ produces a confident failure on a record that is fine. Check the suite and record versions before
54
+ believing that result.
55
+
56
+ **Results are perishable.**
57
+ `TR-ENV` validates `iat`, so a record that passes today can fail later with nothing about the
58
+ record having changed. A report is a statement about a moment, and it needs its timestamp to be
59
+ read correctly.
60
+
61
+ ## Who is asserting what
62
+
63
+ **Nothing here is independently assessed.**
64
+ A report is produced by whoever ran the suite, on evidence they supplied. There is no third-party
65
+ assessor and no certification programme behind it. This is why the generated report tells a reader
66
+ who does not trust the sender to go and check the record themselves rather than trusting the
67
+ summary.
68
+
69
+ ## Bounded obligation accounting
70
+
71
+ **`accounting_complete` describes the pilot, not all of TRACE.**
72
+ The accounting extension covers only `TR-APR-001`, `TR-POL-003`, and `TR-SCA-002`.
73
+ Complete means that every attempted level has exactly one reconciled row for each of those three
74
+ obligations. It does not mean every TRACE obligation was accounted for, every obligation was
75
+ evaluated, or that the report independently proves which code ran or which fields it accessed.
76
+ An obligation absent from both the bounded registry and its rows is outside this completeness
77
+ claim and cannot be discovered by registry-to-row reconciliation alone.
78
+
79
+ The pilot records `TR-SCA-002` at Level 0 as applicable but not attempted: the pinned schema
80
+ requires `build_provenance.digest`, while the scheduler first runs `TR-SCA` at Level 1. The row
81
+ carries that scheduler reason rather than silently presenting the state without an explanation.
82
+
83
+ Each source locator includes a digest of the exact value resolved at its pinned trace-spec
84
+ revision. JSON sources use RFC 6901 pointers and RFC 8785-canonical value bytes. The operational
85
+ TR-POL-003 rule uses the unique exact text of verification item 5 in the pinned specification;
86
+ its schema fragments are listed separately as structural support. A reader who holds those
87
+ pinned bytes can resolve and compare the values. The suite does not fetch or authenticate
88
+ trace-spec at report time, and a matching value does not prove that a locator is sufficient or
89
+ that its checker is correct.
90
+
91
+ Findings and accounting share one validated execution snapshot during supported report
92
+ construction. The emitted report remains editable and unsigned. Its registry hash identifies
93
+ registry content; it does not authenticate the rows, the report, or its producer.
94
+
95
+ The optional policy resolver is trusted in-process Python code supplied by the caller. The
96
+ accounted path isolates nested public runs and freezes ordinary decision inputs, but it is not a
97
+ sandbox against a callback that rewrites interpreter globals, functions, classes, or source files.
98
+
99
+ `producer_branch` is a checker-owned same-execution diagnostic. Some branches with the same
100
+ accounting meaning return indistinguishable findings, so the emitted report alone cannot
101
+ independently reconstruct every branch label. Applicability, evaluation state, prerequisite,
102
+ contribution, findings, and report tallies are revalidated at emission; the label is not
103
+ presented as independent proof of checker control flow.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: agentrust-trace-tests
3
- Version: 0.5.0
3
+ Version: 0.6.0
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
@@ -23,6 +23,7 @@ Requires-Python: >=3.11
23
23
  Requires-Dist: click>=8.1
24
24
  Requires-Dist: cryptography>=42
25
25
  Requires-Dist: jsonschema>=4.23
26
+ Requires-Dist: rfc8785>=0.1.2
26
27
  Provides-Extra: dev
27
28
  Requires-Dist: bandit; extra == 'dev'
28
29
  Requires-Dist: mypy; extra == 'dev'
@@ -41,7 +42,9 @@ Description-Content-Type: text/markdown
41
42
 
42
43
  # TRACE Conformance Test Suite
43
44
 
44
- ### Verify your TRACE implementation before shipping
45
+ Community updates and contributor highlights: [AgenTrust on LinkedIn](https://www.linkedin.com/company/agentrust-io/).
46
+
47
+ ### Check a TRACE record and see which conformance level it reaches
45
48
 
46
49
  <p align="center">
47
50
  <a href="https://tests.agentrust-io.com">
@@ -58,21 +61,22 @@ Description-Content-Type: text/markdown
58
61
 
59
62
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
60
63
  [![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)]()
64
+ [![Tests](https://img.shields.io/badge/Conformance_Tests-8_modules-green)](docs/modules.md)
62
65
  [![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)
66
+ [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white&style=flat)](https://discord.gg/grgzFEHgkj)
64
67
 
65
- > **Test suite v0.2.** Tracks [TRACE Spec v0.2](https://github.com/agentrust-io/trace-spec).
68
+ > Tracks [TRACE Spec v0.2](https://github.com/agentrust-io/trace-spec).
66
69
 
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.
70
+ Check a TRACE record, inspect the findings, and produce a reproducible conformance report. The suite checks the record and supplied evidence; a passing report does not establish that an entire implementation meets every specification requirement.
68
71
 
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.
72
+ Eight modules cover envelope, signature, runtime, policy, appraisal, transcript, transparency, and provenance checks. Read the [limitations](LIMITATIONS.md) to interpret their results.
70
73
 
71
74
  ## Quick start
72
75
 
73
76
  ```bash
74
77
  pip install agentrust-trace-tests
75
- trace-tests verify --record path/to/trust-record.jwt --level 1
78
+ trace-tests verify --record path/to/trust-record.jwt --level 1 \
79
+ --expected-nonce "$VERIFIER_CHALLENGE"
76
80
  ```
77
81
 
78
82
  ## A report you can hand to someone else
@@ -100,7 +104,25 @@ conformance report that looks authoritative and cannot be checked is the same sh
100
104
  thing as a control plane writing its own log.
101
105
 
102
106
  `report.json` is stable under `schema: agentrust-io/trace-tests/report/1` for dashboards
103
- and CI.
107
+ and CI. Reports produced by the CLI include an additive, version-tagged
108
+ `obligation_accounting` object for the bounded `TR-APR-001`, `TR-POL-003`, and
109
+ `TR-SCA-002` pilot. During supported report construction, its rows are reconciled
110
+ against the executable registry identified by `registry_id` and `registry_sha256`.
111
+ The operational `TR-POL-003` rule is identified separately from schema fragments
112
+ that support its field shape. Every source locator carries a digest of the exact
113
+ resolved value so a reader holding the pinned trace-spec bytes can re-resolve and
114
+ compare it. Accounted JSON, HTML, badge, and verdict projections consume one
115
+ immutable execution-derived snapshot. A JSON-only request does not pre-render
116
+ unrequested formats; when multiple formats are requested, they are emitted in the
117
+ CLI's existing order. The existing contribution policy continues to determine the
118
+ report verdict.
119
+ The tag identifies this emitted object shape; the repository does not currently
120
+ ship a separate formal JSON Schema for it.
121
+
122
+ This treats `report/1` as additively extensible: existing members retain their meaning,
123
+ and `obligation_accounting` is the sole new top-level member. Compatibility with
124
+ consumers that require the exact historical key set is not established. The report
125
+ remains an unsigned self-report; see [Known Limitations](LIMITATIONS.md).
104
126
 
105
127
  ## Test modules
106
128
 
@@ -123,6 +145,7 @@ and CI.
123
145
  | 🗂 Test schemas | [schemas/](schemas/) |
124
146
  | 💬 Discussions | [GitHub Discussions](https://github.com/orgs/agentrust-io/discussions) |
125
147
  | 📋 Changelog | [CHANGELOG.md](CHANGELOG.md) |
148
+ | ⚠️ Known limitations | [LIMITATIONS.md](LIMITATIONS.md) |
126
149
 
127
150
  ## Contributing
128
151
 
@@ -0,0 +1,9 @@
1
+ # Privacy
2
+
3
+ The TRACE test suite reads the record and optional evidence you supply. CLI options can also load policy bundles, receipts, and related local files. Findings and exported reports may reproduce identifiers, artifact locations, and error details from those inputs; review reports before sharing them.
4
+
5
+ The CLI does not send project telemetry or analytics and does not fetch arbitrary record URLs. Its policy-directory resolver uses local files. Library callers can supply their own resolver callbacks, whose network and data handling behavior belongs to the calling application.
6
+
7
+ Uninstalling the package does not delete input records, evidence files, exported reports, badges, logs, or backups. Manage those artifacts through your application's retention and deletion procedures.
8
+
9
+ [Report a correction](https://github.com/agentrust-io/trace-tests/issues).
@@ -4,7 +4,9 @@
4
4
 
5
5
  # TRACE Conformance Test Suite
6
6
 
7
- ### Verify your TRACE implementation before shipping
7
+ Community updates and contributor highlights: [AgenTrust on LinkedIn](https://www.linkedin.com/company/agentrust-io/).
8
+
9
+ ### Check a TRACE record and see which conformance level it reaches
8
10
 
9
11
  <p align="center">
10
12
  <a href="https://tests.agentrust-io.com">
@@ -21,21 +23,22 @@
21
23
 
22
24
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
23
25
  [![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)]()
26
+ [![Tests](https://img.shields.io/badge/Conformance_Tests-8_modules-green)](docs/modules.md)
25
27
  [![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)
28
+ [![Discord](https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white&style=flat)](https://discord.gg/grgzFEHgkj)
27
29
 
28
- > **Test suite v0.2.** Tracks [TRACE Spec v0.2](https://github.com/agentrust-io/trace-spec).
30
+ > Tracks [TRACE Spec v0.2](https://github.com/agentrust-io/trace-spec).
29
31
 
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.
32
+ Check a TRACE record, inspect the findings, and produce a reproducible conformance report. The suite checks the record and supplied evidence; a passing report does not establish that an entire implementation meets every specification requirement.
31
33
 
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.
34
+ Eight modules cover envelope, signature, runtime, policy, appraisal, transcript, transparency, and provenance checks. Read the [limitations](LIMITATIONS.md) to interpret their results.
33
35
 
34
36
  ## Quick start
35
37
 
36
38
  ```bash
37
39
  pip install agentrust-trace-tests
38
- trace-tests verify --record path/to/trust-record.jwt --level 1
40
+ trace-tests verify --record path/to/trust-record.jwt --level 1 \
41
+ --expected-nonce "$VERIFIER_CHALLENGE"
39
42
  ```
40
43
 
41
44
  ## A report you can hand to someone else
@@ -63,7 +66,25 @@ conformance report that looks authoritative and cannot be checked is the same sh
63
66
  thing as a control plane writing its own log.
64
67
 
65
68
  `report.json` is stable under `schema: agentrust-io/trace-tests/report/1` for dashboards
66
- and CI.
69
+ and CI. Reports produced by the CLI include an additive, version-tagged
70
+ `obligation_accounting` object for the bounded `TR-APR-001`, `TR-POL-003`, and
71
+ `TR-SCA-002` pilot. During supported report construction, its rows are reconciled
72
+ against the executable registry identified by `registry_id` and `registry_sha256`.
73
+ The operational `TR-POL-003` rule is identified separately from schema fragments
74
+ that support its field shape. Every source locator carries a digest of the exact
75
+ resolved value so a reader holding the pinned trace-spec bytes can re-resolve and
76
+ compare it. Accounted JSON, HTML, badge, and verdict projections consume one
77
+ immutable execution-derived snapshot. A JSON-only request does not pre-render
78
+ unrequested formats; when multiple formats are requested, they are emitted in the
79
+ CLI's existing order. The existing contribution policy continues to determine the
80
+ report verdict.
81
+ The tag identifies this emitted object shape; the repository does not currently
82
+ ship a separate formal JSON Schema for it.
83
+
84
+ This treats `report/1` as additively extensible: existing members retain their meaning,
85
+ and `obligation_accounting` is the sole new top-level member. Compatibility with
86
+ consumers that require the exact historical key set is not established. The report
87
+ remains an unsigned self-report; see [Known Limitations](LIMITATIONS.md).
67
88
 
68
89
  ## Test modules
69
90
 
@@ -86,6 +107,7 @@ and CI.
86
107
  | 🗂 Test schemas | [schemas/](schemas/) |
87
108
  | 💬 Discussions | [GitHub Discussions](https://github.com/orgs/agentrust-io/discussions) |
88
109
  | 📋 Changelog | [CHANGELOG.md](CHANGELOG.md) |
110
+ | ⚠️ Known limitations | [LIMITATIONS.md](LIMITATIONS.md) |
89
111
 
90
112
  ## Contributing
91
113
 
@@ -0,0 +1,19 @@
1
+ # Sponsors
2
+
3
+ TRACE Tests is an open-source AgenTrust project. It is sponsored by OPAQUE
4
+ Systems, which funds the engineering, infrastructure and confidential-computing
5
+ work behind it. Organisations that want to support the project are welcome to
6
+ join as sponsors.
7
+
8
+ ## Current sponsors
9
+
10
+ ### OPAQUE Systems
11
+
12
+ Founding engineering and infrastructure sponsor, and contributor to the TRACE
13
+ conformance ecosystem.
14
+
15
+ ## Recognition policy
16
+
17
+ Sponsor recognition records support for the project. It does not represent an
18
+ endorsement of a sponsor's products or grant influence over conformance
19
+ criteria, test outcomes, or release decisions.
@@ -0,0 +1,22 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" width="400" height="400" role="img" aria-label="TRACE Tests">
2
+ <title>TRACE Tests</title>
3
+ <defs>
4
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
5
+ <stop offset="0%" stop-color="#FFFFFF"/>
6
+ <stop offset="100%" stop-color="#F2F4F7"/>
7
+ </linearGradient>
8
+ <linearGradient id="brand" x1="0" y1="0" x2="1" y2="1">
9
+ <stop offset="0%" stop-color="#15294B"/>
10
+ <stop offset="100%" stop-color="#1B5EA0"/>
11
+ </linearGradient>
12
+ </defs>
13
+ <rect width="400" height="400" fill="url(#bg)"/>
14
+ <path d="M200,58 L326,112 L326,224 C326,298 268,340 200,360 C132,340 74,298 74,224 L74,112 Z"
15
+ fill="url(#brand)" opacity="0.10" stroke="url(#brand)" stroke-width="3.5" stroke-linejoin="round"/>
16
+ <!-- Glyph: a conformance seal. The suite either passes an implementation or it does not. -->
17
+ <circle cx="200" cy="212" r="64" fill="url(#brand)" opacity="0.12"/>
18
+ <circle cx="200" cy="212" r="64" fill="none" stroke="url(#brand)" stroke-width="4"/>
19
+ <!-- Exactly one red element: the verdict. -->
20
+ <path d="M170,212 L192,236 L232,188" fill="none" stroke="#B91C1C" stroke-width="17"
21
+ stroke-linecap="round" stroke-linejoin="round"/>
22
+ </svg>