@riddledc/riddle-proof 0.8.54 → 0.8.56

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 (68) 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 +129 -22
  6. package/dist/advanced/engine-harness.js +5 -5
  7. package/dist/advanced/index.cjs +130 -23
  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 +59 -1
  14. package/dist/advanced/runner.js +5 -5
  15. package/dist/checkpoint.cjs +4 -0
  16. package/dist/checkpoint.js +2 -2
  17. package/dist/{chunk-ECLGGGAI.js → chunk-54DIEDR3.js} +3 -3
  18. package/dist/{chunk-VY4Y5U57.js → chunk-CUBYSWZT.js} +57 -0
  19. package/dist/{chunk-IV4DVWPR.js → chunk-GHBNDHG7.js} +67 -25
  20. package/dist/{chunk-S5DX7Z6X.js → chunk-JLOZTVXU.js} +3 -3
  21. package/dist/{chunk-JJ4IWRMJ.js → chunk-KNPCWWF3.js} +8 -3
  22. package/dist/{chunk-BLM5EIBA.js → chunk-MOTQNIZX.js} +5 -1
  23. package/dist/{chunk-73EBR3YL.js → chunk-RS4HJLJQ.js} +1 -1
  24. package/dist/{chunk-LNWJAHAQ.js → chunk-TTB3ZAVX.js} +2 -2
  25. package/dist/{chunk-WDIKPIMB.js → chunk-UZIX7M7D.js} +11 -4
  26. package/dist/cli/index.js +7 -7
  27. package/dist/cli.cjs +129 -22
  28. package/dist/cli.js +7 -7
  29. package/dist/codex-exec-agent.js +2 -2
  30. package/dist/engine-harness.cjs +129 -22
  31. package/dist/engine-harness.js +5 -5
  32. package/dist/index.cjs +136 -23
  33. package/dist/index.d.cts +1 -1
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.js +14 -8
  36. package/dist/local-agent.js +2 -2
  37. package/dist/openclaw.js +5 -5
  38. package/dist/{proof-run-engine-MiKZt9oY.d.ts → proof-run-engine-BqRoA3Do.d.ts} +3 -3
  39. package/dist/{proof-run-engine-Baiv6l3A.d.cts → proof-run-engine-DpChFR5H.d.cts} +3 -3
  40. package/dist/proof-run-engine.d.cts +1 -1
  41. package/dist/proof-run-engine.d.ts +1 -1
  42. package/dist/result.cjs +62 -2
  43. package/dist/result.d.cts +17 -2
  44. package/dist/result.d.ts +17 -2
  45. package/dist/result.js +9 -3
  46. package/dist/run-card.cjs +43 -0
  47. package/dist/run-card.js +3 -3
  48. package/dist/runner.cjs +59 -1
  49. package/dist/runner.js +5 -5
  50. package/dist/spec/checkpoint.cjs +4 -0
  51. package/dist/spec/checkpoint.js +2 -2
  52. package/dist/spec/index.cjs +74 -1
  53. package/dist/spec/index.d.cts +1 -1
  54. package/dist/spec/index.d.ts +1 -1
  55. package/dist/spec/index.js +11 -5
  56. package/dist/spec/result.cjs +62 -2
  57. package/dist/spec/result.d.cts +1 -1
  58. package/dist/spec/result.d.ts +1 -1
  59. package/dist/spec/result.js +9 -3
  60. package/dist/spec/run-card.cjs +43 -0
  61. package/dist/spec/run-card.js +3 -3
  62. package/dist/spec/state.cjs +52 -1
  63. package/dist/spec/state.js +4 -4
  64. package/dist/state.cjs +52 -1
  65. package/dist/state.js +4 -4
  66. package/dist/types.d.cts +17 -0
  67. package/dist/types.d.ts +17 -0
  68. package/package.json +1 -1
package/dist/result.cjs CHANGED
@@ -20,19 +20,25 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/result.ts
21
21
  var result_exports = {};
