@riddledc/riddle-proof 0.8.75 → 0.8.77

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.
package/dist/index.cjs CHANGED
@@ -3419,6 +3419,7 @@ __export(index_exports, {
3419
3419
  RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION: () => RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION,
3420
3420
  RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION: () => RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION,
3421
3421
  RIDDLE_PROOF_CHANGE_CONTRACT_VERSION: () => RIDDLE_PROOF_CHANGE_CONTRACT_VERSION,
3422
+ RIDDLE_PROOF_CHANGE_RECEIPT_VERSION: () => RIDDLE_PROOF_CHANGE_RECEIPT_VERSION,
3422
3423
  RIDDLE_PROOF_CHANGE_RESULT_VERSION: () => RIDDLE_PROOF_CHANGE_RESULT_VERSION,
3423
3424
  RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION: () => RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,
3424
3425
  RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION: () => RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION,
@@ -3484,6 +3485,7 @@ __export(index_exports, {
3484
3485
  createLocalAgentAdapter: () => createCodexExecAgentAdapter,
3485
3486
  createLocalAgentJsonRunner: () => createCodexExecJsonRunner,
3486
3487
  createRiddleApiClient: () => createRiddleApiClient,
3488
+ createRiddleProofChangeReceipt: () => createRiddleProofChangeReceipt,
3487
3489
  createRiddleProofProfileConfigurationError: () => createRiddleProofProfileConfigurationError,
3488
3490
  createRiddleProofProfileEnvironmentBlockedResult: () => createRiddleProofProfileEnvironmentBlockedResult,
3489
3491
  createRiddleProofProfileInsufficientResult: () => createRiddleProofProfileInsufficientResult,
@@ -3529,6 +3531,8 @@ __export(index_exports, {
3529
3531
  resolveRiddleProofProfileRouteUrl: () => resolveRiddleProofProfileRouteUrl,
3530
3532
  resolveRiddleProofProfileTargetUrl: () => resolveRiddleProofProfileTargetUrl,
3531
3533
  resolveRiddleProofProfileTimeoutSec: () => resolveRiddleProofProfileTimeoutSec,
3534
+ riddleProofChangeReceiptHtml: () => riddleProofChangeReceiptHtml,
3535
+ riddleProofChangeReceiptMarkdown: () => riddleProofChangeReceiptMarkdown,
3532
3536
  riddleProofPublicStateAllowsClaim: () => riddleProofPublicStateAllowsClaim,
3533
3537
  riddleProofPublicStateAllowsMergeRecommendation: () => riddleProofPublicStateAllowsMergeRecommendation,
3534
3538
  riddleProofPublicStateMergeRecommendation: () => riddleProofPublicStateMergeRecommendation,
@@ -19935,6 +19939,7 @@ function suggestRiddleProofProfileChecks(input) {
19935
19939
  // src/change-proof.ts
19936
19940
  var RIDDLE_PROOF_CHANGE_CONTRACT_VERSION = "riddle-proof.change-contract.v1";
19937
19941
  var RIDDLE_PROOF_CHANGE_RESULT_VERSION = "riddle-proof.change-result.v1";
19942
+ var RIDDLE_PROOF_CHANGE_RECEIPT_VERSION = "riddle-proof.change-receipt.v1";
19938
19943
  var DEFAULT_BEFORE_STATUSES = ["passed", "product_regression"];
19939
19944
  var DEFAULT_AFTER_STATUSES = ["passed"];
19940
19945
  var DEFAULT_PROFILE_STATUS_TRANSITION_BEFORE = ["product_regression"];
@@ -20093,6 +20098,322 @@ function assessRiddleProofChange(contract, input) {
20093
20098
  metadata: contract.metadata
20094
20099
  };
20095
20100
  }
20101
+ function changeReceiptVerdict(status) {
20102
+ if (status === "passed") return "mergeable";
20103
+ if (status === "environment_blocked") return "environment_blocked";
20104
+ if (status === "configuration_error") return "configuration_error";
20105
+ if (status === "needs_human_review") return "needs_human_review";
20106
+ if (status === "proof_insufficient") return "proof_insufficient";
20107
+ return "not_mergeable";
20108
+ }
20109
+ function profileCheckCounts(result) {
20110
+ const counts = {
20111
+ total: result.checks.length,
20112
+ passed: 0,
20113
+ failed: 0,
20114
+ skipped: 0,
20115
+ needs_human_review: 0
20116
+ };
20117
+ for (const check of result.checks) {
20118
+ if (check.status === "passed") counts.passed += 1;
20119
+ if (check.status === "failed") counts.failed += 1;
20120
+ if (check.status === "skipped") counts.skipped += 1;
20121
+ if (check.status === "needs_human_review") counts.needs_human_review += 1;
20122
+ }
20123
+ return counts;
20124
+ }
20125
+ function artifactKind(ref) {
20126
+ const text = [ref.name, ref.url, ref.path, ref.kind, ref.content_type].filter(Boolean).join(" ").toLowerCase();
20127
+ if (/\bimage\b/.test(text) || /\.(png|jpe?g|gif|webp|avif|svg)(\?|#|$)/.test(text)) return "image";
20128
+ if (/\bjson\b|\btext\b|\bmarkdown\b|\bhtml\b|\blog\b/.test(text) || /\.(json|md|txt|html|log|har)(\?|#|$)/.test(text)) return "data";
20129
+ return "artifact";
20130
+ }
20131
+ function receiptArtifactFromRef(side, ref) {
20132
+ return {
20133
+ side,
20134
+ name: ref.name,
20135
+ kind: artifactKind(ref),
20136
+ url: ref.url,
20137
+ path: ref.path,
20138
+ source: ref.source
20139
+ };
20140
+ }
20141
+ function comparableArtifactName(value) {
20142
+ return (value || "").split(/[/?#]/).pop()?.toLowerCase().replace(/\.(png|jpe?g|gif|webp|avif|svg)$/u, "").replace(/[^a-z0-9_-]+/gu, "-").replace(/^-+|-+$/g, "") || "";
20143
+ }
20144
+ function artifactMatchesScreenshotLabel(artifact, screenshot) {
20145
+ const screenshotName = comparableArtifactName(screenshot);
20146
+ if (!screenshotName) return false;
20147
+ return [artifact.name, artifact.url, artifact.path].map(comparableArtifactName).some((name) => name === screenshotName || name.endsWith(`-${screenshotName}`));
20148
+ }
20149
+ function collectReceiptArtifacts(side, result) {
20150
+ const artifacts = [];
20151
+ const seen = /* @__PURE__ */ new Set();
20152
+ const add = (artifact) => {
20153
+ const key = artifact.url || artifact.path || `${artifact.kind}:${artifact.name}`;
20154
+ if (!artifact.name || seen.has(key)) return;
20155
+ seen.add(key);
20156
+ artifacts.push(artifact);
20157
+ };
20158
+ for (const ref of result.artifacts.riddle_artifacts || []) {
20159
+ add(receiptArtifactFromRef(side, ref));
20160
+ }
20161
+ for (const screenshot of result.artifacts.screenshots || []) {
20162
+ if (artifacts.some((artifact) => artifactMatchesScreenshotLabel(artifact, screenshot))) continue;
20163
+ add({
20164
+ side,
20165
+ name: screenshot,
20166
+ kind: "image"
20167
+ });
20168
+ }
20169
+ return artifacts;
20170
+ }
20171
+ function artifactIsScreenshot(artifact) {
20172
+ if (artifact.kind !== "image") return false;
20173
+ return /screenshot|\.png|\.jpe?g|\.webp|\.gif|\.avif|\.svg/i.test([artifact.name, artifact.url, artifact.path].filter(Boolean).join(" "));
20174
+ }
20175
+ function receiptSide(side, source, result) {
20176
+ const artifacts = collectReceiptArtifacts(side, result);
20177
+ return {
20178
+ side,
20179
+ source,
20180
+ profile_name: result.profile_name,
20181
+ status: result.status,
20182
+ summary: result.summary,
20183
+ route: result.route,
20184
+ captured_at: result.captured_at,
20185
+ checks: profileCheckCounts(result),
20186
+ screenshots: artifacts.filter(artifactIsScreenshot),
20187
+ artifacts
20188
+ };
20189
+ }
20190
+ function metadataStringList(metadata, key) {
20191
+ const value = metadata?.[key];
20192
+ if (!Array.isArray(value)) return [];
20193
+ return value.filter((item) => typeof item === "string" && item.trim().length > 0).map((item) => item.trim());
20194
+ }
20195
+ function createRiddleProofChangeReceipt(input) {
20196
+ return {
20197
+ version: RIDDLE_PROOF_CHANGE_RECEIPT_VERSION,
20198
+ contract_name: input.result.contract_name,
20199
+ profile_name: input.profile_name,
20200
+ status: input.result.status,
20201
+ verdict: changeReceiptVerdict(input.result.status),
20202
+ summary: input.result.summary,
20203
+ before: receiptSide("before", input.before_source, input.before_result),
20204
+ after: receiptSide("after", input.after_source, input.after_result),
20205
+ deltas: input.result.deltas.map((delta) => ({
20206
+ type: delta.type,
20207
+ label: delta.label,
20208
+ status: delta.status,
20209
+ before_observed: delta.before_observed,
20210
+ after_observed: delta.after_observed,
20211
+ message: delta.message
20212
+ })),
20213
+ proves: metadataStringList(input.contract.metadata, "required_receipts"),
20214
+ does_not_prove: metadataStringList(input.contract.metadata, "does_not_prove"),
20215
+ metadata: input.result.metadata
20216
+ };
20217
+ }
20218
+ function markdownTableCell(value) {
20219
+ return String(value ?? "").replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
20220
+ }
20221
+ function artifactTarget(artifact) {
20222
+ return artifact.url || artifact.path;
20223
+ }
20224
+ function markdownLink(label, target) {
20225
+ return `[${label.replace(/\]/g, "\\]")}](${target})`;
20226
+ }
20227
+ function appendMarkdownArtifacts(lines, title, artifacts) {
20228
+ lines.push(`### ${title}`, "");
20229
+ if (!artifacts.length) {
20230
+ lines.push("- No screenshot artifacts recorded.", "");
20231
+ return;
20232
+ }
20233
+ for (const artifact of artifacts.slice(0, 6)) {
20234
+ const target = artifactTarget(artifact);
20235
+ if (target && artifact.kind === "image") {
20236
+ lines.push(`![${artifact.name.replace(/\]/g, "\\]")}](${target})`);
20237
+ } else if (target) {
20238
+ lines.push(`- ${markdownLink(artifact.name, target)}`);
20239
+ } else {
20240
+ lines.push(`- ${artifact.name}`);
20241
+ }
20242
+ }
20243
+ if (artifacts.length > 6) lines.push(`- ${artifacts.length - 6} more artifact(s) omitted`);
20244
+ lines.push("");
20245
+ }
20246
+ function riddleProofChangeReceiptMarkdown(receipt) {
20247
+ const lines = [
20248
+ "# Riddle Proof Change Receipt",
20249
+ "",
20250
+ `**Verdict:** ${receipt.verdict}`,
20251
+ `**Status:** ${receipt.status}`,
20252
+ `**Contract:** ${receipt.contract_name}`,
20253
+ receipt.profile_name ? `**Profile:** ${receipt.profile_name}` : "",
20254
+ "",
20255
+ receipt.summary,
20256
+ "",
20257
+ "## Evidence Pair",
20258
+ "",
20259
+ "| Side | Source | Status | Checks |",
20260
+ "| --- | --- | --- | --- |",
20261
+ `| Before | ${markdownTableCell(receipt.before.source)} | ${receipt.before.status} | ${receipt.before.checks.passed} passed / ${receipt.before.checks.failed} failed |`,
20262
+ `| After | ${markdownTableCell(receipt.after.source)} | ${receipt.after.status} | ${receipt.after.checks.passed} passed / ${receipt.after.checks.failed} failed |`,
20263
+ "",
20264
+ "## Delta Checks",
20265
+ "",
20266
+ "| Delta | Status | Before | After |",
20267
+ "| --- | --- | --- | --- |"
20268
+ ].filter(Boolean);
20269
+ for (const delta of receipt.deltas) {
20270
+ lines.push(`| ${markdownTableCell(delta.label)} | ${delta.status} | ${markdownTableCell(delta.before_observed)} | ${markdownTableCell(delta.after_observed)} |`);
20271
+ if (delta.message) lines.push(`| ${markdownTableCell(`${delta.label} message`)} | ${markdownTableCell(delta.message)} | | |`);
20272
+ }
20273
+ lines.push("");
20274
+ appendMarkdownArtifacts(lines, "Before Screenshot", receipt.before.screenshots);
20275
+ appendMarkdownArtifacts(lines, "After Screenshot", receipt.after.screenshots);
20276
+ if (receipt.proves.length) {
20277
+ lines.push("## What This Proves", "");
20278
+ for (const claim of receipt.proves) lines.push(`- ${claim}`);
20279
+ lines.push("");
20280
+ }
20281
+ if (receipt.does_not_prove.length) {
20282
+ lines.push("## What This Does Not Prove", "");
20283
+ for (const claim of receipt.does_not_prove) lines.push(`- ${claim}`);
20284
+ lines.push("");
20285
+ }
20286
+ const linkedArtifacts = [...receipt.before.artifacts, ...receipt.after.artifacts].filter((artifact) => artifactTarget(artifact)).slice(0, 24);
20287
+ if (linkedArtifacts.length) {
20288
+ lines.push("## Artifacts", "");
20289
+ for (const artifact of linkedArtifacts) {
20290
+ lines.push(`- ${artifact.side}: ${markdownLink(artifact.name, artifactTarget(artifact) || "")}`);
20291
+ }
20292
+ lines.push("");
20293
+ }
20294
+ return `${lines.join("\n").trim()}
20295
+ `;
20296
+ }
20297
+ function escapeHtml(value) {
20298
+ return String(value ?? "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
20299
+ }
20300
+ function htmlArtifactCard(artifact) {
20301
+ const target = artifactTarget(artifact);
20302
+ if (!target) return `<p>${escapeHtml(artifact.name)}</p>`;
20303
+ if (artifact.kind === "image") {
20304
+ return `<figure><img src="${escapeHtml(target)}" alt="${escapeHtml(artifact.name)}"><figcaption>${escapeHtml(artifact.name)}</figcaption></figure>`;
20305
+ }
20306
+ return `<p><a href="${escapeHtml(target)}">${escapeHtml(artifact.name)}</a></p>`;
20307
+ }
20308
+ function htmlArtifactLink(artifact) {
20309
+ const target = artifactTarget(artifact);
20310
+ if (!target) return escapeHtml(artifact.name);
20311
+ return `<a href="${escapeHtml(target)}">${escapeHtml(artifact.name)}</a>`;
20312
+ }
20313
+ function htmlList(items, emptyText) {
20314
+ if (!items.length) return `<p class="muted">${escapeHtml(emptyText)}</p>`;
20315
+ return `<ul>${items.map((item) => `<li>${escapeHtml(item)}</li>`).join("")}</ul>`;
20316
+ }
20317
+ function riddleProofChangeReceiptHtml(receipt) {
20318
+ const artifactLinks = [...receipt.before.artifacts, ...receipt.after.artifacts].filter((artifact) => artifactTarget(artifact)).slice(0, 32);
20319
+ const deltaRows = receipt.deltas.map((delta) => `
20320
+ <tr>
20321
+ <td>${escapeHtml(delta.label)}</td>
20322
+ <td><span class="status ${escapeHtml(delta.status)}">${escapeHtml(delta.status)}</span></td>
20323
+ <td>${escapeHtml(delta.before_observed)}</td>
20324
+ <td>${escapeHtml(delta.after_observed)}</td>
20325
+ </tr>
20326
+ ${delta.message ? `<tr><td class="muted">${escapeHtml(delta.label)} message</td><td colspan="3">${escapeHtml(delta.message)}</td></tr>` : ""}`).join("");
20327
+ return `<!doctype html>
20328
+ <html lang="en">
20329
+ <head>
20330
+ <meta charset="utf-8">
20331
+ <meta name="viewport" content="width=device-width, initial-scale=1">
20332
+ <title>${escapeHtml(receipt.contract_name)} - Riddle Proof Change Receipt</title>
20333
+ <style>
20334
+ :root { color-scheme: light dark; --bg: #0f141b; --panel: #171f29; --text: #eef4f8; --muted: #aebbc8; --border: #314152; --ok: #69d089; --bad: #ff7a7a; --warn: #ffd166; }
20335
+ body { margin: 0; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: var(--bg); color: var(--text); }
20336
+ main { max-width: 1120px; margin: 0 auto; padding: 32px 20px 48px; }
20337
+ header, section { border: 1px solid var(--border); background: var(--panel); border-radius: 8px; padding: 20px; margin: 0 0 18px; }
20338
+ h1, h2, h3, p { margin-top: 0; }
20339
+ h1 { font-size: clamp(1.6rem, 3vw, 2.4rem); }
20340
+ h2 { font-size: 1.1rem; margin-bottom: 14px; }
20341
+ .muted { color: var(--muted); }
20342
+ .verdict { display: inline-flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 999px; border: 1px solid var(--border); font-weight: 700; }
20343
+ .mergeable, .passed { color: var(--ok); }
20344
+ .not_mergeable, .failed, .product_regression { color: var(--bad); }
20345
+ .proof_insufficient, .environment_blocked, .needs_human_review, .configuration_error { color: var(--warn); }
20346
+ .grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
20347
+ .side { border: 1px solid var(--border); border-radius: 8px; padding: 14px; min-width: 0; }
20348
+ code { overflow-wrap: anywhere; color: var(--muted); }
20349
+ table { width: 100%; border-collapse: collapse; }
20350
+ th, td { border-bottom: 1px solid var(--border); padding: 10px 8px; text-align: left; vertical-align: top; }
20351
+ figure { margin: 0; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; background: #0b1017; }
20352
+ img { display: block; width: 100%; height: auto; }
20353
+ figcaption { padding: 8px 10px; color: var(--muted); font-size: 0.9rem; }
20354
+ ul { margin-bottom: 0; }
20355
+ a { color: #8bc7ff; }
20356
+ @media (max-width: 760px) { .grid { grid-template-columns: 1fr; } main { padding: 18px 12px 32px; } }
20357
+ </style>
20358
+ </head>
20359
+ <body>
20360
+ <main>
20361
+ <header>
20362
+ <p class="verdict ${escapeHtml(receipt.verdict)}">${escapeHtml(receipt.verdict)}</p>
20363
+ <h1>${escapeHtml(receipt.contract_name)}</h1>
20364
+ <p>${escapeHtml(receipt.summary)}</p>
20365
+ <p class="muted">Status: ${escapeHtml(receipt.status)}${receipt.profile_name ? ` | Profile: ${escapeHtml(receipt.profile_name)}` : ""}</p>
20366
+ </header>
20367
+ <section>
20368
+ <h2>Evidence Pair</h2>
20369
+ <div class="grid">
20370
+ <div class="side">
20371
+ <h3>Before</h3>
20372
+ <p><code>${escapeHtml(receipt.before.source)}</code></p>
20373
+ <p>Status: <strong class="${escapeHtml(receipt.before.status)}">${escapeHtml(receipt.before.status)}</strong></p>
20374
+ <p>${escapeHtml(receipt.before.summary)}</p>
20375
+ <p class="muted">${receipt.before.checks.passed} passed / ${receipt.before.checks.failed} failed checks</p>
20376
+ </div>
20377
+ <div class="side">
20378
+ <h3>After</h3>
20379
+ <p><code>${escapeHtml(receipt.after.source)}</code></p>
20380
+ <p>Status: <strong class="${escapeHtml(receipt.after.status)}">${escapeHtml(receipt.after.status)}</strong></p>
20381
+ <p>${escapeHtml(receipt.after.summary)}</p>
20382
+ <p class="muted">${receipt.after.checks.passed} passed / ${receipt.after.checks.failed} failed checks</p>
20383
+ </div>
20384
+ </div>
20385
+ </section>
20386
+ <section>
20387
+ <h2>Delta Checks</h2>
20388
+ <table>
20389
+ <thead><tr><th>Delta</th><th>Status</th><th>Before</th><th>After</th></tr></thead>
20390
+ <tbody>${deltaRows}</tbody>
20391
+ </table>
20392
+ </section>
20393
+ <section>
20394
+ <h2>Screenshots</h2>
20395
+ <div class="grid">
20396
+ <div>${receipt.before.screenshots.slice(0, 4).map(htmlArtifactCard).join("") || `<p class="muted">No before screenshots recorded.</p>`}</div>
20397
+ <div>${receipt.after.screenshots.slice(0, 4).map(htmlArtifactCard).join("") || `<p class="muted">No after screenshots recorded.</p>`}</div>
20398
+ </div>
20399
+ </section>
20400
+ <section>
20401
+ <h2>What This Proves</h2>
20402
+ ${htmlList(receipt.proves, "No explicit proof claims were recorded in contract metadata.")}
20403
+ </section>
20404
+ <section>
20405
+ <h2>What This Does Not Prove</h2>
20406
+ ${htmlList(receipt.does_not_prove, "No explicit limits were recorded in contract metadata.")}
20407
+ </section>
20408
+ <section>
20409
+ <h2>Artifacts</h2>
20410
+ ${artifactLinks.length ? `<ul>${artifactLinks.map((artifact) => `<li>${escapeHtml(artifact.side)}: ${htmlArtifactLink(artifact)}</li>`).join("")}</ul>` : `<p class="muted">No linked artifacts recorded.</p>`}
20411
+ </section>
20412
+ </main>
20413
+ </body>
20414
+ </html>
20415
+ `;
20416
+ }
20096
20417
 
20097
20418
  // src/riddle-client.ts
20098
20419
  var import_node_child_process4 = require("child_process");
@@ -20704,7 +21025,7 @@ function firstStringValue2(...values) {
20704
21025
  }
20705
21026
  return void 0;
20706
21027
  }
20707
- function artifactKind(name, url) {
21028
+ function artifactKind2(name, url) {
20708
21029
  const target = `${name} ${url}`.toLowerCase();
20709
21030
  if (/\.(png|jpe?g|gif|webp|avif|svg)(\?|#|$)/.test(target)) return "image";
20710
21031
  if (/\.(json|har|txt|md|html|log)(\?|#|$)/.test(target)) return "data";
@@ -20729,7 +21050,7 @@ function collectArtifacts(runResponse) {
20729
21050
  artifacts.push({
20730
21051
  name,
20731
21052
  url,
20732
- kind: artifactKind(name, url),
21053
+ kind: artifactKind2(name, url),
20733
21054
  size_bytes: numberValue5(artifact.size)
20734
21055
  });
20735
21056
  }
@@ -20749,12 +21070,39 @@ function collectProfileArtifacts(result) {
20749
21070
  artifacts.push({
20750
21071
  name,
20751
21072
  url,
20752
- kind: artifactKind(name, url),
21073
+ kind: artifactKind2(name, url),
20753
21074
  size_bytes: numberValue5(artifact.size_bytes) ?? numberValue5(artifact.size)
20754
21075
  });
20755
21076
  }
20756
21077
  return artifacts;
20757
21078
  }
21079
+ function collectChangeReceiptArtifacts(result) {
21080
+ const artifacts = [];
21081
+ const seen = /* @__PURE__ */ new Set();
21082
+ const collectSide = (sideName, side) => {
21083
+ const candidates = [
21084
+ ...asArray(side.screenshots),
21085
+ ...asArray(side.artifacts)
21086
+ ];
21087
+ for (const [index, item] of candidates.entries()) {
21088
+ const artifact = asRecord2(item);
21089
+ const url = stringValue7(artifact.url) || stringValue7(artifact.path);
21090
+ if (!url || seen.has(url)) continue;
21091
+ seen.add(url);
21092
+ const fallbackName = `${sideName}-artifact-${index + 1}`;
21093
+ const name = `${sideName}/${artifactDisplayName(artifact.name, fallbackName)}`;
21094
+ artifacts.push({
21095
+ name,
21096
+ url,
21097
+ kind: artifactKind2(name, url),
21098
+ size_bytes: numberValue5(artifact.size_bytes) ?? numberValue5(artifact.size)
21099
+ });
21100
+ }
21101
+ };
21102
+ collectSide("before", asRecord2(result.before));
21103
+ collectSide("after", asRecord2(result.after));
21104
+ return artifacts;
21105
+ }
20758
21106
  function mergeArtifacts(...artifactLists) {
20759
21107
  const artifacts = [];
20760
21108
  const seen = /* @__PURE__ */ new Set();
@@ -20781,7 +21129,7 @@ function pageSummaries(result) {
20781
21129
  }
20782
21130
  return pages;
20783
21131
  }
20784
- function profileCheckCounts(result) {
21132
+ function profileCheckCounts2(result) {
20785
21133
  const checks = asArray(result.checks);
20786
21134
  if (checks.length) {
20787
21135
  let passed2 = 0;
@@ -20810,6 +21158,32 @@ function profilePageSummaries(result, counts) {
20810
21158
  failed: counts.failed
20811
21159
  }];
20812
21160
  }
21161
+ function changeReceiptCheckCounts(result) {
21162
+ const deltas = asArray(result.deltas);
21163
+ if (!deltas.length) return void 0;
21164
+ let passed = 0;
21165
+ let failed = 0;
21166
+ for (const item of deltas) {
21167
+ const status = stringValue7(asRecord2(item).status);
21168
+ if (status === "passed") passed += 1;
21169
+ if (status === "failed" || status === "proof_insufficient" || status === "configuration_error") failed += 1;
21170
+ }
21171
+ return { passed, failed };
21172
+ }
21173
+ function changeReceiptPageSummaries(result) {
21174
+ const pages = [];
21175
+ for (const sideName of ["before", "after"]) {
21176
+ const side = asRecord2(result[sideName]);
21177
+ if (!Object.keys(side).length) continue;
21178
+ const checks = asRecord2(side.checks);
21179
+ pages.push({
21180
+ route: firstStringValue2(side.source, side.profile_name) || sideName,
21181
+ passed: numberValue5(checks.passed) ?? 0,
21182
+ failed: numberValue5(checks.failed) ?? 0
21183
+ });
21184
+ }
21185
+ return pages;
21186
+ }
20813
21187
  function summarizeExplicitChecks(value) {
20814
21188
  let passed = 0;
20815
21189
  let failed = 0;
@@ -20865,11 +21239,20 @@ function isProfileResult(result) {
20865
21239
  const version = stringValue7(result.version);
20866
21240
  return version === "riddle-proof.profile-result.v1" || version === "riddle-proof.profile-compact-result.v1";
20867
21241
  }
21242
+ function isChangeReceiptResult(result) {
21243
+ return stringValue7(result.version) === "riddle-proof.change-receipt.v1";
21244
+ }
21245
+ function isChangeResult(result) {
21246
+ const version = stringValue7(result.version);
21247
+ return version === "riddle-proof.change-result.v1" || version === "riddle-proof.change-compact-result.v1";
21248
+ }
20868
21249
  function summarizeRiddleProofPrComment(input) {
20869
21250
  const runResponse = asRecord2(input.runResponse);
20870
21251
  const result = asRecord2(input.result);
20871
21252
  const proofResult = asRecord2(runResponse.proofResult);
20872
21253
  const profileResult = isProfileResult(result);
21254
+ const changeReceiptResult = isChangeReceiptResult(result);
21255
+ const changeResult = changeReceiptResult || isChangeResult(result);
20873
21256
  const profileRiddle = asRecord2(result.riddle);
20874
21257
  const preview = asRecord2(runResponse.preview);
20875
21258
  const resultRunCard = asRecord2(result.run_card);
@@ -20877,16 +21260,19 @@ function summarizeRiddleProofPrComment(input) {
20877
21260
  const resultDetails = asRecord2(result.details);
20878
21261
  const resultRaw = asRecord2(result.raw);
20879
21262
  const rawDetails = asRecord2(resultRaw.details);
20880
- const profileChecks = profileResult ? profileCheckCounts(result) : void 0;
21263
+ const profileChecks = profileResult ? profileCheckCounts2(result) : void 0;
21264
+ const changeChecks = changeResult ? changeReceiptCheckCounts(result) : void 0;
20881
21265
  const artifacts = mergeArtifacts(
20882
21266
  collectArtifacts(runResponse),
20883
- profileResult ? collectProfileArtifacts(result) : []
21267
+ profileResult ? collectProfileArtifacts(result) : [],
21268
+ changeReceiptResult ? collectChangeReceiptArtifacts(result) : []
20884
21269
  );
20885
- const pages = profileResult ? profilePageSummaries(result, profileChecks) : pageSummaries(result);
21270
+ const pages = changeReceiptResult ? changeReceiptPageSummaries(result) : profileResult ? profilePageSummaries(result, profileChecks) : pageSummaries(result);
20886
21271
  const checkSource = { ...result };
20887
21272
  delete checkSource.ok;
20888
21273
  const nestedChecks = summarizeExplicitChecks(checkSource);
20889
- const ok = booleanValue3(result.ok) ?? booleanValue3(runResponse.ok) ?? null;
21274
+ const resultStatus = firstStringValue2(result.status, stopCondition.status);
21275
+ const ok = changeResult ? resultStatus === "passed" : booleanValue3(result.ok) ?? booleanValue3(runResponse.ok) ?? null;
20890
21276
  const checkpointSummary = checkpointSummaryFrom2(
20891
21277
  result.checkpoint_summary,
20892
21278
  stopCondition.checkpoint_summary,
@@ -20896,7 +21282,7 @@ function summarizeRiddleProofPrComment(input) {
20896
21282
  );
20897
21283
  const publicState = summarizeRiddleProofPublicState({
20898
21284
  ...result,
20899
- status: firstStringValue2(result.status, stopCondition.status),
21285
+ status: resultStatus,
20900
21286
  checkpoint_summary: checkpointSummary || result.checkpoint_summary
20901
21287
  });
20902
21288
  const mergeRecommendation = riddleProofPublicStateMergeRecommendation(
@@ -20906,7 +21292,7 @@ function summarizeRiddleProofPrComment(input) {
20906
21292
  return {
20907
21293
  ok,
20908
21294
  status: firstStringValue2(proofResult.status, profileRiddle.status),
20909
- result_status: publicState.status,
21295
+ result_status: changeResult ? resultStatus : publicState.status,
20910
21296
  job_id: firstStringValue2(proofResult.job_id, profileRiddle.job_id),
20911
21297
  duration_ms: numberValue5(proofResult.duration_ms) ?? numberValue5(profileRiddle.elapsed_ms),
20912
21298
  proof_url: stringValue7(runResponse.proofUrl),
@@ -20920,11 +21306,11 @@ function summarizeRiddleProofPrComment(input) {
20920
21306
  merge_ready: publicState.merge_ready,
20921
21307
  sync_allowed: publicState.sync_allowed,
20922
21308
  proof_decision: firstStringValue2(result.proof_decision, stopCondition.proof_decision, resultRaw.proof_decision),
20923
- merge_recommendation: mergeRecommendation,
21309
+ merge_recommendation: changeReceiptResult && resultStatus ? stringValue7(result.verdict) : mergeRecommendation,
20924
21310
  checkpoint_summary: checkpointSummary,
20925
21311
  public_state: publicState,
20926
- passed_checks: profileChecks?.passed ?? nestedChecks.passed,
20927
- failed_checks: profileChecks?.failed ?? nestedChecks.failed,
21312
+ passed_checks: changeChecks?.passed ?? profileChecks?.passed ?? nestedChecks.passed,
21313
+ failed_checks: changeChecks?.failed ?? profileChecks?.failed ?? nestedChecks.failed,
20928
21314
  pages,
20929
21315
  artifacts,
20930
21316
  primary_image: selectPrimaryImage(artifacts)
@@ -20937,7 +21323,7 @@ function formatDuration(ms) {
20937
21323
  const remainder = seconds % 60;
20938
21324
  return minutes > 0 ? `${minutes}m${String(remainder).padStart(2, "0")}s` : `${seconds}s`;
20939
21325
  }
20940
- function markdownLink(label, url) {
21326
+ function markdownLink2(label, url) {
20941
21327
  return `[${label.replace(/\]/g, "\\]")}](${url})`;
20942
21328
  }
20943
21329
  function resultLabel(summary) {
@@ -21012,10 +21398,10 @@ function buildRiddleProofPrCommentMarkdown(input) {
21012
21398
  if (summary.proof_decision) lines.push(`**Proof decision:** \`${summary.proof_decision}\``);
21013
21399
  if (shouldRenderMergeRecommendation(summary)) lines.push(`**Merge recommendation:** ${summary.merge_recommendation}`);
21014
21400
  if (summary.checkpoint_summary) lines.push(`**Checkpoints:** ${checkpointSummaryLine(summary.checkpoint_summary)}`);
21015
- if (summary.proof_url) lines.push(`**Proof URL:** ${markdownLink(summary.proof_url, summary.proof_url)}`);
21401
+ if (summary.proof_url) lines.push(`**Proof URL:** ${markdownLink2(summary.proof_url, summary.proof_url)}`);
21016
21402
  if (summary.preview_id || summary.preview_url) {
21017
21403
  const previewLabel = summary.preview_id ? `\`${summary.preview_id}\`` : "preview";
21018
- lines.push(`**Preview:** ${summary.preview_url ? markdownLink(previewLabel, summary.preview_url) : previewLabel}`);
21404
+ lines.push(`**Preview:** ${summary.preview_url ? markdownLink2(previewLabel, summary.preview_url) : previewLabel}`);
21019
21405
  }
21020
21406
  if (summary.preview_publish_recovered) {
21021
21407
  const detail = summary.preview_publish_error ? `: ${summary.preview_publish_error}` : "";
@@ -21040,7 +21426,7 @@ function buildRiddleProofPrCommentMarkdown(input) {
21040
21426
  if (linkedArtifacts.length) {
21041
21427
  lines.push("### Artifacts");
21042
21428
  for (const artifact of linkedArtifacts) {
21043
- lines.push(`- ${markdownLink(artifact.name, artifact.url)}`);
21429
+ lines.push(`- ${markdownLink2(artifact.name, artifact.url)}`);
21044
21430
  }
21045
21431
  if (summary.artifacts.length - (summary.primary_image ? 1 : 0) > linkedArtifacts.length) {
21046
21432
  lines.push(`- ${summary.artifacts.length - (summary.primary_image ? 1 : 0) - linkedArtifacts.length} more artifact(s) omitted`);
@@ -21069,6 +21455,7 @@ function buildRiddleProofPrCommentMarkdown(input) {
21069
21455
  RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION,
21070
21456
  RIDDLE_PROOF_CAPTURE_DIAGNOSTIC_VERSION,
21071
21457
  RIDDLE_PROOF_CHANGE_CONTRACT_VERSION,
21458
+ RIDDLE_PROOF_CHANGE_RECEIPT_VERSION,
21072
21459
  RIDDLE_PROOF_CHANGE_RESULT_VERSION,
21073
21460
  RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,
21074
21461
  RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION,
@@ -21134,6 +21521,7 @@ function buildRiddleProofPrCommentMarkdown(input) {
21134
21521
  createLocalAgentAdapter,
21135
21522
  createLocalAgentJsonRunner,
21136
21523
  createRiddleApiClient,
21524
+ createRiddleProofChangeReceipt,
21137
21525
  createRiddleProofProfileConfigurationError,
21138
21526
  createRiddleProofProfileEnvironmentBlockedResult,
21139
21527
  createRiddleProofProfileInsufficientResult,
@@ -21179,6 +21567,8 @@ function buildRiddleProofPrCommentMarkdown(input) {
21179
21567
  resolveRiddleProofProfileRouteUrl,
21180
21568
  resolveRiddleProofProfileTargetUrl,
21181
21569
  resolveRiddleProofProfileTimeoutSec,
21570
+ riddleProofChangeReceiptHtml,
21571
+ riddleProofChangeReceiptMarkdown,
21182
21572
  riddleProofPublicStateAllowsClaim,
21183
21573
  riddleProofPublicStateAllowsMergeRecommendation,
21184
21574
  riddleProofPublicStateMergeRecommendation,
package/dist/index.d.cts CHANGED
@@ -13,6 +13,6 @@ export { AssessPlayabilityOptions, RIDDLE_PROOF_PLAYABILITY_ASSESSMENT_VERSION,
13
13
  export { AssessBasicGameplayOptions, AttachBasicGameplayArtifactOptions, BASIC_GAMEPLAY_ACTION_TYPES, BASIC_GAMEPLAY_PROGRESS_CHECK_TYPES, BasicGameplayActionResult, BasicGameplayActionType, BasicGameplayArtifactResolution, BasicGameplayAssessmentSummary, BasicGameplayBoundsOffender, BasicGameplayCanvasState, BasicGameplayCatchRecord, BasicGameplayChangeSummary, BasicGameplayFailureCode, BasicGameplayFixReference, BasicGameplayMetric, BasicGameplayMobileEvidence, BasicGameplayProgressCheckType, BasicGameplayProgressionCheck, BasicGameplayProofArtifact, BasicGameplayResponsiveViewportEvidence, BasicGameplayRouteReference, BasicGameplaySnapshot, BasicGameplaySuiteFailure, BasicGameplayWarningCode, CreateBasicGameplayCatchSummaryInput, RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION, RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION, RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION, RiddleProofBasicGameplayAssessment, RiddleProofBasicGameplayCatchSummary, RiddleProofBasicGameplayEvidence, RiddleProofBasicGameplayRouteAssessment, RiddleProofBasicGameplayRouteEvidence, assessBasicGameplayEvidence, assessBasicGameplayProgressionCheck, assessBasicGameplayProgressionChecks, assessBasicGameplayRoute, attachBasicGameplayArtifactScreenshotHashes, augmentBasicGameplayAssessmentWithProgressionChecks, compactBasicGameplayText, createBasicGameplayCatchRecords, createBasicGameplayCatchSummary, extractBasicGameplayEvidence, resolveBasicGameplayProgressionCheckWithArtifactScreenshots, sanitizeBasicGameplayJsonString } from './basic-gameplay.cjs';
14
14
  export { NormalizeRiddleProofProfileOptions, RIDDLE_PROOF_HOSTED_PROFILE_ARTIFACTS, RIDDLE_PROOF_PROFILE_CHECK_TYPES, RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION, RIDDLE_PROOF_PROFILE_NETWORK_ABORT_ERROR_CODES, RIDDLE_PROOF_PROFILE_RESULT_VERSION, RIDDLE_PROOF_PROFILE_SETUP_ACTION_TYPES, RIDDLE_PROOF_PROFILE_STATUSES, RIDDLE_PROOF_PROFILE_VERSION, RiddleProofArtifactBodyAssertionInput, RiddleProofArtifactBodyAssertionResult, RiddleProofProfile, RiddleProofProfileArtifactCompleteness, RiddleProofProfileArtifactRef, RiddleProofProfileBaselinePolicy, RiddleProofProfileBoundsOffender, RiddleProofProfileCheck, RiddleProofProfileCheckResult, RiddleProofProfileCheckType, RiddleProofProfileEvidence, RiddleProofProfileFailureAction, RiddleProofProfileHttpStatusBodyJsonAssertion, RiddleProofProfileHttpStatusBodyJsonAssertionResult, RiddleProofProfileHttpStatusPreflightCheckResult, RiddleProofProfileHttpStatusPreflightFetch, RiddleProofProfileHttpStatusPreflightFetchResponse, RiddleProofProfileHttpStatusPreflightOptions, RiddleProofProfileHttpStatusPreflightResult, RiddleProofProfileJsonValueType, RiddleProofProfileNetworkAbortErrorCode, RiddleProofProfileNetworkMock, RiddleProofProfileNetworkMockResponse, RiddleProofProfileResult, RiddleProofProfileReturnSummaryField, RiddleProofProfileRouteEvidence, RiddleProofProfileRouteInventoryRoute, RiddleProofProfileRunner, RiddleProofProfileRunnerArtifactPreflight, RiddleProofProfileSetupAction, RiddleProofProfileSetupActionType, RiddleProofProfileStatus, RiddleProofProfileTarget, RiddleProofProfileViewport, RiddleProofProfileViewportEvidence, applyRiddleProofProfileArtifactCompleteness, assessRiddleProofProfileArtifactCompleteness, assessRiddleProofProfileEvidence, buildRiddleProofProfileScript, collectRiddleProfileArtifactRefs, collectRiddleProofProfileWarnings, createRiddleProofProfileConfigurationError, createRiddleProofProfileEnvironmentBlockedResult, createRiddleProofProfileInsufficientResult, deriveRiddleProofArtifactBodyAssertions, extractRiddleProofProfileResult, normalizeRiddleProofProfile, preflightRiddleProofProfileHttpStatusChecks, preflightRiddleProofProfileRunnerArtifacts, profileStatusExitCode, resolveRiddleProofProfileRouteUrl, resolveRiddleProofProfileTargetUrl, resolveRiddleProofProfileTimeoutSec, slugifyRiddleProofProfileName, summarizeRiddleProofProfileResult } from './profile.cjs';
15
15
  export { RIDDLE_PROOF_PROFILE_SUGGESTIONS_VERSION, RiddleProofProfileChangedTextInput, RiddleProofProfileSuggestion, RiddleProofProfileSuggestionInput, RiddleProofProfileSuggestionsResult, suggestRiddleProofProfileChecks } from './profile-suggestions.cjs';
16
- export { AssessRiddleProofChangeInput, RIDDLE_PROOF_CHANGE_CONTRACT_VERSION, RIDDLE_PROOF_CHANGE_RESULT_VERSION, RiddleProofChangeContract, RiddleProofChangeDelta, RiddleProofChangeDeltaResult, RiddleProofChangeDeltaStatus, RiddleProofChangeGroupContract, RiddleProofChangeGroupResult, RiddleProofChangeProfileCheckStatus, RiddleProofChangeResult, RiddleProofChangeSide, RiddleProofChangeStatus, RiddleProofCheckStatusTransitionDelta, RiddleProofProfileStatusTransitionDelta, assessRiddleProofChange } from './change-proof.cjs';
16
+ export { AssessRiddleProofChangeInput, CreateRiddleProofChangeReceiptInput, RIDDLE_PROOF_CHANGE_CONTRACT_VERSION, RIDDLE_PROOF_CHANGE_RECEIPT_VERSION, RIDDLE_PROOF_CHANGE_RESULT_VERSION, RiddleProofChangeContract, RiddleProofChangeDelta, RiddleProofChangeDeltaResult, RiddleProofChangeDeltaStatus, RiddleProofChangeGroupContract, RiddleProofChangeGroupResult, RiddleProofChangeProfileCheckStatus, RiddleProofChangeReceipt, RiddleProofChangeReceiptArtifact, RiddleProofChangeReceiptArtifactKind, RiddleProofChangeReceiptCheckCounts, RiddleProofChangeReceiptDelta, RiddleProofChangeReceiptSide, RiddleProofChangeReceiptVerdict, RiddleProofChangeResult, RiddleProofChangeSide, RiddleProofChangeStatus, RiddleProofCheckStatusTransitionDelta, RiddleProofProfileStatusTransitionDelta, assessRiddleProofChange, createRiddleProofChangeReceipt, riddleProofChangeReceiptHtml, riddleProofChangeReceiptMarkdown } from './change-proof.cjs';
17
17
  export { DEFAULT_RIDDLE_API_BASE_URL, DEFAULT_RIDDLE_API_KEY_FILE, RIDDLE_UNSUBMITTED_WAKE_HINT, RiddleApiError, RiddleApiKeySource, RiddleBalanceResult, RiddleClientConfig, RiddleFetch, RiddlePollJobOptions, RiddlePollJobResult, RiddlePollProgressSnapshot, RiddlePollSummary, RiddlePreviewDeployProgressSnapshot, RiddlePreviewDeployResult, RiddlePreviewDeployStage, RiddlePreviewFramework, RiddleRunScriptInput, RiddleServerPreviewInput, RiddleServerPreviewResult, collectRiddlePreviewDeployWarnings, createRiddleApiClient, deployRiddlePreview, deployRiddleStaticPreview, getRiddleBalance, isTerminalRiddleJobStatus, parseRiddleViewport, pollRiddleJob, resolveRiddleApiKey, resolveRiddleApiKeySource, riddleRequestJson, runRiddleScript, runRiddleServerPreview } from './riddle-client.cjs';
18
18
  export { RIDDLE_PROOF_PR_COMMENT_MARKER, RiddleProofPrCommentArtifact, RiddleProofPrCommentArtifactKind, RiddleProofPrCommentCheckpointSummary, RiddleProofPrCommentInput, RiddleProofPrCommentPageSummary, RiddleProofPrCommentSummary, buildRiddleProofPrCommentMarkdown, summarizeRiddleProofPrComment } from './pr-comment.cjs';
package/dist/index.d.ts CHANGED
@@ -13,6 +13,6 @@ export { AssessPlayabilityOptions, RIDDLE_PROOF_PLAYABILITY_ASSESSMENT_VERSION,
13
13
  export { AssessBasicGameplayOptions, AttachBasicGameplayArtifactOptions, BASIC_GAMEPLAY_ACTION_TYPES, BASIC_GAMEPLAY_PROGRESS_CHECK_TYPES, BasicGameplayActionResult, BasicGameplayActionType, BasicGameplayArtifactResolution, BasicGameplayAssessmentSummary, BasicGameplayBoundsOffender, BasicGameplayCanvasState, BasicGameplayCatchRecord, BasicGameplayChangeSummary, BasicGameplayFailureCode, BasicGameplayFixReference, BasicGameplayMetric, BasicGameplayMobileEvidence, BasicGameplayProgressCheckType, BasicGameplayProgressionCheck, BasicGameplayProofArtifact, BasicGameplayResponsiveViewportEvidence, BasicGameplayRouteReference, BasicGameplaySnapshot, BasicGameplaySuiteFailure, BasicGameplayWarningCode, CreateBasicGameplayCatchSummaryInput, RIDDLE_PROOF_BASIC_GAMEPLAY_ASSESSMENT_VERSION, RIDDLE_PROOF_BASIC_GAMEPLAY_CATCH_VERSION, RIDDLE_PROOF_BASIC_GAMEPLAY_VERSION, RiddleProofBasicGameplayAssessment, RiddleProofBasicGameplayCatchSummary, RiddleProofBasicGameplayEvidence, RiddleProofBasicGameplayRouteAssessment, RiddleProofBasicGameplayRouteEvidence, assessBasicGameplayEvidence, assessBasicGameplayProgressionCheck, assessBasicGameplayProgressionChecks, assessBasicGameplayRoute, attachBasicGameplayArtifactScreenshotHashes, augmentBasicGameplayAssessmentWithProgressionChecks, compactBasicGameplayText, createBasicGameplayCatchRecords, createBasicGameplayCatchSummary, extractBasicGameplayEvidence, resolveBasicGameplayProgressionCheckWithArtifactScreenshots, sanitizeBasicGameplayJsonString } from './basic-gameplay.js';
14
14
  export { NormalizeRiddleProofProfileOptions, RIDDLE_PROOF_HOSTED_PROFILE_ARTIFACTS, RIDDLE_PROOF_PROFILE_CHECK_TYPES, RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION, RIDDLE_PROOF_PROFILE_NETWORK_ABORT_ERROR_CODES, RIDDLE_PROOF_PROFILE_RESULT_VERSION, RIDDLE_PROOF_PROFILE_SETUP_ACTION_TYPES, RIDDLE_PROOF_PROFILE_STATUSES, RIDDLE_PROOF_PROFILE_VERSION, RiddleProofArtifactBodyAssertionInput, RiddleProofArtifactBodyAssertionResult, RiddleProofProfile, RiddleProofProfileArtifactCompleteness, RiddleProofProfileArtifactRef, RiddleProofProfileBaselinePolicy, RiddleProofProfileBoundsOffender, RiddleProofProfileCheck, RiddleProofProfileCheckResult, RiddleProofProfileCheckType, RiddleProofProfileEvidence, RiddleProofProfileFailureAction, RiddleProofProfileHttpStatusBodyJsonAssertion, RiddleProofProfileHttpStatusBodyJsonAssertionResult, RiddleProofProfileHttpStatusPreflightCheckResult, RiddleProofProfileHttpStatusPreflightFetch, RiddleProofProfileHttpStatusPreflightFetchResponse, RiddleProofProfileHttpStatusPreflightOptions, RiddleProofProfileHttpStatusPreflightResult, RiddleProofProfileJsonValueType, RiddleProofProfileNetworkAbortErrorCode, RiddleProofProfileNetworkMock, RiddleProofProfileNetworkMockResponse, RiddleProofProfileResult, RiddleProofProfileReturnSummaryField, RiddleProofProfileRouteEvidence, RiddleProofProfileRouteInventoryRoute, RiddleProofProfileRunner, RiddleProofProfileRunnerArtifactPreflight, RiddleProofProfileSetupAction, RiddleProofProfileSetupActionType, RiddleProofProfileStatus, RiddleProofProfileTarget, RiddleProofProfileViewport, RiddleProofProfileViewportEvidence, applyRiddleProofProfileArtifactCompleteness, assessRiddleProofProfileArtifactCompleteness, assessRiddleProofProfileEvidence, buildRiddleProofProfileScript, collectRiddleProfileArtifactRefs, collectRiddleProofProfileWarnings, createRiddleProofProfileConfigurationError, createRiddleProofProfileEnvironmentBlockedResult, createRiddleProofProfileInsufficientResult, deriveRiddleProofArtifactBodyAssertions, extractRiddleProofProfileResult, normalizeRiddleProofProfile, preflightRiddleProofProfileHttpStatusChecks, preflightRiddleProofProfileRunnerArtifacts, profileStatusExitCode, resolveRiddleProofProfileRouteUrl, resolveRiddleProofProfileTargetUrl, resolveRiddleProofProfileTimeoutSec, slugifyRiddleProofProfileName, summarizeRiddleProofProfileResult } from './profile.js';
15
15
  export { RIDDLE_PROOF_PROFILE_SUGGESTIONS_VERSION, RiddleProofProfileChangedTextInput, RiddleProofProfileSuggestion, RiddleProofProfileSuggestionInput, RiddleProofProfileSuggestionsResult, suggestRiddleProofProfileChecks } from './profile-suggestions.js';
16
- export { AssessRiddleProofChangeInput, RIDDLE_PROOF_CHANGE_CONTRACT_VERSION, RIDDLE_PROOF_CHANGE_RESULT_VERSION, RiddleProofChangeContract, RiddleProofChangeDelta, RiddleProofChangeDeltaResult, RiddleProofChangeDeltaStatus, RiddleProofChangeGroupContract, RiddleProofChangeGroupResult, RiddleProofChangeProfileCheckStatus, RiddleProofChangeResult, RiddleProofChangeSide, RiddleProofChangeStatus, RiddleProofCheckStatusTransitionDelta, RiddleProofProfileStatusTransitionDelta, assessRiddleProofChange } from './change-proof.js';
16
+ export { AssessRiddleProofChangeInput, CreateRiddleProofChangeReceiptInput, RIDDLE_PROOF_CHANGE_CONTRACT_VERSION, RIDDLE_PROOF_CHANGE_RECEIPT_VERSION, RIDDLE_PROOF_CHANGE_RESULT_VERSION, RiddleProofChangeContract, RiddleProofChangeDelta, RiddleProofChangeDeltaResult, RiddleProofChangeDeltaStatus, RiddleProofChangeGroupContract, RiddleProofChangeGroupResult, RiddleProofChangeProfileCheckStatus, RiddleProofChangeReceipt, RiddleProofChangeReceiptArtifact, RiddleProofChangeReceiptArtifactKind, RiddleProofChangeReceiptCheckCounts, RiddleProofChangeReceiptDelta, RiddleProofChangeReceiptSide, RiddleProofChangeReceiptVerdict, RiddleProofChangeResult, RiddleProofChangeSide, RiddleProofChangeStatus, RiddleProofCheckStatusTransitionDelta, RiddleProofProfileStatusTransitionDelta, assessRiddleProofChange, createRiddleProofChangeReceipt, riddleProofChangeReceiptHtml, riddleProofChangeReceiptMarkdown } from './change-proof.js';
17
17
  export { DEFAULT_RIDDLE_API_BASE_URL, DEFAULT_RIDDLE_API_KEY_FILE, RIDDLE_UNSUBMITTED_WAKE_HINT, RiddleApiError, RiddleApiKeySource, RiddleBalanceResult, RiddleClientConfig, RiddleFetch, RiddlePollJobOptions, RiddlePollJobResult, RiddlePollProgressSnapshot, RiddlePollSummary, RiddlePreviewDeployProgressSnapshot, RiddlePreviewDeployResult, RiddlePreviewDeployStage, RiddlePreviewFramework, RiddleRunScriptInput, RiddleServerPreviewInput, RiddleServerPreviewResult, collectRiddlePreviewDeployWarnings, createRiddleApiClient, deployRiddlePreview, deployRiddleStaticPreview, getRiddleBalance, isTerminalRiddleJobStatus, parseRiddleViewport, pollRiddleJob, resolveRiddleApiKey, resolveRiddleApiKeySource, riddleRequestJson, runRiddleScript, runRiddleServerPreview } from './riddle-client.js';
18
18
  export { RIDDLE_PROOF_PR_COMMENT_MARKER, RiddleProofPrCommentArtifact, RiddleProofPrCommentArtifactKind, RiddleProofPrCommentCheckpointSummary, RiddleProofPrCommentInput, RiddleProofPrCommentPageSummary, RiddleProofPrCommentSummary, buildRiddleProofPrCommentMarkdown, summarizeRiddleProofPrComment } from './pr-comment.js';