@riddledc/riddle-proof 0.8.28 → 0.8.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -53,7 +53,7 @@ var DEFAULT_PROOF_PACKET_AUTHOR_TIMEOUT_MS = 18e4;
53
53
  var REFINED_INPUTS_SCHEMA = {
54
54
  type: "object",
55
55
  additionalProperties: false,
56
- required: ["server_path", "wait_for_selector", "reference"],
56
+ required: ["server_path", "wait_for_selector", "reference", "expected_start_path", "expected_terminal_path"],
57
57
  properties: {
58
58
  server_path: { type: ["string", "null"] },
59
59
  wait_for_selector: { type: ["string", "null"] },
@@ -63,8 +63,9 @@ var REFINED_INPUTS_SCHEMA = {
63
63
  }
64
64
  };
65
65
  var INTERACTION_CONTRACT_SCHEMA = {
66
- type: "object",
67
- additionalProperties: true,
66
+ type: ["object", "null"],
67
+ additionalProperties: false,
68
+ required: ["start_path", "expected_terminal_path", "expected_url", "action", "assertions"],
68
69
  properties: {
69
70
  start_path: { type: ["string", "null"] },
70
71
  expected_terminal_path: { type: ["string", "null"] },
@@ -131,6 +132,8 @@ var AUTHOR_SCHEMA = {
131
132
  "capture_script",
132
133
  "baseline_understanding_used",
133
134
  "refined_inputs",
135
+ "expected_terminal_path",
136
+ "interaction_contract",
134
137
  "rationale",
135
138
  "confidence",
136
139
  "summary"
@@ -750,8 +753,8 @@ function createCodexExecAgentAdapter(config = {}, runner = createCodexExecJsonRu
750
753
  "Choose the evidence modality from verification_mode and success_criteria: screenshots for visual/UI proof, interactions plus screenshots for interaction proof, structured metrics/logs/JSON/audio analysis for non-visual proof.",
751
754
  "For playable/gameplay proof, treat screenshots as supporting artifacts only: start the game, send keyboard or pointer input, measure state before/after, measure non-HUD canvas/playfield pixel deltas across time, and return playability evidence with version riddle-proof.playability.v1.",
752
755
  "For interaction proof, author the browser action explicitly in capture_script; a wait-only script is invalid. Return a structured evidence object with start route/state, terminal route/state, action, assertions, and matched UI text.",
753
- "For route-changing interaction proof, set refined_inputs.expected_start_path and refined_inputs.expected_terminal_path, and include interaction_contract with start_path, expected_terminal_path, action, and assertions. Keep refined_inputs.server_path on the start route; do not replace it with the terminal route.",
754
- "If the original request or success_criteria names an expected terminal URL/path, preserve it exactly in refined_inputs.expected_terminal_path and in interaction_contract.expected_terminal_path, including query and hash.",
756
+ "For route-changing interaction proof, set refined_inputs.expected_start_path and refined_inputs.expected_terminal_path, and include interaction_contract with start_path, expected_terminal_path, expected_url when known, action, and assertions. Keep refined_inputs.server_path on the start route; do not replace it with the terminal route.",
757
+ "If the original request or success_criteria names an expected terminal URL/path, preserve it exactly in refined_inputs.expected_terminal_path and in interaction_contract.expected_terminal_path, including query and hash. For non-interaction proof, set expected_terminal_path and interaction_contract to null.",
755
758
  "Catch waitForURL or selector timeouts and record them as failed assertions instead of throwing before evidence is emitted.",
756
759
  "For structured proof, collect meaningful measurements inside page.evaluate, assign them to an evidence variable, and return that object from capture_script. Screenshots are optional supporting context for data/audio/log/metric/custom modes.",
757
760
  "Do not assign globalThis.__riddleProofEvidence, window.__riddleProofEvidence, or self.__riddleProofEvidence in the worker context. Avoid global evidence assignment unless it is inside page.evaluate for compatibility with older packets.",
@@ -3,7 +3,7 @@ import {
3
3
  createCodexExecAgentAdapter,
4
4
  createCodexExecJsonRunner,
5
5
  runCodexExecAgentDoctor
6
- } from "../chunk-4PPJKW3Z.js";
6
+ } from "../chunk-73EBR3YL.js";
7
7
  import "../chunk-VY4Y5U57.js";
8
8
  import "../chunk-MLKGABMK.js";
9
9
  export {
@@ -53,7 +53,7 @@ var DEFAULT_PROOF_PACKET_AUTHOR_TIMEOUT_MS = 18e4;
53
53
  var REFINED_INPUTS_SCHEMA = {
54
54
  type: "object",
55
55
  additionalProperties: false,
56
- required: ["server_path", "wait_for_selector", "reference"],
56
+ required: ["server_path", "wait_for_selector", "reference", "expected_start_path", "expected_terminal_path"],
57
57
  properties: {
58
58
  server_path: { type: ["string", "null"] },
59
59
  wait_for_selector: { type: ["string", "null"] },
@@ -63,8 +63,9 @@ var REFINED_INPUTS_SCHEMA = {
63
63
  }
64
64
  };
65
65
  var INTERACTION_CONTRACT_SCHEMA = {
66
- type: "object",
67
- additionalProperties: true,
66
+ type: ["object", "null"],
67
+ additionalProperties: false,
68
+ required: ["start_path", "expected_terminal_path", "expected_url", "action", "assertions"],
68
69
  properties: {
69
70
  start_path: { type: ["string", "null"] },
70
71
  expected_terminal_path: { type: ["string", "null"] },
@@ -131,6 +132,8 @@ var AUTHOR_SCHEMA = {
131
132
  "capture_script",
132
133
  "baseline_understanding_used",
133
134
  "refined_inputs",
135
+ "expected_terminal_path",
136
+ "interaction_contract",
134
137
  "rationale",
135
138
  "confidence",
136
139
  "summary"
@@ -750,8 +753,8 @@ function createCodexExecAgentAdapter(config = {}, runner = createCodexExecJsonRu
750
753
  "Choose the evidence modality from verification_mode and success_criteria: screenshots for visual/UI proof, interactions plus screenshots for interaction proof, structured metrics/logs/JSON/audio analysis for non-visual proof.",
751
754
  "For playable/gameplay proof, treat screenshots as supporting artifacts only: start the game, send keyboard or pointer input, measure state before/after, measure non-HUD canvas/playfield pixel deltas across time, and return playability evidence with version riddle-proof.playability.v1.",
752
755
  "For interaction proof, author the browser action explicitly in capture_script; a wait-only script is invalid. Return a structured evidence object with start route/state, terminal route/state, action, assertions, and matched UI text.",
753
- "For route-changing interaction proof, set refined_inputs.expected_start_path and refined_inputs.expected_terminal_path, and include interaction_contract with start_path, expected_terminal_path, action, and assertions. Keep refined_inputs.server_path on the start route; do not replace it with the terminal route.",
754
- "If the original request or success_criteria names an expected terminal URL/path, preserve it exactly in refined_inputs.expected_terminal_path and in interaction_contract.expected_terminal_path, including query and hash.",
756
+ "For route-changing interaction proof, set refined_inputs.expected_start_path and refined_inputs.expected_terminal_path, and include interaction_contract with start_path, expected_terminal_path, expected_url when known, action, and assertions. Keep refined_inputs.server_path on the start route; do not replace it with the terminal route.",
757
+ "If the original request or success_criteria names an expected terminal URL/path, preserve it exactly in refined_inputs.expected_terminal_path and in interaction_contract.expected_terminal_path, including query and hash. For non-interaction proof, set expected_terminal_path and interaction_contract to null.",
755
758
  "Catch waitForURL or selector timeouts and record them as failed assertions instead of throwing before evidence is emitted.",
756
759
  "For structured proof, collect meaningful measurements inside page.evaluate, assign them to an evidence variable, and return that object from capture_script. Screenshots are optional supporting context for data/audio/log/metric/custom modes.",
757
760
  "Do not assign globalThis.__riddleProofEvidence, window.__riddleProofEvidence, or self.__riddleProofEvidence in the worker context. Avoid global evidence assignment unless it is inside page.evaluate for compatibility with older packets.",
@@ -3,7 +3,7 @@ import {
3
3
  createCodexExecAgentAdapter,
4
4
  createCodexExecJsonRunner,
5
5
  runCodexExecAgentDoctor
6
- } from "../chunk-4PPJKW3Z.js";
6
+ } from "../chunk-73EBR3YL.js";
7
7
  import "../chunk-VY4Y5U57.js";
8
8
  import "../chunk-MLKGABMK.js";
9
9
  export {
@@ -53,7 +53,7 @@ var DEFAULT_PROOF_PACKET_AUTHOR_TIMEOUT_MS = 18e4;
53
53
  var REFINED_INPUTS_SCHEMA = {
54
54
  type: "object",
55
55
  additionalProperties: false,
56
- required: ["server_path", "wait_for_selector", "reference"],
56
+ required: ["server_path", "wait_for_selector", "reference", "expected_start_path", "expected_terminal_path"],
57
57
  properties: {
58
58
  server_path: { type: ["string", "null"] },
59
59
  wait_for_selector: { type: ["string", "null"] },
@@ -63,8 +63,9 @@ var REFINED_INPUTS_SCHEMA = {
63
63
  }
64
64
  };
65
65
  var INTERACTION_CONTRACT_SCHEMA = {
66
- type: "object",
67
- additionalProperties: true,
66
+ type: ["object", "null"],
67
+ additionalProperties: false,
68
+ required: ["start_path", "expected_terminal_path", "expected_url", "action", "assertions"],
68
69
  properties: {
69
70
  start_path: { type: ["string", "null"] },
70
71
  expected_terminal_path: { type: ["string", "null"] },
@@ -131,6 +132,8 @@ var AUTHOR_SCHEMA = {
131
132
  "capture_script",
132
133
  "baseline_understanding_used",
133
134
  "refined_inputs",
135
+ "expected_terminal_path",
136
+ "interaction_contract",
134
137
  "rationale",
135
138
  "confidence",
136
139
  "summary"
@@ -750,8 +753,8 @@ function createCodexExecAgentAdapter(config = {}, runner = createCodexExecJsonRu
750
753
  "Choose the evidence modality from verification_mode and success_criteria: screenshots for visual/UI proof, interactions plus screenshots for interaction proof, structured metrics/logs/JSON/audio analysis for non-visual proof.",
751
754
  "For playable/gameplay proof, treat screenshots as supporting artifacts only: start the game, send keyboard or pointer input, measure state before/after, measure non-HUD canvas/playfield pixel deltas across time, and return playability evidence with version riddle-proof.playability.v1.",
752
755
  "For interaction proof, author the browser action explicitly in capture_script; a wait-only script is invalid. Return a structured evidence object with start route/state, terminal route/state, action, assertions, and matched UI text.",
753
- "For route-changing interaction proof, set refined_inputs.expected_start_path and refined_inputs.expected_terminal_path, and include interaction_contract with start_path, expected_terminal_path, action, and assertions. Keep refined_inputs.server_path on the start route; do not replace it with the terminal route.",
754
- "If the original request or success_criteria names an expected terminal URL/path, preserve it exactly in refined_inputs.expected_terminal_path and in interaction_contract.expected_terminal_path, including query and hash.",
756
+ "For route-changing interaction proof, set refined_inputs.expected_start_path and refined_inputs.expected_terminal_path, and include interaction_contract with start_path, expected_terminal_path, expected_url when known, action, and assertions. Keep refined_inputs.server_path on the start route; do not replace it with the terminal route.",
757
+ "If the original request or success_criteria names an expected terminal URL/path, preserve it exactly in refined_inputs.expected_terminal_path and in interaction_contract.expected_terminal_path, including query and hash. For non-interaction proof, set expected_terminal_path and interaction_contract to null.",
755
758
  "Catch waitForURL or selector timeouts and record them as failed assertions instead of throwing before evidence is emitted.",
756
759
  "For structured proof, collect meaningful measurements inside page.evaluate, assign them to an evidence variable, and return that object from capture_script. Screenshots are optional supporting context for data/audio/log/metric/custom modes.",
757
760
  "Do not assign globalThis.__riddleProofEvidence, window.__riddleProofEvidence, or self.__riddleProofEvidence in the worker context. Avoid global evidence assignment unless it is inside page.evaluate for compatibility with older packets.",
@@ -3,7 +3,7 @@ import {
3
3
  createCodexExecAgentAdapter,
4
4
  createCodexExecJsonRunner,
5
5
  runCodexExecAgentDoctor
6
- } from "../chunk-4PPJKW3Z.js";
6
+ } from "../chunk-73EBR3YL.js";
7
7
  import "../chunk-VY4Y5U57.js";
8
8
  import "../chunk-MLKGABMK.js";
9
9
  export {
@@ -2684,6 +2684,60 @@ ${implementRes.stderr || ""}`;
2684
2684
  verifyRes = runOne("verify");
2685
2685
  executed.push(executedStep(verifyRes));
2686
2686
  if (!verifyRes.ok || verifyRes.haltedForApproval) {
2687
+ const failedVerifyState = readState(config.statePath);
2688
+ const failedVerifyStatus = failedVerifyState?.verify_status || "";
2689
+ if (!verifyRes.haltedForApproval && (failedVerifyStatus === "capture_incomplete" || failedVerifyStatus === "capture_error")) {
2690
+ const verifyDecisionRequest2 = failedVerifyState?.verify_decision_request || null;
2691
+ const captureQuality = verifyDecisionRequest2?.capture_quality || {};
2692
+ const conclusiveVerifyBlockers2 = proofAssessmentHardBlockersForState({
2693
+ ...failedVerifyState,
2694
+ structured_interaction_capture_failure_summary: stringValue(verifyDecisionRequest2?.structured_interaction_capture_failure_summary) || stringValue(failedVerifyState?.structured_interaction_capture_failure_summary) || void 0,
2695
+ structured_interaction_failure_summary: stringValue(verifyDecisionRequest2?.structured_interaction_failure_summary) || stringValue(failedVerifyState?.structured_interaction_failure_summary) || void 0
2696
+ });
2697
+ const structuredInteractionFailureSummary2 = stringValue(verifyDecisionRequest2?.structured_interaction_capture_failure_summary) || stringValue(verifyDecisionRequest2?.structured_interaction_failure_summary) || stringValue(failedVerifyState?.structured_interaction_capture_failure_summary) || stringValue(failedVerifyState?.structured_interaction_failure_summary) || stringValue(conclusiveVerifyBlockers2[0]);
2698
+ const captureTerminalBlocker = failedVerifyStatus === "capture_error" || conclusiveVerifyBlockers2.length > 0 || Boolean(structuredInteractionFailureSummary2) || captureQuality?.terminal_blocker === true || captureQuality?.blocking === true;
2699
+ const terminalCaptureQualitySummary = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true ? stringValue(captureQuality?.summary) : "";
2700
+ const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
2701
+ const summary = terminalCaptureQualitySummary || structuredInteractionFailureSummary2 || stringValue(verifyDecisionRequest2?.summary) || stringValue(failedVerifyState?.verify_summary) || stringValue(failedVerifyState?.proof_summary) || stringValue(verifyRes.error) || "Verify capture failed before the evidence could be judged.";
2702
+ const failedVerifyDetails = {
2703
+ executed,
2704
+ verifyStatus: failedVerifyStatus,
2705
+ verifySummary: failedVerifyState?.verify_summary || failedVerifyState?.proof_summary || null,
2706
+ afterCdn: failedVerifyState?.after_cdn || null,
2707
+ mergeRecommendation: failedVerifyState?.merge_recommendation || null,
2708
+ verifyDecisionRequest: verifyDecisionRequest2,
2709
+ conclusiveVerifyBlockers: conclusiveVerifyBlockers2,
2710
+ verifyError: verifyRes.error || null,
2711
+ verifyStdout: verifyRes.stdout || "",
2712
+ verifyStderr: verifyRes.stderr || ""
2713
+ };
2714
+ recordAttempt("verify", "checkpoint", summary, {
2715
+ autoApproved: verifyRes.autoApproved || false,
2716
+ checkpoint: checkpointName,
2717
+ error: verifyRes.error || null,
2718
+ details: failedVerifyDetails
2719
+ });
2720
+ return checkpoint(
2721
+ "verify",
2722
+ checkpointName,
2723
+ summary,
2724
+ {
2725
+ ok: true,
2726
+ nextActions: captureTerminalBlocker ? ["inspect_after_capture", "report_specific_browser_evidence_blocker", "start_a_new_run_after_the_product_or_script_is_fixed"] : ["inspect_after_capture", "continue_internal_loop_with_checkpoint", "return_to_recon_if_baseline_is_wrong"],
2727
+ advanceOptions: needsImplementation ? ["author", "implement", "ship", "verify", "recon"] : ["author", "verify", "recon"],
2728
+ recommendedAdvanceStage: captureTerminalBlocker ? null : verifyDecisionRequest2?.recommended_stage || verifyDecisionRequest2?.continue_with_stage || "author",
2729
+ continueWithStage: captureTerminalBlocker ? null : verifyDecisionRequest2?.continue_with_stage || verifyDecisionRequest2?.recommended_stage || "author",
2730
+ blocking: captureTerminalBlocker,
2731
+ details: failedVerifyDetails,
2732
+ verifyStatus: failedVerifyStatus,
2733
+ verifySummary: failedVerifyDetails.verifySummary,
2734
+ afterCdn: failedVerifyState?.after_cdn || null,
2735
+ mergeRecommendation: failedVerifyState?.merge_recommendation || null,
2736
+ verifyDecisionRequest: verifyDecisionRequest2,
2737
+ executed
2738
+ }
2739
+ );
2740
+ }
2687
2741
  return failedRun("verify", verifyRes.haltedForApproval ? "verify halted for approval" : "verify failed", verifyRes, {
2688
2742
  checkpoint: "verify_failed",
2689
2743
  details: { executed },
@@ -2737,8 +2791,9 @@ ${implementRes.stderr || ""}`;
2737
2791
  });
2738
2792
  state = readState(config.statePath);
2739
2793
  }
2794
+ const terminalCaptureQualitySummary = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true ? stringValue(captureQuality?.summary) : "";
2740
2795
  const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
2741
- const summary = structuredInteractionFailureSummary || stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
2796
+ const summary = terminalCaptureQualitySummary || structuredInteractionFailureSummary || stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
2742
2797
  recordAttempt("verify", "checkpoint", summary, {
2743
2798
  autoApproved: verifyRes.autoApproved || false,
2744
2799
  checkpoint: checkpointName,
@@ -2,7 +2,7 @@ import {
2
2
  createDisabledRiddleProofAgentAdapter,
3
3
  readRiddleProofRunStatus,
4
4
  runRiddleProofEngineHarness
5
- } from "../chunk-AM3K5FPW.js";
5
+ } from "../chunk-UWO4YR7I.js";
6
6
  import "../chunk-ZQWVXQKJ.js";
7
7
  import "../chunk-RDPG554T.js";
8
8
  import "../chunk-K6HZUSHH.js";
@@ -2715,6 +2715,60 @@ ${implementRes.stderr || ""}`;
2715
2715
  verifyRes = runOne("verify");
2716
2716
  executed.push(executedStep(verifyRes));
2717
2717
  if (!verifyRes.ok || verifyRes.haltedForApproval) {
2718
+ const failedVerifyState = readState(config.statePath);
2719
+ const failedVerifyStatus = failedVerifyState?.verify_status || "";
2720
+ if (!verifyRes.haltedForApproval && (failedVerifyStatus === "capture_incomplete" || failedVerifyStatus === "capture_error")) {
2721
+ const verifyDecisionRequest2 = failedVerifyState?.verify_decision_request || null;
2722
+ const captureQuality = verifyDecisionRequest2?.capture_quality || {};
2723
+ const conclusiveVerifyBlockers2 = proofAssessmentHardBlockersForState({
2724
+ ...failedVerifyState,
2725
+ structured_interaction_capture_failure_summary: stringValue(verifyDecisionRequest2?.structured_interaction_capture_failure_summary) || stringValue(failedVerifyState?.structured_interaction_capture_failure_summary) || void 0,
2726
+ structured_interaction_failure_summary: stringValue(verifyDecisionRequest2?.structured_interaction_failure_summary) || stringValue(failedVerifyState?.structured_interaction_failure_summary) || void 0
2727
+ });
2728
+ const structuredInteractionFailureSummary2 = stringValue(verifyDecisionRequest2?.structured_interaction_capture_failure_summary) || stringValue(verifyDecisionRequest2?.structured_interaction_failure_summary) || stringValue(failedVerifyState?.structured_interaction_capture_failure_summary) || stringValue(failedVerifyState?.structured_interaction_failure_summary) || stringValue(conclusiveVerifyBlockers2[0]);
2729
+ const captureTerminalBlocker = failedVerifyStatus === "capture_error" || conclusiveVerifyBlockers2.length > 0 || Boolean(structuredInteractionFailureSummary2) || captureQuality?.terminal_blocker === true || captureQuality?.blocking === true;
2730
+ const terminalCaptureQualitySummary = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true ? stringValue(captureQuality?.summary) : "";
2731
+ const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
2732
+ const summary = terminalCaptureQualitySummary || structuredInteractionFailureSummary2 || stringValue(verifyDecisionRequest2?.summary) || stringValue(failedVerifyState?.verify_summary) || stringValue(failedVerifyState?.proof_summary) || stringValue(verifyRes.error) || "Verify capture failed before the evidence could be judged.";
2733
+ const failedVerifyDetails = {
2734
+ executed,
2735
+ verifyStatus: failedVerifyStatus,
2736
+ verifySummary: failedVerifyState?.verify_summary || failedVerifyState?.proof_summary || null,
2737
+ afterCdn: failedVerifyState?.after_cdn || null,
2738
+ mergeRecommendation: failedVerifyState?.merge_recommendation || null,
2739
+ verifyDecisionRequest: verifyDecisionRequest2,
2740
+ conclusiveVerifyBlockers: conclusiveVerifyBlockers2,
2741
+ verifyError: verifyRes.error || null,
2742
+ verifyStdout: verifyRes.stdout || "",
2743
+ verifyStderr: verifyRes.stderr || ""
2744
+ };
2745
+ recordAttempt("verify", "checkpoint", summary, {
2746
+ autoApproved: verifyRes.autoApproved || false,
2747
+ checkpoint: checkpointName,
2748
+ error: verifyRes.error || null,
2749
+ details: failedVerifyDetails
2750
+ });
2751
+ return checkpoint(
2752
+ "verify",
2753
+ checkpointName,
2754
+ summary,
2755
+ {
2756
+ ok: true,
2757
+ nextActions: captureTerminalBlocker ? ["inspect_after_capture", "report_specific_browser_evidence_blocker", "start_a_new_run_after_the_product_or_script_is_fixed"] : ["inspect_after_capture", "continue_internal_loop_with_checkpoint", "return_to_recon_if_baseline_is_wrong"],
2758
+ advanceOptions: needsImplementation ? ["author", "implement", "ship", "verify", "recon"] : ["author", "verify", "recon"],
2759
+ recommendedAdvanceStage: captureTerminalBlocker ? null : verifyDecisionRequest2?.recommended_stage || verifyDecisionRequest2?.continue_with_stage || "author",
2760
+ continueWithStage: captureTerminalBlocker ? null : verifyDecisionRequest2?.continue_with_stage || verifyDecisionRequest2?.recommended_stage || "author",
2761
+ blocking: captureTerminalBlocker,
2762
+ details: failedVerifyDetails,
2763
+ verifyStatus: failedVerifyStatus,
2764
+ verifySummary: failedVerifyDetails.verifySummary,
2765
+ afterCdn: failedVerifyState?.after_cdn || null,
2766
+ mergeRecommendation: failedVerifyState?.merge_recommendation || null,
2767
+ verifyDecisionRequest: verifyDecisionRequest2,
2768
+ executed
2769
+ }
2770
+ );
2771
+ }
2718
2772
  return failedRun("verify", verifyRes.haltedForApproval ? "verify halted for approval" : "verify failed", verifyRes, {
2719
2773
  checkpoint: "verify_failed",
2720
2774
  details: { executed },
@@ -2768,8 +2822,9 @@ ${implementRes.stderr || ""}`;
2768
2822
  });
2769
2823
  state = readState(config.statePath);
2770
2824
  }
2825
+ const terminalCaptureQualitySummary = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true ? stringValue(captureQuality?.summary) : "";
2771
2826
  const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
2772
- const summary = structuredInteractionFailureSummary || stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
2827
+ const summary = terminalCaptureQualitySummary || structuredInteractionFailureSummary || stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
2773
2828
  recordAttempt("verify", "checkpoint", summary, {
2774
2829
  autoApproved: verifyRes.autoApproved || false,
2775
2830
  checkpoint: checkpointName,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  proof_run_engine_exports
3
- } from "../chunk-YC77HZVF.js";
3
+ } from "../chunk-32RE64IO.js";
4
4
  import {
5
5
  runner_exports
6
6
  } from "../chunk-3OTO7IDH.js";
7
7
  import {
8
8
  engine_harness_exports
9
- } from "../chunk-AM3K5FPW.js";
9
+ } from "../chunk-UWO4YR7I.js";
10
10
  import "../chunk-ZQWVXQKJ.js";
11
11
  import "../chunk-RDPG554T.js";
12
12
  import {
@@ -2684,6 +2684,60 @@ ${implementRes.stderr || ""}`;
2684
2684
  verifyRes = runOne("verify");
2685
2685
  executed.push(executedStep(verifyRes));
2686
2686
  if (!verifyRes.ok || verifyRes.haltedForApproval) {
2687
+ const failedVerifyState = readState(config.statePath);
2688
+ const failedVerifyStatus = failedVerifyState?.verify_status || "";
2689
+ if (!verifyRes.haltedForApproval && (failedVerifyStatus === "capture_incomplete" || failedVerifyStatus === "capture_error")) {
2690
+ const verifyDecisionRequest2 = failedVerifyState?.verify_decision_request || null;
2691
+ const captureQuality = verifyDecisionRequest2?.capture_quality || {};
2692
+ const conclusiveVerifyBlockers2 = proofAssessmentHardBlockersForState({
2693
+ ...failedVerifyState,
2694
+ structured_interaction_capture_failure_summary: stringValue(verifyDecisionRequest2?.structured_interaction_capture_failure_summary) || stringValue(failedVerifyState?.structured_interaction_capture_failure_summary) || void 0,
2695
+ structured_interaction_failure_summary: stringValue(verifyDecisionRequest2?.structured_interaction_failure_summary) || stringValue(failedVerifyState?.structured_interaction_failure_summary) || void 0
2696
+ });
2697
+ const structuredInteractionFailureSummary2 = stringValue(verifyDecisionRequest2?.structured_interaction_capture_failure_summary) || stringValue(verifyDecisionRequest2?.structured_interaction_failure_summary) || stringValue(failedVerifyState?.structured_interaction_capture_failure_summary) || stringValue(failedVerifyState?.structured_interaction_failure_summary) || stringValue(conclusiveVerifyBlockers2[0]);
2698
+ const captureTerminalBlocker = failedVerifyStatus === "capture_error" || conclusiveVerifyBlockers2.length > 0 || Boolean(structuredInteractionFailureSummary2) || captureQuality?.terminal_blocker === true || captureQuality?.blocking === true;
2699
+ const terminalCaptureQualitySummary = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true ? stringValue(captureQuality?.summary) : "";
2700
+ const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
2701
+ const summary = terminalCaptureQualitySummary || structuredInteractionFailureSummary2 || stringValue(verifyDecisionRequest2?.summary) || stringValue(failedVerifyState?.verify_summary) || stringValue(failedVerifyState?.proof_summary) || stringValue(verifyRes.error) || "Verify capture failed before the evidence could be judged.";
2702
+ const failedVerifyDetails = {
2703
+ executed,
2704
+ verifyStatus: failedVerifyStatus,
2705
+ verifySummary: failedVerifyState?.verify_summary || failedVerifyState?.proof_summary || null,
2706
+ afterCdn: failedVerifyState?.after_cdn || null,
2707
+ mergeRecommendation: failedVerifyState?.merge_recommendation || null,
2708
+ verifyDecisionRequest: verifyDecisionRequest2,
2709
+ conclusiveVerifyBlockers: conclusiveVerifyBlockers2,
2710
+ verifyError: verifyRes.error || null,
2711
+ verifyStdout: verifyRes.stdout || "",
2712
+ verifyStderr: verifyRes.stderr || ""
2713
+ };
2714
+ recordAttempt("verify", "checkpoint", summary, {
2715
+ autoApproved: verifyRes.autoApproved || false,
2716
+ checkpoint: checkpointName,
2717
+ error: verifyRes.error || null,
2718
+ details: failedVerifyDetails
2719
+ });
2720
+ return checkpoint(
2721
+ "verify",
2722
+ checkpointName,
2723
+ summary,
2724
+ {
2725
+ ok: true,
2726
+ nextActions: captureTerminalBlocker ? ["inspect_after_capture", "report_specific_browser_evidence_blocker", "start_a_new_run_after_the_product_or_script_is_fixed"] : ["inspect_after_capture", "continue_internal_loop_with_checkpoint", "return_to_recon_if_baseline_is_wrong"],
2727
+ advanceOptions: needsImplementation ? ["author", "implement", "ship", "verify", "recon"] : ["author", "verify", "recon"],
2728
+ recommendedAdvanceStage: captureTerminalBlocker ? null : verifyDecisionRequest2?.recommended_stage || verifyDecisionRequest2?.continue_with_stage || "author",
2729
+ continueWithStage: captureTerminalBlocker ? null : verifyDecisionRequest2?.continue_with_stage || verifyDecisionRequest2?.recommended_stage || "author",
2730
+ blocking: captureTerminalBlocker,
2731
+ details: failedVerifyDetails,
2732
+ verifyStatus: failedVerifyStatus,
2733
+ verifySummary: failedVerifyDetails.verifySummary,
2734
+ afterCdn: failedVerifyState?.after_cdn || null,
2735
+ mergeRecommendation: failedVerifyState?.merge_recommendation || null,
2736
+ verifyDecisionRequest: verifyDecisionRequest2,
2737
+ executed
2738
+ }
2739
+ );
2740
+ }
2687
2741
  return failedRun("verify", verifyRes.haltedForApproval ? "verify halted for approval" : "verify failed", verifyRes, {
2688
2742
  checkpoint: "verify_failed",
2689
2743
  details: { executed },
@@ -2737,8 +2791,9 @@ ${implementRes.stderr || ""}`;
2737
2791
  });
2738
2792
  state = readState(config.statePath);
2739
2793
  }
2794
+ const terminalCaptureQualitySummary = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true ? stringValue(captureQuality?.summary) : "";
2740
2795
  const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
2741
- const summary = structuredInteractionFailureSummary || stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
2796
+ const summary = terminalCaptureQualitySummary || structuredInteractionFailureSummary || stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
2742
2797
  recordAttempt("verify", "checkpoint", summary, {
2743
2798
  autoApproved: verifyRes.autoApproved || false,
2744
2799
  checkpoint: checkpointName,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createRiddleProofEngine,
3
3
  executeWorkflow
4
- } from "../chunk-YC77HZVF.js";
4
+ } from "../chunk-32RE64IO.js";
5
5
  import "../chunk-K6HZUSHH.js";
6
6
  import "../chunk-MLKGABMK.js";
7
7
  export {
@@ -1476,6 +1476,60 @@ ${implementRes.stderr || ""}`;
1476
1476
  verifyRes = runOne("verify");
1477
1477
  executed.push(executedStep(verifyRes));
1478
1478
  if (!verifyRes.ok || verifyRes.haltedForApproval) {
1479
+ const failedVerifyState = readState(config.statePath);
1480
+ const failedVerifyStatus = failedVerifyState?.verify_status || "";
1481
+ if (!verifyRes.haltedForApproval && (failedVerifyStatus === "capture_incomplete" || failedVerifyStatus === "capture_error")) {
1482
+ const verifyDecisionRequest2 = failedVerifyState?.verify_decision_request || null;
1483
+ const captureQuality = verifyDecisionRequest2?.capture_quality || {};
1484
+ const conclusiveVerifyBlockers2 = proofAssessmentHardBlockersForState({
1485
+ ...failedVerifyState,
1486
+ structured_interaction_capture_failure_summary: stringValue(verifyDecisionRequest2?.structured_interaction_capture_failure_summary) || stringValue(failedVerifyState?.structured_interaction_capture_failure_summary) || void 0,
1487
+ structured_interaction_failure_summary: stringValue(verifyDecisionRequest2?.structured_interaction_failure_summary) || stringValue(failedVerifyState?.structured_interaction_failure_summary) || void 0
1488
+ });
1489
+ const structuredInteractionFailureSummary2 = stringValue(verifyDecisionRequest2?.structured_interaction_capture_failure_summary) || stringValue(verifyDecisionRequest2?.structured_interaction_failure_summary) || stringValue(failedVerifyState?.structured_interaction_capture_failure_summary) || stringValue(failedVerifyState?.structured_interaction_failure_summary) || stringValue(conclusiveVerifyBlockers2[0]);
1490
+ const captureTerminalBlocker = failedVerifyStatus === "capture_error" || conclusiveVerifyBlockers2.length > 0 || Boolean(structuredInteractionFailureSummary2) || captureQuality?.terminal_blocker === true || captureQuality?.blocking === true;
1491
+ const terminalCaptureQualitySummary = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true ? stringValue(captureQuality?.summary) : "";
1492
+ const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
1493
+ const summary = terminalCaptureQualitySummary || structuredInteractionFailureSummary2 || stringValue(verifyDecisionRequest2?.summary) || stringValue(failedVerifyState?.verify_summary) || stringValue(failedVerifyState?.proof_summary) || stringValue(verifyRes.error) || "Verify capture failed before the evidence could be judged.";
1494
+ const failedVerifyDetails = {
1495
+ executed,
1496
+ verifyStatus: failedVerifyStatus,
1497
+ verifySummary: failedVerifyState?.verify_summary || failedVerifyState?.proof_summary || null,
1498
+ afterCdn: failedVerifyState?.after_cdn || null,
1499
+ mergeRecommendation: failedVerifyState?.merge_recommendation || null,
1500
+ verifyDecisionRequest: verifyDecisionRequest2,
1501
+ conclusiveVerifyBlockers: conclusiveVerifyBlockers2,
1502
+ verifyError: verifyRes.error || null,
1503
+ verifyStdout: verifyRes.stdout || "",
1504
+ verifyStderr: verifyRes.stderr || ""
1505
+ };
1506
+ recordAttempt("verify", "checkpoint", summary, {
1507
+ autoApproved: verifyRes.autoApproved || false,
1508
+ checkpoint: checkpointName,
1509
+ error: verifyRes.error || null,
1510
+ details: failedVerifyDetails
1511
+ });
1512
+ return checkpoint(
1513
+ "verify",
1514
+ checkpointName,
1515
+ summary,
1516
+ {
1517
+ ok: true,
1518
+ nextActions: captureTerminalBlocker ? ["inspect_after_capture", "report_specific_browser_evidence_blocker", "start_a_new_run_after_the_product_or_script_is_fixed"] : ["inspect_after_capture", "continue_internal_loop_with_checkpoint", "return_to_recon_if_baseline_is_wrong"],
1519
+ advanceOptions: needsImplementation ? ["author", "implement", "ship", "verify", "recon"] : ["author", "verify", "recon"],
1520
+ recommendedAdvanceStage: captureTerminalBlocker ? null : verifyDecisionRequest2?.recommended_stage || verifyDecisionRequest2?.continue_with_stage || "author",
1521
+ continueWithStage: captureTerminalBlocker ? null : verifyDecisionRequest2?.continue_with_stage || verifyDecisionRequest2?.recommended_stage || "author",
1522
+ blocking: captureTerminalBlocker,
1523
+ details: failedVerifyDetails,
1524
+ verifyStatus: failedVerifyStatus,
1525
+ verifySummary: failedVerifyDetails.verifySummary,
1526
+ afterCdn: failedVerifyState?.after_cdn || null,
1527
+ mergeRecommendation: failedVerifyState?.merge_recommendation || null,
1528
+ verifyDecisionRequest: verifyDecisionRequest2,
1529
+ executed
1530
+ }
1531
+ );
1532
+ }
1479
1533
  return failedRun("verify", verifyRes.haltedForApproval ? "verify halted for approval" : "verify failed", verifyRes, {
1480
1534
  checkpoint: "verify_failed",
1481
1535
  details: { executed },
@@ -1529,8 +1583,9 @@ ${implementRes.stderr || ""}`;
1529
1583
  });
1530
1584
  state = readState(config.statePath);
1531
1585
  }
1586
+ const terminalCaptureQualitySummary = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true ? stringValue(captureQuality?.summary) : "";
1532
1587
  const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
1533
- const summary = structuredInteractionFailureSummary || stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
1588
+ const summary = terminalCaptureQualitySummary || structuredInteractionFailureSummary || stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
1534
1589
  recordAttempt("verify", "checkpoint", summary, {
1535
1590
  autoApproved: verifyRes.autoApproved || false,
1536
1591
  checkpoint: checkpointName,
@@ -12,7 +12,7 @@ var DEFAULT_PROOF_PACKET_AUTHOR_TIMEOUT_MS = 18e4;
12
12
  var REFINED_INPUTS_SCHEMA = {
13
13
  type: "object",
14
14
  additionalProperties: false,
15
- required: ["server_path", "wait_for_selector", "reference"],
15
+ required: ["server_path", "wait_for_selector", "reference", "expected_start_path", "expected_terminal_path"],
16
16
  properties: {
17
17
  server_path: { type: ["string", "null"] },
18
18
  wait_for_selector: { type: ["string", "null"] },
@@ -22,8 +22,9 @@ var REFINED_INPUTS_SCHEMA = {
22
22
  }
23
23
  };
24
24
  var INTERACTION_CONTRACT_SCHEMA = {
25
- type: "object",
26
- additionalProperties: true,
25
+ type: ["object", "null"],
26
+ additionalProperties: false,
27
+ required: ["start_path", "expected_terminal_path", "expected_url", "action", "assertions"],
27
28
  properties: {
28
29
  start_path: { type: ["string", "null"] },
29
30
  expected_terminal_path: { type: ["string", "null"] },
@@ -90,6 +91,8 @@ var AUTHOR_SCHEMA = {
90
91
  "capture_script",
91
92
  "baseline_understanding_used",
92
93
  "refined_inputs",
94
+ "expected_terminal_path",
95
+ "interaction_contract",
93
96
  "rationale",
94
97
  "confidence",
95
98
  "summary"
@@ -709,8 +712,8 @@ function createCodexExecAgentAdapter(config = {}, runner = createCodexExecJsonRu
709
712
  "Choose the evidence modality from verification_mode and success_criteria: screenshots for visual/UI proof, interactions plus screenshots for interaction proof, structured metrics/logs/JSON/audio analysis for non-visual proof.",
710
713
  "For playable/gameplay proof, treat screenshots as supporting artifacts only: start the game, send keyboard or pointer input, measure state before/after, measure non-HUD canvas/playfield pixel deltas across time, and return playability evidence with version riddle-proof.playability.v1.",
711
714
  "For interaction proof, author the browser action explicitly in capture_script; a wait-only script is invalid. Return a structured evidence object with start route/state, terminal route/state, action, assertions, and matched UI text.",
712
- "For route-changing interaction proof, set refined_inputs.expected_start_path and refined_inputs.expected_terminal_path, and include interaction_contract with start_path, expected_terminal_path, action, and assertions. Keep refined_inputs.server_path on the start route; do not replace it with the terminal route.",
713
- "If the original request or success_criteria names an expected terminal URL/path, preserve it exactly in refined_inputs.expected_terminal_path and in interaction_contract.expected_terminal_path, including query and hash.",
715
+ "For route-changing interaction proof, set refined_inputs.expected_start_path and refined_inputs.expected_terminal_path, and include interaction_contract with start_path, expected_terminal_path, expected_url when known, action, and assertions. Keep refined_inputs.server_path on the start route; do not replace it with the terminal route.",
716
+ "If the original request or success_criteria names an expected terminal URL/path, preserve it exactly in refined_inputs.expected_terminal_path and in interaction_contract.expected_terminal_path, including query and hash. For non-interaction proof, set expected_terminal_path and interaction_contract to null.",
714
717
  "Catch waitForURL or selector timeouts and record them as failed assertions instead of throwing before evidence is emitted.",
715
718
  "For structured proof, collect meaningful measurements inside page.evaluate, assign them to an evidence variable, and return that object from capture_script. Screenshots are optional supporting context for data/audio/log/metric/custom modes.",
716
719
  "Do not assign globalThis.__riddleProofEvidence, window.__riddleProofEvidence, or self.__riddleProofEvidence in the worker context. Avoid global evidence assignment unless it is inside page.evaluate for compatibility with older packets.",
@@ -22,14 +22,14 @@ import {
22
22
  createDisabledRiddleProofAgentAdapter,
23
23
  readRiddleProofRunStatus,
24
24
  runRiddleProofEngineHarness
25
- } from "./chunk-AM3K5FPW.js";
25
+ } from "./chunk-UWO4YR7I.js";
26
26
  import {
27
27
  createCheckpointResponseTemplate
28
28
  } from "./chunk-OILKSY5J.js";
29
29
  import {
30
30
  createCodexExecAgentAdapter,
31
31
  runCodexExecAgentDoctor
32
- } from "./chunk-4PPJKW3Z.js";
32
+ } from "./chunk-73EBR3YL.js";
33
33
 
34
34
  // src/cli.ts
35
35
  import { spawnSync } from "child_process";
package/dist/cli/index.js CHANGED
@@ -1,12 +1,12 @@
1
- import "../chunk-27BG64ZG.js";
1
+ import "../chunk-XJA2GDVN.js";
2
2
  import "../chunk-PEWAIEER.js";
3
3
  import "../chunk-TWTEUS7R.js";
4
- import "../chunk-AM3K5FPW.js";
4
+ import "../chunk-UWO4YR7I.js";
5
5
  import "../chunk-ZQWVXQKJ.js";
6
6
  import "../chunk-RDPG554T.js";
7
7
  import "../chunk-K6HZUSHH.js";
8
8
  import "../chunk-OILKSY5J.js";
9
9
  import "../chunk-JFQXAJH2.js";
10
- import "../chunk-4PPJKW3Z.js";
10
+ import "../chunk-73EBR3YL.js";
11
11
  import "../chunk-VY4Y5U57.js";
12
12
  import "../chunk-MLKGABMK.js";