@riddledc/riddle-proof 0.8.53 → 0.8.55

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.
Files changed (66) hide show
  1. package/dist/adapters/codex-exec-agent.js +2 -2
  2. package/dist/adapters/codex.js +2 -2
  3. package/dist/adapters/local-agent.js +2 -2
  4. package/dist/adapters/openclaw.js +5 -5
  5. package/dist/advanced/engine-harness.cjs +128 -3
  6. package/dist/advanced/engine-harness.js +5 -5
  7. package/dist/advanced/index.cjs +129 -4
  8. package/dist/advanced/index.d.cts +1 -1
  9. package/dist/advanced/index.d.ts +1 -1
  10. package/dist/advanced/index.js +6 -6
  11. package/dist/advanced/proof-run-engine.d.cts +1 -1
  12. package/dist/advanced/proof-run-engine.d.ts +1 -1
  13. package/dist/advanced/runner.cjs +54 -1
  14. package/dist/advanced/runner.js +5 -5
  15. package/dist/checkpoint.js +2 -2
  16. package/dist/{chunk-S5DX7Z6X.js → chunk-F65S5LT2.js} +3 -3
  17. package/dist/{chunk-LNWJAHAQ.js → chunk-J2ZNL3H3.js} +2 -2
  18. package/dist/{chunk-2ALMXMFZ.js → chunk-MYMTAVGP.js} +3 -3
  19. package/dist/{chunk-JJ4IWRMJ.js → chunk-NYRMPWJB.js} +8 -3
  20. package/dist/{chunk-WDIKPIMB.js → chunk-Q5GYD5RG.js} +9 -4
  21. package/dist/{chunk-ZLBOGPUL.js → chunk-QGE3KBRL.js} +74 -6
  22. package/dist/{chunk-BLM5EIBA.js → chunk-QUK3SG24.js} +1 -1
  23. package/dist/{chunk-73EBR3YL.js → chunk-SONWF3FQ.js} +1 -1
  24. package/dist/{chunk-VY4Y5U57.js → chunk-W44XEGYW.js} +52 -0
  25. package/dist/cli/index.js +7 -7
  26. package/dist/cli.cjs +128 -3
  27. package/dist/cli.js +7 -7
  28. package/dist/codex-exec-agent.js +2 -2
  29. package/dist/engine-harness.cjs +128 -3
  30. package/dist/engine-harness.js +5 -5
  31. package/dist/index.cjs +133 -4
  32. package/dist/index.d.cts +1 -1
  33. package/dist/index.d.ts +1 -1
  34. package/dist/index.js +12 -8
  35. package/dist/local-agent.js +2 -2
  36. package/dist/openclaw.js +5 -5
  37. package/dist/{proof-run-engine-DpChFR5H.d.cts → proof-run-engine-Baiv6l3A.d.cts} +3 -3
  38. package/dist/{proof-run-engine-BqRoA3Do.d.ts → proof-run-engine-MiKZt9oY.d.ts} +3 -3
  39. package/dist/proof-run-engine.d.cts +1 -1
  40. package/dist/proof-run-engine.d.ts +1 -1
  41. package/dist/result.cjs +56 -2
  42. package/dist/result.d.cts +16 -2
  43. package/dist/result.d.ts +16 -2
  44. package/dist/result.js +7 -3
  45. package/dist/run-card.cjs +43 -0
  46. package/dist/run-card.js +3 -3
  47. package/dist/runner.cjs +54 -1
  48. package/dist/runner.js +5 -5
  49. package/dist/spec/checkpoint.js +2 -2
  50. package/dist/spec/index.cjs +63 -1
  51. package/dist/spec/index.d.cts +1 -1
  52. package/dist/spec/index.d.ts +1 -1
  53. package/dist/spec/index.js +9 -5
  54. package/dist/spec/result.cjs +56 -2
  55. package/dist/spec/result.d.cts +1 -1
  56. package/dist/spec/result.d.ts +1 -1
  57. package/dist/spec/result.js +7 -3
  58. package/dist/spec/run-card.cjs +43 -0
  59. package/dist/spec/run-card.js +3 -3
  60. package/dist/spec/state.cjs +48 -1
  61. package/dist/spec/state.js +4 -4
  62. package/dist/state.cjs +48 -1
  63. package/dist/state.js +4 -4
  64. package/dist/types.d.cts +15 -0
  65. package/dist/types.d.ts +15 -0
  66. package/package.json +1 -1
@@ -3,8 +3,8 @@ import {
3
3
  createCodexExecAgentAdapter,
4
4
  createCodexExecJsonRunner,
5
5
  runCodexExecAgentDoctor
6
- } from "../chunk-73EBR3YL.js";
7
- import "../chunk-VY4Y5U57.js";
6
+ } from "../chunk-SONWF3FQ.js";
7
+ import "../chunk-W44XEGYW.js";
8
8
  import "../chunk-MLKGABMK.js";
9
9
  export {
10
10
  createCodexExecAgentAdapter,
@@ -3,8 +3,8 @@ import {
3
3
  createCodexExecAgentAdapter,
4
4
  createCodexExecJsonRunner,
5
5
  runCodexExecAgentDoctor
6
- } from "../chunk-73EBR3YL.js";
7
- import "../chunk-VY4Y5U57.js";
6
+ } from "../chunk-SONWF3FQ.js";
7
+ import "../chunk-W44XEGYW.js";
8
8
  import "../chunk-MLKGABMK.js";
9
9
  export {
10
10
  createCodexExecAgentAdapter,
@@ -3,8 +3,8 @@ import {
3
3
  createCodexExecAgentAdapter,
4
4
  createCodexExecJsonRunner,
5
5
  runCodexExecAgentDoctor
6
- } from "../chunk-73EBR3YL.js";
7
- import "../chunk-VY4Y5U57.js";
6
+ } from "../chunk-SONWF3FQ.js";
7
+ import "../chunk-W44XEGYW.js";
8
8
  import "../chunk-MLKGABMK.js";
9
9
  export {
10
10
  createCodexExecAgentAdapter as createLocalAgentAdapter,
@@ -3,11 +3,11 @@ import {
3
3
  parseOpenClawAssertions,
4
4
  parseOpenClawJsonObjectOrArray,
5
5
  toRiddleProofRunParams
6
- } from "../chunk-LNWJAHAQ.js";
7
- import "../chunk-WDIKPIMB.js";
8
- import "../chunk-JJ4IWRMJ.js";
9
- import "../chunk-BLM5EIBA.js";
10
- import "../chunk-VY4Y5U57.js";
6
+ } from "../chunk-J2ZNL3H3.js";
7
+ import "../chunk-Q5GYD5RG.js";
8
+ import "../chunk-NYRMPWJB.js";
9
+ import "../chunk-QUK3SG24.js";
10
+ import "../chunk-W44XEGYW.js";
11
11
  import "../chunk-MLKGABMK.js";
12
12
  export {
13
13
  openClawIntegrationContext,
@@ -3520,6 +3520,9 @@ function normalizeTerminalMetadata(input) {
3520
3520
  pr_state: prState,
3521
3521
  marked_ready: markedReady,
3522
3522
  left_draft: leftDraft,
3523
+ ship_held: firstBoolean(riddleState.ship_held, result.ship_held, result.shipHeld, details.ship_held, details.shipHeld, shipReport.ship_held, shipReport.shipHeld),
3524
+ shipping_disabled: firstBoolean(riddleState.shipping_disabled, result.shipping_disabled, result.shippingDisabled, details.shipping_disabled, details.shippingDisabled, shipReport.shipping_disabled, shipReport.shippingDisabled),
3525
+ ship_authorized: firstBoolean(riddleState.ship_authorized, result.ship_authorized, result.shipAuthorized, details.ship_authorized, details.shipAuthorized, shipReport.ship_authorized, shipReport.shipAuthorized),
3523
3526
  ci_status: firstNonEmptyString(riddleState.ci_status, result.ci_status, result.ciStatus, details.ci_status, details.ciStatus, shipReport.ci_status),
3524
3527
  ship_commit: firstNonEmptyString(riddleState.ship_commit, result.ship_commit, result.shipCommit, details.ship_commit, details.shipCommit, shipReport.shipped_commit, shipReport.ship_commit),
3525
3528
  ship_remote_head: firstNonEmptyString(riddleState.ship_remote_head, result.ship_remote_head, result.shipRemoteHead, details.ship_remote_head, details.shipRemoteHead, shipReport.ship_remote_head),
@@ -3553,6 +3556,9 @@ function applyTerminalMetadata(state, metadata) {
3553
3556
  if (prBranch) state.pr_branch = prBranch;
3554
3557
  if (typeof metadata.marked_ready === "boolean") state.marked_ready = metadata.marked_ready;
3555
3558
  if (typeof metadata.left_draft === "boolean") state.left_draft = metadata.left_draft;
3559
+ if (typeof metadata.ship_held === "boolean") state.ship_held = metadata.ship_held;
3560
+ if (typeof metadata.shipping_disabled === "boolean") state.shipping_disabled = metadata.shipping_disabled;
3561
+ if (typeof metadata.ship_authorized === "boolean") state.ship_authorized = metadata.ship_authorized;
3556
3562
  const ciStatus = nonEmptyString(metadata.ci_status);
3557
3563
  if (ciStatus) state.ci_status = ciStatus;
3558
3564
  const shipCommit = nonEmptyString(metadata.ship_commit);
@@ -3584,12 +3590,53 @@ function applyTerminalMetadata(state, metadata) {
3584
3590
  if (typeof metadata.finalized === "boolean") state.finalized = metadata.finalized;
3585
3591
  return state;
3586
3592
  }
3593
+ function shipControlStateFor(input) {
3594
+ const state = input.state;
3595
+ const status = input.status || state.status;
3596
+ const raw = recordValue(input.raw) || {};
3597
+ const shipReport = recordValue(state.ship_report) || {};
3598
+ const prState = recordValue(state.pr_state) || {};
3599
+ const shippingDisabled = firstBoolean(
3600
+ raw.shipping_disabled,
3601
+ raw.shippingDisabled,
3602
+ state.shipping_disabled,
3603
+ shipReport.shipping_disabled,
3604
+ shipReport.shippingDisabled
3605
+ ) ?? state.request?.ship_mode === "none";
3606
+ const explicitAuthorized = firstBoolean(
3607
+ raw.ship_authorized,
3608
+ raw.shipAuthorized,
3609
+ state.ship_authorized,
3610
+ shipReport.ship_authorized,
3611
+ shipReport.shipAuthorized
3612
+ );
3613
+ const authorizationEvidence = Boolean(
3614
+ status === "shipped" || state.marked_ready === true || shipReport.marked_ready === true || prState.status === "merged" || state.merge_commit || state.merged_at
3615
+ );
3616
+ const inferredAuthorized = explicitAuthorized ?? authorizationEvidence;
3617
+ const rawHeld = firstBoolean(raw.ship_held, raw.shipHeld);
3618
+ const inferredHeld = status === "ready_to_ship" && shippingDisabled && !inferredAuthorized;
3619
+ const shipHeld = rawHeld ?? (state.ship_held === true || inferredHeld);
3620
+ return {
3621
+ ship_held: shipHeld,
3622
+ shipping_disabled: shippingDisabled,
3623
+ ship_authorized: shipHeld ? false : inferredAuthorized
3624
+ };
3625
+ }
3626
+ function applyShipControlState(state, input = {}) {
3627
+ const control = shipControlStateFor({ state, status: input.status, raw: input.raw });
3628
+ state.ship_held = control.ship_held;
3629
+ state.shipping_disabled = control.shipping_disabled;
3630
+ state.ship_authorized = control.ship_authorized;
3631
+ return state;
3632
+ }
3587
3633
  function createRunResult(input) {
3588
3634
  const status = input.status || input.state.status;
3589
3635
  const ok = isSuccessfulStatus(status);
3590
3636
  const state = input.metadata ? applyTerminalMetadata(input.state, input.metadata) : input.state;
3591
3637
  state.status = status;
3592
3638
  state.ok = ok;
3639
+ applyShipControlState(state, { status, raw: input.raw });
3593
3640
  return compactRecord({
3594
3641
  ok,
3595
3642
  status,
@@ -3607,6 +3654,9 @@ function createRunResult(input) {
3607
3654
  pr_state: state.pr_state,
3608
3655
  marked_ready: state.marked_ready,
3609
3656
  left_draft: state.left_draft,
3657
+ ship_held: state.ship_held,
3658
+ shipping_disabled: state.shipping_disabled,
3659
+ ship_authorized: state.ship_authorized,
3610
3660
  ci_status: state.ci_status,
3611
3661
  ship_commit: state.ship_commit,
3612
3662
  ship_remote_head: state.ship_remote_head,
@@ -4496,6 +4546,7 @@ function createRiddleProofRunCard(state, input = {}) {
4496
4546
  const visualDelta = visualDeltaFrom({ fullRiddleState: fullState, runState: state });
4497
4547
  const artifacts = artifactsFrom({ fullRiddleState: fullState, runState: state });
4498
4548
  const viewportMatrix = viewportMatrixFrom({ fullRiddleState: fullState, runState: state });
4549
+ const shipControl = shipControlStateFor({ state });
4499
4550
  return {
4500
4551
  version: RIDDLE_PROOF_RUN_CARD_VERSION,
4501
4552
  run_id: state.run_id || "unknown",
@@ -4549,6 +4600,9 @@ function createRiddleProofRunCard(state, input = {}) {
4549
4600
  stop_condition: compactRecord({
4550
4601
  status: state.status,
4551
4602
  terminal: isTerminalStatus(state.status),
4603
+ ship_held: shipControl.ship_held,
4604
+ shipping_disabled: shipControl.shipping_disabled,
4605
+ ship_authorized: shipControl.ship_authorized,
4552
4606
  blocker_code: state.blocker?.code || null,
4553
4607
  blocker_message: state.blocker?.message || null,
4554
4608
  proof_decision: state.proof_decision,
@@ -4709,7 +4763,8 @@ function appendStageHeartbeat(state, input) {
4709
4763
  function createRunStatusSnapshot(state, at = timestamp2()) {
4710
4764
  const latestEvent = state.events[state.events.length - 1];
4711
4765
  const runId = state.run_id || "unknown";
4712
- const existingRunCardCurrent = state.run_card?.status === state.status && state.run_card.stop_condition?.status === state.status && state.run_card.stop_condition?.terminal === isTerminalStatus(state.status) && state.run_card.stop_condition?.monitor_should_continue === !isTerminalStatus(state.status);
4766
+ const shipControl = shipControlStateFor({ state });
4767
+ const existingRunCardCurrent = state.run_card?.status === state.status && state.run_card.stop_condition?.status === state.status && state.run_card.stop_condition?.terminal === isTerminalStatus(state.status) && state.run_card.stop_condition?.monitor_should_continue === !isTerminalStatus(state.status) && state.run_card.stop_condition?.ship_held === shipControl.ship_held && state.run_card.stop_condition?.shipping_disabled === shipControl.shipping_disabled && state.run_card.stop_condition?.ship_authorized === shipControl.ship_authorized;
4713
4768
  const runCard = existingRunCardCurrent ? state.run_card : createRiddleProofRunCard(state, { at });
4714
4769
  return compactRecord({
4715
4770
  run_id: runId,
@@ -4723,6 +4778,9 @@ function createRunStatusSnapshot(state, at = timestamp2()) {
4723
4778
  pr_url: state.pr_url ?? null,
4724
4779
  pr_branch: state.pr_branch ?? null,
4725
4780
  pr_state: state.pr_state,
4781
+ ship_held: shipControl.ship_held,
4782
+ shipping_disabled: shipControl.shipping_disabled,
4783
+ ship_authorized: shipControl.ship_authorized,
4726
4784
  ci_status: state.ci_status,
4727
4785
  ship_commit: state.ship_commit,
4728
4786
  ship_remote_head: state.ship_remote_head,
@@ -5009,7 +5067,7 @@ function shipHeldTerminal(state, result) {
5009
5067
  "ready_to_ship",
5010
5068
  result,
5011
5069
  result.summary || "Riddle Proof evidence is approved, but ship_mode=none is holding before PR/ship.",
5012
- { ship_held: true }
5070
+ { ship_held: true, shipping_disabled: true, ship_authorized: false }
5013
5071
  );
5014
5072
  }
5015
5073
  function checkpointContinueStage2(result) {
@@ -5057,6 +5115,32 @@ function isReadyShipGate(result) {
5057
5115
  function proofAssessmentRequestsShip(payload) {
5058
5116
  return String(payload.decision || "").trim() === "ready_to_ship";
5059
5117
  }
5118
+ var TRUSTED_PROOF_ASSESSMENT_READY_SOURCES = /* @__PURE__ */ new Set([
5119
+ "supervising_agent",
5120
+ "supervisor",
5121
+ "openclaw_auto_ship_mode_none"
5122
+ ]);
5123
+ function proofAssessmentSourceTrustedForShip(payload) {
5124
+ const source = nonEmptyString(payload.source)?.toLowerCase();
5125
+ if (!source) return true;
5126
+ return TRUSTED_PROOF_ASSESSMENT_READY_SOURCES.has(source);
5127
+ }
5128
+ function proofAssessmentSourceBlocker(input) {
5129
+ if (!proofAssessmentRequestsShip(input.payload)) return null;
5130
+ if (proofAssessmentSourceTrustedForShip(input.payload)) return null;
5131
+ const source = nonEmptyString(input.payload.source) || "unknown";
5132
+ return {
5133
+ code: input.code || "proof_assessment_source_not_trusted",
5134
+ checkpoint: input.checkpoint || null,
5135
+ message: `Riddle Proof cannot mark ready_to_ship from untrusted proof assessment source: ${source}.`,
5136
+ details: compactRecord({
5137
+ stage: input.stage || null,
5138
+ proofAssessment: input.payload,
5139
+ checkpoint_response_source: input.response?.source || null,
5140
+ response: input.response || null
5141
+ })
5142
+ };
5143
+ }
5060
5144
  function proofAssessmentHardBlockers(state, payload) {
5061
5145
  const blockers = proofAssessmentHardBlockersForState(state || {});
5062
5146
  if (Array.isArray(payload.hard_blockers)) {
@@ -5087,6 +5171,15 @@ function stageFromCheckpointResponse(response, packet) {
5087
5171
  const stage = response.continue_with_stage || nonEmptyString(payload.continue_with_stage) || nonEmptyString(payload.recommended_stage) || nonEmptyString(resume?.continue_with_stage) || (response.decision === "retry_stage" ? packet.stage : "");
5088
5172
  return stage ? stage : null;
5089
5173
  }
5174
+ function proofAssessmentSourceFromCheckpointResponse(response) {
5175
+ const kind = nonEmptyString(response.source?.kind)?.toLowerCase();
5176
+ if (!kind) return "supervising_agent";
5177
+ if (kind === "human") return "supervisor";
5178
+ if (kind === "codex" || kind === "openclaw-main" || kind === "claude-code") {
5179
+ return "supervising_agent";
5180
+ }
5181
+ return `checkpoint_response:${kind}`;
5182
+ }
5090
5183
  function proofAssessmentPayloadFromCheckpointResponse(response) {
5091
5184
  if (![
5092
5185
  "ready_to_ship",
@@ -5107,7 +5200,7 @@ function proofAssessmentPayloadFromCheckpointResponse(response) {
5107
5200
  continue_with_stage: stage || void 0,
5108
5201
  escalation_target: nonEmptyString(payload.escalation_target) || "agent",
5109
5202
  reasons: Array.isArray(response.reasons) ? response.reasons : Array.isArray(payload.reasons) ? payload.reasons : [],
5110
- source: "supervising_agent",
5203
+ source: proofAssessmentSourceFromCheckpointResponse(response),
5111
5204
  checkpoint_response_source: response.source || null,
5112
5205
  checkpoint_response_created_at: response.created_at
5113
5206
  }));
@@ -5252,6 +5345,7 @@ function terminalResult(state, status, result, summary, raw = {}) {
5252
5345
  engineResult: result
5253
5346
  });
5254
5347
  applyTerminalMetadata(state, metadata);
5348
+ applyShipControlState(state, { status, raw });
5255
5349
  persist(state);
5256
5350
  return createRunResult({
5257
5351
  state,
@@ -5558,6 +5652,14 @@ function checkpointResponseContinuation(state, value) {
5558
5652
  if (packet.kind === "assess_proof" || packet.kind === "recover_evidence" || packet.stage === "verify") {
5559
5653
  const assessment = proofAssessmentPayloadFromCheckpointResponse(response);
5560
5654
  if (assessment) {
5655
+ const sourceBlocker = proofAssessmentSourceBlocker({
5656
+ checkpoint: packet.checkpoint,
5657
+ stage: packet.stage,
5658
+ payload: assessment,
5659
+ response,
5660
+ code: "checkpoint_response_source_not_trusted"
5661
+ });
5662
+ if (sourceBlocker) return { blocker: sourceBlocker };
5561
5663
  appendCheckpointResponse(state, response);
5562
5664
  if (state.request.ship_mode !== "ship" && proofAssessmentRequestsShip(assessment)) {
5563
5665
  const result = {
@@ -5576,6 +5678,8 @@ function checkpointResponseContinuation(state, value) {
5576
5678
  response.summary || "Riddle Proof evidence is approved, but ship_mode=none is holding before PR/ship.",
5577
5679
  {
5578
5680
  ship_held: true,
5681
+ shipping_disabled: true,
5682
+ ship_authorized: false,
5579
5683
  proof_assessment: assessment
5580
5684
  }
5581
5685
  )
@@ -6116,6 +6220,25 @@ async function routeCheckpoint(request, state, result, agent, input) {
6116
6220
  }
6117
6221
  };
6118
6222
  }
6223
+ const sourceBlocker = proofAssessmentSourceBlocker({
6224
+ checkpoint,
6225
+ stage: "verify",
6226
+ payload,
6227
+ code: "proof_assessment_source_not_trusted"
6228
+ });
6229
+ if (sourceBlocker) {
6230
+ recordEvent(state, {
6231
+ kind: "agent.proof_assessment.source_blocked",
6232
+ checkpoint,
6233
+ stage: "verify",
6234
+ summary: sourceBlocker.message,
6235
+ details: compactRecord({
6236
+ proof_assessment: payload,
6237
+ agent_duration_ms: durationMs
6238
+ })
6239
+ });
6240
+ return { blocker: sourceBlocker };
6241
+ }
6119
6242
  const visualBlocker = proofAssessmentVisualBlocker({
6120
6243
  ...context.fullRiddleState || {},
6121
6244
  verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
@@ -6150,6 +6273,8 @@ async function routeCheckpoint(request, state, result, agent, input) {
6150
6273
  assessment.summary || result.summary || "Riddle Proof evidence is approved, but ship_mode=none is holding before PR/ship.",
6151
6274
  {
6152
6275
  ship_held: true,
6276
+ shipping_disabled: true,
6277
+ ship_authorized: false,
6153
6278
  proof_assessment: payload
6154
6279
  }
6155
6280
  )
@@ -2,12 +2,12 @@ import {
2
2
  createDisabledRiddleProofAgentAdapter,
3
3
  readRiddleProofRunStatus,
4
4
  runRiddleProofEngineHarness
5
- } from "../chunk-ZLBOGPUL.js";
6
- import "../chunk-WDIKPIMB.js";
7
- import "../chunk-JJ4IWRMJ.js";
5
+ } from "../chunk-QGE3KBRL.js";
6
+ import "../chunk-Q5GYD5RG.js";
7
+ import "../chunk-NYRMPWJB.js";
8
8
  import "../chunk-EKZXU6MU.js";
9
- import "../chunk-BLM5EIBA.js";
10
- import "../chunk-VY4Y5U57.js";
9
+ import "../chunk-QUK3SG24.js";
10
+ import "../chunk-W44XEGYW.js";
11
11
  import "../chunk-MLKGABMK.js";
12
12
  export {
13
13
  createDisabledRiddleProofAgentAdapter,
@@ -3554,6 +3554,9 @@ function normalizeTerminalMetadata(input) {
3554
3554
  pr_state: prState,
3555
3555
  marked_ready: markedReady,
3556
3556
  left_draft: leftDraft,
3557
+ ship_held: firstBoolean(riddleState.ship_held, result.ship_held, result.shipHeld, details.ship_held, details.shipHeld, shipReport.ship_held, shipReport.shipHeld),
3558
+ shipping_disabled: firstBoolean(riddleState.shipping_disabled, result.shipping_disabled, result.shippingDisabled, details.shipping_disabled, details.shippingDisabled, shipReport.shipping_disabled, shipReport.shippingDisabled),
3559
+ ship_authorized: firstBoolean(riddleState.ship_authorized, result.ship_authorized, result.shipAuthorized, details.ship_authorized, details.shipAuthorized, shipReport.ship_authorized, shipReport.shipAuthorized),
3557
3560
  ci_status: firstNonEmptyString(riddleState.ci_status, result.ci_status, result.ciStatus, details.ci_status, details.ciStatus, shipReport.ci_status),
3558
3561
  ship_commit: firstNonEmptyString(riddleState.ship_commit, result.ship_commit, result.shipCommit, details.ship_commit, details.shipCommit, shipReport.shipped_commit, shipReport.ship_commit),
3559
3562
  ship_remote_head: firstNonEmptyString(riddleState.ship_remote_head, result.ship_remote_head, result.shipRemoteHead, details.ship_remote_head, details.shipRemoteHead, shipReport.ship_remote_head),
@@ -3587,6 +3590,9 @@ function applyTerminalMetadata(state, metadata) {
3587
3590
  if (prBranch) state.pr_branch = prBranch;
3588
3591
  if (typeof metadata.marked_ready === "boolean") state.marked_ready = metadata.marked_ready;
3589
3592
  if (typeof metadata.left_draft === "boolean") state.left_draft = metadata.left_draft;
3593
+ if (typeof metadata.ship_held === "boolean") state.ship_held = metadata.ship_held;
3594
+ if (typeof metadata.shipping_disabled === "boolean") state.shipping_disabled = metadata.shipping_disabled;
3595
+ if (typeof metadata.ship_authorized === "boolean") state.ship_authorized = metadata.ship_authorized;
3590
3596
  const ciStatus = nonEmptyString(metadata.ci_status);
3591
3597
  if (ciStatus) state.ci_status = ciStatus;
3592
3598
  const shipCommit = nonEmptyString(metadata.ship_commit);
@@ -3618,12 +3624,53 @@ function applyTerminalMetadata(state, metadata) {
3618
3624
  if (typeof metadata.finalized === "boolean") state.finalized = metadata.finalized;
3619
3625
  return state;
3620
3626
  }
3627
+ function shipControlStateFor(input) {
3628
+ const state = input.state;
3629
+ const status = input.status || state.status;
3630
+ const raw = recordValue(input.raw) || {};
3631
+ const shipReport = recordValue(state.ship_report) || {};
3632
+ const prState = recordValue(state.pr_state) || {};
3633
+ const shippingDisabled = firstBoolean(
3634
+ raw.shipping_disabled,
3635
+ raw.shippingDisabled,
3636
+ state.shipping_disabled,
3637
+ shipReport.shipping_disabled,
3638
+ shipReport.shippingDisabled
3639
+ ) ?? state.request?.ship_mode === "none";
3640
+ const explicitAuthorized = firstBoolean(
3641
+ raw.ship_authorized,
3642
+ raw.shipAuthorized,
3643
+ state.ship_authorized,
3644
+ shipReport.ship_authorized,
3645
+ shipReport.shipAuthorized
3646
+ );
3647
+ const authorizationEvidence = Boolean(
3648
+ status === "shipped" || state.marked_ready === true || shipReport.marked_ready === true || prState.status === "merged" || state.merge_commit || state.merged_at
3649
+ );
3650
+ const inferredAuthorized = explicitAuthorized ?? authorizationEvidence;
3651
+ const rawHeld = firstBoolean(raw.ship_held, raw.shipHeld);
3652
+ const inferredHeld = status === "ready_to_ship" && shippingDisabled && !inferredAuthorized;
3653
+ const shipHeld = rawHeld ?? (state.ship_held === true || inferredHeld);
3654
+ return {
3655
+ ship_held: shipHeld,
3656
+ shipping_disabled: shippingDisabled,
3657
+ ship_authorized: shipHeld ? false : inferredAuthorized
3658
+ };
3659
+ }
3660
+ function applyShipControlState(state, input = {}) {
3661
+ const control = shipControlStateFor({ state, status: input.status, raw: input.raw });
3662
+ state.ship_held = control.ship_held;
3663
+ state.shipping_disabled = control.shipping_disabled;
3664
+ state.ship_authorized = control.ship_authorized;
3665
+ return state;
3666
+ }
3621
3667
  function createRunResult(input) {
3622
3668
  const status = input.status || input.state.status;
3623
3669
  const ok = isSuccessfulStatus(status);
3624
3670
  const state = input.metadata ? applyTerminalMetadata(input.state, input.metadata) : input.state;
3625
3671
  state.status = status;
3626
3672
  state.ok = ok;
3673
+ applyShipControlState(state, { status, raw: input.raw });
3627
3674
  return compactRecord({
3628
3675
  ok,
3629
3676
  status,
@@ -3641,6 +3688,9 @@ function createRunResult(input) {
3641
3688
  pr_state: state.pr_state,
3642
3689
  marked_ready: state.marked_ready,
3643
3690
  left_draft: state.left_draft,
3691
+ ship_held: state.ship_held,
3692
+ shipping_disabled: state.shipping_disabled,
3693
+ ship_authorized: state.ship_authorized,
3644
3694
  ci_status: state.ci_status,
3645
3695
  ship_commit: state.ship_commit,
3646
3696
  ship_remote_head: state.ship_remote_head,
@@ -4530,6 +4580,7 @@ function createRiddleProofRunCard(state, input = {}) {
4530
4580
  const visualDelta = visualDeltaFrom({ fullRiddleState: fullState, runState: state });
4531
4581
  const artifacts = artifactsFrom({ fullRiddleState: fullState, runState: state });
4532
4582
  const viewportMatrix = viewportMatrixFrom({ fullRiddleState: fullState, runState: state });
4583
+ const shipControl = shipControlStateFor({ state });
4533
4584
  return {
4534
4585
  version: RIDDLE_PROOF_RUN_CARD_VERSION,
4535
4586
  run_id: state.run_id || "unknown",
@@ -4583,6 +4634,9 @@ function createRiddleProofRunCard(state, input = {}) {
4583
4634
  stop_condition: compactRecord({
4584
4635
  status: state.status,
4585
4636
  terminal: isTerminalStatus(state.status),
4637
+ ship_held: shipControl.ship_held,
4638
+ shipping_disabled: shipControl.shipping_disabled,
4639
+ ship_authorized: shipControl.ship_authorized,
4586
4640
  blocker_code: state.blocker?.code || null,
4587
4641
  blocker_message: state.blocker?.message || null,
4588
4642
  proof_decision: state.proof_decision,
@@ -4743,7 +4797,8 @@ function appendStageHeartbeat(state, input) {
4743
4797
  function createRunStatusSnapshot(state, at = timestamp2()) {
4744
4798
  const latestEvent = state.events[state.events.length - 1];
4745
4799
  const runId = state.run_id || "unknown";
4746
- const existingRunCardCurrent = state.run_card?.status === state.status && state.run_card.stop_condition?.status === state.status && state.run_card.stop_condition?.terminal === isTerminalStatus(state.status) && state.run_card.stop_condition?.monitor_should_continue === !isTerminalStatus(state.status);
4800
+ const shipControl = shipControlStateFor({ state });
4801
+ const existingRunCardCurrent = state.run_card?.status === state.status && state.run_card.stop_condition?.status === state.status && state.run_card.stop_condition?.terminal === isTerminalStatus(state.status) && state.run_card.stop_condition?.monitor_should_continue === !isTerminalStatus(state.status) && state.run_card.stop_condition?.ship_held === shipControl.ship_held && state.run_card.stop_condition?.shipping_disabled === shipControl.shipping_disabled && state.run_card.stop_condition?.ship_authorized === shipControl.ship_authorized;
4747
4802
  const runCard = existingRunCardCurrent ? state.run_card : createRiddleProofRunCard(state, { at });
4748
4803
  return compactRecord({
4749
4804
  run_id: runId,
@@ -4757,6 +4812,9 @@ function createRunStatusSnapshot(state, at = timestamp2()) {
4757
4812
  pr_url: state.pr_url ?? null,
4758
4813
  pr_branch: state.pr_branch ?? null,
4759
4814
  pr_state: state.pr_state,
4815
+ ship_held: shipControl.ship_held,
4816
+ shipping_disabled: shipControl.shipping_disabled,
4817
+ ship_authorized: shipControl.ship_authorized,
4760
4818
  ci_status: state.ci_status,
4761
4819
  ship_commit: state.ship_commit,
4762
4820
  ship_remote_head: state.ship_remote_head,
@@ -5223,7 +5281,7 @@ async function runRiddleProof(input) {
5223
5281
  status: "ready_to_ship",
5224
5282
  last_summary: assessment.summary,
5225
5283
  evidence_bundle: evidenceBundle,
5226
- raw: { implementation, assessment }
5284
+ raw: { implementation, assessment, ship_held: true, shipping_disabled: true, ship_authorized: false }
5227
5285
  });
5228
5286
  return notifyIfConfigured({ state, result: result2, notification: adapters.notification });
5229
5287
  }
@@ -5548,7 +5606,7 @@ function shipHeldTerminal(state, result) {
5548
5606
  "ready_to_ship",
5549
5607
  result,
5550
5608
  result.summary || "Riddle Proof evidence is approved, but ship_mode=none is holding before PR/ship.",
5551
- { ship_held: true }
5609
+ { ship_held: true, shipping_disabled: true, ship_authorized: false }
5552
5610
  );
5553
5611
  }
5554
5612
  function checkpointContinueStage2(result) {
@@ -5596,6 +5654,32 @@ function isReadyShipGate(result) {
5596
5654
  function proofAssessmentRequestsShip(payload) {
5597
5655
  return String(payload.decision || "").trim() === "ready_to_ship";
5598
5656
  }
5657
+ var TRUSTED_PROOF_ASSESSMENT_READY_SOURCES = /* @__PURE__ */ new Set([
5658
+ "supervising_agent",
5659
+ "supervisor",
5660
+ "openclaw_auto_ship_mode_none"
5661
+ ]);
5662
+ function proofAssessmentSourceTrustedForShip(payload) {
5663
+ const source = nonEmptyString(payload.source)?.toLowerCase();
5664
+ if (!source) return true;
5665
+ return TRUSTED_PROOF_ASSESSMENT_READY_SOURCES.has(source);
5666
+ }
5667
+ function proofAssessmentSourceBlocker(input) {
5668
+ if (!proofAssessmentRequestsShip(input.payload)) return null;
5669
+ if (proofAssessmentSourceTrustedForShip(input.payload)) return null;
5670
+ const source = nonEmptyString(input.payload.source) || "unknown";
5671
+ return {
5672
+ code: input.code || "proof_assessment_source_not_trusted",
5673
+ checkpoint: input.checkpoint || null,
5674
+ message: `Riddle Proof cannot mark ready_to_ship from untrusted proof assessment source: ${source}.`,
5675
+ details: compactRecord({
5676
+ stage: input.stage || null,
5677
+ proofAssessment: input.payload,
5678
+ checkpoint_response_source: input.response?.source || null,
5679
+ response: input.response || null
5680
+ })
5681
+ };
5682
+ }
5599
5683
  function proofAssessmentHardBlockers(state, payload) {
5600
5684
  const blockers = proofAssessmentHardBlockersForState(state || {});
5601
5685
  if (Array.isArray(payload.hard_blockers)) {
@@ -5626,6 +5710,15 @@ function stageFromCheckpointResponse(response, packet) {
5626
5710
  const stage = response.continue_with_stage || nonEmptyString(payload.continue_with_stage) || nonEmptyString(payload.recommended_stage) || nonEmptyString(resume?.continue_with_stage) || (response.decision === "retry_stage" ? packet.stage : "");
5627
5711
  return stage ? stage : null;
5628
5712
  }
5713
+ function proofAssessmentSourceFromCheckpointResponse(response) {
5714
+ const kind = nonEmptyString(response.source?.kind)?.toLowerCase();
5715
+ if (!kind) return "supervising_agent";
5716
+ if (kind === "human") return "supervisor";
5717
+ if (kind === "codex" || kind === "openclaw-main" || kind === "claude-code") {
5718
+ return "supervising_agent";
5719
+ }
5720
+ return `checkpoint_response:${kind}`;
5721
+ }
5629
5722
  function proofAssessmentPayloadFromCheckpointResponse(response) {
5630
5723
  if (![
5631
5724
  "ready_to_ship",
@@ -5646,7 +5739,7 @@ function proofAssessmentPayloadFromCheckpointResponse(response) {
5646
5739
  continue_with_stage: stage || void 0,
5647
5740
  escalation_target: nonEmptyString(payload.escalation_target) || "agent",
5648
5741
  reasons: Array.isArray(response.reasons) ? response.reasons : Array.isArray(payload.reasons) ? payload.reasons : [],
5649
- source: "supervising_agent",
5742
+ source: proofAssessmentSourceFromCheckpointResponse(response),
5650
5743
  checkpoint_response_source: response.source || null,
5651
5744
  checkpoint_response_created_at: response.created_at
5652
5745
  }));
@@ -5791,6 +5884,7 @@ function terminalResult(state, status, result, summary, raw = {}) {
5791
5884
  engineResult: result
5792
5885
  });
5793
5886
  applyTerminalMetadata(state, metadata);
5887
+ applyShipControlState(state, { status, raw });
5794
5888
  persist(state);
5795
5889
  return createRunResult({
5796
5890
  state,
@@ -6097,6 +6191,14 @@ function checkpointResponseContinuation(state, value) {
6097
6191
  if (packet.kind === "assess_proof" || packet.kind === "recover_evidence" || packet.stage === "verify") {
6098
6192
  const assessment = proofAssessmentPayloadFromCheckpointResponse(response);
6099
6193
  if (assessment) {
6194
+ const sourceBlocker = proofAssessmentSourceBlocker({
6195
+ checkpoint: packet.checkpoint,
6196
+ stage: packet.stage,
6197
+ payload: assessment,
6198
+ response,
6199
+ code: "checkpoint_response_source_not_trusted"
6200
+ });
6201
+ if (sourceBlocker) return { blocker: sourceBlocker };
6100
6202
  appendCheckpointResponse(state, response);
6101
6203
  if (state.request.ship_mode !== "ship" && proofAssessmentRequestsShip(assessment)) {
6102
6204
  const result = {
@@ -6115,6 +6217,8 @@ function checkpointResponseContinuation(state, value) {
6115
6217
  response.summary || "Riddle Proof evidence is approved, but ship_mode=none is holding before PR/ship.",
6116
6218
  {
6117
6219
  ship_held: true,
6220
+ shipping_disabled: true,
6221
+ ship_authorized: false,
6118
6222
  proof_assessment: assessment
6119
6223
  }
6120
6224
  )
@@ -6655,6 +6759,25 @@ async function routeCheckpoint(request, state, result, agent, input) {
6655
6759
  }
6656
6760
  };
6657
6761
  }
6762
+ const sourceBlocker = proofAssessmentSourceBlocker({
6763
+ checkpoint,
6764
+ stage: "verify",
6765
+ payload,
6766
+ code: "proof_assessment_source_not_trusted"
6767
+ });
6768
+ if (sourceBlocker) {
6769
+ recordEvent(state, {
6770
+ kind: "agent.proof_assessment.source_blocked",
6771
+ checkpoint,
6772
+ stage: "verify",
6773
+ summary: sourceBlocker.message,
6774
+ details: compactRecord({
6775
+ proof_assessment: payload,
6776
+ agent_duration_ms: durationMs
6777
+ })
6778
+ });
6779
+ return { blocker: sourceBlocker };
6780
+ }
6658
6781
  const visualBlocker = proofAssessmentVisualBlocker({
6659
6782
  ...context.fullRiddleState || {},
6660
6783
  verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
@@ -6689,6 +6812,8 @@ async function routeCheckpoint(request, state, result, agent, input) {
6689
6812
  assessment.summary || result.summary || "Riddle Proof evidence is approved, but ship_mode=none is holding before PR/ship.",
6690
6813
  {
6691
6814
  ship_held: true,
6815
+ shipping_disabled: true,
6816
+ ship_authorized: false,
6692
6817
  proof_assessment: payload
6693
6818
  }
6694
6819
  )
@@ -1,5 +1,5 @@
1
1
  export { b as runner } from '../runner-4LJ5z0D-.cjs';
2
2
  export { l as engineHarness } from '../engine-harness-LBfqbFSe.cjs';
3
3
  export { p as proofRunCore } from '../proof-run-core-7Dqm7RKM.cjs';
4
- export { p as proofRunEngine } from '../proof-run-engine-DpChFR5H.cjs';
4
+ export { p as proofRunEngine } from '../proof-run-engine-Baiv6l3A.cjs';
5
5
  import '../types.cjs';
@@ -1,5 +1,5 @@
1
1
  export { b as runner } from '../runner-BdQpOkZD.js';
2
2
  export { l as engineHarness } from '../engine-harness-CMACHP6A.js';
3
3
  export { p as proofRunCore } from '../proof-run-core-7Dqm7RKM.js';
4
- export { p as proofRunEngine } from '../proof-run-engine-BqRoA3Do.js';
4
+ export { p as proofRunEngine } from '../proof-run-engine-MiKZt9oY.js';
5
5
  import '../types.js';
@@ -3,17 +3,17 @@ import {
3
3
  } from "../chunk-VYJD6XYF.js";
4
4
  import {
5
5
  runner_exports
6
- } from "../chunk-S5DX7Z6X.js";
6
+ } from "../chunk-F65S5LT2.js";
7
7
  import {
8
8
  engine_harness_exports
9
- } from "../chunk-ZLBOGPUL.js";
10
- import "../chunk-WDIKPIMB.js";
11
- import "../chunk-JJ4IWRMJ.js";
9
+ } from "../chunk-QGE3KBRL.js";
10
+ import "../chunk-Q5GYD5RG.js";
11
+ import "../chunk-NYRMPWJB.js";
12
12
  import {
13
13
  proof_run_core_exports
14
14
  } from "../chunk-EKZXU6MU.js";
15
- import "../chunk-BLM5EIBA.js";
16
- import "../chunk-VY4Y5U57.js";
15
+ import "../chunk-QUK3SG24.js";
16
+ import "../chunk-W44XEGYW.js";
17
17
  import "../chunk-MLKGABMK.js";
18
18
  export {
19
19
  engine_harness_exports as engineHarness,
@@ -1,2 +1,2 @@
1
- export { R as RiddleProofEngine, c as createRiddleProofEngine, e as executeWorkflow } from '../proof-run-engine-DpChFR5H.cjs';
1
+ export { R as RiddleProofEngine, c as createRiddleProofEngine, e as executeWorkflow } from '../proof-run-engine-Baiv6l3A.cjs';
2
2
  import '../proof-run-core-7Dqm7RKM.cjs';
@@ -1,2 +1,2 @@
1
- export { R as RiddleProofEngine, c as createRiddleProofEngine, e as executeWorkflow } from '../proof-run-engine-BqRoA3Do.js';
1
+ export { R as RiddleProofEngine, c as createRiddleProofEngine, e as executeWorkflow } from '../proof-run-engine-MiKZt9oY.js';
2
2
  import '../proof-run-core-7Dqm7RKM.js';