Make TRACE records conform to agentrust-trace v0.2 (Level 0) - #1
Merged
Merged
Conversation
The bridge produced records in a hand-rolled shape that failed agentrust-trace-tests 7/7 (missing eat_profile/iat/subject/cnf/policy, signature over plain json.dumps instead of the JCS pre-image). Rebuild build_trace_record against the released agentrust-trace v0.2 TrustRecord model and delegate signing to agentrust_trace.sign.sign_record, so records now pass conformance at Level 0 (TR-ENV, TR-SIG, TR-POL), 8/8. Every field that would assert a strong guarantee is set to its weakest honest value, matching the project's "What it does not claim" stance: software-only runtime, origin third-party-control-plane, appraisal none, slsa_level 0. enforcement_mode is constrained to the conformance-valid set (declared is rejected because TR-POL-002 does not accept it). Tests rewritten to verify with the real agentrust_trace.verify_record and to run the conformance suite in-process. Reproduction command in the README corrected to `trace-tests verify`. integration.yaml conformance updated from pending to level-0; verified stays false pending CI. Housekeeping: git-ignore private signing keys (*-private.pem, *.key) and document generating the local demo key with openssl instead of committing it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XmyyEhv9XFUwZm2uGhefQA
Marketplace-readiness: a GitHub Actions workflow runs the exact reproduction (pytest + `trace-tests verify --level 0`) on every push and pull request across Python 3.11 and 3.12, so the Level-0 conformance claim is continuously proven rather than asserted. Adds the Apache-2.0 LICENSE text declared in pyproject. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XmyyEhv9XFUwZm2uGhefQA
CI is green on this head (pytest + `trace-tests verify --level 0`, Python 3.11
and 3.12), which is exactly the bar the README sets for the Verified claim
("pass agentrust-trace-tests in CI"). Flip integration.yaml verified to true and
scope the note: it attests Level-0 conformance via this repo's CI, not an
endorsement by the AgenTrust maintainers.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XmyyEhv9XFUwZm2uGhefQA
litzki-systems
marked this pull request as ready for review
August 23, 2026 15:21
The AgenTrust integration schema states the Verified tier is "set by maintainers during review, never self-declared", and CONTRIBUTING rule 2 treats inflated claims as grounds for removal. Revert the verified flag to false and note that the tier is granted during marketplace review. CI still proves Level-0 conformance; that evidence is what a reviewer reproduces, not a self-awarded badge. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XmyyEhv9XFUwZm2uGhefQA
The root README read as a scratch workspace note ("Local workspace for
preparing ..."), which presents a scaffold rather than a finished tool to
anyone landing on the repository. Replace it with a product front page:
what the bridge does and does not claim, install, usage, the Level-0
conformance reproduction, CI/License/conformance badges, and a pointer to the
marketplace integration directory.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XmyyEhv9XFUwZm2uGhefQA
litzki-systems
added a commit
that referenced
this pull request
Aug 25, 2026
Brings main to the real state: v0.2-conformant Ed25519-signed TRACE records (Level 0, 8/8), CI, Apache-2.0 LICENSE, product README, and the marketplace integration manifest.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
The bridge was left mid-fix: it emitted TRACE records in a hand-rolled shape that failed the official
agentrust-trace-tests7/7 (missingeat_profile/iat/subject/cnf/policy, and signing over a plainjson.dumpspre-image instead of the JCS canonical form the verifier expects).This finishes the conversion to the released
agentrust-tracev0.2 format. Generated records now pass conformance at Level 0 (TR-ENV,TR-SIG,TR-POL), 8/8, 0 failures.Changes
trace.py—build_trace_recordnow produces a v0.2TrustRecord; signing delegates toagentrust_trace.sign.sign_record(populatescnf.jwk, signs the JCS pre-image). Every strong-guarantee field is set to its weakest honest value, matching the project's "What it does not claim" stance:runtime.platform: software-only,origin.kind: third-party-control-plane,appraisal.status: none,build_provenance.slsa_level: 0.enforcement_modeis constrained to the conformance-valid set —declaredis rejected with a clear error becauseTR-POL-002does not accept it.tests/test_trace.py— rewritten to verify with the realagentrust_trace.verify_record, assert structural validity viaTrustRecord, cover tamper detection, and run the conformance suite in-process at Level 0. 7 tests pass.README.md— corrected the reproduction command totrace-tests verify --record … --level 0; added theopenssl genpkeystep so the demo key is generated locally instead of committed.integration.yaml—trace_conformance: pending → level-0;verifiedintentionally staysfalsepending CI (no self-awarded endorsement)..gitignore— ignore private signing keys (*-private.pem,*.key).Why Level 0 is the ceiling
This bridge transcribes a SOVP attestation; it does not measure a hardware TEE. The suite accepts
software-onlyonly at Level 0, and rejects it at Level 1+. Level 0 is therefore the honest maximum for a transcription bridge.Reproduction
python -m pytest integrations/litzki-sovp/tests openssl genpkey -algorithm Ed25519 -out integrations/litzki-sovp/examples/ed25519-private.pem litzki-sovp-trace --input integrations/litzki-sovp/examples/sovp-attestation.json \ --private-key integrations/litzki-sovp/examples/ed25519-private.pem --output /tmp/sovp.trace.json trace-tests verify --record /tmp/sovp.trace.json --level 0 # Result: PASS (8 checks, 0 failures)🤖 Generated with Claude Code
Generated by Claude Code