@riddledc/riddle-proof 0.7.186 → 0.7.188
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 +34 -0
- package/dist/cli.js +34 -0
- package/examples/profiles/spa-route-exit-state-hygiene.json +11 -0
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -16406,6 +16406,24 @@ function profileHasRouteExitAffordanceReceipt(receipts) {
|
|
|
16406
16406
|
return routeFields.some((name) => setupReturnSummaryValue(receipt, [name]) !== void 0) || haystack.includes("route=") || haystack.includes("browserpath=");
|
|
16407
16407
|
});
|
|
16408
16408
|
}
|
|
16409
|
+
function profileHasOfflineAudioMetricsReceipt(receipts) {
|
|
16410
|
+
const metricFields = [
|
|
16411
|
+
"mixPeak",
|
|
16412
|
+
"mixRms",
|
|
16413
|
+
"maxPeak",
|
|
16414
|
+
"avgRms",
|
|
16415
|
+
"audioPeak",
|
|
16416
|
+
"audioRms",
|
|
16417
|
+
"offlinePeak",
|
|
16418
|
+
"offlineRms",
|
|
16419
|
+
"peak",
|
|
16420
|
+
"rms"
|
|
16421
|
+
];
|
|
16422
|
+
return receipts.some((receipt) => metricFields.some((name) => {
|
|
16423
|
+
const value = cliFiniteNumber(setupReturnSummaryValue(receipt, [name]));
|
|
16424
|
+
return value !== void 0 && value > 0;
|
|
16425
|
+
}));
|
|
16426
|
+
}
|
|
16409
16427
|
function profilePackReceiptStatus(result, metadata, receipt) {
|
|
16410
16428
|
const text = receipt.toLowerCase();
|
|
16411
16429
|
const setupSummary = profileSetupSummaryRecord(result);
|
|
@@ -16420,6 +16438,7 @@ function profilePackReceiptStatus(result, metadata, receipt) {
|
|
|
16420
16438
|
...setupViewports.flatMap((viewport) => setupReceiptArray(viewport, "window_call"))
|
|
16421
16439
|
].filter((item) => item.ok !== false);
|
|
16422
16440
|
const clickCount = setupViewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.clicked_total) || 0), 0) + profileSetupReceiptTotal(setupViewports, "click") + profileSetupReceiptTotal(setupViewports, "click_count");
|
|
16441
|
+
const visibleUiActionCount = clickCount + profileSetupReceiptTotal(setupViewports, "tap");
|
|
16423
16442
|
const setupFailureCount = profileSetupFailureCount(setupViewports);
|
|
16424
16443
|
const setupObstructionCount = profileSetupObstructionCount(setupViewports);
|
|
16425
16444
|
const inputDispatchCount = profileSetupReceiptTotal(setupViewports, "drag") + profileSetupReceiptTotal(setupViewports, "tap") + profileSetupReceiptTotal(setupViewports, "press") + profileSetupReceiptTotal(setupViewports, "keyboard_sequence");
|
|
@@ -16455,6 +16474,7 @@ function profilePackReceiptStatus(result, metadata, receipt) {
|
|
|
16455
16474
|
const hasTextAbsence = profileHasPassedCheck(result, ["text_absent", "selector_text_absent"]);
|
|
16456
16475
|
const hasMeasuredStateChange = hasNaturalInput || hasCanvasChange || valueReceipts.some((item) => setupReturnSummaryValue(item, ["changed"]) === true || setupReturnSummaryValue(item, ["nonWhiteDelta", "darkDelta", "pixelDelta", "movementDelta"]) !== void 0);
|
|
16457
16476
|
const hasRouteExitAffordanceReceipt = profileHasRouteExitAffordanceReceipt(valueReceipts);
|
|
16477
|
+
const hasOfflineAudioMetricsReceipt = profileHasOfflineAudioMetricsReceipt(valueReceipts);
|
|
16458
16478
|
const failedCleanupInventoryReason = profileFailedCleanupInventoryReason(setupViewports);
|
|
16459
16479
|
if (text.includes("artifact link") || text.includes("artifact path")) {
|
|
16460
16480
|
return profileReceiptSignalStatus(profileResultHasArtifact(result), "artifact references listed", "no artifact references found");
|
|
@@ -16493,6 +16513,13 @@ function profilePackReceiptStatus(result, metadata, receipt) {
|
|
|
16493
16513
|
if (text.includes("invalid state")) {
|
|
16494
16514
|
return profileReceiptSignalStatus(hasStateContract || hasInvalidStateReceipt, "invalid-state receipt present", "invalid-state receipt missing");
|
|
16495
16515
|
}
|
|
16516
|
+
if (text.includes("through visible ui") || text.includes("visible ui action") || text.includes("ui-routed") || text.includes("ui routed") || text.includes("visible") && text.includes("route") && text.includes("exit") && text.includes("action") || text.includes("visible") && text.includes("mode") && text.includes("exit") && text.includes("action")) {
|
|
16517
|
+
return profileReceiptSignalStatus(
|
|
16518
|
+
visibleUiActionCount > 0,
|
|
16519
|
+
"visible UI action receipt present",
|
|
16520
|
+
"visible UI action receipt missing"
|
|
16521
|
+
);
|
|
16522
|
+
}
|
|
16496
16523
|
if (text.includes("route-exit affordance") || text.includes("route exit affordance") || text.includes("navigation before cleanup") || text.includes("exit control")) {
|
|
16497
16524
|
return profileReceiptSignalStatus(
|
|
16498
16525
|
hasRouteExitAffordanceReceipt || hasStateContract || clickCount > 0,
|
|
@@ -16559,6 +16586,13 @@ function profilePackReceiptStatus(result, metadata, receipt) {
|
|
|
16559
16586
|
if (text.includes("input dispatch") || text.includes("pointer") || text.includes("touch") || text.includes("key event") || text.includes("trusted-event")) {
|
|
16560
16587
|
return profileReceiptSignalStatus(inputDispatchCount > 0 || hasNaturalInput, "input dispatch evidence present", "input dispatch evidence missing");
|
|
16561
16588
|
}
|
|
16589
|
+
if (text.includes("offline audio") || text.includes("audio") && text.includes("metric")) {
|
|
16590
|
+
return profileReceiptSignalStatus(
|
|
16591
|
+
hasOfflineAudioMetricsReceipt,
|
|
16592
|
+
"offline audio metric receipt present",
|
|
16593
|
+
"offline audio metric receipt missing"
|
|
16594
|
+
);
|
|
16595
|
+
}
|
|
16562
16596
|
if (text.includes("measured") || text.includes("state-change") || text.includes("pixel delta") || text.includes("movement receipt") || text.includes("canvas hash")) {
|
|
16563
16597
|
return profileReceiptSignalStatus(hasMeasuredStateChange, "measured-change evidence present", "measured-change evidence missing");
|
|
16564
16598
|
}
|
package/dist/cli.js
CHANGED
|
@@ -611,6 +611,24 @@ function profileHasRouteExitAffordanceReceipt(receipts) {
|
|
|
611
611
|
return routeFields.some((name) => setupReturnSummaryValue(receipt, [name]) !== void 0) || haystack.includes("route=") || haystack.includes("browserpath=");
|
|
612
612
|
});
|
|
613
613
|
}
|
|
614
|
+
function profileHasOfflineAudioMetricsReceipt(receipts) {
|
|
615
|
+
const metricFields = [
|
|
616
|
+
"mixPeak",
|
|
617
|
+
"mixRms",
|
|
618
|
+
"maxPeak",
|
|
619
|
+
"avgRms",
|
|
620
|
+
"audioPeak",
|
|
621
|
+
"audioRms",
|
|
622
|
+
"offlinePeak",
|
|
623
|
+
"offlineRms",
|
|
624
|
+
"peak",
|
|
625
|
+
"rms"
|
|
626
|
+
];
|
|
627
|
+
return receipts.some((receipt) => metricFields.some((name) => {
|
|
628
|
+
const value = cliFiniteNumber(setupReturnSummaryValue(receipt, [name]));
|
|
629
|
+
return value !== void 0 && value > 0;
|
|
630
|
+
}));
|
|
631
|
+
}
|
|
614
632
|
function profilePackReceiptStatus(result, metadata, receipt) {
|
|
615
633
|
const text = receipt.toLowerCase();
|
|
616
634
|
const setupSummary = profileSetupSummaryRecord(result);
|
|
@@ -625,6 +643,7 @@ function profilePackReceiptStatus(result, metadata, receipt) {
|
|
|
625
643
|
...setupViewports.flatMap((viewport) => setupReceiptArray(viewport, "window_call"))
|
|
626
644
|
].filter((item) => item.ok !== false);
|
|
627
645
|
const clickCount = setupViewports.reduce((sum, viewport) => sum + (cliFiniteNumber(viewport.clicked_total) || 0), 0) + profileSetupReceiptTotal(setupViewports, "click") + profileSetupReceiptTotal(setupViewports, "click_count");
|
|
646
|
+
const visibleUiActionCount = clickCount + profileSetupReceiptTotal(setupViewports, "tap");
|
|
628
647
|
const setupFailureCount = profileSetupFailureCount(setupViewports);
|
|
629
648
|
const setupObstructionCount = profileSetupObstructionCount(setupViewports);
|
|
630
649
|
const inputDispatchCount = profileSetupReceiptTotal(setupViewports, "drag") + profileSetupReceiptTotal(setupViewports, "tap") + profileSetupReceiptTotal(setupViewports, "press") + profileSetupReceiptTotal(setupViewports, "keyboard_sequence");
|
|
@@ -660,6 +679,7 @@ function profilePackReceiptStatus(result, metadata, receipt) {
|
|
|
660
679
|
const hasTextAbsence = profileHasPassedCheck(result, ["text_absent", "selector_text_absent"]);
|
|
661
680
|
const hasMeasuredStateChange = hasNaturalInput || hasCanvasChange || valueReceipts.some((item) => setupReturnSummaryValue(item, ["changed"]) === true || setupReturnSummaryValue(item, ["nonWhiteDelta", "darkDelta", "pixelDelta", "movementDelta"]) !== void 0);
|
|
662
681
|
const hasRouteExitAffordanceReceipt = profileHasRouteExitAffordanceReceipt(valueReceipts);
|
|
682
|
+
const hasOfflineAudioMetricsReceipt = profileHasOfflineAudioMetricsReceipt(valueReceipts);
|
|
663
683
|
const failedCleanupInventoryReason = profileFailedCleanupInventoryReason(setupViewports);
|
|
664
684
|
if (text.includes("artifact link") || text.includes("artifact path")) {
|
|
665
685
|
return profileReceiptSignalStatus(profileResultHasArtifact(result), "artifact references listed", "no artifact references found");
|
|
@@ -698,6 +718,13 @@ function profilePackReceiptStatus(result, metadata, receipt) {
|
|
|
698
718
|
if (text.includes("invalid state")) {
|
|
699
719
|
return profileReceiptSignalStatus(hasStateContract || hasInvalidStateReceipt, "invalid-state receipt present", "invalid-state receipt missing");
|
|
700
720
|
}
|
|
721
|
+
if (text.includes("through visible ui") || text.includes("visible ui action") || text.includes("ui-routed") || text.includes("ui routed") || text.includes("visible") && text.includes("route") && text.includes("exit") && text.includes("action") || text.includes("visible") && text.includes("mode") && text.includes("exit") && text.includes("action")) {
|
|
722
|
+
return profileReceiptSignalStatus(
|
|
723
|
+
visibleUiActionCount > 0,
|
|
724
|
+
"visible UI action receipt present",
|
|
725
|
+
"visible UI action receipt missing"
|
|
726
|
+
);
|
|
727
|
+
}
|
|
701
728
|
if (text.includes("route-exit affordance") || text.includes("route exit affordance") || text.includes("navigation before cleanup") || text.includes("exit control")) {
|
|
702
729
|
return profileReceiptSignalStatus(
|
|
703
730
|
hasRouteExitAffordanceReceipt || hasStateContract || clickCount > 0,
|
|
@@ -764,6 +791,13 @@ function profilePackReceiptStatus(result, metadata, receipt) {
|
|
|
764
791
|
if (text.includes("input dispatch") || text.includes("pointer") || text.includes("touch") || text.includes("key event") || text.includes("trusted-event")) {
|
|
765
792
|
return profileReceiptSignalStatus(inputDispatchCount > 0 || hasNaturalInput, "input dispatch evidence present", "input dispatch evidence missing");
|
|
766
793
|
}
|
|
794
|
+
if (text.includes("offline audio") || text.includes("audio") && text.includes("metric")) {
|
|
795
|
+
return profileReceiptSignalStatus(
|
|
796
|
+
hasOfflineAudioMetricsReceipt,
|
|
797
|
+
"offline audio metric receipt present",
|
|
798
|
+
"offline audio metric receipt missing"
|
|
799
|
+
);
|
|
800
|
+
}
|
|
767
801
|
if (text.includes("measured") || text.includes("state-change") || text.includes("pixel delta") || text.includes("movement receipt") || text.includes("canvas hash")) {
|
|
768
802
|
return profileReceiptSignalStatus(hasMeasuredStateChange, "measured-change evidence present", "measured-change evidence missing");
|
|
769
803
|
}
|
|
@@ -71,6 +71,17 @@
|
|
|
71
71
|
"product_regression": "fail"
|
|
72
72
|
},
|
|
73
73
|
"metadata": {
|
|
74
|
+
"pack_id": "state_hygiene",
|
|
75
|
+
"pack_public_name": "State Hygiene Pack",
|
|
76
|
+
"required_receipts": [
|
|
77
|
+
"active route-local proof helpers and route state receipt",
|
|
78
|
+
"route-exit affordance inventory before cleanup",
|
|
79
|
+
"route or mode exit action receipt through visible UI",
|
|
80
|
+
"post-cleanup stale-state inventory after route cleanup",
|
|
81
|
+
"screenshots at active and post-cleanup boundaries",
|
|
82
|
+
"console and warning accounting",
|
|
83
|
+
"proof JSON and artifact links"
|
|
84
|
+
],
|
|
74
85
|
"purpose": "Template for SPA route-exit hygiene profiles. Replace the example route, selectors, and watched globals with route-local proof helpers, receipts, timers, input state, or touch state that must exist while the feature route is active and must be removed after visible UI navigation returns home."
|
|
75
86
|
}
|
|
76
87
|
}
|