agentrust-trace-adapters
Build TRACE Trust Records from evidence another system produced, without fabricating what is not there.
Why this exists
An adapter over someone else's runtime governance product is worth building for one reason: it states, in a form a machine can read, exactly what that evidence is worth next to a hardware-attested record. A record built here carries three signals a consumer can key on without reading prose:
| Field | Value | Meaning |
|---|---|---|
origin.kind |
third-party-control-plane or log-import |
Something else produced the evidence; this record was assembled from it |
runtime.platform |
software-only |
No hardware root. TRACE 0.7.0 rejects any other platform when origin.kind is not self |
appraisal.status |
none |
Nobody appraised the evidence. Transcribing is not appraising |
None of the three is a parameter. An adapter that could set them would eventually set them wrong.
If the source separately produces a signed appraisal result, use
AppraisalEvidence / appraisal_from_evidence only after verifying that
signature. The contract requires a named verifier and appraisal-policy
reference. A vendor's bare ALLOW/DENY result is still a policy decision, not an
appraisal of the evidence behind that decision.
That argument only holds if the rest of the record is true, which is the harder half.
The failure this package prevents
Before it existed, this repository contained one vendor-to-TRACE adapter. Its output failed TrustRecord validation on seven counts:
model.weights_digest 'sha256:placeholder-no-model'
runtime.platform 'software-simulated' (not in the enum)
runtime.measurement 'sha384:000...000'
tool_transcript.hash 't1' (not a hash at all)
build_provenance.digest 'sha256:placeholder'
Five of those are the same mistake: a required-shaped field with nothing real to put in it, so a placeholder went in. Nothing in CI noticed, because nothing validated the output.
So every constructor here takes bytes, not names of bytes, and raises MissingEvidence rather than degrading:
digest_bytes("policy-v1.2") # TypeError: hashing a description of bytes is not a digest
digest_bytes(b"") # MissingEvidence: the digest of nothing is a valid-looking hash of an absence
PolicyEvidence(bundle=b"") # MissingEvidence: needs the policy bundle bytes
build_record(..., workload_digest=None) # MissingEvidence: nothing truthful to default it to
A record nobody can build is a truthful outcome. A record full of placeholders is not.
Use
from agentrust_trace_adapters import PolicyEvidence, SourceSystem, build_record
record = build_record(
source=SourceSystem(
producer="vendor-gateway/2.1",
source_event_id="evt-7f3a",
),
subject="spiffe://example.org/agent/support-bot",
model_provider="anthropic",
model_id="claude-sonnet-4-6",
# The policy bytes your deployment enforces. Most control planes do not put
# the bundle in their telemetry; that is not a reason to hash something else.
policy=PolicyEvidence(bundle=open("policy.cedar", "rb").read()),
data_class="internal",
workload_digest="sha256:...", # the image or artifact the producer reports
jwk=public_jwk,
)
NVIDIA OpenShell
OpenShellEvidence binds the two policy layers and the complete machine-readable
runtime transcript into one Level 0 record:
from agentrust_trace_adapters import OpenShellEvidence, build_openshell_record
evidence = OpenShellEvidence(
sandbox_id="sbx-123",
policy_revision="42",
openshell_policy=open("effective-policy.yaml", "rb").read(),
acs_manifest=open("agent-control.yaml", "rb").read(),
ocsf_jsonl=open("openshell-ocsf.jsonl", "rb").read(),
acs_decisions=tuple(acs_decisions),
capture_start=1775014138000,
capture_end=1775014199000,
capture_complete=True,
openshell_version="0.0.105",
)
record = build_openshell_record(
evidence,
subject="spiffe://example.org/agent/support-bot",
model_provider="anthropic",
model_id="claude-sonnet-4-6",
data_class="internal",
workload_digest="sha256:...",
jwk=public_jwk,
)
The adapter refuses incomplete capture, malformed or non-OpenShell OCSF events, missing policy bytes, or a missing policy revision. It does not infer hardware attestation from an OpenShell compute driver.
Signing is not here. It belongs to agentrust_trace.sign, and an adapter that both assembles and signs invites a caller to skip looking at what it assembled.
Two questions worth answering before you write an adapter
Does the producer expose the policy bundle it enforced? If not, you supply it: an operator knows the policy it runs even when its vendor's export does not carry it. If nobody can produce those bytes, the record cannot honestly carry a policy.bundle_hash, and it should not be built.
Does the producer report the artifact it ran? build_provenance.digest is required by the schema and there is nothing truthful to default it to.
If both answers are no, the finding is that the evidence does not support a Trust Record. That is a result, not a blocker to route around.
What runtime.measurement means here
It is a deterministic digest over the identifying inputs (producer, subject, policy bundle hash), not a hardware measurement. The schema requires the field and there is no measurement to put in it; the same shape as the sandbox adapter in agentrust-trace. Two records over the same inputs agree, a changed input is visible, and platform: software-only carries the fact that nothing measured it.
Tests
26 tests, one per way a record could validate and still be untrue, including two that parse the built record with the real TrustRecord model. That last pair is what the previous adapter did not have.
Licence
Apache-2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentrust_trace_adapters-0.1.0.tar.gz.
File metadata
- Download URL: agentrust_trace_adapters-0.1.0.tar.gz
- Upload date:
- Size: 18.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
519cbdb1064ad157fdb8068d7de227d135760022d9088378e94840c27ff134b0
|
|
| MD5 |
01b114e8631be2903266800d1e596fba
|
|
| BLAKE2b-256 |
b6aa808e7c40351a5b33e636632415210829ae5cde35006c3f1dac99da1fc15c
|
Provenance
The following attestation bundles were made for agentrust_trace_adapters-0.1.0.tar.gz:
Publisher:
trace-adapters-publish.yml on agentrust-io/integrations
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentrust_trace_adapters-0.1.0.tar.gz -
Subject digest:
519cbdb1064ad157fdb8068d7de227d135760022d9088378e94840c27ff134b0 - Sigstore transparency entry: 2461114317
- Sigstore integration time:
-
Permalink:
agentrust-io/integrations@2f8e92164a911420e62747bfdaf9a231534ad06a -
Branch / Tag:
refs/tags/trace-adapters-v0.1.0 - Owner: https://github.com/agentrust-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
trace-adapters-publish.yml@2f8e92164a911420e62747bfdaf9a231534ad06a -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentrust_trace_adapters-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agentrust_trace_adapters-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cb6ae0cd9a58b901367f8db3d25d4f71f1d5453d5684d36c7ba0e799c16a66c
|
|
| MD5 |
d602395a7f3ee413f1f0e7ca36cd8778
|
|
| BLAKE2b-256 |
a455fb944d6f0f104d6d618be49e5172e65722bd785313e51be8c09be6538739
|
Provenance
The following attestation bundles were made for agentrust_trace_adapters-0.1.0-py3-none-any.whl:
Publisher:
trace-adapters-publish.yml on agentrust-io/integrations
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentrust_trace_adapters-0.1.0-py3-none-any.whl -
Subject digest:
8cb6ae0cd9a58b901367f8db3d25d4f71f1d5453d5684d36c7ba0e799c16a66c - Sigstore transparency entry: 2461114341
- Sigstore integration time:
-
Permalink:
agentrust-io/integrations@2f8e92164a911420e62747bfdaf9a231534ad06a -
Branch / Tag:
refs/tags/trace-adapters-v0.1.0 - Owner: https://github.com/agentrust-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
trace-adapters-publish.yml@2f8e92164a911420e62747bfdaf9a231534ad06a -
Trigger Event:
push
-
Statement type: