@riddledc/riddle-proof 0.7.84 → 0.7.86

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.
@@ -233,7 +233,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
233
233
  viewports: viewports.map((viewport) => {
234
234
  const expectedActionCount = expectedActionCountByViewport?.get(viewport.name) ?? actionCount;
235
235
  const results = viewport.setup_action_results || [];
236
- const failed = results.filter((result) => result.ok === false);
236
+ const failed = results.filter((result) => result.ok === false && result.optional !== true);
237
+ const optionalFailed = results.filter((result) => result.ok === false && result.optional === true);
237
238
  const successfulClicks = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false);
238
239
  const clickCountValues = successfulClicks.map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : void 0).filter((value) => value !== void 0);
239
240
  const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => {
@@ -276,6 +277,13 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
276
277
  selector: result.selector ?? null,
277
278
  frame_selector: result.frame_selector ?? null,
278
279
  reason: result.reason ?? result.error ?? null
280
+ })),
281
+ optional_failed: optionalFailed.map((result) => ({
282
+ ordinal: result.ordinal ?? null,
283
+ action: profileSetupResultAction(result),
284
+ selector: result.selector ?? null,
285
+ frame_selector: result.frame_selector ?? null,
286
+ reason: result.reason ?? result.error ?? null
279
287
  }))
280
288
  };
281
289
  })
@@ -494,6 +502,7 @@ function normalizeSetupAction(input, index) {
494
502
  reload: input.reload === true,
495
503
  storage: normalizeSetupActionStorage(input.storage, index),
496
504
  viewports: normalizeStringList(input.viewports ?? input.viewport_names ?? input.viewportNames, `target.setup_actions[${index}] viewports`),
505
+ optional: input.optional === true || input.required === false,
497
506
  continue_on_failure: input.continue_on_failure === true || input.continueOnFailure === true
498
507
  };
499
508
  }
@@ -1470,7 +1479,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
1470
1479
  expectedActionCountByViewport.set(viewport.name, expectedActionCount);
1471
1480
  const results = viewport.setup_action_results || [];
1472
1481
  for (const result of results) {
1473
- if (result.ok === false) {
1482
+ if (result.ok === false && result.optional !== true) {
1474
1483
  failed.push({
1475
1484
  viewport: viewport.name,
1476
1485
  action: result.action ?? result.type ?? null,
@@ -1481,7 +1490,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
1481
1490
  });
1482
1491
  }
1483
1492
  }
1484
- if (results.length < expectedActionCount && results.every((result) => result.ok !== false)) {
1493
+ if (results.length < expectedActionCount && results.every((result) => result.ok !== false || result.optional === true)) {
1485
1494
  failed.push({
1486
1495
  viewport: viewport.name,
1487
1496
  action: "setup_actions",
@@ -1499,7 +1508,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
1499
1508
  viewports: viewports.map((viewport) => ({
1500
1509
  name: viewport.name,
1501
1510
  expected_action_count: expectedActionCountByViewport.get(viewport.name) ?? actionCount,
1502
- ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false),
1511
+ ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false || result.optional === true),
1503
1512
  result_count: (viewport.setup_action_results || []).length
1504
1513
  })),
1505
1514
  setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport),
@@ -2052,7 +2061,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
2052
2061
  ? expectedActionCountsByViewport[viewport.name]
2053
2062
  : actionCount;
2054
2063
  const results = viewport.setup_action_results || [];
2055
- const failed = results.filter((result) => result && result.ok === false);
2064
+ const failed = results.filter((result) => result && result.ok === false && result.optional !== true);
2065
+ const optionalFailed = results.filter((result) => result && result.ok === false && result.optional === true);
2056
2066
  const successfulClicks = results.filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false);
2057
2067
  const clickCountValues = successfulClicks
2058
2068
  .map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined)
@@ -2108,6 +2118,13 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
2108
2118
  frame_selector: result.frame_selector ?? null,
2109
2119
  reason: result.reason || result.error || null,
2110
2120
  })),
2121
+ optional_failed: optionalFailed.map((result) => ({
2122
+ ordinal: result.ordinal ?? null,
2123
+ action: profileSetupResultAction(result),
2124
+ selector: result.selector ?? null,
2125
+ frame_selector: result.frame_selector ?? null,
2126
+ reason: result.reason || result.error || null,
2127
+ })),
2111
2128
  };
2112
2129
  }),
2113
2130
  };
