Repository navigation
Description
Spec section affected
schema/trace-claim.json (runtime.platform field description) vs §3.1.1 and docs/schema.md.
Problem
The schema's field description and the specification prose state different rules for what software-only marks, and the schema is the text a validator (and most integrators) actually read.
schema/trace-claim.json, on runtime.platform:
software-only marks development-mode records with no hardware backing; they must never be treated as attested evidence.
§3.1.1:
runtime.platform: "software-only"is the honest platform value in both cases […] It is the correct value for a dev-mode record, where nothing attested the execution, and for a record transcribed from another vendor's control plane, where the party asserting the evidence also wrote the log.
and, same section:
A record whose
origin.kindis notselfMUST carryruntime.platform: "software-only", and a verifier MUST reject it otherwise.
So the spec mandates software-only on every record assembled from someone else's evidence — a class that is not "development-mode records". A consumer that reads only the schema description gets a narrower rule than the one the spec normatively states, and has no reason to look further: the description reads as complete.
docs/schema.md follows §3.1.1 (two situations), so this is two documents against one, with the outlier being the machine-adjacent one.
Same shape as #172 (docs/trust-levels.md vs schema on slsa_level), which was resolved by aligning the texts.
Proposed change
Align the schema description with §3.1.1. For example:
software-only marks records with no hardware root of trust: a development-mode execution, or a record assembled from evidence produced outside the runtime (
origin.kindother thanselfrequires this value; see §3.1.1). Such records are not attested evidence.
Wording is the editors' call; the defect is only that the two texts currently state different rules.
Backward compatibility
- Non-breaking (new optional field, informative addition)
- Breaking (removes or changes required field, changes wire format, changes algorithm set)
Description text only; the enum and validation behaviour are unchanged.
Motivation
Surfaced while mapping a software-only producer (#231): this description is the line that decides how a conformant consumer weighs every record such a producer emits, so which text is authoritative matters more than usual for a docstring.
Related issues or PRs
AI was used to revise grammar and translation, but initially I wrote it myself.
Thanks - Alex.
Activity
chernistry commentedon Aug 29, 2026
The same narrowing shows up one surface further out, in the conformance suite rather than the schema, and the argument in this issue applies to it unchanged.
Running a production software-only record —
origin.kind: self, no hardware root of trust — throughagentrust-trace-tests==0.5.1at Level 1:The Level-1 requirement itself is not in dispute — a software-only producer has no hardware measurement and should not clear a hardware-attested level. What is in dispute is the same word this issue is about: the suite tells the producer its platform value means development mode, when §3.1.1 makes
software-onlythe correct value for a production producer that has no TEE. A reader who follows the message rather than §3.1.1 concludes the value is wrong and looks for another one, and there isn't another one.#234fixes the schema description. This is the same sentence in a second repository, so the wording is worth carrying across when that lands, otherwise the narrower reading survives in the surface producers actually run.Two notes so this is not read as more than it is:
TR-RTE-004, which wants a verifier-issued nonce bound intoruntime.nonce. That one is structural and correct: a committed record cannot carry a per-verification input, so a published corpus of records tops out at Level 0 whatever the producer can attest. Not a defect in the message.Found by @lywinged while running our vectors; verified here against them at
e7e2eca.imran-siddique commentedon Aug 29, 2026
Tracking the pattern this belongs to in #247: the normative spec, the JSON Schema, the reference model and the docs state the rules and nothing says which wins. This issue is one of five instances found in three days. The ruling above stands on its own; #247 is about stopping the next one.
chernistry commentedon Sep 2, 2026
Makes sense, thanks — glad the wording issue tracks as the same defect in both places. I'll follow #247 for how the precedence between the four surfaces gets resolved; nothing further needed here from my side.
docs(schema): read runtime.platform's two situations as examples (#272)