cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

commit 48ddf9d1bb7b70b2b568396f66cefb3e0f1072d1
parent d2d5cdb78ec6e4139ca5b0bb2f103d0831531177
Author: triesap <tyson@radroots.org>
Date:   Wed,  3 Jun 2026 13:21:09 -0700

validation: map SP1 setup failure diagnostics

- map SP1 setup failures to a non-invalid verifier state
- keep verifier setup failures out of invalid proof bucketing
- add focused validation receipt coverage for setup failure mapping
- keep validation receipt test imports clean across feature modes

Diffstat:
Msrc/runtime/validation_receipt.rs | 26+++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/runtime/validation_receipt.rs b/src/runtime/validation_receipt.rs @@ -1096,6 +1096,12 @@ fn proof_state_from_sp1_error(error: &RadrootsSp1TradeHostError) -> MappedSp1Pro proof_metadata_binding: "verifier_unavailable", reason_code: "sp1_verifier_unavailable", }, + RadrootsSp1TradeHostError::Sp1SetupFailed(_) => MappedSp1ProofError { + state: "sp1_verifier_setup_failed", + public_values_hash_binding: "unverified", + proof_metadata_binding: "verifier_setup_failed", + reason_code: "sp1_verifier_setup_failed", + }, _ => MappedSp1ProofError { state: "sp1_proof_invalid", public_values_hash_binding: "unverified", @@ -1342,11 +1348,12 @@ fn relay_failures(failures: Vec<DirectRelayFailure>) -> Vec<RelayFailureView> { mod tests { use super::{ RawValidationReceiptWorkerResultPayload, ValidationReceiptWorkerEvidenceSelection, - ValidationReceiptWorkerEvidenceView, WorkerEvidenceReceiptBinding, proof_state_is_invalid, - proof_verification_view_for_receipt, validation_receipt_invalid_reason_code, - worker_payload_binds_receipt, + ValidationReceiptWorkerEvidenceView, WorkerEvidenceReceiptBinding, + proof_state_from_sp1_error, proof_state_is_invalid, proof_verification_view_for_receipt, + validation_receipt_invalid_reason_code, worker_payload_binds_receipt, }; use radroots_events::kinds::KIND_TRADE_VALIDATION_RECEIPT; + use radroots_sp1_host_trade::RadrootsSp1TradeHostError; use radroots_trade::validation_receipt::{ RadrootsTradeValidationReceipt, RadrootsValidationReceiptError, RadrootsValidationReceiptProof, RadrootsValidationReceiptProofSystem, @@ -1644,6 +1651,19 @@ mod tests { } #[test] + fn sp1_setup_failed_reports_verifier_setup_failure_without_invalid_proof_state() { + let mapped = proof_state_from_sp1_error(&RadrootsSp1TradeHostError::Sp1SetupFailed( + "runtime unavailable".to_owned(), + )); + + assert_eq!(mapped.state, "sp1_verifier_setup_failed"); + assert_eq!(mapped.public_values_hash_binding, "unverified"); + assert_eq!(mapped.proof_metadata_binding, "verifier_setup_failed"); + assert_eq!(mapped.reason_code, "sp1_verifier_setup_failed"); + assert!(!proof_state_is_invalid(mapped.state)); + } + + #[test] fn invalid_receipt_errors_get_specific_reason_codes() { assert_eq!( validation_receipt_invalid_reason_code(