@@ -2227,7 +2244,7 @@ function assessProfile(profile, evidence) {
2227
2244
  expectedActionCountsByViewport[viewport.name] = expectedActionCount;
2228
2245
  const results = viewport.setup_action_results || [];
2229
2246
  for (const result of results) {
2230
- if (result && result.ok === false) {
2247
+ if (result && result.ok === false && result.optional !== true) {
2231
2248
  failed.push({
2232
2249
  viewport: viewport.name,
2233
2250
  action: result.action || result.type || null,
@@ -2238,7 +2255,7 @@ function assessProfile(profile, evidence) {
2238
2255
  });
2239
2256
  }
2240
2257
  }
2241
- if (results.length < expectedActionCount && results.every((result) => !result || result.ok !== false)) {
2258
+ if (results.length < expectedActionCount && results.every((result) => !result || result.ok !== false || result.optional === true)) {
2242
2259
  failed.push({
2243
2260
  viewport: viewport.name,
2244
2261
  action: "setup_actions",
@@ -2257,7 +2274,7 @@ function assessProfile(profile, evidence) {
2257
2274
  name: viewport.name,
2258
2275
  expected_action_count: expectedActionCountsByViewport[viewport.name] ?? actionCount,
2259
2276
  ok: (viewport.setup_action_results || []).length >= (expectedActionCountsByViewport[viewport.name] ?? actionCount)
2260
- && (viewport.setup_action_results || []).every((result) => !result || result.ok !== false),
2277
+ && (viewport.setup_action_results || []).every((result) => !result || result.ok !== false || result.optional === true),
2261
2278
  result_count: (viewport.setup_action_results || []).length,
2262
2279
  })),
2263
2280
  setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport),
@@ -3054,7 +3071,7 @@ async function registerNetworkMocks(mocks) {
3054
3071
  async function executeSetupAction(action, ordinal, viewport) {
3055
3072
  const type = setupActionType(action);
3056
3073
  const frameSelector = setupFrameSelector(action);
3057
- const base = { ok: false, action: type || "unknown", ordinal, selector: action.selector || null, frame_selector: frameSelector || null };
3074
+ const base = { ok: false, action: type || "unknown", ordinal, selector: action.selector || null, frame_selector: frameSelector || null, optional: action.optional === true };
3058
3075
  const timeout = setupNumber(action.timeout_ms, 5000);
3059
3076
  try {
3060
3077
  if (type === "wait") {
@@ -3528,7 +3545,7 @@ async function executeSetupActions(actions, viewport) {
3528
3545
  : result);
3529
3546
  const afterMs = setupNumber(action.after_ms, 0);
3530
3547
  if (afterMs) await page.waitForTimeout(afterMs);
3531
- if (result.ok === false && action.continue_on_failure !== true) {
3548
+ if (result.ok === false && action.continue_on_failure !== true && action.optional !== true) {
3532
3549
  shouldStop = true;
3533
3550
  break;
3534
3551
  }
package/dist/cli.cjs CHANGED
@@ -7120,7 +7120,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
7120
7120
  viewports: viewports.map((viewport) => {
7121
7121
  const expectedActionCount = expectedActionCountByViewport?.get(viewport.name) ?? actionCount;
7122
7122
  const results = viewport.setup_action_results || [];
7123
- const failed = results.filter((result) => result.ok === false);
7123
+ const failed = results.filter((result) => result.ok === false && result.optional !== true);
7124
+ const optionalFailed = results.filter((result) => result.ok === false && result.optional === true);
7124
7125
  const successfulClicks = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false);
7125
7126
  const clickCountValues = successfulClicks.map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : void 0).filter((value) => value !== void 0);
7126
7127
  const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => {
@@ -7163,6 +7164,13 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
7163
7164
  selector: result.selector ?? null,
7164
7165
  frame_selector: result.frame_selector ?? null,
7165
7166
  reason: result.reason ?? result.error ?? null
7167
+ })),
7168
+ optional_failed: optionalFailed.map((result) => ({
7169
+ ordinal: result.ordinal ?? null,
7170
+ action: profileSetupResultAction(result),
7171
+ selector: result.selector ?? null,
7172
+ frame_selector: result.frame_selector ?? null,
7173
+ reason: result.reason ?? result.error ?? null
7166
7174
  }))
7167
7175
  };
7168
7176
  })
@@ -7381,6 +7389,7 @@ function normalizeSetupAction(input, index) {
7381
7389
  reload: input.reload === true,
7382
7390
  storage: normalizeSetupActionStorage(input.storage, index),
7383
7391
  viewports: normalizeStringList(input.viewports ?? input.viewport_names ?? input.viewportNames, `target.setup_actions[${index}] viewports`),
7392
+ optional: input.optional === true || input.required === false,
7384
7393
  continue_on_failure: input.continue_on_failure === true || input.continueOnFailure === true
7385
7394
  };
7386
7395
  }
@@ -8357,7 +8366,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
8357
8366
  expectedActionCountByViewport.set(viewport.name, expectedActionCount);
8358
8367
  const results = viewport.setup_action_results || [];
8359
8368
  for (const result of results) {
8360
- if (result.ok === false) {
8369
+ if (result.ok === false && result.optional !== true) {
8361
8370
  failed.push({
8362
8371
  viewport: viewport.name,
8363
8372
  action: result.action ?? result.type ?? null,
@@ -8368,7 +8377,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
8368
8377
  });
8369
8378
  }
8370
8379
  }
8371
- if (results.length < expectedActionCount && results.every((result) => result.ok !== false)) {
8380
+ if (results.length < expectedActionCount && results.every((result) => result.ok !== false || result.optional === true)) {
8372
8381
  failed.push({
8373
8382
  viewport: viewport.name,
8374
8383
  action: "setup_actions",
@@ -8386,7 +8395,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
8386
8395
  viewports: viewports.map((viewport) => ({
8387
8396
  name: viewport.name,
8388
8397
  expected_action_count: expectedActionCountByViewport.get(viewport.name) ?? actionCount,
8389
- ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false),
8398
+ ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false || result.optional === true),
8390
8399
  result_count: (viewport.setup_action_results || []).length
8391
8400
  })),
8392
8401
  setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport),
@@ -8923,7 +8932,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
8923
8932
  ? expectedActionCountsByViewport[viewport.name]
8924
8933
  : actionCount;
8925
8934
  const results = viewport.setup_action_results || [];
8926
- const failed = results.filter((result) => result && result.ok === false);
8935
+ const failed = results.filter((result) => result && result.ok === false && result.optional !== true);
8936
+ const optionalFailed = results.filter((result) => result && result.ok === false && result.optional === true);
8927
8937
  const successfulClicks = results.filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false);
8928
8938
  const clickCountValues = successfulClicks
8929
8939
  .map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined)
@@ -8979,6 +8989,13 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
8979
8989
  frame_selector: result.frame_selector ?? null,
8980
8990
  reason: result.reason || result.error || null,
8981
8991
  })),
