@riddledc/riddle-proof 0.8.53 → 0.8.54

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.
@@ -5057,6 +5057,32 @@ function isReadyShipGate(result) {
5057
5057
  function proofAssessmentRequestsShip(payload) {
5058
5058
  return String(payload.decision || "").trim() === "ready_to_ship";
5059
5059
  }
5060
+ var TRUSTED_PROOF_ASSESSMENT_READY_SOURCES = /* @__PURE__ */ new Set([
5061
+ "supervising_agent",
5062
+ "supervisor",
5063
+ "openclaw_auto_ship_mode_none"
5064
+ ]);
5065
+ function proofAssessmentSourceTrustedForShip(payload) {
5066
+ const source = nonEmptyString(payload.source)?.toLowerCase();
5067
+ if (!source) return true;
5068
+ return TRUSTED_PROOF_ASSESSMENT_READY_SOURCES.has(source);
5069
+ }
5070
+ function proofAssessmentSourceBlocker(input) {
5071
+ if (!proofAssessmentRequestsShip(input.payload)) return null;
5072
+ if (proofAssessmentSourceTrustedForShip(input.payload)) return null;
5073
+ const source = nonEmptyString(input.payload.source) || "unknown";
5074
+ return {
5075
+ code: input.code || "proof_assessment_source_not_trusted",
5076
+ checkpoint: input.checkpoint || null,
5077
+ message: `Riddle Proof cannot mark ready_to_ship from untrusted proof assessment source: ${source}.`,
5078
+ details: compactRecord({
5079
+ stage: input.stage || null,
5080
+ proofAssessment: input.payload,
5081
+ checkpoint_response_source: input.response?.source || null,
5082
+ response: input.response || null
5083
+ })
5084
+ };
5085
+ }
5060
5086
  function proofAssessmentHardBlockers(state, payload) {
5061
5087
  const blockers = proofAssessmentHardBlockersForState(state || {});
5062
5088
  if (Array.isArray(payload.hard_blockers)) {
@@ -5087,6 +5113,15 @@ function stageFromCheckpointResponse(response, packet) {
5087
5113
  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
5114
  return stage ? stage : null;
5089
5115
  }
5116
+ function proofAssessmentSourceFromCheckpointResponse(response) {
5117
+ const kind = nonEmptyString(response.source?.kind)?.toLowerCase();
5118
+ if (!kind) return "supervising_agent";
5119
+ if (kind === "human") return "supervisor";
5120
+ if (kind === "codex" || kind === "openclaw-main" || kind === "claude-code") {
5121
+ return "supervising_agent";
5122
+ }
5123
+ return `checkpoint_response:${kind}`;
5124
+ }
5090
5125
  function proofAssessmentPayloadFromCheckpointResponse(response) {
5091
5126
  if (![
5092
5127
  "ready_to_ship",
@@ -5107,7 +5142,7 @@ function proofAssessmentPayloadFromCheckpointResponse(response) {
5107
5142
  continue_with_stage: stage || void 0,
5108
5143
  escalation_target: nonEmptyString(payload.escalation_target) || "agent",
5109
5144
  reasons: Array.isArray(response.reasons) ? response.reasons : Array.isArray(payload.reasons) ? payload.reasons : [],
5110
- source: "supervising_agent",
5145
+ source: proofAssessmentSourceFromCheckpointResponse(response),
5111
5146
  checkpoint_response_source: response.source || null,
5112
5147
  checkpoint_response_created_at: response.created_at
5113
5148
  }));
@@ -5558,6 +5593,14 @@ function checkpointResponseContinuation(state, value) {
5558
5593
  if (packet.kind === "assess_proof" || packet.kind === "recover_evidence" || packet.stage === "verify") {
5559
5594
  const assessment = proofAssessmentPayloadFromCheckpointResponse(response);
5560
5595
  if (assessment) {
5596
+ const sourceBlocker = proofAssessmentSourceBlocker({
5597
+ checkpoint: packet.checkpoint,
5598
+ stage: packet.stage,
5599
+ payload: assessment,
5600
+ response,
5601
+ code: "checkpoint_response_source_not_trusted"
5602
+ });
5603
+ if (sourceBlocker) return { blocker: sourceBlocker };
5561
5604
  appendCheckpointResponse(state, response);
5562
5605
  if (state.request.ship_mode !== "ship" && proofAssessmentRequestsShip(assessment)) {
5563
5606
  const result = {
@@ -6116,6 +6159,25 @@ async function routeCheckpoint(request, state, result, agent, input) {
6116
6159
  }
6117
6160
  };
6118
6161
  }
6162
+ const sourceBlocker = proofAssessmentSourceBlocker({
6163
+ checkpoint,
6164
+ stage: "verify",
6165
+ payload,
6166
+ code: "proof_assessment_source_not_trusted"
6167
+ });
6168
+ if (sourceBlocker) {
6169
+ recordEvent(state, {
6170
+ kind: "agent.proof_assessment.source_blocked",
6171
+ checkpoint,
6172
+ stage: "verify",
6173
+ summary: sourceBlocker.message,
6174
+ details: compactRecord({
6175
+ proof_assessment: payload,
6176
+ agent_duration_ms: durationMs
6177
+ })
6178
+ });
6179
+ return { blocker: sourceBlocker };
6180
+ }
6119
6181
  const visualBlocker = proofAssessmentVisualBlocker({
6120
6182
  ...context.fullRiddleState || {},
6121
6183
  verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
@@ -2,7 +2,7 @@ import {
2
2
  createDisabledRiddleProofAgentAdapter,
3
3
  readRiddleProofRunStatus,
4
4
  runRiddleProofEngineHarness
5
- } from "../chunk-ZLBOGPUL.js";
5
+ } from "../chunk-IV4DVWPR.js";
6
6
  import "../chunk-WDIKPIMB.js";
7
7
  import "../chunk-JJ4IWRMJ.js";
8
8
  import "../chunk-EKZXU6MU.js";
@@ -5596,6 +5596,32 @@ function isReadyShipGate(result) {
5596
5596
  function proofAssessmentRequestsShip(payload) {
5597
5597
  return String(payload.decision || "").trim() === "ready_to_ship";
5598
5598
  }
5599
+ var TRUSTED_PROOF_ASSESSMENT_READY_SOURCES = /* @__PURE__ */ new Set([
5600
+ "supervising_agent",
5601
+ "supervisor",
5602
+ "openclaw_auto_ship_mode_none"
5603
+ ]);
5604
+ function proofAssessmentSourceTrustedForShip(payload) {
5605
+ const source = nonEmptyString(payload.source)?.toLowerCase();
5606
+ if (!source) return true;
5607
+ return TRUSTED_PROOF_ASSESSMENT_READY_SOURCES.has(source);
5608
+ }
5609
+ function proofAssessmentSourceBlocker(input) {
5610
+ if (!proofAssessmentRequestsShip(input.payload)) return null;
5611
+ if (proofAssessmentSourceTrustedForShip(input.payload)) return null;
5612
+ const source = nonEmptyString(input.payload.source) || "unknown";
5613
+ return {
5614
+ code: input.code || "proof_assessment_source_not_trusted",
5615
+ checkpoint: input.checkpoint || null,
5616
+ message: `Riddle Proof cannot mark ready_to_ship from untrusted proof assessment source: ${source}.`,
5617
+ details: compactRecord({
5618
+ stage: input.stage || null,
5619
+ proofAssessment: input.payload,
5620
+ checkpoint_response_source: input.response?.source || null,
5621
+ response: input.response || null
5622
+ })
5623
+ };
5624
+ }
5599
5625
  function proofAssessmentHardBlockers(state, payload) {
5600
5626
  const blockers = proofAssessmentHardBlockersForState(state || {});
5601
5627
  if (Array.isArray(payload.hard_blockers)) {
@@ -5626,6 +5652,15 @@ function stageFromCheckpointResponse(response, packet) {
5626
5652
  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
5653
  return stage ? stage : null;
5628
5654
  }
5655
+ function proofAssessmentSourceFromCheckpointResponse(response) {
5656
+ const kind = nonEmptyString(response.source?.kind)?.toLowerCase();
5657
+ if (!kind) return "supervising_agent";
5658
+ if (kind === "human") return "supervisor";
5659
+ if (kind === "codex" || kind === "openclaw-main" || kind === "claude-code") {
5660
+ return "supervising_agent";
5661
+ }
5662
+ return `checkpoint_response:${kind}`;
5663
+ }
5629
5664
  function proofAssessmentPayloadFromCheckpointResponse(response) {
5630
5665
  if (![
5631
5666
  "ready_to_ship",
@@ -5646,7 +5681,7 @@ function proofAssessmentPayloadFromCheckpointResponse(response) {
5646
5681
  continue_with_stage: stage || void 0,
5647
5682
  escalation_target: nonEmptyString(payload.escalation_target) || "agent",
5648
5683
  reasons: Array.isArray(response.reasons) ? response.reasons : Array.isArray(payload.reasons) ? payload.reasons : [],
5649
- source: "supervising_agent",
5684
+ source: proofAssessmentSourceFromCheckpointResponse(response),
5650
5685
  checkpoint_response_source: response.source || null,
5651
5686
  checkpoint_response_created_at: response.created_at
5652
5687
  }));
@@ -6097,6 +6132,14 @@ function checkpointResponseContinuation(state, value) {
6097
6132
  if (packet.kind === "assess_proof" || packet.kind === "recover_evidence" || packet.stage === "verify") {
6098
6133
  const assessment = proofAssessmentPayloadFromCheckpointResponse(response);
6099
6134
  if (assessment) {
6135
+ const sourceBlocker = proofAssessmentSourceBlocker({
6136
+ checkpoint: packet.checkpoint,
6137
+ stage: packet.stage,
6138
+ payload: assessment,
6139
+ response,
6140
+ code: "checkpoint_response_source_not_trusted"
6141
+ });
6142
+ if (sourceBlocker) return { blocker: sourceBlocker };
6100
6143
  appendCheckpointResponse(state, response);
6101
6144
  if (state.request.ship_mode !== "ship" && proofAssessmentRequestsShip(assessment)) {
6102
6145
  const result = {
@@ -6655,6 +6698,25 @@ async function routeCheckpoint(request, state, result, agent, input) {
6655
6698
  }
6656
6699
  };
6657
6700
  }
6701
+ const sourceBlocker = proofAssessmentSourceBlocker({
6702
+ checkpoint,
6703
+ stage: "verify",
6704
+ payload,
6705
+ code: "proof_assessment_source_not_trusted"
6706
+ });
6707
+ if (sourceBlocker) {
6708
+ recordEvent(state, {
6709
+ kind: "agent.proof_assessment.source_blocked",
6710
+ checkpoint,
6711
+ stage: "verify",
6712
+ summary: sourceBlocker.message,
6713
+ details: compactRecord({
6714
+ proof_assessment: payload,
6715
+ agent_duration_ms: durationMs
6716
+ })
6717
+ });
6718
+ return { blocker: sourceBlocker };
6719
+ }
6658
6720
  const visualBlocker = proofAssessmentVisualBlocker({
6659
6721
  ...context.fullRiddleState || {},
6660
6722
  verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
@@ -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';
@@ -6,7 +6,7 @@ import {
6
6
  } from "../chunk-S5DX7Z6X.js";
7
7
  import {
8
8
  engine_harness_exports
9
- } from "../chunk-ZLBOGPUL.js";
9
+ } from "../chunk-IV4DVWPR.js";
10
10
  import "../chunk-WDIKPIMB.js";
11
11
  import "../chunk-JJ4IWRMJ.js";
12
12
  import {
@@ -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';
@@ -28,7 +28,7 @@ import {
28
28
  createDisabledRiddleProofAgentAdapter,
29
29
  readRiddleProofRunStatus,
30
30
  runRiddleProofEngineHarness
31
- } from "./chunk-ZLBOGPUL.js";
31
+ } from "./chunk-IV4DVWPR.js";
32
32
  import {
33
33
  createCheckpointResponseTemplate
34
34
  } from "./chunk-BLM5EIBA.js";
@@ -361,6 +361,32 @@ function isReadyShipGate(result) {
361
361
  function proofAssessmentRequestsShip(payload) {
362
362
  return String(payload.decision || "").trim() === "ready_to_ship";
363
363
  }
364
+ var TRUSTED_PROOF_ASSESSMENT_READY_SOURCES = /* @__PURE__ */ new Set([
365
+ "supervising_agent",
366
+ "supervisor",
367
+ "openclaw_auto_ship_mode_none"
368
+ ]);
369
+ function proofAssessmentSourceTrustedForShip(payload) {
370
+ const source = nonEmptyString(payload.source)?.toLowerCase();
371
+ if (!source) return true;
372
+ return TRUSTED_PROOF_ASSESSMENT_READY_SOURCES.has(source);
373
+ }
374
+ function proofAssessmentSourceBlocker(input) {
375
+ if (!proofAssessmentRequestsShip(input.payload)) return null;
376
+ if (proofAssessmentSourceTrustedForShip(input.payload)) return null;
377
+ const source = nonEmptyString(input.payload.source) || "unknown";
378
+ return {
379
+ code: input.code || "proof_assessment_source_not_trusted",
380
+ checkpoint: input.checkpoint || null,
381
+ message: `Riddle Proof cannot mark ready_to_ship from untrusted proof assessment source: ${source}.`,
382
+ details: compactRecord({
383
+ stage: input.stage || null,
384
+ proofAssessment: input.payload,
385
+ checkpoint_response_source: input.response?.source || null,
386
+ response: input.response || null
387
+ })
388
+ };
389
+ }
364
390
  function proofAssessmentHardBlockers(state, payload) {
365
391
  const blockers = proofAssessmentHardBlockersForState(state || {});
366
392
  if (Array.isArray(payload.hard_blockers)) {
@@ -391,6 +417,15 @@ function stageFromCheckpointResponse(response, packet) {
391
417
  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 : "");
392
418
  return stage ? stage : null;
393
419
  }
420
+ function proofAssessmentSourceFromCheckpointResponse(response) {
421
+ const kind = nonEmptyString(response.source?.kind)?.toLowerCase();
422
+ if (!kind) return "supervising_agent";
423
+ if (kind === "human") return "supervisor";
424
+ if (kind === "codex" || kind === "openclaw-main" || kind === "claude-code") {
425
+ return "supervising_agent";
426
+ }
427
+ return `checkpoint_response:${kind}`;
428
+ }
394
429
  function proofAssessmentPayloadFromCheckpointResponse(response) {
395
430
  if (![
396
431
  "ready_to_ship",
@@ -411,7 +446,7 @@ function proofAssessmentPayloadFromCheckpointResponse(response) {
411
446
  continue_with_stage: stage || void 0,
412
447
  escalation_target: nonEmptyString(payload.escalation_target) || "agent",
413
448
  reasons: Array.isArray(response.reasons) ? response.reasons : Array.isArray(payload.reasons) ? payload.reasons : [],
414
- source: "supervising_agent",
449
+ source: proofAssessmentSourceFromCheckpointResponse(response),
415
450
  checkpoint_response_source: response.source || null,
416
451
  checkpoint_response_created_at: response.created_at
417
452
  }));
@@ -862,6 +897,14 @@ function checkpointResponseContinuation(state, value) {
862
897
  if (packet.kind === "assess_proof" || packet.kind === "recover_evidence" || packet.stage === "verify") {
863
898
  const assessment = proofAssessmentPayloadFromCheckpointResponse(response);
864
899
  if (assessment) {
900
+ const sourceBlocker = proofAssessmentSourceBlocker({
901
+ checkpoint: packet.checkpoint,
902
+ stage: packet.stage,
903
+ payload: assessment,
904
+ response,
905
+ code: "checkpoint_response_source_not_trusted"
906
+ });
907
+ if (sourceBlocker) return { blocker: sourceBlocker };
865
908
  appendCheckpointResponse(state, response);
866
909
  if (state.request.ship_mode !== "ship" && proofAssessmentRequestsShip(assessment)) {
867
910
  const result = {
@@ -1420,6 +1463,25 @@ async function routeCheckpoint(request, state, result, agent, input) {
1420
1463
  }
1421
1464
  };
1422
1465
  }
1466
+ const sourceBlocker = proofAssessmentSourceBlocker({
1467
+ checkpoint,
1468
+ stage: "verify",
1469
+ payload,
1470
+ code: "proof_assessment_source_not_trusted"
1471
+ });
1472
+ if (sourceBlocker) {
1473
+ recordEvent(state, {
1474
+ kind: "agent.proof_assessment.source_blocked",
1475
+ checkpoint,
1476
+ stage: "verify",
1477
+ summary: sourceBlocker.message,
1478
+ details: compactRecord({
1479
+ proof_assessment: payload,
1480
+ agent_duration_ms: durationMs
1481
+ })
1482
+ });
1483
+ return { blocker: sourceBlocker };
1484
+ }
1423
1485
  const visualBlocker = proofAssessmentVisualBlocker({
1424
1486
  ...context.fullRiddleState || {},
1425
1487
  verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
package/dist/cli/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import "../chunk-2ALMXMFZ.js";
1
+ import "../chunk-ECLGGGAI.js";
2
2
  import "../chunk-DI2XNGEZ.js";
3
3
  import "../chunk-6KYXX4OE.js";
4
4
  import "../chunk-EX7TO4I5.js";
5
- import "../chunk-ZLBOGPUL.js";
5
+ import "../chunk-IV4DVWPR.js";
6
6
  import "../chunk-WDIKPIMB.js";
7
7
  import "../chunk-JJ4IWRMJ.js";
8
8
  import "../chunk-EKZXU6MU.js";
package/dist/cli.cjs CHANGED
@@ -5143,6 +5143,32 @@ function isReadyShipGate(result) {
5143
5143
  function proofAssessmentRequestsShip(payload) {
5144
5144
  return String(payload.decision || "").trim() === "ready_to_ship";
5145
5145
  }
5146
+ var TRUSTED_PROOF_ASSESSMENT_READY_SOURCES = /* @__PURE__ */ new Set([
5147
+ "supervising_agent",
5148
+ "supervisor",
5149
+ "openclaw_auto_ship_mode_none"
5150
+ ]);
5151
+ function proofAssessmentSourceTrustedForShip(payload) {
5152
+ const source = nonEmptyString(payload.source)?.toLowerCase();
5153
+ if (!source) return true;
5154
+ return TRUSTED_PROOF_ASSESSMENT_READY_SOURCES.has(source);
5155
+ }
5156
+ function proofAssessmentSourceBlocker(input) {
5157
+ if (!proofAssessmentRequestsShip(input.payload)) return null;
5158
+ if (proofAssessmentSourceTrustedForShip(input.payload)) return null;
5159
+ const source = nonEmptyString(input.payload.source) || "unknown";
5160
+ return {
5161
+ code: input.code || "proof_assessment_source_not_trusted",
5162
+ checkpoint: input.checkpoint || null,
5163
+ message: `Riddle Proof cannot mark ready_to_ship from untrusted proof assessment source: ${source}.`,
5164
+ details: compactRecord({
5165
+ stage: input.stage || null,
5166
+ proofAssessment: input.payload,
5167
+ checkpoint_response_source: input.response?.source || null,
5168
+ response: input.response || null
5169
+ })
5170
+ };
5171
+ }
5146
5172
  function proofAssessmentHardBlockers(state, payload) {
5147
5173
  const blockers = proofAssessmentHardBlockersForState(state || {});
5148
5174
  if (Array.isArray(payload.hard_blockers)) {
@@ -5173,6 +5199,15 @@ function stageFromCheckpointResponse(response, packet) {
5173
5199
  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 : "");
5174
5200
  return stage ? stage : null;
5175
5201
  }
5202
+ function proofAssessmentSourceFromCheckpointResponse(response) {
5203
+ const kind = nonEmptyString(response.source?.kind)?.toLowerCase();
5204
+ if (!kind) return "supervising_agent";
5205
+ if (kind === "human") return "supervisor";
5206
+ if (kind === "codex" || kind === "openclaw-main" || kind === "claude-code") {
5207
+ return "supervising_agent";
5208
+ }
5209
+ return `checkpoint_response:${kind}`;
5210
+ }
5176
5211
  function proofAssessmentPayloadFromCheckpointResponse(response) {
5177
5212
  if (![
5178
5213
  "ready_to_ship",
@@ -5193,7 +5228,7 @@ function proofAssessmentPayloadFromCheckpointResponse(response) {
5193
5228
  continue_with_stage: stage || void 0,
5194
5229
  escalation_target: nonEmptyString(payload.escalation_target) || "agent",
5195
5230
  reasons: Array.isArray(response.reasons) ? response.reasons : Array.isArray(payload.reasons) ? payload.reasons : [],
5196
- source: "supervising_agent",
5231
+ source: proofAssessmentSourceFromCheckpointResponse(response),
5197
5232
  checkpoint_response_source: response.source || null,
5198
5233
  checkpoint_response_created_at: response.created_at
5199
5234
  }));
@@ -5644,6 +5679,14 @@ function checkpointResponseContinuation(state, value) {
5644
5679
  if (packet.kind === "assess_proof" || packet.kind === "recover_evidence" || packet.stage === "verify") {
5645
5680
  const assessment = proofAssessmentPayloadFromCheckpointResponse(response);
5646
5681
  if (assessment) {
5682
+ const sourceBlocker = proofAssessmentSourceBlocker({
5683
+ checkpoint: packet.checkpoint,
5684
+ stage: packet.stage,
5685
+ payload: assessment,
5686
+ response,
5687
+ code: "checkpoint_response_source_not_trusted"
5688
+ });
5689
+ if (sourceBlocker) return { blocker: sourceBlocker };
5647
5690
  appendCheckpointResponse(state, response);
5648
5691
  if (state.request.ship_mode !== "ship" && proofAssessmentRequestsShip(assessment)) {
5649
5692
  const result = {
@@ -6202,6 +6245,25 @@ async function routeCheckpoint(request, state, result, agent, input) {
6202
6245
  }
6203
6246
  };
6204
6247
  }
6248
+ const sourceBlocker = proofAssessmentSourceBlocker({
6249
+ checkpoint,
6250
+ stage: "verify",
6251
+ payload,
6252
+ code: "proof_assessment_source_not_trusted"
6253
+ });
6254
+ if (sourceBlocker) {
6255
+ recordEvent(state, {
6256
+ kind: "agent.proof_assessment.source_blocked",
6257
+ checkpoint,
6258
+ stage: "verify",
6259
+ summary: sourceBlocker.message,
6260
+ details: compactRecord({
6261
+ proof_assessment: payload,
6262
+ agent_duration_ms: durationMs
6263
+ })
6264
+ });
6265
+ return { blocker: sourceBlocker };
6266
+ }
6205
6267
  const visualBlocker = proofAssessmentVisualBlocker({
6206
6268
  ...context.fullRiddleState || {},
6207
6269
  verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
package/dist/cli.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-2ALMXMFZ.js";
2
+ import "./chunk-ECLGGGAI.js";
3
3
  import "./chunk-DI2XNGEZ.js";
4
4
  import "./chunk-6KYXX4OE.js";
5
5
  import "./chunk-EX7TO4I5.js";
6
- import "./chunk-ZLBOGPUL.js";
6
+ import "./chunk-IV4DVWPR.js";
7
7
  import "./chunk-WDIKPIMB.js";
8
8
  import "./chunk-JJ4IWRMJ.js";
9
9
  import "./chunk-EKZXU6MU.js";
@@ -5055,6 +5055,32 @@ function isReadyShipGate(result) {
5055
5055
  function proofAssessmentRequestsShip(payload) {
5056
5056
  return String(payload.decision || "").trim() === "ready_to_ship";
5057
5057
  }
5058
+ var TRUSTED_PROOF_ASSESSMENT_READY_SOURCES = /* @__PURE__ */ new Set([
5059
+ "supervising_agent",
5060
+ "supervisor",
5061
+ "openclaw_auto_ship_mode_none"
5062
+ ]);
5063
+ function proofAssessmentSourceTrustedForShip(payload) {
5064
+ const source = nonEmptyString(payload.source)?.toLowerCase();
5065
+ if (!source) return true;
5066
+ return TRUSTED_PROOF_ASSESSMENT_READY_SOURCES.has(source);
5067
+ }
5068
+ function proofAssessmentSourceBlocker(input) {
5069
+ if (!proofAssessmentRequestsShip(input.payload)) return null;
5070
+ if (proofAssessmentSourceTrustedForShip(input.payload)) return null;
5071
+ const source = nonEmptyString(input.payload.source) || "unknown";
5072
+ return {
5073
+ code: input.code || "proof_assessment_source_not_trusted",
5074
+ checkpoint: input.checkpoint || null,
5075
+ message: `Riddle Proof cannot mark ready_to_ship from untrusted proof assessment source: ${source}.`,
5076
+ details: compactRecord({
5077
+ stage: input.stage || null,
5078
+ proofAssessment: input.payload,
5079
+ checkpoint_response_source: input.response?.source || null,
5080
+ response: input.response || null
5081
+ })
5082
+ };
5083
+ }
5058
5084
  function proofAssessmentHardBlockers(state, payload) {
5059
5085
  const blockers = proofAssessmentHardBlockersForState(state || {});
5060
5086
  if (Array.isArray(payload.hard_blockers)) {
@@ -5085,6 +5111,15 @@ function stageFromCheckpointResponse(response, packet) {
5085
5111
  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 : "");
5086
5112
  return stage ? stage : null;
5087
5113
  }
5114
+ function proofAssessmentSourceFromCheckpointResponse(response) {
5115
+ const kind = nonEmptyString(response.source?.kind)?.toLowerCase();
5116
+ if (!kind) return "supervising_agent";
5117
+ if (kind === "human") return "supervisor";
5118
+ if (kind === "codex" || kind === "openclaw-main" || kind === "claude-code") {
5119
+ return "supervising_agent";
5120
+ }
5121
+ return `checkpoint_response:${kind}`;
5122
+ }
5088
5123
  function proofAssessmentPayloadFromCheckpointResponse(response) {
5089
5124
  if (![
5090
5125
  "ready_to_ship",
@@ -5105,7 +5140,7 @@ function proofAssessmentPayloadFromCheckpointResponse(response) {
5105
5140
  continue_with_stage: stage || void 0,
5106
5141
  escalation_target: nonEmptyString(payload.escalation_target) || "agent",
5107
5142
  reasons: Array.isArray(response.reasons) ? response.reasons : Array.isArray(payload.reasons) ? payload.reasons : [],
5108
- source: "supervising_agent",
5143
+ source: proofAssessmentSourceFromCheckpointResponse(response),
5109
5144
  checkpoint_response_source: response.source || null,
5110
5145
  checkpoint_response_created_at: response.created_at
5111
5146
  }));
@@ -5556,6 +5591,14 @@ function checkpointResponseContinuation(state, value) {
5556
5591
  if (packet.kind === "assess_proof" || packet.kind === "recover_evidence" || packet.stage === "verify") {
5557
5592
  const assessment = proofAssessmentPayloadFromCheckpointResponse(response);
5558
5593
  if (assessment) {
5594
+ const sourceBlocker = proofAssessmentSourceBlocker({
5595
+ checkpoint: packet.checkpoint,
5596
+ stage: packet.stage,
5597
+ payload: assessment,
5598
+ response,
5599
+ code: "checkpoint_response_source_not_trusted"
5600
+ });
5601
+ if (sourceBlocker) return { blocker: sourceBlocker };
5559
5602
  appendCheckpointResponse(state, response);
5560
5603
  if (state.request.ship_mode !== "ship" && proofAssessmentRequestsShip(assessment)) {
5561
5604
  const result = {
@@ -6114,6 +6157,25 @@ async function routeCheckpoint(request, state, result, agent, input) {
6114
6157
  }
6115
6158
  };
6116
6159
  }
6160
+ const sourceBlocker = proofAssessmentSourceBlocker({
6161
+ checkpoint,
6162
+ stage: "verify",
6163
+ payload,
6164
+ code: "proof_assessment_source_not_trusted"
6165
+ });
6166
+ if (sourceBlocker) {
6167
+ recordEvent(state, {
6168
+ kind: "agent.proof_assessment.source_blocked",
6169
+ checkpoint,
6170
+ stage: "verify",
6171
+ summary: sourceBlocker.message,
6172
+ details: compactRecord({
6173
+ proof_assessment: payload,
6174
+ agent_duration_ms: durationMs
6175
+ })
6176
+ });
6177
+ return { blocker: sourceBlocker };
6178
+ }
6117
6179
  const visualBlocker = proofAssessmentVisualBlocker({
6118
6180
  ...context.fullRiddleState || {},
6119
6181
  verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
@@ -2,7 +2,7 @@ import {
2
2
  createDisabledRiddleProofAgentAdapter,
3
3
  readRiddleProofRunStatus,
4
4
  runRiddleProofEngineHarness
5
- } from "./chunk-ZLBOGPUL.js";
5
+ } from "./chunk-IV4DVWPR.js";
6
6
  import "./chunk-WDIKPIMB.js";
7
7
  import "./chunk-JJ4IWRMJ.js";
8
8
  import "./chunk-EKZXU6MU.js";
package/dist/index.cjs CHANGED
@@ -5811,6 +5811,32 @@ function isReadyShipGate(result) {
5811
5811
  function proofAssessmentRequestsShip(payload) {
5812
5812
  return String(payload.decision || "").trim() === "ready_to_ship";
5813
5813
  }
5814
+ var TRUSTED_PROOF_ASSESSMENT_READY_SOURCES = /* @__PURE__ */ new Set([
5815
+ "supervising_agent",
5816
+ "supervisor",
5817
+ "openclaw_auto_ship_mode_none"
5818
+ ]);
5819
+ function proofAssessmentSourceTrustedForShip(payload) {
5820
+ const source = nonEmptyString(payload.source)?.toLowerCase();
5821
+ if (!source) return true;
5822
+ return TRUSTED_PROOF_ASSESSMENT_READY_SOURCES.has(source);
5823
+ }
5824
+ function proofAssessmentSourceBlocker(input) {
5825
+ if (!proofAssessmentRequestsShip(input.payload)) return null;
5826
+ if (proofAssessmentSourceTrustedForShip(input.payload)) return null;
5827
+ const source = nonEmptyString(input.payload.source) || "unknown";
5828
+ return {
5829
+ code: input.code || "proof_assessment_source_not_trusted",
5830
+ checkpoint: input.checkpoint || null,
5831
+ message: `Riddle Proof cannot mark ready_to_ship from untrusted proof assessment source: ${source}.`,
5832
+ details: compactRecord({
5833
+ stage: input.stage || null,
5834
+ proofAssessment: input.payload,
5835
+ checkpoint_response_source: input.response?.source || null,
5836
+ response: input.response || null
5837
+ })
5838
+ };
5839
+ }
5814
5840
  function proofAssessmentHardBlockers(state, payload) {
5815
5841
  const blockers = proofAssessmentHardBlockersForState(state || {});
5816
5842
  if (Array.isArray(payload.hard_blockers)) {
@@ -5841,6 +5867,15 @@ function stageFromCheckpointResponse(response, packet) {
5841
5867
  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 : "");
5842
5868
  return stage ? stage : null;
5843
5869
  }
5870
+ function proofAssessmentSourceFromCheckpointResponse(response) {
5871
+ const kind = nonEmptyString(response.source?.kind)?.toLowerCase();
5872
+ if (!kind) return "supervising_agent";
5873
+ if (kind === "human") return "supervisor";
5874
+ if (kind === "codex" || kind === "openclaw-main" || kind === "claude-code") {
5875
+ return "supervising_agent";
5876
+ }
5877
+ return `checkpoint_response:${kind}`;
5878
+ }
5844
5879
  function proofAssessmentPayloadFromCheckpointResponse(response) {
5845
5880
  if (![
5846
5881
  "ready_to_ship",
@@ -5861,7 +5896,7 @@ function proofAssessmentPayloadFromCheckpointResponse(response) {
5861
5896
  continue_with_stage: stage || void 0,
5862
5897
  escalation_target: nonEmptyString(payload.escalation_target) || "agent",
5863
5898
  reasons: Array.isArray(response.reasons) ? response.reasons : Array.isArray(payload.reasons) ? payload.reasons : [],
5864
- source: "supervising_agent",
5899
+ source: proofAssessmentSourceFromCheckpointResponse(response),
5865
5900
  checkpoint_response_source: response.source || null,
5866
5901
  checkpoint_response_created_at: response.created_at
5867
5902
  }));
@@ -6312,6 +6347,14 @@ function checkpointResponseContinuation(state, value) {
6312
6347
  if (packet.kind === "assess_proof" || packet.kind === "recover_evidence" || packet.stage === "verify") {
6313
6348
  const assessment = proofAssessmentPayloadFromCheckpointResponse(response);
6314
6349
  if (assessment) {
6350
+ const sourceBlocker = proofAssessmentSourceBlocker({
6351
+ checkpoint: packet.checkpoint,
6352
+ stage: packet.stage,
6353
+ payload: assessment,
6354
+ response,
6355
+ code: "checkpoint_response_source_not_trusted"
6356
+ });
6357
+ if (sourceBlocker) return { blocker: sourceBlocker };
6315
6358
  appendCheckpointResponse(state, response);
6316
6359
  if (state.request.ship_mode !== "ship" && proofAssessmentRequestsShip(assessment)) {
6317
6360
  const result = {
@@ -6870,6 +6913,25 @@ async function routeCheckpoint(request, state, result, agent, input) {
6870
6913
  }
6871
6914
  };
6872
6915
  }
6916
+ const sourceBlocker = proofAssessmentSourceBlocker({
6917
+ checkpoint,
6918
+ stage: "verify",
6919
+ payload,
6920
+ code: "proof_assessment_source_not_trusted"
6921
+ });
6922
+ if (sourceBlocker) {
6923
+ recordEvent(state, {
6924
+ kind: "agent.proof_assessment.source_blocked",
6925
+ checkpoint,
6926
+ stage: "verify",
6927
+ summary: sourceBlocker.message,
6928
+ details: compactRecord({
6929
+ proof_assessment: payload,
6930
+ agent_duration_ms: durationMs
6931
+ })
6932
+ });
6933
+ return { blocker: sourceBlocker };
6934
+ }
6873
6935
  const visualBlocker = proofAssessmentVisualBlocker({
6874
6936
  ...context.fullRiddleState || {},
6875
6937
  verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
package/dist/index.js CHANGED
@@ -102,7 +102,7 @@ import {
102
102
  createDisabledRiddleProofAgentAdapter,
103
103
  readRiddleProofRunStatus,
104
104
  runRiddleProofEngineHarness
105
- } from "./chunk-ZLBOGPUL.js";
105
+ } from "./chunk-IV4DVWPR.js";
106
106
  import {
107
107
  RIDDLE_PROOF_RUN_STATE_VERSION,
108
108
  appendRunEvent,
@@ -292,7 +292,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
292
292
  blocking?: boolean;
293
293
  details?: Record<string, unknown>;
294
294
  ok: boolean;
295
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
295
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
296
296
  state_path: string;
297
297
  stage: any;
298
298
  summary: string;
@@ -382,7 +382,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
382
382
  continueWithStage?: WorkflowStage | null;
383
383
  blocking?: boolean;
384
384
  details?: Record<string, unknown>;
385
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
385
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
386
386
  state_path: string;
387
387
  stage: any;
388
388
  checkpoint: string;
@@ -659,7 +659,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
659
659
  error?: undefined;
660
660
  } | {
661
661
  ok: boolean;
662
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup";
662
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship";
663
663
  state_path: string;
664
664
  stage: any;
665
665
  summary: string;
@@ -292,7 +292,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
292
292
  blocking?: boolean;
293
293
  details?: Record<string, unknown>;
294
294
  ok: boolean;
295
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
295
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
296
296
  state_path: string;
297
297
  stage: any;
298
298
  summary: string;
@@ -382,7 +382,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
382
382
  continueWithStage?: WorkflowStage | null;
383
383
  blocking?: boolean;
384
384
  details?: Record<string, unknown>;
385
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup" | "run";
385
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
386
386
  state_path: string;
387
387
  stage: any;
388
388
  checkpoint: string;
@@ -659,7 +659,7 @@ declare function executeWorkflow(params: WorkflowParams, pluginConfig: any, reso
659
659
  error?: undefined;
660
660
  } | {
661
661
  ok: boolean;
662
- action: "author" | "recon" | "ship" | "implement" | "verify" | "setup";
662
+ action: "setup" | "recon" | "author" | "implement" | "verify" | "ship";
663
663
  state_path: string;
664
664
  stage: any;
665
665
  summary: string;
@@ -1,2 +1,2 @@
1
1
  import './proof-run-core-7Dqm7RKM.cjs';
2
- export { R as RiddleProofEngine, c as createRiddleProofEngine, e as executeWorkflow } from './proof-run-engine-DpChFR5H.cjs';
2
+ export { R as RiddleProofEngine, c as createRiddleProofEngine, e as executeWorkflow } from './proof-run-engine-Baiv6l3A.cjs';
@@ -1,2 +1,2 @@
1
1
  import './proof-run-core-7Dqm7RKM.js';
2
- export { R as RiddleProofEngine, c as createRiddleProofEngine, e as executeWorkflow } from './proof-run-engine-BqRoA3Do.js';
2
+ export { R as RiddleProofEngine, c as createRiddleProofEngine, e as executeWorkflow } from './proof-run-engine-MiKZt9oY.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riddledc/riddle-proof",
3
- "version": "0.8.53",
3
+ "version": "0.8.54",
4
4
  "description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",