22
22
  __export(result_exports, {
23
+ applyShipControlState: () => applyShipControlState,
23
24
  applyTerminalMetadata: () => applyTerminalMetadata,
24
25
  compactRecord: () => compactRecord,
25
26
  createRunResult: () => createRunResult,
27
+ isProtectedFinalStatus: () => isProtectedFinalStatus,
26
28
  isSuccessfulStatus: () => isSuccessfulStatus,
27
29
  isTerminalStatus: () => isTerminalStatus,
28
30
  nonEmptyString: () => nonEmptyString,
29
31
  normalizeTerminalMetadata: () => normalizeTerminalMetadata,
30
- recordValue: () => recordValue
32
+ recordValue: () => recordValue,
33
+ shipControlStateFor: () => shipControlStateFor
31
34
  });
32
35
  module.exports = __toCommonJS(result_exports);
33
36
  function isTerminalStatus(status) {
34
37
  return status === "blocked" || status === "failed" || status === "ready_to_ship" || status === "shipped" || status === "completed";
35
38
  }
39
+ function isProtectedFinalStatus(status) {
40
+ return status === "ready_to_ship" || status === "shipped" || status === "completed";
41
+ }
36
42
  function isSuccessfulStatus(status) {
37
43
  return status !== "blocked" && status !== "failed";
38
44
  }