8992
+ optional_failed: optionalFailed.map((result) => ({
8993
+ ordinal: result.ordinal ?? null,
8994
+ action: profileSetupResultAction(result),
8995
+ selector: result.selector ?? null,
8996
+ frame_selector: result.frame_selector ?? null,
8997
+ reason: result.reason || result.error || null,
8998
+ })),
8982
8999
  };
8983
9000
  }),
8984
9001
  };
@@ -9098,7 +9115,7 @@ function assessProfile(profile, evidence) {
9098
9115
  expectedActionCountsByViewport[viewport.name] = expectedActionCount;
9099
9116
  const results = viewport.setup_action_results || [];
9100
9117
  for (const result of results) {
9101
- if (result && result.ok === false) {
9118
+ if (result && result.ok === false && result.optional !== true) {
9102
9119
  failed.push({
9103
9120
  viewport: viewport.name,
9104
9121
  action: result.action || result.type || null,
@@ -9109,7 +9126,7 @@ function assessProfile(profile, evidence) {
9109
9126
  });
9110
9127
  }
9111
9128
  }
9112
- if (results.length < expectedActionCount && results.every((result) => !result || result.ok !== false)) {
9129
+ if (results.length < expectedActionCount && results.every((result) => !result || result.ok !== false || result.optional === true)) {
9113
9130
  failed.push({
9114
9131
  viewport: viewport.name,
9115
9132
  action: "setup_actions",
@@ -9128,7 +9145,7 @@ function assessProfile(profile, evidence) {
9128
9145
  name: viewport.name,
9129
9146
  expected_action_count: expectedActionCountsByViewport[viewport.name] ?? actionCount,
9130
9147
  ok: (viewport.setup_action_results || []).length >= (expectedActionCountsByViewport[viewport.name] ?? actionCount)
9131
- && (viewport.setup_action_results || []).every((result) => !result || result.ok !== false),
9148
+ && (viewport.setup_action_results || []).every((result) => !result || result.ok !== false || result.optional === true),
9132
9149
  result_count: (viewport.setup_action_results || []).length,
9133
9150
  })),
9134
9151
  setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport),
@@ -9925,7 +9942,7 @@ async function registerNetworkMocks(mocks) {
9925
9942
  async function executeSetupAction(action, ordinal, viewport) {
9926
9943
  const type = setupActionType(action);
9927
9944
  const frameSelector = setupFrameSelector(action);
9928
- const base = { ok: false, action: type || "unknown", ordinal, selector: action.selector || null, frame_selector: frameSelector || null };
9945
+ const base = { ok: false, action: type || "unknown", ordinal, selector: action.selector || null, frame_selector: frameSelector || null, optional: action.optional === true };
9929
9946
  const timeout = setupNumber(action.timeout_ms, 5000);
9930
9947
  try {
9931
9948
  if (type === "wait") {
@@ -10399,7 +10416,7 @@ async function executeSetupActions(actions, viewport) {
10399
10416
  : result);
10400
10417
  const afterMs = setupNumber(action.after_ms, 0);
10401
10418
  if (afterMs) await page.waitForTimeout(afterMs);
10402
- if (result.ok === false && action.continue_on_failure !== true) {
10419
+ if (result.ok === false && action.continue_on_failure !== true && action.optional !== true) {
10403
10420
  shouldStop = true;
10404
10421
  break;
10405
10422
  }
@@ -11239,7 +11256,7 @@ function usage() {
11239
11256
  " riddle-proof-loop respond --state-path <path> --response-json <file|json|->",
11240
11257
  " riddle-proof-loop respond --state-path <path> --decision <decision> --summary <text> [--payload-json <file|json|->]",
11241
11258
  " riddle-proof-loop status --state-path <path>",
11242
- " riddle-proof-loop run-profile --profile <file|json|-> --url <base-url> [--runner riddle] [--strict true|false] [--poll-attempts n] [--output <dir>] [--quiet]",
11259
+ " riddle-proof-loop run-profile --profile <file|json|-> --url <base-url> [--runner riddle] [--strict true|false] [--poll-attempts n] [--output <dir>|--output-dir <dir>] [--quiet]",
11243
11260
  " riddle-proof-loop riddle-preview-deploy <build-dir> <label>",
11244
11261
  " riddle-proof-loop riddle-server-preview <directory> --script-file <file> [--path /route] [--wait-for-selector selector]",
11245
11262
  " riddle-proof-loop riddle-run-script --url <url> --script-file <file> [--viewport 1280x720] [--strict true|false]",
@@ -11301,6 +11318,9 @@ function optionNumber(options, ...keys) {
11301
11318
  }
11302
11319
  return void 0;
11303
11320
  }
11321
+ function profileOutputDirOption(options) {
11322
+ return optionString(options, "output") ?? optionString(options, "outputDir");
11323
+ }
11304
11324
  function readStdin() {
11305
11325
  return (0, import_node_fs6.readFileSync)(0, "utf-8");
11306
11326
  }
@@ -11918,7 +11938,7 @@ async function main() {
11918
11938
  if (command === "run-profile") {
11919
11939
  const profile = normalizeProfileForCli(options);
11920
11940
  const result = await runProfileForCli(profile, options);
11921
- writeProfileOutput(optionString(options, "output"), result);
11941
+ writeProfileOutput(profileOutputDirOption(options), result);
11922
11942
  process.stdout.write(`${JSON.stringify(result, null, 2)}
11923
11943
  `);
11924
11944
  process.exitCode = profileStatusExitCode(profile, result.status);
package/dist/cli.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  profileStatusExitCode,
11
11
  resolveRiddleProofProfileTargetUrl,
12
12
  resolveRiddleProofProfileTimeoutSec
13
- } from "./chunk-QC42KDBD.js";
13
+ } from "./chunk-3Y35UIZO.js";
14
14
  import {
15
15
  createRiddleApiClient,
16
16
  parseRiddleViewport
@@ -44,7 +44,7 @@ function usage() {
44
44
  " riddle-proof-loop respond --state-path <path> --response-json <file|json|->",
45
45
  " riddle-proof-loop respond --state-path <path> --decision <decision> --summary <text> [--payload-json <file|json|->]",
46
46
  " riddle-proof-loop status --state-path <path>",
47
- " riddle-proof-loop run-profile --profile <file|json|-> --url <base-url> [--runner riddle] [--strict true|false] [--poll-attempts n] [--output <dir>] [--quiet]",
47
+ " riddle-proof-loop run-profile --profile <file|json|-> --url <base-url> [--runner riddle] [--strict true|false] [--poll-attempts n] [--output <dir>|--output-dir <dir>] [--quiet]",
48
48
  " riddle-proof-loop riddle-preview-deploy <build-dir> <label>",
49
49
  " riddle-proof-loop riddle-server-preview <directory> --script-file <file> [--path /route] [--wait-for-selector selector]",
50
50
  " riddle-proof-loop riddle-run-script --url <url> --script-file <file> [--viewport 1280x720] [--strict true|false]",
@@ -106,6 +106,9 @@ function optionNumber(options, ...keys) {
106
106
  }
107
107
  return void 0;
108
108
  }
109
+ function profileOutputDirOption(options) {
110
+ return optionString(options, "output") ?? optionString(options, "outputDir");
111
+ }
109
112
  function readStdin() {
110
113
  return readFileSync(0, "utf-8");
111
114
  }
@@ -723,7 +726,7 @@ async function main() {
723
726
  if (command === "run-profile") {
724
727
  const profile = normalizeProfileForCli(options);
725
728
  const result = await runProfileForCli(profile, options);
726
- writeProfileOutput(optionString(options, "output"), result);
729
+ writeProfileOutput(profileOutputDirOption(options), result);
727
730
  process.stdout.write(`${JSON.stringify(result, null, 2)}
728
731
  `);
729
732
  process.exitCode = profileStatusExitCode(profile, result.status);
package/dist/index.cjs CHANGED
@@ -8961,7 +8961,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
8961
8961
  viewports: viewports.map((viewport) => {
8962
8962
  const expectedActionCount = expectedActionCountByViewport?.get(viewport.name) ?? actionCount;
8963
8963
  const results = viewport.setup_action_results || [];
8964
- const failed = results.filter((result) => result.ok === false);
8964
+ const failed = results.filter((result) => result.ok === false && result.optional !== true);
8965
+ const optionalFailed = results.filter((result) => result.ok === false && result.optional === true);
8965
8966
  const successfulClicks = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false);
8966
8967
  const clickCountValues = successfulClicks.map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : void 0).filter((value) => value !== void 0);
8967
8968
  const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => {
@@ -9004,6 +9005,13 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
9004
9005
  selector: result.selector ?? null,
9005
9006
  frame_selector: result.frame_selector ?? null,
9006
9007
  reason: result.reason ?? result.error ?? null
9008
+ })),
9009
+ optional_failed: optionalFailed.map((result) => ({
9010
+ ordinal: result.ordinal ?? null,
9011
+ action: profileSetupResultAction(result),
9012
+ selector: result.selector ?? null,
9013
+ frame_selector: result.frame_selector ?? null,
9014
+ reason: result.reason ?? result.error ?? null
9007
9015
  }))
9008
9016
  };
9009
9017
  })
@@ -9222,6 +9230,7 @@ function normalizeSetupAction(input, index) {
9222
9230
  reload: input.reload === true,
9223
9231
  storage: normalizeSetupActionStorage(input.storage, index),
9224
9232
  viewports: normalizeStringList(input.viewports ?? input.viewport_names ?? input.viewportNames, `target.setup_actions[${index}] viewports`),
9233
+ optional: input.optional === true || input.required === false,
9225
9234
  continue_on_failure: input.continue_on_failure === true || input.continueOnFailure === true
9226
9235
  };
9227
9236
  }
@@ -10198,7 +10207,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
10198
10207
  expectedActionCountByViewport.set(viewport.name, expectedActionCount);
10199
10208
  const results = viewport.setup_action_results || [];
10200
10209
  for (const result of results) {
10201
- if (result.ok === false) {
10210
+ if (result.ok === false && result.optional !== true) {
10202
10211
  failed.push({
10203
10212
  viewport: viewport.name,
10204
10213
  action: result.action ?? result.type ?? null,
@@ -10209,7 +10218,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
10209
10218
  });
10210
10219
  }
10211
10220
  }
10212
- if (results.length < expectedActionCount && results.every((result) => result.ok !== false)) {
10221
+ if (results.length < expectedActionCount && results.every((result) => result.ok !== false || result.optional === true)) {
10213
10222
  failed.push({
10214
10223
  viewport: viewport.name,
10215
10224
  action: "setup_actions",
@@ -10227,7 +10236,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
10227
10236
  viewports: viewports.map((viewport) => ({
10228
10237
  name: viewport.name,
10229
10238
  expected_action_count: expectedActionCountByViewport.get(viewport.name) ?? actionCount,
10230
- ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false),
10239
+ ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false || result.optional === true),
10231
10240
  result_count: (viewport.setup_action_results || []).length
10232
10241
  })),
10233
10242
  setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport),
@@ -10780,7 +10789,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
10780
10789
  ? expectedActionCountsByViewport[viewport.name]
10781
10790
  : actionCount;
10782
10791
  const results = viewport.setup_action_results || [];
10783
- const failed = results.filter((result) => result && result.ok === false);
10792
+ const failed = results.filter((result) => result && result.ok === false && result.optional !== true);
10793
+ const optionalFailed = results.filter((result) => result && result.ok === false && result.optional === true);
10784
10794
  const successfulClicks = results.filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false);
10785
10795
  const clickCountValues = successfulClicks
10786
10796
  .map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined)
@@ -10836,6 +10846,13 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
10836
10846
  frame_selector: result.frame_selector ?? null,
10837
10847
  reason: result.reason || result.error || null,
10838
10848
  })),
10849
+ optional_failed: optionalFailed.map((result) => ({
10850
+ ordinal: result.ordinal ?? null,
10851
+ action: profileSetupResultAction(result),
10852
+ selector: result.selector ?? null,
10853
+ frame_selector: result.frame_selector ?? null,
10854
+ reason: result.reason || result.error || null,
10855
+ })),
10839
10856
  };
10840
10857
  }),
