@riddledc/riddle-proof 0.7.206 → 0.7.208

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/cli.cjs CHANGED
@@ -16791,6 +16791,12 @@ function profileSetupScreenshotCount(viewports) {
16791
16791
  function profileSetupReceiptTotal(viewports, key) {
16792
16792
  return viewports.reduce((sum, viewport) => sum + setupReceiptArray(viewport, key).filter((receipt) => receipt.ok !== false).length, 0);
16793
16793
  }
16794
+ function profileSetupActionCount(viewports, action) {
16795
+ return viewports.reduce((sum, viewport) => {
16796
+ const actionCounts = cliRecord(viewport.action_counts);
16797
+ return sum + (cliFiniteNumber(actionCounts?.[action]) || 0);
16798
+ }, 0);
16799
+ }
16794
16800
  function profileSetupFailureCount(viewports) {
16795
16801
  return viewports.reduce((sum, viewport) => {
16796
16802
  const failed = Array.isArray(viewport.failed) ? viewport.failed : [];
@@ -17041,6 +17047,23 @@ function profileHasTerminalLossReceipt(receipts) {
17041
17047
  return lastFlightLost || outOfBounds || ["over", "lost", "loss", "failed", "failure", "game_over", "gameover"].includes(status) || ["lost", "loss", "failed", "failure", "game_over", "gameover"].includes(outcome);
17042
17048
  });
17043
17049
  }
17050
+ function profileHasTerminalGameOverReceipt(receipts) {
17051
+ return receipts.some((receipt) => {
17052
+ const status = profileLowerSummaryValue(receipt, ["status", "state", "phase"]);
17053
+ const outcome = profileLowerSummaryValue(receipt, ["lastOutcome", "outcome", "terminalOutcome", "terminal", "result"]);
17054
+ const gameOver = setupReturnSummaryValue(receipt, ["gameOver", "game_over", "isGameOver"]) === true;
17055
+ const caught = setupReturnSummaryValue(receipt, ["caught", "playerCaught", "wasCaught"]) === true;
17056
+ const storedTo = cliString(receipt.return_stored_to) || "";
17057
+ const label = cliString(receipt.label) || "";
17058
+ const path7 = cliString(receipt.path) || cliString(receipt.function_name) || "";
17059
+ const slot = cliString(setupReturnSummaryValue(receipt, ["slot"])) || "";
17060
+ const haystack = `${storedTo} ${label} ${path7} ${slot}`.toLowerCase();
17061
+ const labelsTerminal = haystack.includes("gameover") || haystack.includes("game_over") || haystack.includes("game-over") || haystack.includes("game over") || haystack.includes("terminal") || haystack.includes("caught") || haystack.includes("catch");
17062
+ const terminalStatus = ["over", "game_over", "gameover"].includes(status) || ["game_over", "gameover"].includes(outcome);
17063
+ if (!labelsTerminal && !caught && !gameOver && !terminalStatus) return false;
17064
+ return gameOver || caught || terminalStatus;
17065
+ });
17066
+ }
17044
17067
  function profileHasTerminalSuccessReceipt(receipts) {
17045
17068
  return receipts.some((receipt) => {
17046
17069
  const status = profileLowerSummaryValue(receipt, ["status", "state", "phase"]);
@@ -17174,7 +17197,19 @@ function profilePackReceiptStatus(result, metadata, receipt) {
17174
17197
  const visibleCleanupActionCount = profileVisibleCleanupActionCount(setupViewports);
17175
17198
  const setupFailureCount = profileSetupFailureCount(setupViewports);
17176
17199
  const setupObstructionCount = profileSetupObstructionCount(setupViewports);
17177
- const inputDispatchCount = profileSetupReceiptTotal(setupViewports, "drag") + profileSetupReceiptTotal(setupViewports, "tap") + tapUntilCount + profileSetupReceiptTotal(setupViewports, "press") + profileSetupReceiptTotal(setupViewports, "keyboard_sequence");
17200
+ const keyboardReceipts = setupViewports.flatMap((viewport) => setupReceiptArray(viewport, "keyboard")).filter((item) => item.ok !== false);
17201
+ const keyboardReceiptDispatchCount = keyboardReceipts.length;
17202
+ const keyboardActionDispatchCount = ["press", "key_down", "key_up", "keyboard_sequence"].reduce((sum, action) => sum + profileSetupActionCount(setupViewports, action), 0);
17203
+ const keyboardDispatchCount = keyboardReceiptDispatchCount > 0 ? keyboardReceiptDispatchCount : keyboardActionDispatchCount;
17204
+ const keyboardKeyMatches = (item, expected) => {
17205
+ const key = (cliString(item.key) || cliString(item.code) || "").toLowerCase();
17206
+ return key === expected || key.includes(expected);
17207
+ };
17208
+ const hasKeyboardKeyDownReceipt = keyboardReceipts.some((item) => cliString(item.action) === "key_down") || profileSetupActionCount(setupViewports, "key_down") > 0;
17209
+ const hasKeyboardKeyUpReceipt = keyboardReceipts.some((item) => cliString(item.action) === "key_up") || profileSetupActionCount(setupViewports, "key_up") > 0;
17210
+ const hasShiftKeyDownReceipt = keyboardReceipts.some((item) => cliString(item.action) === "key_down" && keyboardKeyMatches(item, "shift"));
17211
+ const hasShiftKeyUpReceipt = keyboardReceipts.some((item) => cliString(item.action) === "key_up" && keyboardKeyMatches(item, "shift"));
17212
+ const inputDispatchCount = profileSetupReceiptTotal(setupViewports, "drag") + profileSetupReceiptTotal(setupViewports, "tap") + tapUntilCount + profileSetupReceiptTotal(setupViewports, "press") + profileSetupReceiptTotal(setupViewports, "keyboard_sequence") + keyboardDispatchCount;
17178
17213
  const canvasReceipts = setupViewports.flatMap((viewport) => setupReceiptArray(viewport, "canvas_signature"));
17179
17214
  const hasCanvasChange = canvasReceipts.some((item) => item.ok !== false && item.changed === true);
17180
17215
  const canvasSignatureHashes = canvasReceipts.filter((item) => item.ok !== false).map((item) => cliString(item.hash)).filter(Boolean);
@@ -17205,7 +17240,28 @@ function profilePackReceiptStatus(result, metadata, receipt) {
17205
17240
  const hasSetupReceipts = setupResultCount > 0 || Boolean(setupSummary);
17206
17241
  const hasTextVisibility = profileHasPassedCheck(result, ["text_visible", "selector_text_visible", "selector_visible"]);
17207
17242
  const hasTextAbsence = profileHasPassedCheck(result, ["text_absent", "selector_text_absent"]);
17208
- const hasMeasuredStateChange = hasNaturalInput || hasCanvasChange || valueReceipts.some((item) => setupReturnSummaryValue(item, ["changed"]) === true || setupReturnSummaryValue(item, ["nonWhiteDelta", "darkDelta", "pixelDelta", "movementDelta"]) !== void 0);
17243
+ const measuredStateMetricNames = [
17244
+ "delta",
17245
+ "stateDelta",
17246
+ "positionDelta",
17247
+ "movementDelta",
17248
+ "speedDelta",
17249
+ "velocityDelta",
17250
+ "distanceDelta",
17251
+ "distanceGain",
17252
+ "scoreDelta",
17253
+ "scoreGain",
17254
+ "energyDelta",
17255
+ "energyDrop",
17256
+ "energyRecovered",
17257
+ "progressDelta",
17258
+ "progressGain"
17259
+ ];
17260
+ const hasMeasuredStateMetric = valueReceipts.some((item) => measuredStateMetricNames.some((name) => {
17261
+ const value = cliFiniteNumber(setupReturnSummaryValue(item, [name]));
17262
+ return value !== void 0 && Math.abs(value) > 0;
17263
+ }));
17264
+ const hasMeasuredStateChange = hasNaturalInput || hasCanvasChange || valueReceipts.some((item) => setupReturnSummaryValue(item, ["changed"]) === true || setupReturnSummaryValue(item, ["nonWhiteDelta", "darkDelta", "pixelDelta", "movementDelta"]) !== void 0) || hasMeasuredStateMetric;
17209
17265
  const hasMovingPlayabilityReceipt = valueReceipts.some((item) => {
17210
17266
  const started = setupReturnSummaryValue(item, ["started", "runStarted", "playStarted"]) === true;
17211
17267
  const distance = cliFiniteNumber(setupReturnSummaryValue(item, ["distance", "distanceMeters", "travelDistance"]));
@@ -17225,6 +17281,7 @@ function profilePackReceiptStatus(result, metadata, receipt) {
17225
17281
  const hasOfflineAudioMetricsReceipt = profileHasOfflineAudioMetricsReceipt(valueReceipts);
17226
17282
  const hasActiveRouteLocalProofReceipt = profileHasActiveRouteLocalProofReceipt(valueReceipts);
17227
17283
  const hasTerminalLossReceipt = profileHasTerminalLossReceipt(valueReceipts);
17284
+ const hasTerminalGameOverReceipt = profileHasTerminalGameOverReceipt(valueReceipts);
17228
17285
  const hasTerminalSuccessReceipt = profileHasTerminalSuccessReceipt(valueReceipts);
17229
17286
  const hasControlledFailureLaunchReceipt = profileHasControlledLaunchReceipt(valueReceipts, "failure");
17230
17287
  const hasControlledSuccessLaunchReceipt = profileHasControlledLaunchReceipt(valueReceipts, "success");
@@ -17313,6 +17370,13 @@ function profilePackReceiptStatus(result, metadata, receipt) {
17313
17370
  "terminal loss receipt missing"
17314
17371
  );
17315
17372
  }
17373
+ if (text.includes("terminal") && (text.includes("game-over") || text.includes("game over") || text.includes("gameover") || text.includes("caught") || text.includes("catch"))) {
17374
+ return profileReceiptSignalStatus(
17375
+ hasTerminalGameOverReceipt,
17376
+ "terminal game-over receipt present",
17377
+ "terminal game-over receipt missing"
17378
+ );
17379
+ }
17316
17380
  if (text.includes("success") && text.includes("terminal")) {
17317
17381
  return profileReceiptSignalStatus(
17318
17382
  hasTerminalSuccessReceipt,
@@ -17443,6 +17507,14 @@ function profilePackReceiptStatus(result, metadata, receipt) {
17443
17507
  );
17444
17508
  }
17445
17509
  if (text.includes("input dispatch") || text.includes("pointer") || text.includes("touch") || text.includes("key event") || text.includes("trusted-event")) {
17510
+ if (text.includes("key_down") || text.includes("key down") || text.includes("key-up") || text.includes("key_up")) {
17511
+ const hasSpecificKeyboardDispatch = text.includes("shift") ? hasShiftKeyDownReceipt && hasShiftKeyUpReceipt : hasKeyboardKeyDownReceipt && hasKeyboardKeyUpReceipt;
17512
+ return profileReceiptSignalStatus(
17513
+ hasSpecificKeyboardDispatch,
17514
+ "keyboard key_down/key_up dispatch evidence present",
17515
+ "keyboard key_down/key_up dispatch evidence missing"
17516
+ );
17517
+ }
17446
17518
  return profileReceiptSignalStatus(inputDispatchCount > 0 || hasNaturalInput, "input dispatch evidence present", "input dispatch evidence missing");
17447
17519
  }
17448
17520
  if (text.includes("offline audio") || text.includes("audio") && text.includes("metric")) {
package/dist/cli.js CHANGED
@@ -616,6 +616,12 @@ function profileSetupScreenshotCount(viewports) {
616
616
  function profileSetupReceiptTotal(viewports, key) {
617
617
  return viewports.reduce((sum, viewport) => sum + setupReceiptArray(viewport, key).filter((receipt) => receipt.ok !== false).length, 0);
618
618
  }
619
+ function profileSetupActionCount(viewports, action) {
620
+ return viewports.reduce((sum, viewport) => {
621
+ const actionCounts = cliRecord(viewport.action_counts);
622
+ return sum + (cliFiniteNumber(actionCounts?.[action]) || 0);
623
+ }, 0);
624
+ }
619
625
  function profileSetupFailureCount(viewports) {
620
626
  return viewports.reduce((sum, viewport) => {
621
627
  const failed = Array.isArray(viewport.failed) ? viewport.failed : [];
@@ -866,6 +872,23 @@ function profileHasTerminalLossReceipt(receipts) {
866
872
  return lastFlightLost || outOfBounds || ["over", "lost", "loss", "failed", "failure", "game_over", "gameover"].includes(status) || ["lost", "loss", "failed", "failure", "game_over", "gameover"].includes(outcome);
867
873
  });
868
874
  }
875
+ function profileHasTerminalGameOverReceipt(receipts) {
876
+ return receipts.some((receipt) => {
877
+ const status = profileLowerSummaryValue(receipt, ["status", "state", "phase"]);
878
+ const outcome = profileLowerSummaryValue(receipt, ["lastOutcome", "outcome", "terminalOutcome", "terminal", "result"]);
879
+ const gameOver = setupReturnSummaryValue(receipt, ["gameOver", "game_over", "isGameOver"]) === true;
880
+ const caught = setupReturnSummaryValue(receipt, ["caught", "playerCaught", "wasCaught"]) === true;
881
+ const storedTo = cliString(receipt.return_stored_to) || "";
882
+ const label = cliString(receipt.label) || "";
883
+ const path2 = cliString(receipt.path) || cliString(receipt.function_name) || "";
884
+ const slot = cliString(setupReturnSummaryValue(receipt, ["slot"])) || "";
885
+ const haystack = `${storedTo} ${label} ${path2} ${slot}`.toLowerCase();
886
+ const labelsTerminal = haystack.includes("gameover") || haystack.includes("game_over") || haystack.includes("game-over") || haystack.includes("game over") || haystack.includes("terminal") || haystack.includes("caught") || haystack.includes("catch");
887
+ const terminalStatus = ["over", "game_over", "gameover"].includes(status) || ["game_over", "gameover"].includes(outcome);
888
+ if (!labelsTerminal && !caught && !gameOver && !terminalStatus) return false;
889
+ return gameOver || caught || terminalStatus;
890
+ });
891
+ }
869
892
  function profileHasTerminalSuccessReceipt(receipts) {
870
893
  return receipts.some((receipt) => {
871
894
  const status = profileLowerSummaryValue(receipt, ["status", "state", "phase"]);
@@ -999,7 +1022,19 @@ function profilePackReceiptStatus(result, metadata, receipt) {
999
1022
  const visibleCleanupActionCount = profileVisibleCleanupActionCount(setupViewports);
1000
1023
  const setupFailureCount = profileSetupFailureCount(setupViewports);
1001
1024
  const setupObstructionCount = profileSetupObstructionCount(setupViewports);
1002
- const inputDispatchCount = profileSetupReceiptTotal(setupViewports, "drag") + profileSetupReceiptTotal(setupViewports, "tap") + tapUntilCount + profileSetupReceiptTotal(setupViewports, "press") + profileSetupReceiptTotal(setupViewports, "keyboard_sequence");
1025
+ const keyboardReceipts = setupViewports.flatMap((viewport) => setupReceiptArray(viewport, "keyboard")).filter((item) => item.ok !== false);
1026
+ const keyboardReceiptDispatchCount = keyboardReceipts.length;
1027
+ const keyboardActionDispatchCount = ["press", "key_down", "key_up", "keyboard_sequence"].reduce((sum, action) => sum + profileSetupActionCount(setupViewports, action), 0);
1028
+ const keyboardDispatchCount = keyboardReceiptDispatchCount > 0 ? keyboardReceiptDispatchCount : keyboardActionDispatchCount;
1029
+ const keyboardKeyMatches = (item, expected) => {
1030
+ const key = (cliString(item.key) || cliString(item.code) || "").toLowerCase();
1031
+ return key === expected || key.includes(expected);
1032
+ };
1033
+ const hasKeyboardKeyDownReceipt = keyboardReceipts.some((item) => cliString(item.action) === "key_down") || profileSetupActionCount(setupViewports, "key_down") > 0;
1034
+ const hasKeyboardKeyUpReceipt = keyboardReceipts.some((item) => cliString(item.action) === "key_up") || profileSetupActionCount(setupViewports, "key_up") > 0;
1035
+ const hasShiftKeyDownReceipt = keyboardReceipts.some((item) => cliString(item.action) === "key_down" && keyboardKeyMatches(item, "shift"));
1036
+ const hasShiftKeyUpReceipt = keyboardReceipts.some((item) => cliString(item.action) === "key_up" && keyboardKeyMatches(item, "shift"));
1037
+ const inputDispatchCount = profileSetupReceiptTotal(setupViewports, "drag") + profileSetupReceiptTotal(setupViewports, "tap") + tapUntilCount + profileSetupReceiptTotal(setupViewports, "press") + profileSetupReceiptTotal(setupViewports, "keyboard_sequence") + keyboardDispatchCount;
1003
1038
  const canvasReceipts = setupViewports.flatMap((viewport) => setupReceiptArray(viewport, "canvas_signature"));
1004
1039
  const hasCanvasChange = canvasReceipts.some((item) => item.ok !== false && item.changed === true);
1005
1040
  const canvasSignatureHashes = canvasReceipts.filter((item) => item.ok !== false).map((item) => cliString(item.hash)).filter(Boolean);
@@ -1030,7 +1065,28 @@ function profilePackReceiptStatus(result, metadata, receipt) {
1030
1065
  const hasSetupReceipts = setupResultCount > 0 || Boolean(setupSummary);
1031
1066
  const hasTextVisibility = profileHasPassedCheck(result, ["text_visible", "selector_text_visible", "selector_visible"]);
1032
1067
  const hasTextAbsence = profileHasPassedCheck(result, ["text_absent", "selector_text_absent"]);
1033
- const hasMeasuredStateChange = hasNaturalInput || hasCanvasChange || valueReceipts.some((item) => setupReturnSummaryValue(item, ["changed"]) === true || setupReturnSummaryValue(item, ["nonWhiteDelta", "darkDelta", "pixelDelta", "movementDelta"]) !== void 0);
1068
+ const measuredStateMetricNames = [
1069
+ "delta",
1070
+ "stateDelta",
1071
+ "positionDelta",
1072
+ "movementDelta",
1073
+ "speedDelta",
1074
+ "velocityDelta",
1075
+ "distanceDelta",
1076
+ "distanceGain",
1077
+ "scoreDelta",
1078
+ "scoreGain",
1079
+ "energyDelta",
1080
+ "energyDrop",
1081
+ "energyRecovered",
1082
+ "progressDelta",
1083
+ "progressGain"
1084
+ ];
1085
+ const hasMeasuredStateMetric = valueReceipts.some((item) => measuredStateMetricNames.some((name) => {
1086
+ const value = cliFiniteNumber(setupReturnSummaryValue(item, [name]));
1087
+ return value !== void 0 && Math.abs(value) > 0;
1088
+ }));
1089
+ const hasMeasuredStateChange = hasNaturalInput || hasCanvasChange || valueReceipts.some((item) => setupReturnSummaryValue(item, ["changed"]) === true || setupReturnSummaryValue(item, ["nonWhiteDelta", "darkDelta", "pixelDelta", "movementDelta"]) !== void 0) || hasMeasuredStateMetric;
1034
1090
  const hasMovingPlayabilityReceipt = valueReceipts.some((item) => {
1035
1091
  const started = setupReturnSummaryValue(item, ["started", "runStarted", "playStarted"]) === true;
1036
1092
  const distance = cliFiniteNumber(setupReturnSummaryValue(item, ["distance", "distanceMeters", "travelDistance"]));
@@ -1050,6 +1106,7 @@ function profilePackReceiptStatus(result, metadata, receipt) {
1050
1106
  const hasOfflineAudioMetricsReceipt = profileHasOfflineAudioMetricsReceipt(valueReceipts);
1051
1107
  const hasActiveRouteLocalProofReceipt = profileHasActiveRouteLocalProofReceipt(valueReceipts);
1052
1108
  const hasTerminalLossReceipt = profileHasTerminalLossReceipt(valueReceipts);
1109
+ const hasTerminalGameOverReceipt = profileHasTerminalGameOverReceipt(valueReceipts);
1053
1110
  const hasTerminalSuccessReceipt = profileHasTerminalSuccessReceipt(valueReceipts);
1054
1111
  const hasControlledFailureLaunchReceipt = profileHasControlledLaunchReceipt(valueReceipts, "failure");
1055
1112
  const hasControlledSuccessLaunchReceipt = profileHasControlledLaunchReceipt(valueReceipts, "success");
@@ -1138,6 +1195,13 @@ function profilePackReceiptStatus(result, metadata, receipt) {
1138
1195
  "terminal loss receipt missing"
1139
1196
  );
1140
1197
  }
1198
+ if (text.includes("terminal") && (text.includes("game-over") || text.includes("game over") || text.includes("gameover") || text.includes("caught") || text.includes("catch"))) {
1199
+ return profileReceiptSignalStatus(
1200
+ hasTerminalGameOverReceipt,
1201
+ "terminal game-over receipt present",
1202
+ "terminal game-over receipt missing"
1203
+ );
1204
+ }
1141
1205
  if (text.includes("success") && text.includes("terminal")) {
1142
1206
  return profileReceiptSignalStatus(
1143
1207
  hasTerminalSuccessReceipt,
@@ -1268,6 +1332,14 @@ function profilePackReceiptStatus(result, metadata, receipt) {
1268
1332
  );
1269
1333
  }
1270
1334
  if (text.includes("input dispatch") || text.includes("pointer") || text.includes("touch") || text.includes("key event") || text.includes("trusted-event")) {
1335
+ if (text.includes("key_down") || text.includes("key down") || text.includes("key-up") || text.includes("key_up")) {
1336
+ const hasSpecificKeyboardDispatch = text.includes("shift") ? hasShiftKeyDownReceipt && hasShiftKeyUpReceipt : hasKeyboardKeyDownReceipt && hasKeyboardKeyUpReceipt;
1337
+ return profileReceiptSignalStatus(
1338
+ hasSpecificKeyboardDispatch,
1339
+ "keyboard key_down/key_up dispatch evidence present",
1340
+ "keyboard key_down/key_up dispatch evidence missing"
1341
+ );
1342
+ }
1271
1343
  return profileReceiptSignalStatus(inputDispatchCount > 0 || hasNaturalInput, "input dispatch evidence present", "input dispatch evidence missing");
1272
1344
  }
1273
1345
  if (text.includes("offline audio") || text.includes("audio") && text.includes("metric")) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riddledc/riddle-proof",
3
- "version": "0.7.206",
3
+ "version": "0.7.208",
4
4
  "description": "Reusable Riddle Proof contracts and helpers for evidence-backed agent changes.",
5
5
  "license": "MIT",
6
6
  "author": "RiddleDC",