@riddledc/riddle-proof 0.7.129 → 0.7.131

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/profile.cjs CHANGED
@@ -654,6 +654,17 @@ function normalizeSetupActionCoordinateMode(value, index) {
654
654
  if (normalized === "ratio" || normalized === "relative" || normalized === "fraction") return "ratio";
655
655
  throw new Error(`target.setup_actions[${index}].coordinate_mode ${String(value)} is not supported. Supported coordinate modes: pixels, ratio.`);
656
656
  }
657
+ function normalizeSetupActionPointerType(value, type, index) {
658
+ if (value === void 0 || value === null || value === "") return void 0;
659
+ if (type !== "drag") {
660
+ throw new Error(`target.setup_actions[${index}].pointer_type is only supported for drag actions.`);
661
+ }
662
+ const normalized = String(value).trim().replace(/-/g, "_").toLowerCase();
663
+ if (normalized === "mouse") return "mouse";
664
+ if (normalized === "touch" || normalized === "finger") return "touch";
665
+ if (normalized === "pen" || normalized === "stylus") return "pen";
666
+ throw new Error(`target.setup_actions[${index}].pointer_type ${String(value)} is not supported. Supported pointer types: mouse, touch, pen.`);
667
+ }
657
668
  function normalizeSetupAction(input, index) {
658
669
  if (!isRecord(input)) throw new Error(`target.setup_actions[${index}] must be an object.`);
659
670
  const type = normalizeSetupActionType(stringValue(input.type), index);
@@ -672,6 +683,7 @@ function normalizeSetupAction(input, index) {
672
683
  const toX = numberValue(valueFromOwn(input, "to_x", "toX", "end_x", "endX", "x2"));
673
684
  const toY = numberValue(valueFromOwn(input, "to_y", "toY", "end_y", "endY", "y2"));
674
685
  const coordinateMode = normalizeSetupActionCoordinateMode(valueFromOwn(input, "coordinate_mode", "coordinateMode", "coords", "units"), index);
686
+ const pointerType = normalizeSetupActionPointerType(valueFromOwn(input, "pointer_type", "pointerType", "input_type", "inputType"), type, index);
675
687
  if (type === "drag") {
676
688
  if (fromX === void 0 || fromY === void 0 || toX === void 0 || toY === void 0) {
677
689
  throw new Error(`target.setup_actions[${index}] drag requires from_x, from_y, to_x, and to_y.`);
@@ -756,6 +768,7 @@ function normalizeSetupAction(input, index) {
756
768
  force: type === "click" && (input.force === true || input.force_click === true || input.forceClick === true),
757
769
  click_count: normalizeSetupActionClickCount(input, type, index),
758
770
  coordinate_mode: coordinateMode,
771
+ pointer_type: pointerType,
759
772
  from_x: fromX,
760
773
  from_y: fromY,
761
774
  to_x: toX,
@@ -1934,6 +1947,27 @@ function textMatchSamples(sample, check) {
1934
1947
  const sampleText = textSampleAroundMatch(source, index, text.length);
1935
1948
  return sampleText ? [sampleText] : [];
1936
1949
  }
1950
+ function textCaseInsensitiveSamples(sample, check) {
1951
+ const source = String(sample || "");
1952
+ const text = check.pattern ? "" : check.text || "";
1953
+ if (!source || !text) return [];
1954
+ const index = source.toLowerCase().indexOf(text.toLowerCase());
1955
+ const sampleText = textSampleAroundMatch(source, index, text.length);
1956
+ return sampleText ? [sampleText] : [];
1957
+ }
1958
+ function textCaseInsensitiveSequenceSamples(texts, check) {
1959
+ const text = check.pattern ? "" : compactTextEvidenceSample(check.text || "");
1960
+ if (!text) return [];
1961
+ const expected = text.toLowerCase();
1962
+ return texts.map((candidate) => compactTextEvidenceSample(candidate)).filter((candidate) => candidate && candidate.toLowerCase().includes(expected)).slice(0, 3).map((candidate) => candidate.slice(0, 240));
1963
+ }
1964
+ function textCaseInsensitiveFailureSamples(viewport, check) {
1965
+ const key = textKey(check);
1966
+ const captured = viewport.text_case_insensitive_samples?.[key] || [];
1967
+ const capturedSamples = captured.map((sample) => compactTextEvidenceSample(sample).slice(0, 240)).filter(Boolean);
1968
+ if (capturedSamples.length) return capturedSamples.slice(0, 3);
1969
+ return textCaseInsensitiveSamples(viewport.body_text_sample || "", check).slice(0, 3);
1970
+ }
1937
1971
  function textCheckFailureSamples(viewport, check) {
1938
1972
  const key = textKey(check);
1939
1973
  const captured = viewport.text_match_samples?.[key] || [];
@@ -2246,13 +2280,15 @@ function assessCheckFromEvidence(check, evidence) {
2246
2280
  const matched = matches.length > 0;
2247
2281
  const failedAgainstExpectation = matched !== expectedVisible;
2248
2282
  const sampleTexts = matches.length ? matches : failedAgainstExpectation ? texts : [];
2283
+ const caseInsensitiveSamples = failedAgainstExpectation && expectedVisible && !matched ? textCaseInsensitiveSequenceSamples(texts, check) : [];
2249
2284
  return {
2250
2285
  viewport: viewport.name,
2251
2286
  selector_count: viewport.selectors?.[key]?.count || 0,
2252
2287
  visible_count: viewport.selectors?.[key]?.visible_count || 0,
2253
2288
  matched_count: matches.length,
2254
2289
  matched,
2255
- samples: sampleTexts.slice(0, 3).map((text) => text.slice(0, 240))
2290
+ samples: sampleTexts.slice(0, 3).map((text) => text.slice(0, 240)),
2291
+ case_insensitive_samples: caseInsensitiveSamples
2256
2292
  };
2257
2293
  });
2258
2294
  const failed = results.filter((result) => result.matched !== expectedVisible).length;
@@ -2395,7 +2431,8 @@ function assessCheckFromEvidence(check, evidence) {
2395
2431
  return {
2396
2432
  viewport: viewport.name,
2397
2433
  matched,
2398
- samples: failedAgainstExpectation ? textCheckFailureSamples(viewport, check) : []
2434
+ samples: failedAgainstExpectation ? textCheckFailureSamples(viewport, check) : [],
2435
+ case_insensitive_samples: failedAgainstExpectation && expectedVisible && !matched ? textCaseInsensitiveFailureSamples(viewport, check) : []
2399
2436
  };
2400
2437
  });
2401
2438
  const matches = results.map((result) => result.matched);
@@ -3025,6 +3062,32 @@ function textMatchSamples(sample, check) {
3025
3062
  const sampleText = textSampleAroundMatch(source, source.indexOf(text), text.length);
3026
3063
  return sampleText ? [sampleText] : [];
3027
3064
  }
3065
+ function textCaseInsensitiveSamples(sample, check) {
3066
+ const source = String(sample || "");
3067
+ const text = check.pattern ? "" : check.text || "";
3068
+ if (!source || !text) return [];
3069
+ const sampleText = textSampleAroundMatch(source, source.toLowerCase().indexOf(text.toLowerCase()), text.length);
3070
+ return sampleText ? [sampleText] : [];
3071
+ }
3072
+ function textCaseInsensitiveSequenceSamples(texts, check) {
3073
+ const text = check.pattern ? "" : compactTextEvidenceSample(check.text || "");
3074
+ if (!text) return [];
3075
+ const expected = text.toLowerCase();
3076
+ return (texts || [])
3077
+ .map((candidate) => compactTextEvidenceSample(candidate))
3078
+ .filter((candidate) => candidate && candidate.toLowerCase().includes(expected))
3079
+ .slice(0, 3)
3080
+ .map((candidate) => candidate.slice(0, 240));
3081
+ }
3082
+ function textCaseInsensitiveFailureSamples(viewport, check) {
3083
+ const key = check.pattern ? "pattern:" + check.pattern + "/" + (check.flags || "") : "text:" + (check.text || "");
3084
+ const captured = viewport && viewport.text_case_insensitive_samples && Array.isArray(viewport.text_case_insensitive_samples[key]) ? viewport.text_case_insensitive_samples[key] : [];
3085
+ const capturedSamples = captured
3086
+ .map((sample) => compactTextEvidenceSample(sample).slice(0, 240))
3087
+ .filter(Boolean);
3088
+ if (capturedSamples.length) return capturedSamples.slice(0, 3);
3089
+ return textCaseInsensitiveSamples(viewport && viewport.body_text_sample || "", check).slice(0, 3);
3090
+ }
3028
3091
  function textCheckFailureSamples(viewport, check) {
3029
3092
  const key = check.pattern ? "pattern:" + check.pattern + "/" + (check.flags || "") : "text:" + (check.text || "");
3030
3093
  const captured = viewport && viewport.text_match_samples && Array.isArray(viewport.text_match_samples[key]) ? viewport.text_match_samples[key] : [];
@@ -3983,6 +4046,9 @@ function assessProfile(profile, evidence) {
3983
4046
  const matched = matches.length > 0;
3984
4047
  const failedAgainstExpectation = matched !== expectedVisible;
3985
4048
  const sampleTexts = matches.length ? matches : failedAgainstExpectation ? texts : [];
4049
+ const caseInsensitiveSamples = failedAgainstExpectation && expectedVisible && !matched
4050
+ ? textCaseInsensitiveSequenceSamples(texts, check)
4051
+ : [];
3986
4052
  return {
3987
4053
  viewport: viewport.name,
3988
4054
  selector_count: viewport.selectors && viewport.selectors[selector] ? viewport.selectors[selector].count : 0,
@@ -3990,6 +4056,7 @@ function assessProfile(profile, evidence) {
3990
4056
  matched_count: matches.length,
3991
4057
  matched,
3992
4058
  samples: sampleTexts.slice(0, 3).map((text) => text.slice(0, 240)),
4059
+ case_insensitive_samples: caseInsensitiveSamples,
3993
4060
  };
3994
4061
  });
3995
4062
  const failed = results.filter((result) => result.matched !== expectedVisible).length;
@@ -4121,6 +4188,9 @@ function assessProfile(profile, evidence) {
4121
4188
  viewport: viewport.name,
4122
4189
  matched,
4123
4190
  samples: failedAgainstExpectation ? textCheckFailureSamples(viewport, check) : [],
4191
+ case_insensitive_samples: failedAgainstExpectation && expectedVisible && !matched
4192
+ ? textCaseInsensitiveFailureSamples(viewport, check)
4193
+ : [],
4124
4194
  };
4125
4195
  });
4126
4196
  const matches = results.map((result) => result.matched);
@@ -4510,6 +4580,14 @@ function setupTextMatches(sample, action) {
4510
4580
  return rawSample.includes(expected)
4511
4581
  || normalizeSetupMatchText(rawSample).includes(normalizeSetupMatchText(expected));
4512
4582
  }
4583
+ function setupCaseInsensitiveTextSample(sample, action) {
4584
+ if (!action || action.pattern || !action.text) return "";
4585
+ const normalizedSample = normalizeSetupMatchText(sample);
4586
+ const normalizedExpected = normalizeSetupMatchText(action.text);
4587
+ if (!normalizedSample || !normalizedExpected) return "";
4588
+ if (!normalizedSample.toLowerCase().includes(normalizedExpected.toLowerCase())) return "";
4589
+ return compactSetupResultText(normalizedSample);
4590
+ }
4513
4591
  async function waitForAnyVisibleSelector(context, selector, timeout) {
4514
4592
  const deadline = Date.now() + setupNumber(timeout, 15000);
4515
4593
  let lastReason = "selector_not_found";
@@ -4956,23 +5034,75 @@ async function executeSetupAction(action, ordinal, viewport) {
4956
5034
  const requestedSteps = setupNumber(action.steps, 8);
4957
5035
  const steps = Math.min(100, Math.max(1, Math.floor(requestedSteps || 8)));
4958
5036
  const durationMs = setupNumber(action.duration_ms ?? action.durationMs, 0);
4959
- await page.mouse.move(start.x, start.y);
4960
- await page.mouse.down();
4961
- try {
4962
- if (durationMs && steps > 1) {
4963
- for (let step = 1; step <= steps; step += 1) {
4964
- const progress = step / steps;
4965
- await page.mouse.move(
4966
- start.x + (end.x - start.x) * progress,
4967
- start.y + (end.y - start.y) * progress,
4968
- );
4969
- await page.waitForTimeout(durationMs / steps);
5037
+ const pointerType = String(action.pointer_type || action.pointerType || "mouse").trim().toLowerCase();
5038
+ if (pointerType === "touch" || pointerType === "pen") {
5039
+ const localStart = {
5040
+ x: coordinate(fromX, box.width),
5041
+ y: coordinate(fromY, box.height),
5042
+ };
5043
+ const localEnd = {
5044
+ x: coordinate(toX, box.width),
5045
+ y: coordinate(toY, box.height),
5046
+ };
5047
+ await target.evaluate(async (element, payload) => {
5048
+ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
5049
+ const rect = element.getBoundingClientRect();
5050
+ const pointerId = payload.pointerType === "touch" ? 11 : 12;
5051
+ const point = (progress) => ({
5052
+ clientX: rect.left + payload.start.x + (payload.end.x - payload.start.x) * progress,
5053
+ clientY: rect.top + payload.start.y + (payload.end.y - payload.start.y) * progress,
5054
+ });
5055
+ const dispatch = (type, progress) => {
5056
+ const coords = point(progress);
5057
+ element.dispatchEvent(new PointerEvent(type, {
5058
+ bubbles: true,
5059
+ cancelable: true,
5060
+ composed: true,
5061
+ pointerId,
5062
+ pointerType: payload.pointerType,
5063
+ isPrimary: true,
5064
+ buttons: type === "pointerup" ? 0 : 1,
5065
+ button: type === "pointerup" ? 0 : 0,
5066
+ clientX: coords.clientX,
5067
+ clientY: coords.clientY,
5068
+ }));
5069
+ };
5070
+ dispatch("pointerover", 0);
5071
+ dispatch("pointerenter", 0);
5072
+ dispatch("pointerdown", 0);
5073
+ for (let step = 1; step <= payload.steps; step += 1) {
5074
+ dispatch("pointermove", step / payload.steps);
5075
+ if (payload.durationMs && payload.steps > 1) await wait(payload.durationMs / payload.steps);
4970
5076
  }
4971
- } else {
4972
- await page.mouse.move(end.x, end.y, { steps });
5077
+ dispatch("pointerup", 1);
5078
+ dispatch("pointerout", 1);
5079
+ dispatch("pointerleave", 1);
5080
+ }, {
5081
+ pointerType,
5082
+ start: localStart,
5083
+ end: localEnd,
5084
+ steps,
5085
+ durationMs,
5086
+ });
5087
+ } else {
5088
+ await page.mouse.move(start.x, start.y);
5089
+ await page.mouse.down();
5090
+ try {
5091
+ if (durationMs && steps > 1) {
5092
+ for (let step = 1; step <= steps; step += 1) {
5093
+ const progress = step / steps;
5094
+ await page.mouse.move(
5095
+ start.x + (end.x - start.x) * progress,
5096
+ start.y + (end.y - start.y) * progress,
5097
+ );
5098
+ await page.waitForTimeout(durationMs / steps);
5099
+ }
5100
+ } else {
5101
+ await page.mouse.move(end.x, end.y, { steps });
5102
+ }
5103
+ } finally {
5104
+ await page.mouse.up().catch(() => {});
4973
5105
  }
4974
- } finally {
4975
- await page.mouse.up().catch(() => {});
4976
5106
  }
4977
5107
  return {
4978
5108
  ...base,
@@ -4985,6 +5115,7 @@ async function executeSetupAction(action, ordinal, viewport) {
4985
5115
  from_y: fromY,
4986
5116
  to_x: toX,
4987
5117
  to_y: toY,
5118
+ pointer_type: pointerType,
4988
5119
  steps,
4989
5120
  duration_ms: durationMs || undefined,
4990
5121
  };
@@ -5207,6 +5338,7 @@ async function executeSetupAction(action, ordinal, viewport) {
5207
5338
  if (!count) return { ...base, reason: "selector_not_found", count };
5208
5339
  let targetIndex = Number.isInteger(action.index) ? action.index : 0;
5209
5340
  let matchedText = null;
5341
+ let caseInsensitiveText = null;
5210
5342
  let hiddenMatchIndex = -1;
5211
5343
  let hiddenMatchedText = null;
5212
5344
  if (action.text || action.pattern) {
@@ -5224,10 +5356,12 @@ async function executeSetupAction(action, ordinal, viewport) {
5224
5356
  hiddenMatchIndex = index;
5225
5357
  hiddenMatchedText = compactSetupResultText(text);
5226
5358
  }
5359
+ } else if (!caseInsensitiveText) {
5360
+ caseInsensitiveText = setupCaseInsensitiveTextSample(text, action) || null;
5227
5361
  }
5228
5362
  }
5229
5363
  if (targetIndex < 0 && hiddenMatchIndex >= 0) return { ...base, reason: "matching_element_not_visible", count, target_index: hiddenMatchIndex, text: hiddenMatchedText };
5230
- if (targetIndex < 0) return { ...base, reason: "text_not_found", count };
5364
+ if (targetIndex < 0) return { ...base, reason: "text_not_found", count, case_insensitive_text: caseInsensitiveText || undefined };
5231
5365
  }
5232
5366
  if (targetIndex < 0 || targetIndex >= count) return { ...base, reason: "index_out_of_range", count, target_index: targetIndex };
5233
5367
  const clickOptions = action.force === true
@@ -5271,6 +5405,7 @@ async function executeSetupAction(action, ordinal, viewport) {
5271
5405
  const locator = scope.context.locator(action.selector);
5272
5406
  const startedAt = Date.now();
5273
5407
  let lastText = "";
5408
+ let caseInsensitiveText = "";
5274
5409
  while (Date.now() - startedAt <= timeout) {
5275
5410
  const count = await locator.count().catch(() => 0);
5276
5411
  for (let index = 0; index < count; index += 1) {
@@ -5279,10 +5414,11 @@ async function executeSetupAction(action, ordinal, viewport) {
5279
5414
  if (setupTextMatches(text, action)) {
5280
5415
  return { ...base, ...setupScopeEvidence(scope), ok: true, text: compactSetupResultText(text), target_index: index, timeout_ms: timeout };
5281
5416
  }
5417
+ caseInsensitiveText = caseInsensitiveText || setupCaseInsensitiveTextSample(text, action);
5282
5418
  }
5283
5419
  await page.waitForTimeout(100);
5284
5420
  }
5285
- return { ...base, ...setupScopeEvidence(scope), reason: "text_not_found", text: compactSetupResultText(lastText), timeout_ms: timeout };
5421
+ return { ...base, ...setupScopeEvidence(scope), reason: "text_not_found", text: compactSetupResultText(lastText), case_insensitive_text: caseInsensitiveText || undefined, timeout_ms: timeout };
5286
5422
  }
5287
5423
  if (type === "assert_text_visible" || type === "assert_text_absent") {
5288
5424
  const scope = await setupActionScope(action, timeout);
@@ -5291,6 +5427,7 @@ async function executeSetupAction(action, ordinal, viewport) {
5291
5427
  const startedAt = Date.now();
5292
5428
  let lastText = "";
5293
5429
  let matchedText = "";
5430
+ let caseInsensitiveText = "";
5294
5431
  let hiddenMatch = false;
5295
5432
  while (Date.now() - startedAt <= timeout) {
5296
5433
  const count = await locator.count().catch(() => 0);
@@ -5313,6 +5450,7 @@ async function executeSetupAction(action, ordinal, viewport) {
5313
5450
  }
5314
5451
  break;
5315
5452
  }
5453
+ caseInsensitiveText = caseInsensitiveText || setupCaseInsensitiveTextSample(text, action);
5316
5454
  }
5317
5455
  if (type === "assert_text_absent" && !matched) {
5318
5456
  return { ...base, ...setupScopeEvidence(scope), ok: true, count, timeout_ms: timeout };
@@ -5323,7 +5461,7 @@ async function executeSetupAction(action, ordinal, viewport) {
5323
5461
  if (hiddenMatch) {
5324
5462
  return { ...base, ...setupScopeEvidence(scope), reason: "matching_element_not_visible", text: compactSetupResultText(matchedText), timeout_ms: timeout };
5325
5463
  }
5326
- return { ...base, ...setupScopeEvidence(scope), reason: "text_not_found", text: compactSetupResultText(lastText), timeout_ms: timeout };
5464
+ return { ...base, ...setupScopeEvidence(scope), reason: "text_not_found", text: compactSetupResultText(lastText), case_insensitive_text: caseInsensitiveText || undefined, timeout_ms: timeout };
5327
5465
  }
5328
5466
  return { ...base, ...setupScopeEvidence(scope), reason: "text_still_present", text: compactSetupResultText(matchedText || lastText), timeout_ms: timeout };
5329
5467
  }
@@ -6431,6 +6569,7 @@ async function captureViewport(viewport) {
6431
6569
  const text_sequences = {};
6432
6570
  const text_matches = {};
6433
6571
  const text_match_samples = {};
6572
+ const text_case_insensitive_samples = {};
6434
6573
  const http_statuses = {};
6435
6574
  const link_statuses = {};
6436
6575
  for (const check of profile.checks || []) {
@@ -6456,6 +6595,7 @@ async function captureViewport(viewport) {
6456
6595
  const sample = dom.body_text || dom.body_text_sample || "";
6457
6596
  text_matches[key] = textMatches(sample, check);
6458
6597
  text_match_samples[key] = textMatchSamples(sample, check);
6598
+ text_case_insensitive_samples[key] = textCaseInsensitiveSamples(sample, check);
6459
6599
  }
6460
6600
  if ((check.type === "frame_text_visible" || check.type === "frame_url_equals" || check.type === "frame_url_matches" || check.type === "frame_no_horizontal_overflow") && check.selector) {
6461
6601
  selectors[check.selector] = selectors[check.selector] || await selectorStats(check.selector);
@@ -6533,6 +6673,7 @@ async function captureViewport(viewport) {
6533
6673
  text_sequences,
6534
6674
  text_matches,
6535
6675
  text_match_samples,
6676
+ text_case_insensitive_samples,
6536
6677
  http_statuses,
6537
6678
  link_statuses,
6538
6679
  route_inventory: routeInventory,
@@ -115,6 +115,7 @@ interface RiddleProofProfileSetupAction {
115
115
  force?: boolean;
116
116
  click_count?: number;
117
117
  coordinate_mode?: "pixels" | "ratio";
118
+ pointer_type?: "mouse" | "touch" | "pen";
118
119
  from_x?: number;
119
120
  from_y?: number;
120
121
  to_x?: number;
@@ -308,6 +309,7 @@ interface RiddleProofProfileViewportEvidence {
308
309
  text_sequences?: Record<string, Record<string, JsonValue>>;
309
310
  text_matches?: Record<string, boolean>;
310
311
  text_match_samples?: Record<string, string[]>;
312
+ text_case_insensitive_samples?: Record<string, string[]>;
311
313
  http_statuses?: Record<string, Record<string, JsonValue>>;
312
314
  link_statuses?: Record<string, Record<string, JsonValue>>;
313
315
  route_inventory?: Record<string, JsonValue>;
package/dist/profile.d.ts CHANGED
@@ -115,6 +115,7 @@ interface RiddleProofProfileSetupAction {
115
115
  force?: boolean;
116
116
  click_count?: number;
117
117
  coordinate_mode?: "pixels" | "ratio";
118
+ pointer_type?: "mouse" | "touch" | "pen";
118
119
  from_x?: number;
119
120
  from_y?: number;
120
121
  to_x?: number;
@@ -308,6 +309,7 @@ interface RiddleProofProfileViewportEvidence {
308
309
  text_sequences?: Record<string, Record<string, JsonValue>>;
309
310
  text_matches?: Record<string, boolean>;
310
311
  text_match_samples?: Record<string, string[]>;
312
+ text_case_insensitive_samples?: Record<string, string[]>;
311
313
  http_statuses?: Record<string, Record<string, JsonValue>>;
312
314
  link_statuses?: Record<string, Record<string, JsonValue>>;
313
315
  route_inventory?: Record<string, JsonValue>;
package/dist/profile.js CHANGED
@@ -23,7 +23,7 @@ import {
23
23
  resolveRiddleProofProfileTimeoutSec,
24
24
  slugifyRiddleProofProfileName,
25
25
  summarizeRiddleProofProfileResult
26
- } from "./chunk-TDK6WFH3.js";
26
+ } from "./chunk-ZYD2SGEM.js";
27
27
  export {
28
28
  RIDDLE_PROOF_PROFILE_CHECK_TYPES,
29
29
  RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION,
@@ -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: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "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: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "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" | "run";
662
+ action: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "run";
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: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "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: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "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" | "run";
662
+ action: "recon" | "author" | "ship" | "implement" | "verify" | "setup" | "run";
663
663
  state_path: string;
664
664
  stage: any;
665
665
  summary: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riddledc/riddle-proof",
3
- "version": "0.7.129",
3
+ "version": "0.7.131",
4
4
  "description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",