10841
10858
  };
@@ -10955,7 +10972,7 @@ function assessProfile(profile, evidence) {
10955
10972
  expectedActionCountsByViewport[viewport.name] = expectedActionCount;
10956
10973
  const results = viewport.setup_action_results || [];
10957
10974
  for (const result of results) {
10958
- if (result && result.ok === false) {
10975
+ if (result && result.ok === false && result.optional !== true) {
10959
10976
  failed.push({
10960
10977
  viewport: viewport.name,
10961
10978
  action: result.action || result.type || null,
@@ -10966,7 +10983,7 @@ function assessProfile(profile, evidence) {
10966
10983
  });
10967
10984
  }
10968
10985
  }
10969
- if (results.length < expectedActionCount && results.every((result) => !result || result.ok !== false)) {
10986
+ if (results.length < expectedActionCount && results.every((result) => !result || result.ok !== false || result.optional === true)) {
10970
10987
  failed.push({
10971
10988
  viewport: viewport.name,
10972
10989
  action: "setup_actions",
@@ -10985,7 +11002,7 @@ function assessProfile(profile, evidence) {
10985
11002
  name: viewport.name,
10986
11003
  expected_action_count: expectedActionCountsByViewport[viewport.name] ?? actionCount,
10987
11004
  ok: (viewport.setup_action_results || []).length >= (expectedActionCountsByViewport[viewport.name] ?? actionCount)
10988
- && (viewport.setup_action_results || []).every((result) => !result || result.ok !== false),
11005
+ && (viewport.setup_action_results || []).every((result) => !result || result.ok !== false || result.optional === true),
10989
11006
  result_count: (viewport.setup_action_results || []).length,
10990
11007
  })),
10991
11008
  setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport),
@@ -11782,7 +11799,7 @@ async function registerNetworkMocks(mocks) {
11782
11799
  async function executeSetupAction(action, ordinal, viewport) {
11783
11800
  const type = setupActionType(action);
11784
11801
  const frameSelector = setupFrameSelector(action);
11785
- const base = { ok: false, action: type || "unknown", ordinal, selector: action.selector || null, frame_selector: frameSelector || null };
11802
+ const base = { ok: false, action: type || "unknown", ordinal, selector: action.selector || null, frame_selector: frameSelector || null, optional: action.optional === true };
11786
11803
  const timeout = setupNumber(action.timeout_ms, 5000);
11787
11804
  try {
11788
11805
  if (type === "wait") {
@@ -12256,7 +12273,7 @@ async function executeSetupActions(actions, viewport) {
12256
12273
  : result);
12257
12274
  const afterMs = setupNumber(action.after_ms, 0);
12258
12275
  if (afterMs) await page.waitForTimeout(afterMs);
12259
- if (result.ok === false && action.continue_on_failure !== true) {
12276
+ if (result.ok === false && action.continue_on_failure !== true && action.optional !== true) {
12260
12277
  shouldStop = true;
12261
12278
  break;
12262
12279
  }
package/dist/index.js CHANGED
@@ -58,7 +58,7 @@ import {
58
58
  resolveRiddleProofProfileTimeoutSec,
59
59
  slugifyRiddleProofProfileName,
60
60
  summarizeRiddleProofProfileResult
61
- } from "./chunk-QC42KDBD.js";
61
+ } from "./chunk-3Y35UIZO.js";
62
62
  import {
63
63
  DEFAULT_RIDDLE_API_BASE_URL,
64
64
  DEFAULT_RIDDLE_API_KEY_FILE,
package/dist/profile.cjs CHANGED
@@ -276,7 +276,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
276
276
  viewports: viewports.map((viewport) => {
277
277
  const expectedActionCount = expectedActionCountByViewport?.get(viewport.name) ?? actionCount;
278
278
  const results = viewport.setup_action_results || [];
279
- const failed = results.filter((result) => result.ok === false);
279
+ const failed = results.filter((result) => result.ok === false && result.optional !== true);
280
+ const optionalFailed = results.filter((result) => result.ok === false && result.optional === true);
280
281
  const successfulClicks = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false);
281
282
  const clickCountValues = successfulClicks.map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : void 0).filter((value) => value !== void 0);
282
283
  const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => {
@@ -319,6 +320,13 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountByViewpo
319
320
  selector: result.selector ?? null,
320
321
  frame_selector: result.frame_selector ?? null,
321
322
  reason: result.reason ?? result.error ?? null
323
+ })),
324
+ optional_failed: optionalFailed.map((result) => ({
325
+ ordinal: result.ordinal ?? null,
326
+ action: profileSetupResultAction(result),
327
+ selector: result.selector ?? null,
328
+ frame_selector: result.frame_selector ?? null,
329
+ reason: result.reason ?? result.error ?? null
322
330
  }))
323
331
  };
324
332
  })
@@ -537,6 +545,7 @@ function normalizeSetupAction(input, index) {
537
545
  reload: input.reload === true,
538
546
  storage: normalizeSetupActionStorage(input.storage, index),
539
547
  viewports: normalizeStringList(input.viewports ?? input.viewport_names ?? input.viewportNames, `target.setup_actions[${index}] viewports`),
548
+ optional: input.optional === true || input.required === false,
540
549
  continue_on_failure: input.continue_on_failure === true || input.continueOnFailure === true
541
550
  };
542
551
  }
@@ -1513,7 +1522,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
1513
1522
  expectedActionCountByViewport.set(viewport.name, expectedActionCount);
1514
1523
  const results = viewport.setup_action_results || [];
1515
1524
  for (const result of results) {
1516
- if (result.ok === false) {
1525
+ if (result.ok === false && result.optional !== true) {
1517
1526
  failed.push({
1518
1527
  viewport: viewport.name,
1519
1528
  action: result.action ?? result.type ?? null,
@@ -1524,7 +1533,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
1524
1533
  });
1525
1534
  }
1526
1535
  }
1527
- if (results.length < expectedActionCount && results.every((result) => result.ok !== false)) {
1536
+ if (results.length < expectedActionCount && results.every((result) => result.ok !== false || result.optional === true)) {
1528
1537
  failed.push({
1529
1538
  viewport: viewport.name,
1530
1539
  action: "setup_actions",
@@ -1542,7 +1551,7 @@ function assessSetupActionsFromEvidence(profile, evidence) {
1542
1551
  viewports: viewports.map((viewport) => ({
1543
1552
  name: viewport.name,
1544
1553
  expected_action_count: expectedActionCountByViewport.get(viewport.name) ?? actionCount,
1545
- ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false),
1554
+ ok: (viewport.setup_action_results || []).length >= (expectedActionCountByViewport.get(viewport.name) ?? actionCount) && (viewport.setup_action_results || []).every((result) => result.ok !== false || result.optional === true),
1546
1555
  result_count: (viewport.setup_action_results || []).length
1547
1556
  })),
1548
1557
  setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountByViewport),
@@ -2095,7 +2104,8 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
2095
2104
  ? expectedActionCountsByViewport[viewport.name]
2096
2105
  : actionCount;
2097
2106
  const results = viewport.setup_action_results || [];
2098
- const failed = results.filter((result) => result && result.ok === false);
2107
+ const failed = results.filter((result) => result && result.ok === false && result.optional !== true);
2108
+ const optionalFailed = results.filter((result) => result && result.ok === false && result.optional === true);
2099
2109
  const successfulClicks = results.filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false);
2100
2110
  const clickCountValues = successfulClicks
2101
2111
  .map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined)
@@ -2151,6 +2161,13 @@ function profileSetupSummary(viewports, actionCount, expectedActionCountsByViewp
2151
2161
  frame_selector: result.frame_selector ?? null,
2152
2162
  reason: result.reason || result.error || null,
2153
2163
  })),
2164
+ optional_failed: optionalFailed.map((result) => ({
2165
+ ordinal: result.ordinal ?? null,
2166
+ action: profileSetupResultAction(result),
2167
+ selector: result.selector ?? null,
2168
+ frame_selector: result.frame_selector ?? null,
2169
+ reason: result.reason || result.error || null,
2170
+ })),
2154
2171
  };
2155
2172
  }),
