diff --git a/src/v3/compiler/src/test_runner.rs b/src/v3/compiler/src/test_runner.rs index a319c859f0c..a4e0344c192 100644 --- a/src/v3/compiler/src/test_runner.rs +++ b/src/v3/compiler/src/test_runner.rs @@ -2338,8 +2338,13 @@ impl<'a> TestRunner<'a> { || (subject_lineage.as_str() == "v2_oracle_cost" && oracle_lineage.as_str() == "v3_program_cost"); if !pairing_ok { + // E8/W1: unsupported output producers must stay fail-closed until + // producer identity and typed observation normalization are declared. + // Dissolution targets: `rust_emit_output` -> PB-Runtime generated + // target-language tests; `dag_eval_output` -> PR-B eager evaluator + // plus witness construction. return ClaimResult::NotYetImplemented(format!( - "DifferentialEquals(cost): only the (v3_program_cost, v2_oracle_cost) lineage pairing is implemented; got ({subject_lineage}, {oracle_lineage})" + "DifferentialEquals: only the (v3_program_cost, v2_oracle_cost) cost lineage pairing is implemented; got ({subject_lineage}, {oracle_lineage}). Output producers such as (rust_emit_output, dag_eval_output) remain gated on explicit producer identity plus typed observation normalization; dissolution targets are PB-Runtime generated target-language tests for rust_emit_output and PR-B eager evaluator plus witness construction for dag_eval_output" )); } diff --git a/src/v3/compiler/tests/integration/r3_verification_l4_l7_l5_skeleton_test.rs b/src/v3/compiler/tests/integration/r3_verification_l4_l7_l5_skeleton_test.rs index f6f6a6b7e0d..7c689c8aa64 100644 --- a/src/v3/compiler/tests/integration/r3_verification_l4_l7_l5_skeleton_test.rs +++ b/src/v3/compiler/tests/integration/r3_verification_l4_l7_l5_skeleton_test.rs @@ -65,8 +65,16 @@ fn r3_verification_l4_emit_eval_match_skeleton_is_nyi() { assert_eq!(results.len(), 1); assert_eq!(results[0].claim_name, L4_CLAIM); assert!( - matches!(results[0].result, ClaimResult::NotYetImplemented(_)), - "expected deferred DifferentialEquals lineage for emit/eval pairing, got {:?}", + matches!( + &results[0].result, + ClaimResult::NotYetImplemented(reason) + if reason.contains("(rust_emit_output, dag_eval_output)") + && reason.contains("producer identity") + && reason.contains("typed observation normalization") + && reason.contains("PB-Runtime generated target-language tests") + && reason.contains("PR-B eager evaluator plus witness construction") + ), + "expected deferred DifferentialEquals emit/eval pairing to name W1 gates and dissolution targets, got {:?}", results[0].result ); }