@riddledc/riddle-proof 0.7.69 → 0.7.70

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/README.md CHANGED
@@ -318,7 +318,9 @@ setup screenshots, compact text samples, and failures so setup-heavy clickthroug
318
318
  can be reviewed without reading every raw setup-action result. Long click
319
319
  sequences include `clicked_total` and `clicked_truncated`; the compact `clicked`
320
320
  list keeps the first and last clicked targets so later route switches and reset
321
- actions stay visible.
321
+ actions stay visible. Click actions with `click_count` greater than `1` are
322
+ included in clicked-target evidence and rolled up as `click_count_action_total`
323
+ and `click_count_value_total`.
322
324
 
323
325
  `target.timeout_sec` is optional. Use it for known-heavy profile targets so the
324
326
  profile carries its own hosted Riddle worker budget; an explicit CLI `--timeout`
@@ -231,12 +231,18 @@ function profileSetupSummary(viewports, actionCount) {
231
231
  viewports: viewports.map((viewport) => {
232
232
  const results = viewport.setup_action_results || [];
233
233
  const failed = results.filter((result) => result.ok === false);
234
- const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => ({
235
- ordinal: result.ordinal ?? null,
236
- selector: result.selector ?? null,
237
- frame_selector: result.frame_selector ?? null,
238
- text: compactProfileSetupSummaryText(result.text)
239
- }));
234
+ const successfulClicks = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false);
235
+ 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);
236
+ const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => {
237
+ const clickCount = typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : void 0;
238
+ return {
239
+ ordinal: result.ordinal ?? null,
240
+ selector: result.selector ?? null,
241
+ frame_selector: result.frame_selector ?? null,
242
+ text: compactProfileSetupSummaryText(result.text),
243
+ ...clickCount ? { click_count: clickCount } : {}
244
+ };
245
+ });
240
246
  const clicked = sampleProfileSetupSummaryItems(clickedItems, 8);