2156
2173
  };
@@ -2270,7 +2287,7 @@ function assessProfile(profile, evidence) {
2270
2287
  expectedActionCountsByViewport[viewport.name] = expectedActionCount;
2271
2288
  const results = viewport.setup_action_results || [];
2272
2289
  for (const result of results) {
2273
- if (result && result.ok === false) {
2290
+ if (result && result.ok === false && result.optional !== true) {
2274
2291
  failed.push({
2275
2292
  viewport: viewport.name,
2276
2293
  action: result.action || result.type || null,
@@ -2281,7 +2298,7 @@ function assessProfile(profile, evidence) {
2281
2298
  });
2282
2299
  }
2283
2300
  }
2284
- if (results.length < expectedActionCount && results.every((result) => !result || result.ok !== false)) {
2301
+ if (results.length < expectedActionCount && results.every((result) => !result || result.ok !== false || result.optional === true)) {
2285
2302
  failed.push({
2286
2303
  viewport: viewport.name,
2287
2304
  action: "setup_actions",
@@ -2300,7 +2317,7 @@ function assessProfile(profile, evidence) {
2300
2317
  name: viewport.name,
2301
2318
  expected_action_count: expectedActionCountsByViewport[viewport.name] ?? actionCount,
2302
2319
  ok: (viewport.setup_action_results || []).length >= (expectedActionCountsByViewport[viewport.name] ?? actionCount)
2303
- && (viewport.setup_action_results || []).every((result) => !result || result.ok !== false),
2320
+ && (viewport.setup_action_results || []).every((result) => !result || result.ok !== false || result.optional === true),
2304
2321
  result_count: (viewport.setup_action_results || []).length,
2305
2322
  })),
2306
2323
  setup_summary: profileSetupSummary(viewports, actionCount, expectedActionCountsByViewport),
@@ -3097,7 +3114,7 @@ async function registerNetworkMocks(mocks) {
3097
3114
  async function executeSetupAction(action, ordinal, viewport) {
3098
3115
  const type = setupActionType(action);
3099
3116
  const frameSelector = setupFrameSelector(action);
3100
- const base = { ok: false, action: type || "unknown", ordinal, selector: action.selector || null, frame_selector: frameSelector || null };
3117
+ const base = { ok: false, action: type || "unknown", ordinal, selector: action.selector || null, frame_selector: frameSelector || null, optional: action.optional === true };
3101
3118
  const timeout = setupNumber(action.timeout_ms, 5000);
3102
3119
  try {
3103
3120
  if (type === "wait") {
@@ -3571,7 +3588,7 @@ async function executeSetupActions(actions, viewport) {
3571
3588
  : result);
3572
3589
  const afterMs = setupNumber(action.after_ms, 0);
3573
3590
  if (afterMs) await page.waitForTimeout(afterMs);
3574
- if (result.ok === false && action.continue_on_failure !== true) {
3591
+ if (result.ok === false && action.continue_on_failure !== true && action.optional !== true) {
3575
3592
  shouldStop = true;
3576
3593
  break;
3577
3594
  }
@@ -57,6 +57,7 @@ interface RiddleProofProfileSetupAction {
57
57
  reload?: boolean;
58
58
  storage?: "local" | "session" | "both";
59
59
  viewports?: string[];
60
+ optional?: boolean;
60
61
  continue_on_failure?: boolean;
61
62
  }
62
63
  interface RiddleProofProfileNetworkMockResponse {
package/dist/profile.d.ts CHANGED
@@ -57,6 +57,7 @@ interface RiddleProofProfileSetupAction {
57
57
  reload?: boolean;
58
58
  storage?: "local" | "session" | "both";
59
59
  viewports?: string[];
60
+ optional?: boolean;
60
61
  continue_on_failure?: boolean;
61
62
  }
62
63
  interface RiddleProofProfileNetworkMockResponse {
package/dist/profile.js CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  resolveRiddleProofProfileTimeoutSec,
20
20
  slugifyRiddleProofProfileName,
21
21
  summarizeRiddleProofProfileResult
22
- } from "./chunk-QC42KDBD.js";
22
+ } from "./chunk-3Y35UIZO.js";
23
23
  export {
24
24
  RIDDLE_PROOF_PROFILE_CHECK_TYPES,
25
25
  RIDDLE_PROOF_PROFILE_EVIDENCE_VERSION,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riddledc/riddle-proof",
3
- "version": "0.7.84",
3
+ "version": "0.7.86",
4
4
  "description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",