Skip to content

Commit 5b367fb

Browse files
committed
docs(decision-receipt): add SLSA Provenance composition via ResourceDescriptor
Aligns this predicate with the agent-commit SLSA build type so that a SLSA provenance attestation and a Decision Receipt attestation about the same subject compose cleanly without cross-signing trust domains. Additions: - New "Relationship to SLSA Provenance" section explaining that the receipt signer (supervisor-hook identity) is deliberately distinct from the SLSA provenance signer (builder-platform identity), and that composition happens via a ResourceDescriptor reference in the SLSA byproducts, not by inlining the receipt content inside the SLSA envelope. - A worked example of the byproduct entry as it appears in an agent-commit provenance, including `predicateType`, `signerRole: "supervisor-hook"`, chain length, and genesis/final receipt hashes. Pattern tracks the companion PR at arewm/refs.arewm.com#2 (agent-commit v0.2 update). - Three-step verifier flow for consuming both attestations: verify SLSA signature against builder identity; fetch, digest-check, and verify the referenced receipt attestation against the supervisor identity named in `issuerId`; cross-reference subjects and interpret the chain per this predicate's semantics. - Clarification that `issuerId` (concrete signing identity) and the SLSA byproduct's `signerRole` annotation (logical role of that identity relative to the builder) are complementary fields, not duplicative. - Changelog and References updated to point at the agent-commit build type and slsa-framework/slsa#1594. No changes to the predicate schema or field semantics. Purely additive documentation on how this predicate composes with SLSA. Refs: arewm/refs.arewm.com#1, arewm/refs.arewm.com#2 (agent-commit composition) slsa-framework/slsa#1594 (SLSA-for-agents)
1 parent d471f84 commit 5b367fb

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

spec/predicates/decision-receipt.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,55 @@ additions:
277277
}
278278
```
279279

280+
## Relationship to SLSA Provenance
281+
282+
Decision receipts and SLSA Provenance attest to different properties of the
283+
same subject. SLSA Provenance attests to *how an artifact was produced* (build
284+
inputs, steps, and observed runtime behavior) and is signed by the builder
285+
platform identity. A Decision Receipt attests to *what the policy-enforcement
286+
layer authorized at a specific call* and is signed by the supervisor identity
287+
that runs the policy gate. These are distinct trust domains. Cross-signing
288+
under the builder's key would obscure the supervisor's identity in downstream
289+
verification.
290+
291+
The two compose via the `ResourceDescriptor` reference pattern. A SLSA
292+
Provenance attestation records that Decision Receipt attestations exist for
293+
the same subject by including a byproduct entry with the receipt attestation's
294+
digest, URI, and predicate type. The builder does not cross-sign the receipt
295+
content; it records its existence.
296+
297+
Example byproduct entry in a SLSA provenance (adapted from the
298+
[`agent-commit/v0.2` build type](https://refs.arewm.com/agent-commit/v0.2)):
299+
300+
```json
301+
{
302+
"name": "decision-receipts",
303+
"digest": { "sha256": "a8f3c9d2e1b7465f..." },
304+
"uri": "oci://registry/org/agent-session/run-xyz/receipts:sha256-a8f3c9d2",
305+
"annotations": {
306+
"predicateType": "https://veritasacta.com/attestation/decision-receipt/v0.1",
307+
"signerRole": "supervisor-hook",
308+
"chainLength": 47,
309+
"genesisReceiptHash": "sha256:a8f3c9d2e1b7465f",
310+
"finalReceiptHash": "sha256:e4d61f7a09b8cd34"
311+
}
312+
}
313+
```
314+
315+
A consumer fetching both:
316+
317+
1. Verifies the SLSA provenance DSSE signature against the builder identity.
318+
2. Fetches the receipt attestation at the referenced URI, checks its digest
319+
matches the byproduct entry, then verifies its DSSE signature against the
320+
supervisor identity named by `issuerId`.
321+
3. Cross-references the receipt's subject against the SLSA provenance subject
322+
and interprets the chain using this predicate's semantics.
323+
324+
The `issuerId` in this predicate and the `signerRole` annotation in the SLSA
325+
byproduct are complementary: `issuerId` is the concrete identity (key
326+
fingerprint or DID) that signed the receipt, while `signerRole` is the logical
327+
role of that identity relative to the builder.
328+
280329
## Changelog and Migrations
281330

282331
### v0.1 (initial)
@@ -285,14 +334,19 @@ additions:
285334
- Supports software agent tool calls and physical sensor readings.
286335
- Chain integrity via `previousReceiptDigest`.
287336
- Compatible with Sigstore Rekor anchoring via DSSE envelope.
337+
- Composes with SLSA Provenance via `ResourceDescriptor` references in
338+
byproducts; the builder records the receipt attestation's digest and URI
339+
without cross-signing its content.
288340

289341
## References
290342

291343
- [IETF draft-farley-acta-signed-receipts](https://datatracker.ietf.org/doc/draft-farley-acta-signed-receipts/) -- Receipt wire format
292344
- [RFC 8032](https://datatracker.ietf.org/doc/html/rfc8032) -- Ed25519 digital signatures
293345
- [RFC 8785](https://datatracker.ietf.org/doc/html/rfc8785) -- JCS canonicalization
346+
- [agent-commit build type](https://refs.arewm.com/agent-commit/v0.2) -- SLSA Provenance build type for AI-agent-produced commits; references this predicate via `ResourceDescriptor` in byproducts
294347
- [protect-mcp](https://www.npmjs.com/package/protect-mcp) -- Reference implementation (npm, 10K+ monthly downloads)
295348
- [@veritasacta/verify](https://www.npmjs.com/package/@veritasacta/verify) -- Offline verification CLI
296349
- [Sigstore Rekor integration](https://github.com/sigstore/rekor/issues/2798) -- Transparency log anchoring (working PoC)
350+
- [SLSA-for-agents discussion](https://github.com/slsa-framework/slsa/issues/1594) -- Composition of build provenance, agent identity, and decision receipts
297351
- [Microsoft Agent Governance Toolkit](https://github.com/microsoft/agent-governance-toolkit/pull/667) -- Enterprise consumer (merged)
298352
- [AWS Cedar for Agents](https://github.com/cedar-policy/cedar-for-agents/pull/64) -- Policy engine WASM bindings (merged)

0 commit comments

Comments
 (0)