@@ -130,6 +136,9 @@ function normalizeTerminalMetadata(input) {
130
136
  pr_state: prState,
131
137
  marked_ready: markedReady,
132
138
  left_draft: leftDraft,
139
+ ship_held: firstBoolean(riddleState.ship_held, result.ship_held, result.shipHeld, details.ship_held, details.shipHeld, shipReport.ship_held, shipReport.shipHeld),
140
+ shipping_disabled: firstBoolean(riddleState.shipping_disabled, result.shipping_disabled, result.shippingDisabled, details.shipping_disabled, details.shippingDisabled, shipReport.shipping_disabled, shipReport.shippingDisabled),
141
+ ship_authorized: firstBoolean(riddleState.ship_authorized, result.ship_authorized, result.shipAuthorized, details.ship_authorized, details.shipAuthorized, shipReport.ship_authorized, shipReport.shipAuthorized),
133
142
  ci_status: firstNonEmptyString(riddleState.ci_status, result.ci_status, result.ciStatus, details.ci_status, details.ciStatus, shipReport.ci_status),
134
143
  ship_commit: firstNonEmptyString(riddleState.ship_commit, result.ship_commit, result.shipCommit, details.ship_commit, details.shipCommit, shipReport.shipped_commit, shipReport.ship_commit),
135
144
  ship_remote_head: firstNonEmptyString(riddleState.ship_remote_head, result.ship_remote_head, result.shipRemoteHead, details.ship_remote_head, details.shipRemoteHead, shipReport.ship_remote_head),
@@ -163,6 +172,9 @@ function applyTerminalMetadata(state, metadata) {
163
172
  if (prBranch) state.pr_branch = prBranch;
164
173
  if (typeof metadata.marked_ready === "boolean") state.marked_ready = metadata.marked_ready;
165
174
  if (typeof metadata.left_draft === "boolean") state.left_draft = metadata.left_draft;
175
+ if (typeof metadata.ship_held === "boolean") state.ship_held = metadata.ship_held;
176
+ if (typeof metadata.shipping_disabled === "boolean") state.shipping_disabled = metadata.shipping_disabled;
177
+ if (typeof metadata.ship_authorized === "boolean") state.ship_authorized = metadata.ship_authorized;
166
178
  const ciStatus = nonEmptyString(metadata.ci_status);
167
179
  if (ciStatus) state.ci_status = ciStatus;
168
180
  const shipCommit = nonEmptyString(metadata.ship_commit);
@@ -194,12 +206,54 @@ function applyTerminalMetadata(state, metadata) {
194
206
  if (typeof metadata.finalized === "boolean") state.finalized = metadata.finalized;
195
207
  return state;
196
208
  }
209
+ function shipControlStateFor(input) {
210
+ const state = input.state;
211
+ const status = input.status || state.status;
212
+ const raw = recordValue(input.raw) || {};
213
+ const shipReport = recordValue(state.ship_report) || {};
214
+ const prState = recordValue(state.pr_state) || {};
215
+ const shippingDisabled = firstBoolean(
216
+ raw.shipping_disabled,
217
+ raw.shippingDisabled,
218
+ state.shipping_disabled,
219
+ shipReport.shipping_disabled,
220
+ shipReport.shippingDisabled
221
+ ) ?? state.request?.ship_mode === "none";
222
+ const explicitAuthorized = firstBoolean(
223
+ raw.ship_authorized,
224
+ raw.shipAuthorized,
225
+ state.ship_authorized,
226
+ shipReport.ship_authorized,
227
+ shipReport.shipAuthorized
228
+ );
229
+ const authorizationEvidence = Boolean(
230
+ status === "shipped" || state.marked_ready === true || shipReport.marked_ready === true || prState.status === "merged" || state.merge_commit || state.merged_at
231
+ );
232
+ const inferredAuthorized = explicitAuthorized ?? authorizationEvidence;
233
+ const rawHeld = firstBoolean(raw.ship_held, raw.shipHeld);
234
+ const inferredHeld = status === "ready_to_ship" && shippingDisabled && !inferredAuthorized;
235
+ const shipHeld = rawHeld ?? (state.ship_held === true || inferredHeld);
236
+ return {
237
+ ship_held: shipHeld,
238
+ shipping_disabled: shippingDisabled,
239
+ ship_authorized: shipHeld ? false : inferredAuthorized
240
+ };
241
+ }
242
+ function applyShipControlState(state, input = {}) {
243
+ const control = shipControlStateFor({ state, status: input.status, raw: input.raw });
244
+ state.ship_held = control.ship_held;
245
+ state.shipping_disabled = control.shipping_disabled;
246
+ state.ship_authorized = control.ship_authorized;
247
+ return state;
248
+ }
197
249
  function createRunResult(input) {
198
250
  const status = input.status || input.state.status;
199
251
  const ok = isSuccessfulStatus(status);
200
252
  const state = input.metadata ? applyTerminalMetadata(input.state, input.metadata) : input.state;
201
253
  state.status = status;
202
254
  state.ok = ok;
255
+ if (isProtectedFinalStatus(status)) state.finalized = true;
256
+ applyShipControlState(state, { status, raw: input.raw });
203
257
  return compactRecord({
204
258
  ok,
205
259
  status,
@@ -217,6 +271,9 @@ function createRunResult(input) {
217
271
  pr_state: state.pr_state,
218
272
  marked_ready: state.marked_ready,
219
273
  left_draft: state.left_draft,
274
+ ship_held: state.ship_held,
275
+ shipping_disabled: state.shipping_disabled,
276
+ ship_authorized: state.ship_authorized,
220
277
  ci_status: state.ci_status,
221
278
  ship_commit: state.ship_commit,
222
279
  ship_remote_head: state.ship_remote_head,
@@ -246,12 +303,15 @@ function createRunResult(input) {
246
303
  }
247
304
  // Annotate the CommonJS export names for ESM import in node:
248
305
  0 && (module.exports = {
306
+ applyShipControlState,
249
307
  applyTerminalMetadata,
250
308
  compactRecord,
251
309
  createRunResult,
310
+ isProtectedFinalStatus,
252
311
  isSuccessfulStatus,
253
312
  isTerminalStatus,
254
313
  nonEmptyString,
255
314
  normalizeTerminalMetadata,
256
- recordValue
315
+ recordValue,
316
+ shipControlStateFor
257
317
  });
package/dist/result.d.cts CHANGED
@@ -1,6 +1,7 @@
1
- import { RiddleProofRunState, RiddleProofTerminalMetadata, RiddleProofStatus, RiddleProofEvidenceBundle, RiddleProofRunResult } from './types.cjs';
1
+ import { RiddleProofRunState, RiddleProofStatus, RiddleProofTerminalMetadata, RiddleProofEvidenceBundle, RiddleProofRunResult } from './types.cjs';
2
2
 
3
3
  declare function isTerminalStatus(status: RiddleProofStatus): boolean;
4
+ declare function isProtectedFinalStatus(status: unknown): boolean;
4
5
  declare function isSuccessfulStatus(status: RiddleProofStatus): boolean;
5
6
  declare function compactRecord<T extends Record<string, unknown>>(input: T): Partial<T>;
6
7
  declare function nonEmptyString(value: unknown): string | undefined;
@@ -12,6 +13,20 @@ interface TerminalMetadataInput {
12
13
  }
13
14
  declare function normalizeTerminalMetadata(input: TerminalMetadataInput): RiddleProofTerminalMetadata;
14
15
  declare function applyTerminalMetadata<T extends RiddleProofRunState>(state: T, metadata: RiddleProofTerminalMetadata): T;
16
+ interface RiddleProofShipControlState {
17
+ ship_held: boolean;
18
+ shipping_disabled: boolean;
19
+ ship_authorized: boolean;
20
+ }
21
+ declare function shipControlStateFor(input: {
22
+ state: RiddleProofRunState;
23
+ status?: RiddleProofStatus;
24
+ raw?: Record<string, unknown>;
25
+ }): RiddleProofShipControlState;
26
+ declare function applyShipControlState<T extends RiddleProofRunState>(state: T, input?: {
27
+ status?: RiddleProofStatus;
28
+ raw?: Record<string, unknown>;
29
+ }): T;
15
30
  declare function createRunResult(input: {
16
31
  state: RiddleProofRunState;
17
32
  status?: RiddleProofStatus;
@@ -22,4 +37,4 @@ declare function createRunResult(input: {
22
37
  raw?: Record<string, unknown>;
23
38
  }): RiddleProofRunResult;
24
39
 
25
- export { type TerminalMetadataInput, applyTerminalMetadata, compactRecord, createRunResult, isSuccessfulStatus, isTerminalStatus, nonEmptyString, normalizeTerminalMetadata, recordValue };
40
+ export { type RiddleProofShipControlState, type TerminalMetadataInput, applyShipControlState, applyTerminalMetadata, compactRecord, createRunResult, isProtectedFinalStatus, isSuccessfulStatus, isTerminalStatus, nonEmptyString, normalizeTerminalMetadata, recordValue, shipControlStateFor };
package/dist/result.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { RiddleProofRunState, RiddleProofTerminalMetadata, RiddleProofStatus, RiddleProofEvidenceBundle, RiddleProofRunResult } from './types.js';
1
+ import { RiddleProofRunState, RiddleProofStatus, RiddleProofTerminalMetadata, RiddleProofEvidenceBundle, RiddleProofRunResult } from './types.js';
2
2
 
3
3
  declare function isTerminalStatus(status: RiddleProofStatus): boolean;
4
+ declare function isProtectedFinalStatus(status: unknown): boolean;
4
5
  declare function isSuccessfulStatus(status: RiddleProofStatus): boolean;
5
6
  declare function compactRecord<T extends Record<string, unknown>>(input: T): Partial<T>;
6
7
  declare function nonEmptyString(value: unknown): string | undefined;
@@ -12,6 +13,20 @@ interface TerminalMetadataInput {
12
13
  }
13
14
  declare function normalizeTerminalMetadata(input: TerminalMetadataInput): RiddleProofTerminalMetadata;
14
15
  declare function applyTerminalMetadata<T extends RiddleProofRunState>(state: T, metadata: RiddleProofTerminalMetadata): T;
16
+ interface RiddleProofShipControlState {
17
+ ship_held: boolean;
18
+ shipping_disabled: boolean;
19
+ ship_authorized: boolean;
20
+ }
21
+ declare function shipControlStateFor(input: {
22
+ state: RiddleProofRunState;
23
+ status?: RiddleProofStatus;
24
+ raw?: Record<string, unknown>;
25
+ }): RiddleProofShipControlState;
26
+ declare function applyShipControlState<T extends RiddleProofRunState>(state: T, input?: {
27
+ status?: RiddleProofStatus;
28
+ raw?: Record<string, unknown>;
29
+ }): T;
15
30
  declare function createRunResult(input: {
16
31
  state: RiddleProofRunState;
17
32
  status?: RiddleProofStatus;
@@ -22,4 +37,4 @@ declare function createRunResult(input: {
22
37
  raw?: Record<string, unknown>;
23
38
  }): RiddleProofRunResult;
24
39
 
25
- export { type TerminalMetadataInput, applyTerminalMetadata, compactRecord, createRunResult, isSuccessfulStatus, isTerminalStatus, nonEmptyString, normalizeTerminalMetadata, recordValue };
40
+ export { type RiddleProofShipControlState, type TerminalMetadataInput, applyShipControlState, applyTerminalMetadata, compactRecord, createRunResult, isProtectedFinalStatus, isSuccessfulStatus, isTerminalStatus, nonEmptyString, normalizeTerminalMetadata, recordValue, shipControlStateFor };
package/dist/result.js CHANGED
@@ -1,21 +1,27 @@
1
1
  import {
2
+ applyShipControlState,
2
3
  applyTerminalMetadata,
3
4
  compactRecord,
4
5
  createRunResult,
6
+ isProtectedFinalStatus,
5
7
  isSuccessfulStatus,
6
8
  isTerminalStatus,
7
9
  nonEmptyString,
8
10
  normalizeTerminalMetadata,
9
- recordValue
10
- } from "./chunk-VY4Y5U57.js";
11
+ recordValue,
12
+ shipControlStateFor
13
+ } from "./chunk-CUBYSWZT.js";
11
14
  import "./chunk-MLKGABMK.js";
12
15
  export {
16
+ applyShipControlState,
13
17
  applyTerminalMetadata,
14
18
  compactRecord,
15
19
  createRunResult,
20
+ isProtectedFinalStatus,
16
21
  isSuccessfulStatus,
17
22
  isTerminalStatus,
18
23
  nonEmptyString,
19
24
  normalizeTerminalMetadata,
20
- recordValue
25
+ recordValue,
26
+ shipControlStateFor
21
27
  };
package/dist/run-card.cjs CHANGED
@@ -48,6 +48,45 @@ function nonEmptyString(value) {
48
48
  function recordValue(value) {
49
49
  return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
50
50
  }
51
+ function firstBoolean(...values) {
52
+ for (const value of values) {
53
+ if (typeof value === "boolean") return value;
54
+ }
55
+ return void 0;
56
+ }
57
+ function shipControlStateFor(input) {
58
+ const state = input.state;
59
+ const status = input.status || state.status;
60
+ const raw = recordValue(input.raw) || {};
61
+ const shipReport = recordValue(state.ship_report) || {};
62
+ const prState = recordValue(state.pr_state) || {};
63
+ const shippingDisabled = firstBoolean(
64
+ raw.shipping_disabled,
65
+ raw.shippingDisabled,
66
+ state.shipping_disabled,
67
+ shipReport.shipping_disabled,
68
+ shipReport.shippingDisabled
69
+ ) ?? state.request?.ship_mode === "none";
70
+ const explicitAuthorized = firstBoolean(
71
+ raw.ship_authorized,
72
+ raw.shipAuthorized,
73
+ state.ship_authorized,
74
+ shipReport.ship_authorized,
75
+ shipReport.shipAuthorized
76
+ );
77
+ const authorizationEvidence = Boolean(
78
+ status === "shipped" || state.marked_ready === true || shipReport.marked_ready === true || prState.status === "merged" || state.merge_commit || state.merged_at
79
+ );
80
+ const inferredAuthorized = explicitAuthorized ?? authorizationEvidence;
81
+ const rawHeld = firstBoolean(raw.ship_held, raw.shipHeld);
82
+ const inferredHeld = status === "ready_to_ship" && shippingDisabled && !inferredAuthorized;
83
+ const shipHeld = rawHeld ?? (state.ship_held === true || inferredHeld);
84
+ return {
85
+ ship_held: shipHeld,
86
+ shipping_disabled: shippingDisabled,
87
+ ship_authorized: shipHeld ? false : inferredAuthorized
88
+ };
89
+ }
51
90
 
52
91
  // src/checkpoint.ts
53
92
  var import_node_crypto = __toESM(require("crypto"), 1);
@@ -218,6 +257,7 @@ function createRiddleProofRunCard(state, input = {}) {
218
257
  const visualDelta = visualDeltaFrom({ fullRiddleState: fullState, runState: state });
219
258
  const artifacts = artifactsFrom({ fullRiddleState: fullState, runState: state });
220
259
  const viewportMatrix = viewportMatrixFrom({ fullRiddleState: fullState, runState: state });
260
+ const shipControl = shipControlStateFor({ state });
221
261
  return {
222
262
  version: RIDDLE_PROOF_RUN_CARD_VERSION,
223
263
  run_id: state.run_id || "unknown",
@@ -271,6 +311,9 @@ function createRiddleProofRunCard(state, input = {}) {
271
311
  stop_condition: compactRecord({
272
312
  status: state.status,
273
313
  terminal: isTerminalStatus(state.status),
314
+ ship_held: shipControl.ship_held,
315
+ shipping_disabled: shipControl.shipping_disabled,
316
+ ship_authorized: shipControl.ship_authorized,
274
317
  blocker_code: state.blocker?.code || null,
275
318
  blocker_message: state.blocker?.message || null,
276
319
  proof_decision: state.proof_decision,
package/dist/run-card.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  RIDDLE_PROOF_RUN_CARD_VERSION,
3
3
  createRiddleProofRunCard
4
- } from "./chunk-JJ4IWRMJ.js";
5
- import "./chunk-BLM5EIBA.js";
6
- import "./chunk-VY4Y5U57.js";
4
+ } from "./chunk-KNPCWWF3.js";
5
+ import "./chunk-MOTQNIZX.js";
6
+ import "./chunk-CUBYSWZT.js";
7
7
  import "./chunk-MLKGABMK.js";
8
8
  export {
9
9
  RIDDLE_PROOF_RUN_CARD_VERSION,
package/dist/runner.cjs CHANGED
@@ -35,6 +35,9 @@ __export(runner_exports, {
35
35
  module.exports = __toCommonJS(runner_exports);
36
36
 
37
37
  // src/result.ts
38
+ function isProtectedFinalStatus(status) {
39
+ return status === "ready_to_ship" || status === "shipped" || status === "completed";
40
+ }
38
41
  function isSuccessfulStatus(status) {
39
42
  return status !== "blocked" && status !== "failed";
40
43
  }
@@ -47,6 +50,12 @@ function nonEmptyString(value) {
47
50
  function recordValue(value) {
48
51
  return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
49
52
  }
53
+ function firstBoolean(...values) {
54
+ for (const value of values) {
55
+ if (typeof value === "boolean") return value;
56
+ }
57
+ return void 0;
58
+ }
50
59
  function applyTerminalMetadata(state, metadata) {
51
60
  if (metadata.pr_state) {
52
61
  state.pr_state = metadata.pr_state;
@@ -63,6 +72,9 @@ function applyTerminalMetadata(state, metadata) {
63
72
  if (prBranch) state.pr_branch = prBranch;
64
73
  if (typeof metadata.marked_ready === "boolean") state.marked_ready = metadata.marked_ready;
65
74
  if (typeof metadata.left_draft === "boolean") state.left_draft = metadata.left_draft;
75
+ if (typeof metadata.ship_held === "boolean") state.ship_held = metadata.ship_held;
76
+ if (typeof metadata.shipping_disabled === "boolean") state.shipping_disabled = metadata.shipping_disabled;
77
+ if (typeof metadata.ship_authorized === "boolean") state.ship_authorized = metadata.ship_authorized;
66
78
  const ciStatus = nonEmptyString(metadata.ci_status);
67
79
  if (ciStatus) state.ci_status = ciStatus;
68
80
  const shipCommit = nonEmptyString(metadata.ship_commit);
@@ -94,12 +106,54 @@ function applyTerminalMetadata(state, metadata) {
94
106
  if (typeof metadata.finalized === "boolean") state.finalized = metadata.finalized;
95
107
  return state;
96
108
  }
109
+ function shipControlStateFor(input) {
110
+ const state = input.state;
111
+ const status = input.status || state.status;
112
+ const raw = recordValue(input.raw) || {};
113
+ const shipReport = recordValue(state.ship_report) || {};
114
+ const prState = recordValue(state.pr_state) || {};
115
+ const shippingDisabled = firstBoolean(
116
+ raw.shipping_disabled,
117
+ raw.shippingDisabled,
118
+ state.shipping_disabled,
119
+ shipReport.shipping_disabled,
120
+ shipReport.shippingDisabled
121
+ ) ?? state.request?.ship_mode === "none";
122
+ const explicitAuthorized = firstBoolean(
123
+ raw.ship_authorized,
124
+ raw.shipAuthorized,
125
+ state.ship_authorized,
126
+ shipReport.ship_authorized,
127
+ shipReport.shipAuthorized
128
+ );
129
+ const authorizationEvidence = Boolean(
130
+ status === "shipped" || state.marked_ready === true || shipReport.marked_ready === true || prState.status === "merged" || state.merge_commit || state.merged_at
131
+ );
132
+ const inferredAuthorized = explicitAuthorized ?? authorizationEvidence;
133
+ const rawHeld = firstBoolean(raw.ship_held, raw.shipHeld);
134
+ const inferredHeld = status === "ready_to_ship" && shippingDisabled && !inferredAuthorized;
135
+ const shipHeld = rawHeld ?? (state.ship_held === true || inferredHeld);
136
+ return {
137
+ ship_held: shipHeld,
138
+ shipping_disabled: shippingDisabled,
139
+ ship_authorized: shipHeld ? false : inferredAuthorized
140
+ };
141
+ }
142
+ function applyShipControlState(state, input = {}) {
143
+ const control = shipControlStateFor({ state, status: input.status, raw: input.raw });
144
+ state.ship_held = control.ship_held;
145
+ state.shipping_disabled = control.shipping_disabled;
146
+ state.ship_authorized = control.ship_authorized;
147
+ return state;
148
+ }
97
149
  function createRunResult(input) {
98
150
  const status = input.status || input.state.status;
99
151
  const ok = isSuccessfulStatus(status);
100
152
  const state = input.metadata ? applyTerminalMetadata(input.state, input.metadata) : input.state;
101
153
  state.status = status;
102
154
  state.ok = ok;
155
+ if (isProtectedFinalStatus(status)) state.finalized = true;
156
+ applyShipControlState(state, { status, raw: input.raw });
103
157
  return compactRecord({
104
158
  ok,
105
159
  status,
@@ -117,6 +171,9 @@ function createRunResult(input) {
117
171
  pr_state: state.pr_state,
118
172
  marked_ready: state.marked_ready,
119
173
  left_draft: state.left_draft,
174
+ ship_held: state.ship_held,
175
+ shipping_disabled: state.shipping_disabled,
176
+ ship_authorized: state.ship_authorized,
120
177
  ci_status: state.ci_status,
121
178
  ship_commit: state.ship_commit,
122
179
  ship_remote_head: state.ship_remote_head,
@@ -295,6 +352,7 @@ function appendStageHeartbeat(state, input) {
295
352
  function setRunStatus(state, status, at = timestamp()) {
296
353
  state.status = status;
297
354
  state.ok = status !== "blocked" && status !== "failed";
355
+ if (isProtectedFinalStatus(status)) state.finalized = true;
298
356
  state.updated_at = at;
299
357
  return state;
300
358
  }
@@ -770,7 +828,7 @@ async function runRiddleProof(input) {
770
828
  status: "ready_to_ship",
771
829
  last_summary: assessment.summary,
772
830
  evidence_bundle: evidenceBundle,
773
- raw: { implementation, assessment }
831
+ raw: { implementation, assessment, ship_held: true, shipping_disabled: true, ship_authorized: false }
774
832
  });
775
833
  return notifyIfConfigured({ state, result: result2, notification: adapters.notification });
776
834
  }
package/dist/runner.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  runRiddleProof
3
- } from "./chunk-S5DX7Z6X.js";
4
- import "./chunk-WDIKPIMB.js";
5
- import "./chunk-JJ4IWRMJ.js";
3
+ } from "./chunk-JLOZTVXU.js";
4
+ import "./chunk-UZIX7M7D.js";
5
+ import "./chunk-KNPCWWF3.js";
6
6
  import "./chunk-EKZXU6MU.js";
7
- import "./chunk-BLM5EIBA.js";
8
- import "./chunk-VY4Y5U57.js";
7
+ import "./chunk-MOTQNIZX.js";
8
+ import "./chunk-CUBYSWZT.js";
9
9
  import "./chunk-MLKGABMK.js";
10
10
  export {
11
11
  runRiddleProof
@@ -759,6 +759,8 @@ function checkpointSummaryFromState(state, engineStatePath) {
759
759
  const packets = history.filter((entry) => entry.packet);
760
760
  const responses = acceptedCheckpointResponseEntries(state);
761
761
  const duplicateResponses = events.filter((event) => event.kind === "checkpoint.response.duplicate");
762
+ const rejectedResponses = events.filter((event) => event.kind === "checkpoint.response.rejected");
763
+ const ignoredResponses = events.filter((event) => event.kind === "checkpoint.response.ignored");
762
764
  const latestPacketEntry = [...history].reverse().find((entry) => entry.packet);
763
765
  const latestResponseEntry = [...responses].reverse().find((entry) => entry.response);
764
766
  const latestPacket = state.checkpoint_packet || latestPacketEntry?.packet;
@@ -774,6 +776,8 @@ function checkpointSummaryFromState(state, engineStatePath) {
774
776
  packet_count: packets.length,
775
777
  response_count: responses.length,
776
778
  duplicate_response_count: duplicateResponses.length,
779
+ rejected_response_count: rejectedResponses.length,
780
+ ignored_response_count: ignoredResponses.length,
777
781
  latest_checkpoint: state.checkpoint_packet?.checkpoint || latestResponse?.checkpoint || state.last_checkpoint || null,
778
782
  latest_stage: state.checkpoint_packet?.stage || latestResponse?.continue_with_stage || state.current_stage || null,
779
783
  latest_kind: state.checkpoint_packet?.kind || latestPacket?.kind || null,
@@ -14,8 +14,8 @@ import {
14
14
  normalizeCheckpointResponse,
15
15
  proofContractFromAuthorCheckpointResponse,
16
16
  statePathsForRunState
17
- } from "../chunk-BLM5EIBA.js";
18
- import "../chunk-VY4Y5U57.js";
17
+ } from "../chunk-MOTQNIZX.js";
18
+ import "../chunk-CUBYSWZT.js";
19
19
  import "../chunk-MLKGABMK.js";
20
20
  export {
21
21
  RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,