Skip to content

[pre-v1.0] Verification depth + action_receipts: two-axis verification model #66

Description

@imran-siddique

Tracking issue for the verification-depth design discussed in #50. This is maintainer-driven editorial work for v1.0, not a contributor schema merge.

Decision

Two independent verification axes, rather than a single extended depth enum:

verification:
  depth: surface | builder_chain | dependency_chain   # supply-chain axis (nests)
  action_receipts: required | optional | none          # intra-run axis (does not nest)

Rationale (from #50):

  • The supply-chain axis nests: dependency_chain implies builder_chain implies surface.
  • Action receipts do not nest with supply-chain depth: a complete per-action receipt chain can exist for an agent whose builder is unknown, and full dependency_chain trust can exist with zero action receipts. Folding action into the depth enum would imply a false ordering.

Scope of the editorial change

  1. schema/trace-claim.json
    • build_provenance.provenance_depth: surface | builder | transitive (records omitting it MUST be treated as surface, backward compatible).
    • appraisal.provenance_depth_verified: depth the verifier actually executed. Downgrade allowed, upgrade forbidden; MUST be present when build_provenance is appraised.
    • verification.action_receipts: required | optional | none, with appraisal.action_receipts_verified mirroring the same downgrade-allowed / upgrade-forbidden rule.
  2. docs/verification.md
    • Per-depth verifier obligations (surface / builder_chain / dependency_chain) and the downgrade rule.
    • Profile floors (default = surface; SLSA L2+ = builder; FIPS / EU AI Act Annex IV high-risk = transitive; cMCP reference = builder).
    • Action-receipt verification section for the required case.
  3. Settle the open transitive-coverage-URI question (collapses into the same verification object).

Why depth matters

A SLSA attestation from a trusted builder remains signature-valid even when a maintainer CI token is stolen and used to publish a poisoned input. Surface verification accepts the record; transitive rejects it. Concrete cases: Mastra @mastra/core (2026-06-17) and the CI-token-theft pattern raised on postcss#2096.

Cross-references

  • trace-spec#50 (origin discussion)
  • cmcp#337 / cmcp#339 (embodied-action evidence profile, related evidence binding)
  • demos#10 and integrations#6 (per-action receipt action_ref / Ed25519 / hash-chain shape, the reference for action_receipts: required)

Out of scope

Accepting a contributor-authored normative schema diff directly. The schema and verification.md text will land through the maintainer editorial process.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

cosai-ws4Named in the CoSAI WS4 Phase 1 review (ws4 #149) as a review targetenhancementNew feature or requestfellowshipAgenTrust Fellowship-friendly workhelp wantedExtra attention is neededpre-v1.0Editorial work targeted before v1.0

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions