You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Spec section affected
§3.1 (Logical schema), §3.2 (Wire format), §3.3 (Verification), and §4.3
(Bindings TRACE adds), as carried by schema/trace-claim.json.
Problem
The observation
Four citation fields in the Trust Record carry a bare URI and no digest, so
what a record cites cannot be checked to be what was appraised.
At 5c69dc1, schema/trace-claim.json carries
four citation fields that are a bare URI with no digest member beside them: appraisal.policy_ref ("URI to the appraisal policy used."), transparency (the SCITT receipt URI), runtime.rim_uri, and model.aibom_uri (appraisal.verifier is also a bare URI but names the
verifier rather than an artifact, and is not counted). Three surfaces pair the URI with a
digest: policy.policy_uri beside policy.bundle_hash, tool_transcript.transcript_uri beside tool_transcript.hash, and build_provenance.provenance_uri beside build_provenance.digest; the references[].digest member is optional, "when the producer holds it at issue
time". The four are top-level fields of the record, not entries in references; the rules #226 quotes for that mechanism
do not reach them. appraisal.policy_ref appears in spec/trace-v0.2.md once, at line
241, as an example value.
The one bound object shows the spec already knows how: policy.bundle_hash
is required, patterned ^sha(256:[0-9a-f]{64}|384:[0-9a-f]{96})$, described
as "SHA-256 or SHA-384 digest of the policy bundle in force at execution
time", and the spec prose states the binding in its own words (line 590):
"TRACE adds the binding: the policy bundle hash is sealed to the TEE
measurement". #276 (opened 2026-09-03) is doing the same work
for delegation.parent_record_hash, stating a preimage the schema alone left
open.
The consequence
A second verifier resolving the same URI at appraisal-check time verifies
whatever is deployed at that moment, not what was appraised. Where
resolution fails outright, #190 and now #279 govern what the verifier records; where it
succeeds, nothing at this head makes "the same object" checkable. The tree
states the mechanism for schemas in its own words:
"A validator built from the bundle file alone resolves that by fetching the
published schema over the network, so it checks a nested statement against
whatever is deployed rather than against the file next to it, and with no
network it is unresolvable."
(tests/test_safe_integer_range.py lines 607-610 at 5c69dc1)
Decide one of three, on the record: digest binding of cited evidence is a
norm in v0.2; it is a profile option; or it is explicitly out of scope. Any
of the three closes this issue. Nothing is proposed beyond the decision: no
schema change is attached, and this is not a defect report. It is not #279's question either: that tracker names how
absence is recorded, per surface; this one asks whether presence can be
bound.
Backward compatibility
Non-breaking (new optional field, informative addition)
Breaking (removes or changes required field, changes wire format, changes algorithm set)
Motivation
#271 made appraisal outcomes reproducible from
retained facts, and #279's fifth discipline (no
positive verdict by default) is the same rule one layer up; the citations
those outcomes rest on are the remaining unbound layer.
Measured at 5c69dc1, 2026-09-03T23:02:28Z: 21 open
issues and 6 open PRs, none holding this question.
Spec section affected
§3.1 (Logical schema), §3.2 (Wire format), §3.3 (Verification), and §4.3
(Bindings TRACE adds), as carried by
schema/trace-claim.json.Problem
The observation
Four citation fields in the Trust Record carry a bare URI and no digest, so
what a record cites cannot be checked to be what was appraised.
At 5c69dc1,
schema/trace-claim.jsoncarriesfour citation fields that are a bare URI with no digest member beside them:
appraisal.policy_ref("URI to the appraisal policy used."),transparency(the SCITT receipt URI),runtime.rim_uri, andmodel.aibom_uri(appraisal.verifieris also a bare URI but names theverifier rather than an artifact, and is not counted). Three surfaces pair the URI with a
digest:
policy.policy_uribesidepolicy.bundle_hash,tool_transcript.transcript_uribesidetool_transcript.hash, andbuild_provenance.provenance_uribesidebuild_provenance.digest; thereferences[].digestmember is optional, "when the producer holds it at issuetime". The four are top-level fields of the record, not entries in
references; the rules #226 quotes for that mechanismdo not reach them.
appraisal.policy_refappears inspec/trace-v0.2.mdonce, at line241, as an example value.
The one bound object shows the spec already knows how:
policy.bundle_hashis required, patterned
^sha(256:[0-9a-f]{64}|384:[0-9a-f]{96})$, describedas "SHA-256 or SHA-384 digest of the policy bundle in force at execution
time", and the spec prose states the binding in its own words (line 590):
"TRACE adds the binding: the policy bundle hash is sealed to the TEE
measurement". #276 (opened 2026-09-03) is doing the same work
for
delegation.parent_record_hash, stating a preimage the schema alone leftopen.
The consequence
A second verifier resolving the same URI at appraisal-check time verifies
whatever is deployed at that moment, not what was appraised. Where
resolution fails outright, #190 and now
#279 govern what the verifier records; where it
succeeds, nothing at this head makes "the same object" checkable. The tree
states the mechanism for schemas in its own words:
Where this has been raised
policy that produced its verdict by bare URI: no digest, no resolution step".
resolve a cited object reports a lower depth, or prose, or a third
classification, or nothing".
marker; this question is the binding half, one layer below it.
as a first-class outcome) is the pattern an answer here would join, now
extracted as a general discipline in Absence of evidence needs a name on every verifier surface: six threads, one primitive #279.
six threads: what a verifier says when it could not establish something.
This question is one layer below it: what makes "established" reproducible
against the cited object. An answer here gives its
spec: where a verifier records an unresolvable citation: the cross-surface question from #187's review #190 row a determinate object to record.
parent_record_hash(ruled 2026-09-03; normative text in spec: state what delegation.parent_record_hash is a digest of #276); it does
not hold this question.
software-only producers; its thread states its own boundary against
spec: where a verifier records an unresolvable citation: the cross-surface question from #187's review #190's enum; it does not hold this question.
Proposed change
Decide one of three, on the record: digest binding of cited evidence is a
norm in v0.2; it is a profile option; or it is explicitly out of scope. Any
of the three closes this issue. Nothing is proposed beyond the decision: no
schema change is attached, and this is not a defect report. It is not
#279's question either: that tracker names how
absence is recorded, per surface; this one asks whether presence can be
bound.
Backward compatibility
Motivation
#271 made appraisal outcomes reproducible from
retained facts, and #279's fifth discipline (no
positive verdict by default) is the same rule one layer up; the citations
those outcomes rest on are the remaining unbound layer.
Measured at 5c69dc1, 2026-09-03T23:02:28Z: 21 open
issues and 6 open PRs, none holding this question.