Skip to content

TR-APR — Appraisal

Tests the evidence appraisal the record carries: the verifier's verdict, who issued it, which policy it was issued under, and when.

Required at Level 0+

Test ID Description Positive Case Negative Case
TR-APR-001 appraisal.status is one of the four values schemas/trace-claim.json enumerates affirming, warning, contraindicated, none "verified", "AFFIRMING", 7, absent; also an absent or non-object appraisal
TR-APR-002 appraisal.verifier is an absolute URI https://verifier.example.org nvidia-openshell/0.3.0 (no scheme), a URI carrying whitespace or a control character, absent
TR-APR-003 appraisal.policy_ref, when present, is an absolute URI https://policies.example.org/appraisal/v3; absent (optional, skipped) ./policies/v1, ht tp://x
TR-APR-004 appraisal.timestamp, when present, is an integer of epoch seconds and is not in the future a past epoch second; absent (optional, skipped) "1748000042" (string), a float, a boolean, an epoch second in the future

Required at Level 1+

Test ID Description Positive Case Negative Case
TR-APR-005 appraisal.status is affirming affirming none, warning, contraindicated

At Level 0 this check is skipped rather than passed. docs/levels.md's own minimum conformant Level 0 record carries "status": "none", so a Level 0 record is not asked to affirm.

Absent optional fields skip, and a skip is not a pass

policy_ref and timestamp are optional. When either is absent TR-APR reports a skip, which says the check was not performed. Reporting a pass would say the field was examined and found sound, and nothing was examined.

What TR-APR does not do

It never resolves anything. TR-APR performs no network access and no filesystem access, and it takes no resolver. TR-APR-003 checks the shape of the name of the appraisal policy; it does not fetch that policy and does not compare it against anything.

Resolving a cited object against a declared digest is TR-POL-003's work, on a different field: policy.policy_uri resolved against policy.bundle_hash. The record carries a digest for the enforced policy bundle and no digest for the appraisal policy, so there is nothing here for a second verifier to compare a retrieved bundle against. Two fields, two objects, no overlapping assertion.

Because nothing here has a referent to lose, no TR-APR code can report UNVERIFIED, and none appears in the unverified-level table in docs/levels.md. Every check either passes, fails, or skips.

appraisal.provenance_depth_verified is not checked. The schema admits it and no published sentence states what a verifier must do with it, so enforcing anything about it would be this suite inventing a requirement rather than testing one.