TrustProof Protocol defines signed action receipts: compact JWT artifacts (Ed25519/EdDSA) that bind subject + policy snapshot + action + hashed inputs/outputs + timestamp + jti + tamper-evident chain.
A receipt is portable: any verifier with the public key and protocol rules can validate it offline. The protocol is intentionally narrow: it standardizes proof format and verification semantics, not business policy or workflow orchestration.
Goal: validate incoming proofs without changing action execution paths.
verify(...) at audit/ingest boundaries.proof_jwtverify_okerror_codes[]subject.id, action, jti, timestampGoal: emit receipts for live actions and verify asynchronously.
generate(...) (or append(...) for linked flows) at action completion.verify(...) in a separate shadow validator path.chain.prev_hash, chain.entry_hashproofs_emitted / eligible_actions)Goal: require valid receipts before downstream state transitions.
verify_ok = true.verifyChain(...) success.jti requiredReplayStore for seen-jti detection (replay_risk handling)result.decision = "step_up" as explicit control pointGoal: move operational responsibilities to managed governance surfaces.
Protocol remains the source format and verification contract. Verdicto maps to operational capabilities that are out of scope for protocol core:
Use a receipt index with these fields:
proof_jwtsubject.type, subject.idactionresource.type, resource.idpolicy.policy_vresult.decision, result.reason_codeshashes.input_hash, hashes.output_hashtimestampjtichain.prev_hash, chain.entry_hashverify_ok, verify_errors[]Data minimization default:
Start with one action type (example: payout.initiate or one agent tool action).
jti with TTL