241
247
  const text_samples = results.filter((result) => result.ok !== false && typeof result.text === "string" && (profileSetupResultAction(result) === "assert_text_visible" || profileSetupResultAction(result) === "assert_text_absent" || profileSetupResultAction(result) === "wait_for_text")).map((result) => ({
242
248
  ordinal: result.ordinal ?? null,
@@ -256,6 +262,8 @@ function profileSetupSummary(viewports, actionCount) {
256
262
  setup_screenshots: profileSetupScreenshotLabels(results),
257
263
  clicked_total: clickedItems.length,
258
264
  clicked_truncated: clickedItems.length > clicked.length,
265
+ click_count_action_total: clickCountValues.length,
266
+ click_count_value_total: clickCountValues.reduce((sum, value) => sum + value, 0),
259
267
  clicked,
260
268
  text_samples,
261
269
  failed: failed.map((result) => ({
@@ -1896,14 +1904,22 @@ function profileSetupSummary(viewports, actionCount) {
1896
1904
  viewports: (viewports || []).map((viewport) => {
1897
1905
  const results = viewport.setup_action_results || [];
1898
1906
  const failed = results.filter((result) => result && result.ok === false);
1907
+ const successfulClicks = results.filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false);
1908
+ const clickCountValues = successfulClicks
1909
+ .map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined)
1910
+ .filter((value) => value !== undefined);
1899
1911
  const clickedItems = results
1900
1912
  .filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false)
1901
- .map((result) => ({
1902
- ordinal: result.ordinal ?? null,
1903
- selector: result.selector ?? null,
1904
- frame_selector: result.frame_selector ?? null,
1905
- text: compactProfileSetupSummaryText(result.text),
1906
- }));
1913
+ .map((result) => {
1914
+ const clickCount = typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined;
1915
+ return {
1916
+ ordinal: result.ordinal ?? null,
1917
+ selector: result.selector ?? null,
1918
+ frame_selector: result.frame_selector ?? null,
1919
+ text: compactProfileSetupSummaryText(result.text),
1920
+ ...(clickCount ? { click_count: clickCount } : {}),
1921
+ };
1922
+ });
1907
1923
  const clicked = sampleProfileSetupSummaryItems(clickedItems, 8);
1908
1924
  const textSamples = results
1909
1925
  .filter((result) => result && result.ok !== false && typeof result.text === "string" && (
@@ -1931,6 +1947,8 @@ function profileSetupSummary(viewports, actionCount) {
1931
1947
  setup_screenshots: profileSetupScreenshotLabels(results),
1932
1948
  clicked_total: clickedItems.length,
1933
1949
  clicked_truncated: clickedItems.length > clicked.length,
1950
+ click_count_action_total: clickCountValues.length,
1951
+ click_count_value_total: clickCountValues.reduce((sum, value) => sum + value, 0),
1934
1952
  clicked,
1935
1953
  text_samples: textSamples,
1936
1954
  failed: failed.map((result) => ({
package/dist/cli.cjs CHANGED
@@ -7104,12 +7104,18 @@ function profileSetupSummary(viewports, actionCount) {
7104
7104
  viewports: viewports.map((viewport) => {
7105
7105
  const results = viewport.setup_action_results || [];
7106
7106
  const failed = results.filter((result) => result.ok === false);
7107
- const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => ({
7108
- ordinal: result.ordinal ?? null,
7109
- selector: result.selector ?? null,
7110
- frame_selector: result.frame_selector ?? null,
7111
- text: compactProfileSetupSummaryText(result.text)
7112
- }));
7107
+ const successfulClicks = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false);
7108
+ 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);
7109
+ const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => {
7110
+ const clickCount = typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : void 0;
7111
+ return {
7112
+ ordinal: result.ordinal ?? null,
7113
+ selector: result.selector ?? null,
7114
+ frame_selector: result.frame_selector ?? null,
7115
+ text: compactProfileSetupSummaryText(result.text),
7116
+ ...clickCount ? { click_count: clickCount } : {}
7117
+ };
7118
+ });
7113
7119
  const clicked = sampleProfileSetupSummaryItems(clickedItems, 8);
7114
7120
  const text_samples = results.filter((result) => result.ok !== false && typeof result.text === "string" && (profileSetupResultAction(result) === "assert_text_visible" || profileSetupResultAction(result) === "assert_text_absent" || profileSetupResultAction(result) === "wait_for_text")).map((result) => ({
7115
7121
  ordinal: result.ordinal ?? null,
@@ -7129,6 +7135,8 @@ function profileSetupSummary(viewports, actionCount) {
7129
7135
  setup_screenshots: profileSetupScreenshotLabels(results),
7130
7136
  clicked_total: clickedItems.length,
7131
7137
  clicked_truncated: clickedItems.length > clicked.length,
7138
+ click_count_action_total: clickCountValues.length,
7139
+ click_count_value_total: clickCountValues.reduce((sum, value) => sum + value, 0),
7132
7140
  clicked,
7133
7141
  text_samples,
7134
7142
  failed: failed.map((result) => ({
@@ -8753,14 +8761,22 @@ function profileSetupSummary(viewports, actionCount) {
8753
8761
  viewports: (viewports || []).map((viewport) => {
8754
8762
  const results = viewport.setup_action_results || [];
8755
8763
  const failed = results.filter((result) => result && result.ok === false);
8764
+ const successfulClicks = results.filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false);
8765
+ const clickCountValues = successfulClicks
8766
+ .map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined)
8767
+ .filter((value) => value !== undefined);
8756
8768
  const clickedItems = results
8757
8769
  .filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false)
8758
- .map((result) => ({
8759
- ordinal: result.ordinal ?? null,
8760
- selector: result.selector ?? null,
8761
- frame_selector: result.frame_selector ?? null,
8762
- text: compactProfileSetupSummaryText(result.text),
8763
- }));
8770
+ .map((result) => {
8771
+ const clickCount = typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined;
8772
+ return {
8773
+ ordinal: result.ordinal ?? null,
8774
+ selector: result.selector ?? null,
8775
+ frame_selector: result.frame_selector ?? null,
8776
+ text: compactProfileSetupSummaryText(result.text),
8777
+ ...(clickCount ? { click_count: clickCount } : {}),
8778
+ };
8779
+ });
8764
8780
  const clicked = sampleProfileSetupSummaryItems(clickedItems, 8);
8765
8781
  const textSamples = results
8766
8782
  .filter((result) => result && result.ok !== false && typeof result.text === "string" && (
@@ -8788,6 +8804,8 @@ function profileSetupSummary(viewports, actionCount) {
8788
8804
  setup_screenshots: profileSetupScreenshotLabels(results),
8789
8805
  clicked_total: clickedItems.length,
8790
8806
  clicked_truncated: clickedItems.length > clicked.length,
8807
+ click_count_action_total: clickCountValues.length,
8808
+ click_count_value_total: clickCountValues.reduce((sum, value) => sum + value, 0),
8791
8809
  clicked,
8792
8810
  text_samples: textSamples,
8793
8811
  failed: failed.map((result) => ({
@@ -11244,20 +11262,26 @@ function profileSetupSummaryMarkdown(result) {
11244
11262
  return sum + labels.filter((label) => typeof label === "string" && label.trim()).length;
11245
11263
  }, 0);
11246
11264
  const clickedTotal = viewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.clicked_total) || 0), 0);
11265
+ const clickCountActionTotal = viewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.click_count_action_total) || 0), 0);
11266
+ const clickCountValueTotal = viewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.click_count_value_total) || 0), 0);
11247
11267
  const failedTotal = viewports.reduce((sum, viewport) => sum + (Array.isArray(viewport.failed) ? viewport.failed.length : 0), 0);
11248
11268
  const lines = [
11249
11269
  `- setup actions: ${declaredActions === void 0 ? "unknown" : declaredActions} declared, ${totalResults} recorded result(s) across ${viewports.length} viewport(s)`,
11250
11270
  `- setup screenshots: ${setupScreenshots}`,
11251
11271
  `- clicked targets: ${clickedTotal}${failedTotal ? `; failed setup actions: ${failedTotal}` : ""}`
11252
11272
  ];
11273
+ if (clickCountActionTotal) {
11274
+ lines.push(`- click counts: ${clickCountActionTotal} action(s), click_count total ${clickCountValueTotal}`);
11275
+ }
11253
11276
  for (const viewport of viewports.slice(0, 8)) {
11254
11277
  const name = cliString(viewport.name) || "viewport";
11255
11278
  const ok = viewport.ok === false ? "failed" : "ok";
11256
11279
  const resultCount = cliFiniteNumber(viewport.result_count) || 0;
11257
11280
  const screenshotCount = Array.isArray(viewport.setup_screenshots) ? viewport.setup_screenshots.filter((label) => typeof label === "string" && label.trim()).length : 0;
11258
11281
  const clicked = cliFiniteNumber(viewport.clicked_total) || 0;
11282
+ const clickCountActions = cliFiniteNumber(viewport.click_count_action_total) || 0;
11259
11283
  const observedPath = cliString(viewport.observed_path);
11260
- lines.push(`- ${name}: ${ok}, ${resultCount} result(s), ${screenshotCount} setup screenshot(s), ${clicked} click(s)${observedPath ? `, path ${observedPath}` : ""}`);
11284
+ lines.push(`- ${name}: ${ok}, ${resultCount} result(s), ${screenshotCount} setup screenshot(s), ${clicked} click(s)${clickCountActions ? `, ${clickCountActions} click_count action(s)` : ""}${observedPath ? `, path ${observedPath}` : ""}`);
11261
11285
  }
11262
11286
  if (viewports.length > 8) lines.push(`- ${viewports.length - 8} additional viewport(s) omitted from setup summary.`);
11263
11287
  return lines;
package/dist/cli.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  profileStatusExitCode,
11
11
  resolveRiddleProofProfileTargetUrl,
12
12
  resolveRiddleProofProfileTimeoutSec
13
- } from "./chunk-ZQPC7PYM.js";
13
+ } from "./chunk-KMJBTFLI.js";
14
14
  import {
15
15
  createRiddleApiClient,
16
16
  parseRiddleViewport
@@ -351,20 +351,26 @@ function profileSetupSummaryMarkdown(result) {
351
351
  return sum + labels.filter((label) => typeof label === "string" && label.trim()).length;
352
352
  }, 0);
353
353
  const clickedTotal = viewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.clicked_total) || 0), 0);
354
+ const clickCountActionTotal = viewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.click_count_action_total) || 0), 0);
355
+ const clickCountValueTotal = viewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.click_count_value_total) || 0), 0);
354
356
  const failedTotal = viewports.reduce((sum, viewport) => sum + (Array.isArray(viewport.failed) ? viewport.failed.length : 0), 0);
355
357
  const lines = [
356
358
  `- setup actions: ${declaredActions === void 0 ? "unknown" : declaredActions} declared, ${totalResults} recorded result(s) across ${viewports.length} viewport(s)`,
357
359
  `- setup screenshots: ${setupScreenshots}`,
358
360
  `- clicked targets: ${clickedTotal}${failedTotal ? `; failed setup actions: ${failedTotal}` : ""}`
359
361
  ];
362
+ if (clickCountActionTotal) {
363
+ lines.push(`- click counts: ${clickCountActionTotal} action(s), click_count total ${clickCountValueTotal}`);
364
+ }
360
365
  for (const viewport of viewports.slice(0, 8)) {
361
366
  const name = cliString(viewport.name) || "viewport";
362
367
  const ok = viewport.ok === false ? "failed" : "ok";
363
368
  const resultCount = cliFiniteNumber(viewport.result_count) || 0;
364
369
  const screenshotCount = Array.isArray(viewport.setup_screenshots) ? viewport.setup_screenshots.filter((label) => typeof label === "string" && label.trim()).length : 0;
365
370
  const clicked = cliFiniteNumber(viewport.clicked_total) || 0;
371
+ const clickCountActions = cliFiniteNumber(viewport.click_count_action_total) || 0;
366
372
  const observedPath = cliString(viewport.observed_path);
367
- lines.push(`- ${name}: ${ok}, ${resultCount} result(s), ${screenshotCount} setup screenshot(s), ${clicked} click(s)${observedPath ? `, path ${observedPath}` : ""}`);
373
+ lines.push(`- ${name}: ${ok}, ${resultCount} result(s), ${screenshotCount} setup screenshot(s), ${clicked} click(s)${clickCountActions ? `, ${clickCountActions} click_count action(s)` : ""}${observedPath ? `, path ${observedPath}` : ""}`);
368
374
  }
369
375
  if (viewports.length > 8) lines.push(`- ${viewports.length - 8} additional viewport(s) omitted from setup summary.`);
370
376
  return lines;
package/dist/index.cjs CHANGED
@@ -8945,12 +8945,18 @@ function profileSetupSummary(viewports, actionCount) {
8945
8945
  viewports: viewports.map((viewport) => {
8946
8946
  const results = viewport.setup_action_results || [];
8947
8947
  const failed = results.filter((result) => result.ok === false);
8948
- const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => ({
8949
- ordinal: result.ordinal ?? null,
8950
- selector: result.selector ?? null,
8951
- frame_selector: result.frame_selector ?? null,
8952
- text: compactProfileSetupSummaryText(result.text)
8953
- }));
8948
+ const successfulClicks = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false);
8949
+ 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);
8950
+ const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => {
8951
+ const clickCount = typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : void 0;
8952
+ return {
8953
+ ordinal: result.ordinal ?? null,
8954
+ selector: result.selector ?? null,
8955
+ frame_selector: result.frame_selector ?? null,
8956
+ text: compactProfileSetupSummaryText(result.text),
8957
+ ...clickCount ? { click_count: clickCount } : {}
8958
+ };
8959
+ });
8954
8960
  const clicked = sampleProfileSetupSummaryItems(clickedItems, 8);
8955
8961
  const text_samples = results.filter((result) => result.ok !== false && typeof result.text === "string" && (profileSetupResultAction(result) === "assert_text_visible" || profileSetupResultAction(result) === "assert_text_absent" || profileSetupResultAction(result) === "wait_for_text")).map((result) => ({
8956
8962
  ordinal: result.ordinal ?? null,
@@ -8970,6 +8976,8 @@ function profileSetupSummary(viewports, actionCount) {
8970
8976
  setup_screenshots: profileSetupScreenshotLabels(results),
8971
8977
  clicked_total: clickedItems.length,
8972
8978
  clicked_truncated: clickedItems.length > clicked.length,
8979
+ click_count_action_total: clickCountValues.length,
8980
+ click_count_value_total: clickCountValues.reduce((sum, value) => sum + value, 0),
8973
8981
  clicked,
8974
8982
  text_samples,
8975
8983
  failed: failed.map((result) => ({
@@ -10610,14 +10618,22 @@ function profileSetupSummary(viewports, actionCount) {
10610
10618
  viewports: (viewports || []).map((viewport) => {
10611
10619
  const results = viewport.setup_action_results || [];
10612
10620
  const failed = results.filter((result) => result && result.ok === false);
10621
+ const successfulClicks = results.filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false);
10622
+ const clickCountValues = successfulClicks
10623
+ .map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined)
10624
+ .filter((value) => value !== undefined);
10613
10625
  const clickedItems = results
10614
10626
  .filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false)
10615
- .map((result) => ({
10616
- ordinal: result.ordinal ?? null,
10617
- selector: result.selector ?? null,
10618
- frame_selector: result.frame_selector ?? null,
10619
- text: compactProfileSetupSummaryText(result.text),
10620
- }));
10627
+ .map((result) => {
10628
+ const clickCount = typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined;
10629
+ return {
10630
+ ordinal: result.ordinal ?? null,
10631
+ selector: result.selector ?? null,
10632
+ frame_selector: result.frame_selector ?? null,
10633
+ text: compactProfileSetupSummaryText(result.text),
10634
+ ...(clickCount ? { click_count: clickCount } : {}),
10635
+ };
10636
+ });
10621
10637
  const clicked = sampleProfileSetupSummaryItems(clickedItems, 8);
10622
10638
  const textSamples = results
10623
10639
  .filter((result) => result && result.ok !== false && typeof result.text === "string" && (
@@ -10645,6 +10661,8 @@ function profileSetupSummary(viewports, actionCount) {
10645
10661
  setup_screenshots: profileSetupScreenshotLabels(results),
10646
10662
  clicked_total: clickedItems.length,
10647
10663
  clicked_truncated: clickedItems.length > clicked.length,
10664
+ click_count_action_total: clickCountValues.length,
10665
+ click_count_value_total: clickCountValues.reduce((sum, value) => sum + value, 0),
10648
10666
  clicked,
10649
10667
  text_samples: textSamples,
10650
10668
  failed: failed.map((result) => ({
package/dist/index.js CHANGED
@@ -58,7 +58,7 @@ import {
58
58
  resolveRiddleProofProfileTimeoutSec,
59
59
  slugifyRiddleProofProfileName,
60
60
  summarizeRiddleProofProfileResult
61
- } from "./chunk-ZQPC7PYM.js";
61
+ } from "./chunk-KMJBTFLI.js";
62
62
  import {
63
63
  DEFAULT_RIDDLE_API_BASE_URL,
64
64
  DEFAULT_RIDDLE_API_KEY_FILE,
package/dist/profile.cjs CHANGED
@@ -274,12 +274,18 @@ function profileSetupSummary(viewports, actionCount) {
274
274
  viewports: viewports.map((viewport) => {
275
275
  const results = viewport.setup_action_results || [];
276
276
  const failed = results.filter((result) => result.ok === false);
277
- const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => ({
278
- ordinal: result.ordinal ?? null,
279
- selector: result.selector ?? null,
280
- frame_selector: result.frame_selector ?? null,
281
- text: compactProfileSetupSummaryText(result.text)
282
- }));
277
+ const successfulClicks = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false);
278
+ 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);
279
+ const clickedItems = results.filter((result) => profileSetupResultAction(result) === "click" && result.ok !== false).map((result) => {
280
+ const clickCount = typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : void 0;
281
+ return {
282
+ ordinal: result.ordinal ?? null,
283
+ selector: result.selector ?? null,
284
+ frame_selector: result.frame_selector ?? null,
285
+ text: compactProfileSetupSummaryText(result.text),
286
+ ...clickCount ? { click_count: clickCount } : {}
287
+ };
288
+ });
283
289
  const clicked = sampleProfileSetupSummaryItems(clickedItems, 8);
284
290
  const text_samples = results.filter((result) => result.ok !== false && typeof result.text === "string" && (profileSetupResultAction(result) === "assert_text_visible" || profileSetupResultAction(result) === "assert_text_absent" || profileSetupResultAction(result) === "wait_for_text")).map((result) => ({
285
291
  ordinal: result.ordinal ?? null,
@@ -299,6 +305,8 @@ function profileSetupSummary(viewports, actionCount) {
299
305
  setup_screenshots: profileSetupScreenshotLabels(results),
300
306
  clicked_total: clickedItems.length,
301
307
  clicked_truncated: clickedItems.length > clicked.length,
308
+ click_count_action_total: clickCountValues.length,
309
+ click_count_value_total: clickCountValues.reduce((sum, value) => sum + value, 0),
302
310
  clicked,
303
311
  text_samples,
304
312
  failed: failed.map((result) => ({
@@ -1939,14 +1947,22 @@ function profileSetupSummary(viewports, actionCount) {
1939
1947
  viewports: (viewports || []).map((viewport) => {
1940
1948
  const results = viewport.setup_action_results || [];
1941
1949
  const failed = results.filter((result) => result && result.ok === false);
1950
+ const successfulClicks = results.filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false);
1951
+ const clickCountValues = successfulClicks
1952
+ .map((result) => typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined)
1953
+ .filter((value) => value !== undefined);
1942
1954
  const clickedItems = results
1943
1955
  .filter((result) => result && profileSetupResultAction(result) === "click" && result.ok !== false)
1944
- .map((result) => ({
1945
- ordinal: result.ordinal ?? null,
1946
- selector: result.selector ?? null,
1947
- frame_selector: result.frame_selector ?? null,
1948
- text: compactProfileSetupSummaryText(result.text),
1949
- }));
1956
+ .map((result) => {
1957
+ const clickCount = typeof result.click_count === "number" && Number.isFinite(result.click_count) && result.click_count > 1 ? result.click_count : undefined;
1958
+ return {
1959
+ ordinal: result.ordinal ?? null,
1960
+ selector: result.selector ?? null,
1961
+ frame_selector: result.frame_selector ?? null,
1962
+ text: compactProfileSetupSummaryText(result.text),
1963
+ ...(clickCount ? { click_count: clickCount } : {}),
1964
+ };
1965
+ });
1950
1966
  const clicked = sampleProfileSetupSummaryItems(clickedItems, 8);
1951
1967
  const textSamples = results
1952
1968
  .filter((result) => result && result.ok !== false && typeof result.text === "string" && (
@@ -1974,6 +1990,8 @@ function profileSetupSummary(viewports, actionCount) {
1974
1990
  setup_screenshots: profileSetupScreenshotLabels(results),
1975
1991
  clicked_total: clickedItems.length,
1976
1992
  clicked_truncated: clickedItems.length > clicked.length,
1993
+ click_count_action_total: clickCountValues.length,
1994
+ click_count_value_total: clickCountValues.reduce((sum, value) => sum + value, 0),
1977
1995
  clicked,
1978
1996
  text_samples: textSamples,
1979
1997
  failed: failed.map((result) => ({
package/dist/profile.js CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  resolveRiddleProofProfileTimeoutSec,
20
20
  slugifyRiddleProofProfileName,
21
21
  summarizeRiddleProofProfileResult
22
- } from "./chunk-ZQPC7PYM.js";
22
+ } from "./chunk-KMJBTFLI.js";
23
23
  export {
24
24
  RIDDLE_PROOF_PROFILE_CHECK_TYPES,
25
25
  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: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
295
+ action: "author" | "recon" | "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: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
385
+ action: "author" | "recon" | "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: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
662
+ action: "author" | "recon" | "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: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
295
+ action: "author" | "recon" | "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: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
385
+ action: "author" | "recon" | "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: "setup" | "recon" | "author" | "implement" | "verify" | "ship" | "run";
662
+ action: "author" | "recon" | "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.69",
3
+ "version": "0.7.70",
4
4
  "description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",