@riddledc/riddle-proof 0.7.224 → 0.7.226
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/checkpoint.cjs +22 -2
- package/dist/checkpoint.js +1 -1
- package/dist/{chunk-ABQQLRTS.js → chunk-2CFVREFI.js} +22 -2
- package/dist/{chunk-WWYZBWKZ.js → chunk-GBVEQQIM.js} +7 -0
- package/dist/{chunk-UYB7ABWU.js → chunk-OHJQRDST.js} +1 -1
- package/dist/{chunk-VJLHXZAA.js → chunk-QUAZAMOM.js} +19 -6
- package/dist/{chunk-MA6ZR5XY.js → chunk-TGHTM66Z.js} +2 -2
- package/dist/{chunk-ZHEFYLII.js → chunk-Y2KTBACQ.js} +1 -1
- package/dist/cli.cjs +48 -4
- package/dist/cli.js +5 -5
- package/dist/engine-harness.cjs +48 -4
- package/dist/engine-harness.js +5 -5
- package/dist/index.cjs +48 -4
- package/dist/index.js +6 -6
- package/dist/openclaw.js +3 -3
- package/dist/proof-run-core.cjs +7 -0
- package/dist/proof-run-core.js +1 -1
- package/dist/proof-run-engine.cjs +11 -0
- package/dist/proof-run-engine.js +6 -2
- package/dist/run-card.js +2 -2
- package/dist/runner.js +5 -5
- package/dist/state.js +3 -3
- package/package.json +1 -1
- package/runtime/lib/verify.py +53 -3
- package/runtime/pipelines/riddle-proof-setup.lobster +46 -42
- package/runtime/tests/recon_verify_smoke.py +41 -0
package/dist/checkpoint.cjs
CHANGED
|
@@ -463,6 +463,24 @@ function visualDeltaFromState(fullState) {
|
|
|
463
463
|
const proofAssessmentRequest = recordValue(fullState.proof_assessment_request);
|
|
464
464
|
return recordValue(proofAssessmentRequest?.visual_delta) || null;
|
|
465
465
|
}
|
|
466
|
+
function normalizedText(value) {
|
|
467
|
+
return typeof value === "string" ? value.trim().toLowerCase() : "";
|
|
468
|
+
}
|
|
469
|
+
function noImplementationModeForCheckpoint(request, fullState) {
|
|
470
|
+
const requestRecord = recordValue(request) || {};
|
|
471
|
+
const mode = normalizedText(
|
|
472
|
+
requestRecord.mode || requestRecord.workflow_mode || fullState.mode || fullState.workflow_mode
|
|
473
|
+
);
|
|
474
|
+
const implementationMode = normalizedText(requestRecord.implementation_mode || fullState.implementation_mode);
|
|
475
|
+
const requireDiff = requestRecord.require_diff ?? fullState.require_diff;
|
|
476
|
+
const allowCodeChanges = requestRecord.allow_code_changes ?? fullState.allow_code_changes;
|
|
477
|
+
return mode === "audit" || mode === "profile" || implementationMode === "none" || requireDiff === false || allowCodeChanges === false;
|
|
478
|
+
}
|
|
479
|
+
function visualDeltaNotApplicableForNoImplementation(visualDelta) {
|
|
480
|
+
if (String(visualDelta?.status || "").trim() !== "not_applicable") return false;
|
|
481
|
+
const reason = String(visualDelta?.reason || "").toLowerCase();
|
|
482
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
483
|
+
}
|
|
466
484
|
function verificationModeRequiresVisualDelta(value) {
|
|
467
485
|
const mode = String(value || "proof").trim().toLowerCase();
|
|
468
486
|
return [
|
|
@@ -500,7 +518,9 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
500
518
|
const requiredSignals = recordValue(recordValue(artifactContract)?.required);
|
|
501
519
|
const visualDelta = visualDeltaFromState(fullState);
|
|
502
520
|
const verificationMode = nonEmptyString(bundle?.verification_mode) || nonEmptyString(fullState.verification_mode) || nonEmptyString(input.request.verification_mode) || "proof";
|
|
503
|
-
const
|
|
521
|
+
const noImplementationMode = noImplementationModeForCheckpoint(input.request, fullState);
|
|
522
|
+
const noImplementationVisualDelta = visualDeltaNotApplicableForNoImplementation(visualDelta);
|
|
523
|
+
const visualDeltaRequired = !noImplementationMode && !noImplementationVisualDelta && requiredSignals?.visual_delta !== false && (requiredSignals?.visual_delta === true || verificationModeRequiresVisualDelta(verificationMode));
|
|
504
524
|
const evidenceIssueCode = visualDeltaIssueCode(visualDelta, visualDeltaRequired);
|
|
505
525
|
const summary = nonEmptyString(input.engineResult.summary) || nonEmptyString(fullState.verify_summary) || "Verify captured evidence and needs a supervising proof assessment.";
|
|
506
526
|
const recoveryHint = evidenceIssueCode ? "Required visual_delta evidence is incomplete. Keep this same run in verify/evidence recovery with decision=revise_capture and continue_with_stage=verify unless the evidence proves an implementation or recon problem." : "Assess whether the current artifacts prove the requested change, then choose the next stage.";
|
|
@@ -533,7 +553,7 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
533
553
|
prod_cdn: fullState.prod_cdn || null,
|
|
534
554
|
after_cdn: fullState.after_cdn || null,
|
|
535
555
|
visual_delta_required: visualDeltaRequired,
|
|
536
|
-
visual_delta_ready: visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
556
|
+
visual_delta_ready: !visualDeltaRequired || visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
537
557
|
visual_delta: jsonCloneRecord(visualDelta),
|
|
538
558
|
evidence_issue_code: evidenceIssueCode,
|
|
539
559
|
proof_assessment_request: jsonCloneRecord(proofAssessmentRequest),
|
package/dist/checkpoint.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
normalizeCheckpointResponse,
|
|
14
14
|
proofContractFromAuthorCheckpointResponse,
|
|
15
15
|
statePathsForRunState
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-2CFVREFI.js";
|
|
17
17
|
import "./chunk-VY4Y5U57.js";
|
|
18
18
|
export {
|
|
19
19
|
RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,
|
|
@@ -409,6 +409,24 @@ function visualDeltaFromState(fullState) {
|
|
|
409
409
|
const proofAssessmentRequest = recordValue(fullState.proof_assessment_request);
|
|
410
410
|
return recordValue(proofAssessmentRequest?.visual_delta) || null;
|
|
411
411
|
}
|
|
412
|
+
function normalizedText(value) {
|
|
413
|
+
return typeof value === "string" ? value.trim().toLowerCase() : "";
|
|
414
|
+
}
|
|
415
|
+
function noImplementationModeForCheckpoint(request, fullState) {
|
|
416
|
+
const requestRecord = recordValue(request) || {};
|
|
417
|
+
const mode = normalizedText(
|
|
418
|
+
requestRecord.mode || requestRecord.workflow_mode || fullState.mode || fullState.workflow_mode
|
|
419
|
+
);
|
|
420
|
+
const implementationMode = normalizedText(requestRecord.implementation_mode || fullState.implementation_mode);
|
|
421
|
+
const requireDiff = requestRecord.require_diff ?? fullState.require_diff;
|
|
422
|
+
const allowCodeChanges = requestRecord.allow_code_changes ?? fullState.allow_code_changes;
|
|
423
|
+
return mode === "audit" || mode === "profile" || implementationMode === "none" || requireDiff === false || allowCodeChanges === false;
|
|
424
|
+
}
|
|
425
|
+
function visualDeltaNotApplicableForNoImplementation(visualDelta) {
|
|
426
|
+
if (String(visualDelta?.status || "").trim() !== "not_applicable") return false;
|
|
427
|
+
const reason = String(visualDelta?.reason || "").toLowerCase();
|
|
428
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
429
|
+
}
|
|
412
430
|
function verificationModeRequiresVisualDelta(value) {
|
|
413
431
|
const mode = String(value || "proof").trim().toLowerCase();
|
|
414
432
|
return [
|
|
@@ -446,7 +464,9 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
446
464
|
const requiredSignals = recordValue(recordValue(artifactContract)?.required);
|
|
447
465
|
const visualDelta = visualDeltaFromState(fullState);
|
|
448
466
|
const verificationMode = nonEmptyString(bundle?.verification_mode) || nonEmptyString(fullState.verification_mode) || nonEmptyString(input.request.verification_mode) || "proof";
|
|
449
|
-
const
|
|
467
|
+
const noImplementationMode = noImplementationModeForCheckpoint(input.request, fullState);
|
|
468
|
+
const noImplementationVisualDelta = visualDeltaNotApplicableForNoImplementation(visualDelta);
|
|
469
|
+
const visualDeltaRequired = !noImplementationMode && !noImplementationVisualDelta && requiredSignals?.visual_delta !== false && (requiredSignals?.visual_delta === true || verificationModeRequiresVisualDelta(verificationMode));
|
|
450
470
|
const evidenceIssueCode = visualDeltaIssueCode(visualDelta, visualDeltaRequired);
|
|
451
471
|
const summary = nonEmptyString(input.engineResult.summary) || nonEmptyString(fullState.verify_summary) || "Verify captured evidence and needs a supervising proof assessment.";
|
|
452
472
|
const recoveryHint = evidenceIssueCode ? "Required visual_delta evidence is incomplete. Keep this same run in verify/evidence recovery with decision=revise_capture and continue_with_stage=verify unless the evidence proves an implementation or recon problem." : "Assess whether the current artifacts prove the requested change, then choose the next stage.";
|
|
@@ -479,7 +499,7 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
479
499
|
prod_cdn: fullState.prod_cdn || null,
|
|
480
500
|
after_cdn: fullState.after_cdn || null,
|
|
481
501
|
visual_delta_required: visualDeltaRequired,
|
|
482
|
-
visual_delta_ready: visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
502
|
+
visual_delta_ready: !visualDeltaRequired || visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
483
503
|
visual_delta: jsonCloneRecord(visualDelta),
|
|
484
504
|
evidence_issue_code: evidenceIssueCode,
|
|
485
505
|
proof_assessment_request: jsonCloneRecord(proofAssessmentRequest),
|
|
@@ -377,6 +377,7 @@ function normalizedVerificationMode(state = {}) {
|
|
|
377
377
|
return String(state?.verification_mode || "proof").trim().toLowerCase() || "proof";
|
|
378
378
|
}
|
|
379
379
|
function visualDeltaRequiredForState(state = {}) {
|
|
380
|
+
if (noImplementationModeFor(state) || visualDeltaNotApplicableForNoImplementation(state)) return false;
|
|
380
381
|
const bundle = objectValue(state?.evidence_bundle);
|
|
381
382
|
const contract = objectValue(bundle.artifact_contract);
|
|
382
383
|
const required = objectValue(contract.required);
|
|
@@ -391,6 +392,12 @@ function visualDeltaForState(state = {}) {
|
|
|
391
392
|
const request = objectValue(state?.proof_assessment_request);
|
|
392
393
|
return objectValue(request.visual_delta);
|
|
393
394
|
}
|
|
395
|
+
function visualDeltaNotApplicableForNoImplementation(state = {}) {
|
|
396
|
+
const visualDelta = visualDeltaForState(state);
|
|
397
|
+
if (String(visualDelta.status || "").trim() !== "not_applicable") return false;
|
|
398
|
+
const reason = String(visualDelta.reason || "").toLowerCase();
|
|
399
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
400
|
+
}
|
|
394
401
|
function visualDeltaShipGateReason(state = {}) {
|
|
395
402
|
if (!visualDeltaRequiredForState(state)) return null;
|
|
396
403
|
const visualDelta = visualDeltaForState(state);
|
|
@@ -5,16 +5,16 @@ import {
|
|
|
5
5
|
createRunStatusSnapshot,
|
|
6
6
|
normalizeRunParams,
|
|
7
7
|
setRunStatus
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-OHJQRDST.js";
|
|
9
9
|
import {
|
|
10
10
|
createRiddleProofRunCard
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-Y2KTBACQ.js";
|
|
12
12
|
import {
|
|
13
13
|
noImplementationModeFor,
|
|
14
14
|
visualDeltaForState,
|
|
15
15
|
visualDeltaRequiredForState,
|
|
16
16
|
visualDeltaShipGateReason
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-GBVEQQIM.js";
|
|
18
18
|
import {
|
|
19
19
|
authorPacketPayloadFromCheckpointResponse,
|
|
20
20
|
buildCheckpointPacketForEngineResult,
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
normalizeCheckpointResponse,
|
|
25
25
|
proofContractFromAuthorCheckpointResponse,
|
|
26
26
|
statePathsForRunState
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-2CFVREFI.js";
|
|
28
28
|
import {
|
|
29
29
|
applyTerminalMetadata,
|
|
30
30
|
compactRecord,
|
|
@@ -235,6 +235,16 @@ function baseContinuation(result) {
|
|
|
235
235
|
continue_from_checkpoint: true
|
|
236
236
|
};
|
|
237
237
|
}
|
|
238
|
+
function carryRequestControlFlags(params, request) {
|
|
239
|
+
if (!noImplementationModeFor(request)) return params;
|
|
240
|
+
return compactRecord({
|
|
241
|
+
...params,
|
|
242
|
+
mode: request.mode,
|
|
243
|
+
implementation_mode: request.implementation_mode || "none",
|
|
244
|
+
require_diff: request.require_diff ?? false,
|
|
245
|
+
allow_code_changes: request.allow_code_changes ?? false
|
|
246
|
+
});
|
|
247
|
+
}
|
|
238
248
|
function initialRunParams(request, input, state) {
|
|
239
249
|
return compactRecord({
|
|
240
250
|
action: "run",
|
|
@@ -1389,7 +1399,10 @@ async function runRiddleProofEngineHarness(input) {
|
|
|
1389
1399
|
message
|
|
1390
1400
|
});
|
|
1391
1401
|
}
|
|
1392
|
-
let nextParams =
|
|
1402
|
+
let nextParams = carryRequestControlFlags(
|
|
1403
|
+
input.resume_params || checkpointContinuation.next || initialRunParams(request, input, state),
|
|
1404
|
+
request
|
|
1405
|
+
);
|
|
1393
1406
|
let lastResult = null;
|
|
1394
1407
|
const stageIterations = {};
|
|
1395
1408
|
for (let index = 0; index < maxIterations; index += 1) {
|
|
@@ -1502,7 +1515,7 @@ async function runRiddleProofEngineHarness(input) {
|
|
|
1502
1515
|
message: "The harness route returned no next step."
|
|
1503
1516
|
});
|
|
1504
1517
|
}
|
|
1505
|
-
nextParams = routed.next;
|
|
1518
|
+
nextParams = carryRequestControlFlags(routed.next, request);
|
|
1506
1519
|
}
|
|
1507
1520
|
return blockerResult(state, lastResult, {
|
|
1508
1521
|
code: "max_iterations_reached",
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
appendStageHeartbeat,
|
|
4
4
|
createRunState,
|
|
5
5
|
setRunStatus
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OHJQRDST.js";
|
|
7
7
|
import {
|
|
8
8
|
noImplementationModeFor
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GBVEQQIM.js";
|
|
10
10
|
import {
|
|
11
11
|
createRunResult
|
|
12
12
|
} from "./chunk-VY4Y5U57.js";
|
package/dist/cli.cjs
CHANGED
|
@@ -385,6 +385,7 @@ function normalizedVerificationMode(state = {}) {
|
|
|
385
385
|
return String(state?.verification_mode || "proof").trim().toLowerCase() || "proof";
|
|
386
386
|
}
|
|
387
387
|
function visualDeltaRequiredForState(state = {}) {
|
|
388
|
+
if (noImplementationModeFor(state) || visualDeltaNotApplicableForNoImplementation2(state)) return false;
|
|
388
389
|
const bundle = objectValue(state?.evidence_bundle);
|
|
389
390
|
const contract = objectValue(bundle.artifact_contract);
|
|
390
391
|
const required = objectValue(contract.required);
|
|
@@ -399,6 +400,12 @@ function visualDeltaForState(state = {}) {
|
|
|
399
400
|
const request = objectValue(state?.proof_assessment_request);
|
|
400
401
|
return objectValue(request.visual_delta);
|
|
401
402
|
}
|
|
403
|
+
function visualDeltaNotApplicableForNoImplementation2(state = {}) {
|
|
404
|
+
const visualDelta = visualDeltaForState(state);
|
|
405
|
+
if (String(visualDelta.status || "").trim() !== "not_applicable") return false;
|
|
406
|
+
const reason = String(visualDelta.reason || "").toLowerCase();
|
|
407
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
408
|
+
}
|
|
402
409
|
function visualDeltaShipGateReason(state = {}) {
|
|
403
410
|
if (!visualDeltaRequiredForState(state)) return null;
|
|
404
411
|
const visualDelta = visualDeltaForState(state);
|
|
@@ -1654,6 +1661,10 @@ async function executeWorkflow(params, pluginConfig, resolvedConfig) {
|
|
|
1654
1661
|
const timer = beginRuntimeStep(config.statePath, action, step, stepWorkflowFile);
|
|
1655
1662
|
let output;
|
|
1656
1663
|
try {
|
|
1664
|
+
if (step === "setup") {
|
|
1665
|
+
(0, import_node_fs2.mkdirSync)(import_node_path2.default.dirname(config.argsPath), { recursive: true });
|
|
1666
|
+
(0, import_node_fs2.writeFileSync)(config.argsPath, JSON.stringify(args, null, 2));
|
|
1667
|
+
}
|
|
1657
1668
|
output = JSON.parse(
|
|
1658
1669
|
(0, import_node_child_process.execFileSync)(lobsterCommand, [...lobsterPrefix, "run", "--file", stepWorkflowFile, "--args-json", JSON.stringify(args)], {
|
|
1659
1670
|
encoding: "utf-8",
|
|
@@ -3530,6 +3541,24 @@ function visualDeltaFromState(fullState) {
|
|
|
3530
3541
|
const proofAssessmentRequest = recordValue(fullState.proof_assessment_request);
|
|
3531
3542
|
return recordValue(proofAssessmentRequest?.visual_delta) || null;
|
|
3532
3543
|
}
|
|
3544
|
+
function normalizedText(value) {
|
|
3545
|
+
return typeof value === "string" ? value.trim().toLowerCase() : "";
|
|
3546
|
+
}
|
|
3547
|
+
function noImplementationModeForCheckpoint(request, fullState) {
|
|
3548
|
+
const requestRecord = recordValue(request) || {};
|
|
3549
|
+
const mode = normalizedText(
|
|
3550
|
+
requestRecord.mode || requestRecord.workflow_mode || fullState.mode || fullState.workflow_mode
|
|
3551
|
+
);
|
|
3552
|
+
const implementationMode = normalizedText(requestRecord.implementation_mode || fullState.implementation_mode);
|
|
3553
|
+
const requireDiff = requestRecord.require_diff ?? fullState.require_diff;
|
|
3554
|
+
const allowCodeChanges = requestRecord.allow_code_changes ?? fullState.allow_code_changes;
|
|
3555
|
+
return mode === "audit" || mode === "profile" || implementationMode === "none" || requireDiff === false || allowCodeChanges === false;
|
|
3556
|
+
}
|
|
3557
|
+
function visualDeltaNotApplicableForNoImplementation(visualDelta) {
|
|
3558
|
+
if (String(visualDelta?.status || "").trim() !== "not_applicable") return false;
|
|
3559
|
+
const reason = String(visualDelta?.reason || "").toLowerCase();
|
|
3560
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
3561
|
+
}
|
|
3533
3562
|
function verificationModeRequiresVisualDelta(value) {
|
|
3534
3563
|
const mode = String(value || "proof").trim().toLowerCase();
|
|
3535
3564
|
return [
|
|
@@ -3567,7 +3596,9 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
3567
3596
|
const requiredSignals = recordValue(recordValue(artifactContract)?.required);
|
|
3568
3597
|
const visualDelta = visualDeltaFromState(fullState);
|
|
3569
3598
|
const verificationMode = nonEmptyString(bundle?.verification_mode) || nonEmptyString(fullState.verification_mode) || nonEmptyString(input.request.verification_mode) || "proof";
|
|
3570
|
-
const
|
|
3599
|
+
const noImplementationMode = noImplementationModeForCheckpoint(input.request, fullState);
|
|
3600
|
+
const noImplementationVisualDelta = visualDeltaNotApplicableForNoImplementation(visualDelta);
|
|
3601
|
+
const visualDeltaRequired = !noImplementationMode && !noImplementationVisualDelta && requiredSignals?.visual_delta !== false && (requiredSignals?.visual_delta === true || verificationModeRequiresVisualDelta(verificationMode));
|
|
3571
3602
|
const evidenceIssueCode2 = visualDeltaIssueCode(visualDelta, visualDeltaRequired);
|
|
3572
3603
|
const summary = nonEmptyString(input.engineResult.summary) || nonEmptyString(fullState.verify_summary) || "Verify captured evidence and needs a supervising proof assessment.";
|
|
3573
3604
|
const recoveryHint = evidenceIssueCode2 ? "Required visual_delta evidence is incomplete. Keep this same run in verify/evidence recovery with decision=revise_capture and continue_with_stage=verify unless the evidence proves an implementation or recon problem." : "Assess whether the current artifacts prove the requested change, then choose the next stage.";
|
|
@@ -3600,7 +3631,7 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
3600
3631
|
prod_cdn: fullState.prod_cdn || null,
|
|
3601
3632
|
after_cdn: fullState.after_cdn || null,
|
|
3602
3633
|
visual_delta_required: visualDeltaRequired,
|
|
3603
|
-
visual_delta_ready: visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
3634
|
+
visual_delta_ready: !visualDeltaRequired || visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
3604
3635
|
visual_delta: jsonCloneRecord(visualDelta),
|
|
3605
3636
|
evidence_issue_code: evidenceIssueCode2,
|
|
3606
3637
|
proof_assessment_request: jsonCloneRecord(proofAssessmentRequest),
|
|
@@ -4438,6 +4469,16 @@ function baseContinuation(result) {
|
|
|
4438
4469
|
continue_from_checkpoint: true
|
|
4439
4470
|
};
|
|
4440
4471
|
}
|
|
4472
|
+
function carryRequestControlFlags(params, request) {
|
|
4473
|
+
if (!noImplementationModeFor(request)) return params;
|
|
4474
|
+
return compactRecord({
|
|
4475
|
+
...params,
|
|
4476
|
+
mode: request.mode,
|
|
4477
|
+
implementation_mode: request.implementation_mode || "none",
|
|
4478
|
+
require_diff: request.require_diff ?? false,
|
|
4479
|
+
allow_code_changes: request.allow_code_changes ?? false
|
|
4480
|
+
});
|
|
4481
|
+
}
|
|
4441
4482
|
function initialRunParams(request, input, state) {
|
|
4442
4483
|
return compactRecord({
|
|
4443
4484
|
action: "run",
|
|
@@ -5592,7 +5633,10 @@ async function runRiddleProofEngineHarness(input) {
|
|
|
5592
5633
|
message
|
|
5593
5634
|
});
|
|
5594
5635
|
}
|
|
5595
|
-
let nextParams =
|
|
5636
|
+
let nextParams = carryRequestControlFlags(
|
|
5637
|
+
input.resume_params || checkpointContinuation.next || initialRunParams(request, input, state),
|
|
5638
|
+
request
|
|
5639
|
+
);
|
|
5596
5640
|
let lastResult = null;
|
|
5597
5641
|
const stageIterations = {};
|
|
5598
5642
|
for (let index = 0; index < maxIterations; index += 1) {
|
|
@@ -5705,7 +5749,7 @@ async function runRiddleProofEngineHarness(input) {
|
|
|
5705
5749
|
message: "The harness route returned no next step."
|
|
5706
5750
|
});
|
|
5707
5751
|
}
|
|
5708
|
-
nextParams = routed.next;
|
|
5752
|
+
nextParams = carryRequestControlFlags(routed.next, request);
|
|
5709
5753
|
}
|
|
5710
5754
|
return blockerResult(state, lastResult, {
|
|
5711
5755
|
code: "max_iterations_reached",
|
package/dist/cli.js
CHANGED
|
@@ -23,13 +23,13 @@ import {
|
|
|
23
23
|
createDisabledRiddleProofAgentAdapter,
|
|
24
24
|
readRiddleProofRunStatus,
|
|
25
25
|
runRiddleProofEngineHarness
|
|
26
|
-
} from "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
26
|
+
} from "./chunk-QUAZAMOM.js";
|
|
27
|
+
import "./chunk-OHJQRDST.js";
|
|
28
|
+
import "./chunk-Y2KTBACQ.js";
|
|
29
|
+
import "./chunk-GBVEQQIM.js";
|
|
30
30
|
import {
|
|
31
31
|
createCheckpointResponseTemplate
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-2CFVREFI.js";
|
|
33
33
|
import "./chunk-JFQXAJH2.js";
|
|
34
34
|
import {
|
|
35
35
|
createCodexExecAgentAdapter,
|
package/dist/engine-harness.cjs
CHANGED
|
@@ -385,6 +385,7 @@ function normalizedVerificationMode(state = {}) {
|
|
|
385
385
|
return String(state?.verification_mode || "proof").trim().toLowerCase() || "proof";
|
|
386
386
|
}
|
|
387
387
|
function visualDeltaRequiredForState(state = {}) {
|
|
388
|
+
if (noImplementationModeFor(state) || visualDeltaNotApplicableForNoImplementation2(state)) return false;
|
|
388
389
|
const bundle = objectValue(state?.evidence_bundle);
|
|
389
390
|
const contract = objectValue(bundle.artifact_contract);
|
|
390
391
|
const required = objectValue(contract.required);
|
|
@@ -399,6 +400,12 @@ function visualDeltaForState(state = {}) {
|
|
|
399
400
|
const request = objectValue(state?.proof_assessment_request);
|
|
400
401
|
return objectValue(request.visual_delta);
|
|
401
402
|
}
|
|
403
|
+
function visualDeltaNotApplicableForNoImplementation2(state = {}) {
|
|
404
|
+
const visualDelta = visualDeltaForState(state);
|
|
405
|
+
if (String(visualDelta.status || "").trim() !== "not_applicable") return false;
|
|
406
|
+
const reason = String(visualDelta.reason || "").toLowerCase();
|
|
407
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
408
|
+
}
|
|
402
409
|
function visualDeltaShipGateReason(state = {}) {
|
|
403
410
|
if (!visualDeltaRequiredForState(state)) return null;
|
|
404
411
|
const visualDelta = visualDeltaForState(state);
|
|
@@ -1654,6 +1661,10 @@ async function executeWorkflow(params, pluginConfig, resolvedConfig) {
|
|
|
1654
1661
|
const timer = beginRuntimeStep(config.statePath, action, step, stepWorkflowFile);
|
|
1655
1662
|
let output;
|
|
1656
1663
|
try {
|
|
1664
|
+
if (step === "setup") {
|
|
1665
|
+
(0, import_node_fs2.mkdirSync)(import_node_path2.default.dirname(config.argsPath), { recursive: true });
|
|
1666
|
+
(0, import_node_fs2.writeFileSync)(config.argsPath, JSON.stringify(args, null, 2));
|
|
1667
|
+
}
|
|
1657
1668
|
output = JSON.parse(
|
|
1658
1669
|
(0, import_node_child_process.execFileSync)(lobsterCommand, [...lobsterPrefix, "run", "--file", stepWorkflowFile, "--args-json", JSON.stringify(args)], {
|
|
1659
1670
|
encoding: "utf-8",
|
|
@@ -3533,6 +3544,24 @@ function visualDeltaFromState(fullState) {
|
|
|
3533
3544
|
const proofAssessmentRequest = recordValue(fullState.proof_assessment_request);
|
|
3534
3545
|
return recordValue(proofAssessmentRequest?.visual_delta) || null;
|
|
3535
3546
|
}
|
|
3547
|
+
function normalizedText(value) {
|
|
3548
|
+
return typeof value === "string" ? value.trim().toLowerCase() : "";
|
|
3549
|
+
}
|
|
3550
|
+
function noImplementationModeForCheckpoint(request, fullState) {
|
|
3551
|
+
const requestRecord = recordValue(request) || {};
|
|
3552
|
+
const mode = normalizedText(
|
|
3553
|
+
requestRecord.mode || requestRecord.workflow_mode || fullState.mode || fullState.workflow_mode
|
|
3554
|
+
);
|
|
3555
|
+
const implementationMode = normalizedText(requestRecord.implementation_mode || fullState.implementation_mode);
|
|
3556
|
+
const requireDiff = requestRecord.require_diff ?? fullState.require_diff;
|
|
3557
|
+
const allowCodeChanges = requestRecord.allow_code_changes ?? fullState.allow_code_changes;
|
|
3558
|
+
return mode === "audit" || mode === "profile" || implementationMode === "none" || requireDiff === false || allowCodeChanges === false;
|
|
3559
|
+
}
|
|
3560
|
+
function visualDeltaNotApplicableForNoImplementation(visualDelta) {
|
|
3561
|
+
if (String(visualDelta?.status || "").trim() !== "not_applicable") return false;
|
|
3562
|
+
const reason = String(visualDelta?.reason || "").toLowerCase();
|
|
3563
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
3564
|
+
}
|
|
3536
3565
|
function verificationModeRequiresVisualDelta(value) {
|
|
3537
3566
|
const mode = String(value || "proof").trim().toLowerCase();
|
|
3538
3567
|
return [
|
|
@@ -3570,7 +3599,9 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
3570
3599
|
const requiredSignals = recordValue(recordValue(artifactContract)?.required);
|
|
3571
3600
|
const visualDelta = visualDeltaFromState(fullState);
|
|
3572
3601
|
const verificationMode = nonEmptyString(bundle?.verification_mode) || nonEmptyString(fullState.verification_mode) || nonEmptyString(input.request.verification_mode) || "proof";
|
|
3573
|
-
const
|
|
3602
|
+
const noImplementationMode = noImplementationModeForCheckpoint(input.request, fullState);
|
|
3603
|
+
const noImplementationVisualDelta = visualDeltaNotApplicableForNoImplementation(visualDelta);
|
|
3604
|
+
const visualDeltaRequired = !noImplementationMode && !noImplementationVisualDelta && requiredSignals?.visual_delta !== false && (requiredSignals?.visual_delta === true || verificationModeRequiresVisualDelta(verificationMode));
|
|
3574
3605
|
const evidenceIssueCode2 = visualDeltaIssueCode(visualDelta, visualDeltaRequired);
|
|
3575
3606
|
const summary = nonEmptyString(input.engineResult.summary) || nonEmptyString(fullState.verify_summary) || "Verify captured evidence and needs a supervising proof assessment.";
|
|
3576
3607
|
const recoveryHint = evidenceIssueCode2 ? "Required visual_delta evidence is incomplete. Keep this same run in verify/evidence recovery with decision=revise_capture and continue_with_stage=verify unless the evidence proves an implementation or recon problem." : "Assess whether the current artifacts prove the requested change, then choose the next stage.";
|
|
@@ -3603,7 +3634,7 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
3603
3634
|
prod_cdn: fullState.prod_cdn || null,
|
|
3604
3635
|
after_cdn: fullState.after_cdn || null,
|
|
3605
3636
|
visual_delta_required: visualDeltaRequired,
|
|
3606
|
-
visual_delta_ready: visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
3637
|
+
visual_delta_ready: !visualDeltaRequired || visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
3607
3638
|
visual_delta: jsonCloneRecord(visualDelta),
|
|
3608
3639
|
evidence_issue_code: evidenceIssueCode2,
|
|
3609
3640
|
proof_assessment_request: jsonCloneRecord(proofAssessmentRequest),
|
|
@@ -4367,6 +4398,16 @@ function baseContinuation(result) {
|
|
|
4367
4398
|
continue_from_checkpoint: true
|
|
4368
4399
|
};
|
|
4369
4400
|
}
|
|
4401
|
+
function carryRequestControlFlags(params, request) {
|
|
4402
|
+
if (!noImplementationModeFor(request)) return params;
|
|
4403
|
+
return compactRecord({
|
|
4404
|
+
...params,
|
|
4405
|
+
mode: request.mode,
|
|
4406
|
+
implementation_mode: request.implementation_mode || "none",
|
|
4407
|
+
require_diff: request.require_diff ?? false,
|
|
4408
|
+
allow_code_changes: request.allow_code_changes ?? false
|
|
4409
|
+
});
|
|
4410
|
+
}
|
|
4370
4411
|
function initialRunParams(request, input, state) {
|
|
4371
4412
|
return compactRecord({
|
|
4372
4413
|
action: "run",
|
|
@@ -5521,7 +5562,10 @@ async function runRiddleProofEngineHarness(input) {
|
|
|
5521
5562
|
message
|
|
5522
5563
|
});
|
|
5523
5564
|
}
|
|
5524
|
-
let nextParams =
|
|
5565
|
+
let nextParams = carryRequestControlFlags(
|
|
5566
|
+
input.resume_params || checkpointContinuation.next || initialRunParams(request, input, state),
|
|
5567
|
+
request
|
|
5568
|
+
);
|
|
5525
5569
|
let lastResult = null;
|
|
5526
5570
|
const stageIterations = {};
|
|
5527
5571
|
for (let index = 0; index < maxIterations; index += 1) {
|
|
@@ -5634,7 +5678,7 @@ async function runRiddleProofEngineHarness(input) {
|
|
|
5634
5678
|
message: "The harness route returned no next step."
|
|
5635
5679
|
});
|
|
5636
5680
|
}
|
|
5637
|
-
nextParams = routed.next;
|
|
5681
|
+
nextParams = carryRequestControlFlags(routed.next, request);
|
|
5638
5682
|
}
|
|
5639
5683
|
return blockerResult(state, lastResult, {
|
|
5640
5684
|
code: "max_iterations_reached",
|
package/dist/engine-harness.js
CHANGED
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
createDisabledRiddleProofAgentAdapter,
|
|
3
3
|
readRiddleProofRunStatus,
|
|
4
4
|
runRiddleProofEngineHarness
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-QUAZAMOM.js";
|
|
6
|
+
import "./chunk-OHJQRDST.js";
|
|
7
|
+
import "./chunk-Y2KTBACQ.js";
|
|
8
|
+
import "./chunk-GBVEQQIM.js";
|
|
9
|
+
import "./chunk-2CFVREFI.js";
|
|
10
10
|
import "./chunk-VY4Y5U57.js";
|
|
11
11
|
export {
|
|
12
12
|
createDisabledRiddleProofAgentAdapter,
|
package/dist/index.cjs
CHANGED
|
@@ -385,6 +385,7 @@ function normalizedVerificationMode(state = {}) {
|
|
|
385
385
|
return String(state?.verification_mode || "proof").trim().toLowerCase() || "proof";
|
|
386
386
|
}
|
|
387
387
|
function visualDeltaRequiredForState(state = {}) {
|
|
388
|
+
if (noImplementationModeFor(state) || visualDeltaNotApplicableForNoImplementation2(state)) return false;
|
|
388
389
|
const bundle = objectValue(state?.evidence_bundle);
|
|
389
390
|
const contract = objectValue(bundle.artifact_contract);
|
|
390
391
|
const required = objectValue(contract.required);
|
|
@@ -399,6 +400,12 @@ function visualDeltaForState(state = {}) {
|
|
|
399
400
|
const request = objectValue(state?.proof_assessment_request);
|
|
400
401
|
return objectValue(request.visual_delta);
|
|
401
402
|
}
|
|
403
|
+
function visualDeltaNotApplicableForNoImplementation2(state = {}) {
|
|
404
|
+
const visualDelta = visualDeltaForState(state);
|
|
405
|
+
if (String(visualDelta.status || "").trim() !== "not_applicable") return false;
|
|
406
|
+
const reason = String(visualDelta.reason || "").toLowerCase();
|
|
407
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
408
|
+
}
|
|
402
409
|
function visualDeltaShipGateReason(state = {}) {
|
|
403
410
|
if (!visualDeltaRequiredForState(state)) return null;
|
|
404
411
|
const visualDelta = visualDeltaForState(state);
|
|
@@ -1654,6 +1661,10 @@ async function executeWorkflow(params, pluginConfig, resolvedConfig) {
|
|
|
1654
1661
|
const timer = beginRuntimeStep(config.statePath, action, step, stepWorkflowFile);
|
|
1655
1662
|
let output;
|
|
1656
1663
|
try {
|
|
1664
|
+
if (step === "setup") {
|
|
1665
|
+
(0, import_node_fs2.mkdirSync)(import_node_path2.default.dirname(config.argsPath), { recursive: true });
|
|
1666
|
+
(0, import_node_fs2.writeFileSync)(config.argsPath, JSON.stringify(args, null, 2));
|
|
1667
|
+
}
|
|
1657
1668
|
output = JSON.parse(
|
|
1658
1669
|
(0, import_node_child_process.execFileSync)(lobsterCommand, [...lobsterPrefix, "run", "--file", stepWorkflowFile, "--args-json", JSON.stringify(args)], {
|
|
1659
1670
|
encoding: "utf-8",
|
|
@@ -3647,6 +3658,24 @@ function visualDeltaFromState(fullState) {
|
|
|
3647
3658
|
const proofAssessmentRequest = recordValue(fullState.proof_assessment_request);
|
|
3648
3659
|
return recordValue(proofAssessmentRequest?.visual_delta) || null;
|
|
3649
3660
|
}
|
|
3661
|
+
function normalizedText(value) {
|
|
3662
|
+
return typeof value === "string" ? value.trim().toLowerCase() : "";
|
|
3663
|
+
}
|
|
3664
|
+
function noImplementationModeForCheckpoint(request, fullState) {
|
|
3665
|
+
const requestRecord = recordValue(request) || {};
|
|
3666
|
+
const mode = normalizedText(
|
|
3667
|
+
requestRecord.mode || requestRecord.workflow_mode || fullState.mode || fullState.workflow_mode
|
|
3668
|
+
);
|
|
3669
|
+
const implementationMode = normalizedText(requestRecord.implementation_mode || fullState.implementation_mode);
|
|
3670
|
+
const requireDiff = requestRecord.require_diff ?? fullState.require_diff;
|
|
3671
|
+
const allowCodeChanges = requestRecord.allow_code_changes ?? fullState.allow_code_changes;
|
|
3672
|
+
return mode === "audit" || mode === "profile" || implementationMode === "none" || requireDiff === false || allowCodeChanges === false;
|
|
3673
|
+
}
|
|
3674
|
+
function visualDeltaNotApplicableForNoImplementation(visualDelta) {
|
|
3675
|
+
if (String(visualDelta?.status || "").trim() !== "not_applicable") return false;
|
|
3676
|
+
const reason = String(visualDelta?.reason || "").toLowerCase();
|
|
3677
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
3678
|
+
}
|
|
3650
3679
|
function verificationModeRequiresVisualDelta(value) {
|
|
3651
3680
|
const mode = String(value || "proof").trim().toLowerCase();
|
|
3652
3681
|
return [
|
|
@@ -3684,7 +3713,9 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
3684
3713
|
const requiredSignals = recordValue(recordValue(artifactContract)?.required);
|
|
3685
3714
|
const visualDelta = visualDeltaFromState(fullState);
|
|
3686
3715
|
const verificationMode = nonEmptyString(bundle?.verification_mode) || nonEmptyString(fullState.verification_mode) || nonEmptyString(input.request.verification_mode) || "proof";
|
|
3687
|
-
const
|
|
3716
|
+
const noImplementationMode = noImplementationModeForCheckpoint(input.request, fullState);
|
|
3717
|
+
const noImplementationVisualDelta = visualDeltaNotApplicableForNoImplementation(visualDelta);
|
|
3718
|
+
const visualDeltaRequired = !noImplementationMode && !noImplementationVisualDelta && requiredSignals?.visual_delta !== false && (requiredSignals?.visual_delta === true || verificationModeRequiresVisualDelta(verificationMode));
|
|
3688
3719
|
const evidenceIssueCode2 = visualDeltaIssueCode(visualDelta, visualDeltaRequired);
|
|
3689
3720
|
const summary = nonEmptyString(input.engineResult.summary) || nonEmptyString(fullState.verify_summary) || "Verify captured evidence and needs a supervising proof assessment.";
|
|
3690
3721
|
const recoveryHint = evidenceIssueCode2 ? "Required visual_delta evidence is incomplete. Keep this same run in verify/evidence recovery with decision=revise_capture and continue_with_stage=verify unless the evidence proves an implementation or recon problem." : "Assess whether the current artifacts prove the requested change, then choose the next stage.";
|
|
@@ -3717,7 +3748,7 @@ function buildProofAssessmentCheckpointPacket(input) {
|
|
|
3717
3748
|
prod_cdn: fullState.prod_cdn || null,
|
|
3718
3749
|
after_cdn: fullState.after_cdn || null,
|
|
3719
3750
|
visual_delta_required: visualDeltaRequired,
|
|
3720
|
-
visual_delta_ready: visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
3751
|
+
visual_delta_ready: !visualDeltaRequired || visualDelta?.status === "measured" && visualDelta?.passed === true,
|
|
3721
3752
|
visual_delta: jsonCloneRecord(visualDelta),
|
|
3722
3753
|
evidence_issue_code: evidenceIssueCode2,
|
|
3723
3754
|
proof_assessment_request: jsonCloneRecord(proofAssessmentRequest),
|
|
@@ -5101,6 +5132,16 @@ function baseContinuation(result) {
|
|
|
5101
5132
|
continue_from_checkpoint: true
|
|
5102
5133
|
};
|
|
5103
5134
|
}
|
|
5135
|
+
function carryRequestControlFlags(params, request) {
|
|
5136
|
+
if (!noImplementationModeFor(request)) return params;
|
|
5137
|
+
return compactRecord({
|
|
5138
|
+
...params,
|
|
5139
|
+
mode: request.mode,
|
|
5140
|
+
implementation_mode: request.implementation_mode || "none",
|
|
5141
|
+
require_diff: request.require_diff ?? false,
|
|
5142
|
+
allow_code_changes: request.allow_code_changes ?? false
|
|
5143
|
+
});
|
|
5144
|
+
}
|
|
5104
5145
|
function initialRunParams(request, input, state) {
|
|
5105
5146
|
return compactRecord({
|
|
5106
5147
|
action: "run",
|
|
@@ -6255,7 +6296,10 @@ async function runRiddleProofEngineHarness(input) {
|
|
|
6255
6296
|
message
|
|
6256
6297
|
});
|
|
6257
6298
|
}
|
|
6258
|
-
let nextParams =
|
|
6299
|
+
let nextParams = carryRequestControlFlags(
|
|
6300
|
+
input.resume_params || checkpointContinuation.next || initialRunParams(request, input, state),
|
|
6301
|
+
request
|
|
6302
|
+
);
|
|
6259
6303
|
let lastResult = null;
|
|
6260
6304
|
const stageIterations = {};
|
|
6261
6305
|
for (let index = 0; index < maxIterations; index += 1) {
|
|
@@ -6368,7 +6412,7 @@ async function runRiddleProofEngineHarness(input) {
|
|
|
6368
6412
|
message: "The harness route returned no next step."
|
|
6369
6413
|
});
|
|
6370
6414
|
}
|
|
6371
|
-
nextParams = routed.next;
|
|
6415
|
+
nextParams = carryRequestControlFlags(routed.next, request);
|
|
6372
6416
|
}
|
|
6373
6417
|
return blockerResult(state, lastResult, {
|
|
6374
6418
|
code: "max_iterations_reached",
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runRiddleProof
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TGHTM66Z.js";
|
|
4
4
|
import "./chunk-6F4PWJZI.js";
|
|
5
5
|
import {
|
|
6
6
|
RIDDLE_PROOF_PLAYABILITY_ASSESSMENT_VERSION,
|
|
@@ -95,7 +95,7 @@ import {
|
|
|
95
95
|
createDisabledRiddleProofAgentAdapter,
|
|
96
96
|
readRiddleProofRunStatus,
|
|
97
97
|
runRiddleProofEngineHarness
|
|
98
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-QUAZAMOM.js";
|
|
99
99
|
import {
|
|
100
100
|
RIDDLE_PROOF_RUN_STATE_VERSION,
|
|
101
101
|
appendRunEvent,
|
|
@@ -107,12 +107,12 @@ import {
|
|
|
107
107
|
normalizePrLifecycleState,
|
|
108
108
|
normalizeRunParams,
|
|
109
109
|
setRunStatus
|
|
110
|
-
} from "./chunk-
|
|
110
|
+
} from "./chunk-OHJQRDST.js";
|
|
111
111
|
import {
|
|
112
112
|
RIDDLE_PROOF_RUN_CARD_VERSION,
|
|
113
113
|
createRiddleProofRunCard
|
|
114
|
-
} from "./chunk-
|
|
115
|
-
import "./chunk-
|
|
114
|
+
} from "./chunk-Y2KTBACQ.js";
|
|
115
|
+
import "./chunk-GBVEQQIM.js";
|
|
116
116
|
import {
|
|
117
117
|
RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,
|
|
118
118
|
RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION,
|
|
@@ -128,7 +128,7 @@ import {
|
|
|
128
128
|
normalizeCheckpointResponse,
|
|
129
129
|
proofContractFromAuthorCheckpointResponse,
|
|
130
130
|
statePathsForRunState
|
|
131
|
-
} from "./chunk-
|
|
131
|
+
} from "./chunk-2CFVREFI.js";
|
|
132
132
|
import "./chunk-JFQXAJH2.js";
|
|
133
133
|
import {
|
|
134
134
|
createCodexExecAgentAdapter,
|
package/dist/openclaw.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeIntegrationContext,
|
|
3
3
|
normalizeRunParams
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-OHJQRDST.js";
|
|
5
|
+
import "./chunk-Y2KTBACQ.js";
|
|
6
|
+
import "./chunk-2CFVREFI.js";
|
|
7
7
|
import {
|
|
8
8
|
compactRecord
|
|
9
9
|
} from "./chunk-VY4Y5U57.js";
|
package/dist/proof-run-core.cjs
CHANGED
|
@@ -438,6 +438,7 @@ function normalizedVerificationMode(state = {}) {
|
|
|
438
438
|
return String(state?.verification_mode || "proof").trim().toLowerCase() || "proof";
|
|
439
439
|
}
|
|
440
440
|
function visualDeltaRequiredForState(state = {}) {
|
|
441
|
+
if (noImplementationModeFor(state) || visualDeltaNotApplicableForNoImplementation(state)) return false;
|
|
441
442
|
const bundle = objectValue(state?.evidence_bundle);
|
|
442
443
|
const contract = objectValue(bundle.artifact_contract);
|
|
443
444
|
const required = objectValue(contract.required);
|
|
@@ -452,6 +453,12 @@ function visualDeltaForState(state = {}) {
|
|
|
452
453
|
const request = objectValue(state?.proof_assessment_request);
|
|
453
454
|
return objectValue(request.visual_delta);
|
|
454
455
|
}
|
|
456
|
+
function visualDeltaNotApplicableForNoImplementation(state = {}) {
|
|
457
|
+
const visualDelta = visualDeltaForState(state);
|
|
458
|
+
if (String(visualDelta.status || "").trim() !== "not_applicable") return false;
|
|
459
|
+
const reason = String(visualDelta.reason || "").toLowerCase();
|
|
460
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
461
|
+
}
|
|
455
462
|
function visualDeltaShipGateReason(state = {}) {
|
|
456
463
|
if (!visualDeltaRequiredForState(state)) return null;
|
|
457
464
|
const visualDelta = visualDeltaForState(state);
|
package/dist/proof-run-core.js
CHANGED
|
@@ -418,6 +418,7 @@ function normalizedVerificationMode(state = {}) {
|
|
|
418
418
|
return String(state?.verification_mode || "proof").trim().toLowerCase() || "proof";
|
|
419
419
|
}
|
|
420
420
|
function visualDeltaRequiredForState(state = {}) {
|
|
421
|
+
if (noImplementationModeFor(state) || visualDeltaNotApplicableForNoImplementation(state)) return false;
|
|
421
422
|
const bundle = objectValue(state?.evidence_bundle);
|
|
422
423
|
const contract = objectValue(bundle.artifact_contract);
|
|
423
424
|
const required = objectValue(contract.required);
|
|
@@ -432,6 +433,12 @@ function visualDeltaForState(state = {}) {
|
|
|
432
433
|
const request = objectValue(state?.proof_assessment_request);
|
|
433
434
|
return objectValue(request.visual_delta);
|
|
434
435
|
}
|
|
436
|
+
function visualDeltaNotApplicableForNoImplementation(state = {}) {
|
|
437
|
+
const visualDelta = visualDeltaForState(state);
|
|
438
|
+
if (String(visualDelta.status || "").trim() !== "not_applicable") return false;
|
|
439
|
+
const reason = String(visualDelta.reason || "").toLowerCase();
|
|
440
|
+
return reason.includes("audit/no-diff") || reason.includes("does not require a before/after implementation delta");
|
|
441
|
+
}
|
|
435
442
|
function visualDeltaShipGateReason(state = {}) {
|
|
436
443
|
if (!visualDeltaRequiredForState(state)) return null;
|
|
437
444
|
const visualDelta = visualDeltaForState(state);
|
|
@@ -1652,6 +1659,10 @@ async function executeWorkflow(params, pluginConfig, resolvedConfig) {
|
|
|
1652
1659
|
const timer = beginRuntimeStep(config.statePath, action, step, stepWorkflowFile);
|
|
1653
1660
|
let output;
|
|
1654
1661
|
try {
|
|
1662
|
+
if (step === "setup") {
|
|
1663
|
+
(0, import_node_fs2.mkdirSync)(import_node_path2.default.dirname(config.argsPath), { recursive: true });
|
|
1664
|
+
(0, import_node_fs2.writeFileSync)(config.argsPath, JSON.stringify(args, null, 2));
|
|
1665
|
+
}
|
|
1655
1666
|
output = JSON.parse(
|
|
1656
1667
|
(0, import_node_child_process.execFileSync)(lobsterCommand, [...lobsterPrefix, "run", "--file", stepWorkflowFile, "--args-json", JSON.stringify(args)], {
|
|
1657
1668
|
encoding: "utf-8",
|
package/dist/proof-run-engine.js
CHANGED
|
@@ -15,11 +15,11 @@ import {
|
|
|
15
15
|
validateShipGate,
|
|
16
16
|
workflowFile,
|
|
17
17
|
writeState
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-GBVEQQIM.js";
|
|
19
19
|
|
|
20
20
|
// src/proof-run-engine.ts
|
|
21
21
|
import { execFileSync } from "child_process";
|
|
22
|
-
import { existsSync, mkdirSync } from "fs";
|
|
22
|
+
import { existsSync, mkdirSync, writeFileSync } from "fs";
|
|
23
23
|
import path from "path";
|
|
24
24
|
function snapshotFor(statePath) {
|
|
25
25
|
return summarizeState(readState(statePath));
|
|
@@ -647,6 +647,10 @@ async function executeWorkflow(params, pluginConfig, resolvedConfig) {
|
|
|
647
647
|
const timer = beginRuntimeStep(config.statePath, action, step, stepWorkflowFile);
|
|
648
648
|
let output;
|
|
649
649
|
try {
|
|
650
|
+
if (step === "setup") {
|
|
651
|
+
mkdirSync(path.dirname(config.argsPath), { recursive: true });
|
|
652
|
+
writeFileSync(config.argsPath, JSON.stringify(args, null, 2));
|
|
653
|
+
}
|
|
650
654
|
output = JSON.parse(
|
|
651
655
|
execFileSync(lobsterCommand, [...lobsterPrefix, "run", "--file", stepWorkflowFile, "--args-json", JSON.stringify(args)], {
|
|
652
656
|
encoding: "utf-8",
|
package/dist/run-card.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RIDDLE_PROOF_RUN_CARD_VERSION,
|
|
3
3
|
createRiddleProofRunCard
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-Y2KTBACQ.js";
|
|
5
|
+
import "./chunk-2CFVREFI.js";
|
|
6
6
|
import "./chunk-VY4Y5U57.js";
|
|
7
7
|
export {
|
|
8
8
|
RIDDLE_PROOF_RUN_CARD_VERSION,
|
package/dist/runner.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runRiddleProof
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-TGHTM66Z.js";
|
|
4
|
+
import "./chunk-OHJQRDST.js";
|
|
5
|
+
import "./chunk-Y2KTBACQ.js";
|
|
6
|
+
import "./chunk-GBVEQQIM.js";
|
|
7
|
+
import "./chunk-2CFVREFI.js";
|
|
8
8
|
import "./chunk-VY4Y5U57.js";
|
|
9
9
|
export {
|
|
10
10
|
runRiddleProof
|
package/dist/state.js
CHANGED
|
@@ -9,9 +9,9 @@ import {
|
|
|
9
9
|
normalizePrLifecycleState,
|
|
10
10
|
normalizeRunParams,
|
|
11
11
|
setRunStatus
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-OHJQRDST.js";
|
|
13
|
+
import "./chunk-Y2KTBACQ.js";
|
|
14
|
+
import "./chunk-2CFVREFI.js";
|
|
15
15
|
import "./chunk-VY4Y5U57.js";
|
|
16
16
|
export {
|
|
17
17
|
RIDDLE_PROOF_RUN_STATE_VERSION,
|
package/package.json
CHANGED
package/runtime/lib/verify.py
CHANGED
|
@@ -557,6 +557,50 @@ def extract_proof_evidence(payload):
|
|
|
557
557
|
return evidence
|
|
558
558
|
|
|
559
559
|
|
|
560
|
+
def proof_evidence_records(value):
|
|
561
|
+
if isinstance(value, dict):
|
|
562
|
+
return [value]
|
|
563
|
+
if isinstance(value, list):
|
|
564
|
+
records = []
|
|
565
|
+
for item in value:
|
|
566
|
+
records.extend(proof_evidence_records(item))
|
|
567
|
+
return records
|
|
568
|
+
return []
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
def static_audit_evidence_support(value):
|
|
572
|
+
for record in proof_evidence_records(value):
|
|
573
|
+
explicit_static = (
|
|
574
|
+
record.get('interactionNotRequired') is True
|
|
575
|
+
or record.get('interactionExpected') is False
|
|
576
|
+
or record.get('zeroInteractiveElementsExpected') is True
|
|
577
|
+
or record.get('staticPageExpected') is True
|
|
578
|
+
)
|
|
579
|
+
ready = record.get('proofReady') is True or record.get('staticAuditReady') is True
|
|
580
|
+
failed = any(record.get(key) is False for key in (
|
|
581
|
+
'proofReady',
|
|
582
|
+
'staticAuditReady',
|
|
583
|
+
'routeMatches',
|
|
584
|
+
'titleMatches',
|
|
585
|
+
'headingMatches',
|
|
586
|
+
'markerMatches',
|
|
587
|
+
'normalizedCopyVisible',
|
|
588
|
+
'noConsoleErrors',
|
|
589
|
+
'noPageErrors',
|
|
590
|
+
))
|
|
591
|
+
if explicit_static and ready and not failed:
|
|
592
|
+
return {
|
|
593
|
+
'ready': True,
|
|
594
|
+
'interaction_not_required': True,
|
|
595
|
+
'source': str(record.get('version') or record.get('mode') or 'proof_evidence'),
|
|
596
|
+
}
|
|
597
|
+
return {
|
|
598
|
+
'ready': False,
|
|
599
|
+
'interaction_not_required': False,
|
|
600
|
+
'source': '',
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
|
|
560
604
|
PLAYABILITY_EVIDENCE_VERSION = 'riddle-proof.playability.v1'
|
|
561
605
|
PLAYABILITY_ASSESSMENT_VERSION = 'riddle-proof.playability.assessment.v1'
|
|
562
606
|
PLAYABILITY_CONTAINER_KEYS = (
|
|
@@ -2012,6 +2056,8 @@ def evaluate_capture_quality(payload, expected_path, verification_mode='proof'):
|
|
|
2012
2056
|
payload = enrich_capture_payload(payload)
|
|
2013
2057
|
mode = normalized_verification_mode(verification_mode)
|
|
2014
2058
|
supporting = collect_supporting_artifacts(payload)
|
|
2059
|
+
proof_evidence = extract_proof_evidence(payload)
|
|
2060
|
+
static_audit_support = static_audit_evidence_support(proof_evidence)
|
|
2015
2061
|
structured_ready = bool(supporting.get('has_structured_payload'))
|
|
2016
2062
|
playability_ready = mode in PLAYABILITY_MODES and bool(supporting.get('playability_ready'))
|
|
2017
2063
|
screenshot_required = screenshot_required_for_mode(mode)
|
|
@@ -2023,6 +2069,8 @@ def evaluate_capture_quality(payload, expected_path, verification_mode='proof'):
|
|
|
2023
2069
|
'structured_evidence_present': structured_ready,
|
|
2024
2070
|
'proof_evidence_present': bool(supporting.get('proof_evidence_present')),
|
|
2025
2071
|
'playability_ready': playability_ready,
|
|
2072
|
+
'static_audit_ready': bool(static_audit_support.get('ready')),
|
|
2073
|
+
'static_audit_support_source': static_audit_support.get('source', ''),
|
|
2026
2074
|
'canvas_capture_ready': False,
|
|
2027
2075
|
'large_canvas_area': 0,
|
|
2028
2076
|
'min_canvas_area': MIN_CANVAS_AREA,
|
|
@@ -2110,13 +2158,15 @@ def evaluate_capture_quality(payload, expected_path, verification_mode='proof'):
|
|
|
2110
2158
|
|
|
2111
2159
|
should_enforce_visual_readiness = screenshot_required or (details['has_screenshot'] and not structured_ready)
|
|
2112
2160
|
canvas_ready = bool(details.get('canvas_capture_ready'))
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2161
|
+
static_audit_ready = bool(static_audit_support.get('ready'))
|
|
2162
|
+
body_text_ready = details['body_text_length'] >= MIN_BODY_TEXT_LENGTH or canvas_ready or playability_ready or static_audit_ready
|
|
2163
|
+
interactive_ready = details['interactive_elements'] >= MIN_INTERACTIVE_ELEMENTS or canvas_ready or playability_ready or static_audit_ready
|
|
2164
|
+
semantic_ready = (not has_enriched_page_state(page_state)) or details['semantic_anchor_count'] >= 1 or canvas_ready or playability_ready or static_audit_ready
|
|
2116
2165
|
details['body_text_ready'] = body_text_ready
|
|
2117
2166
|
details['interactive_ready'] = interactive_ready
|
|
2118
2167
|
details['semantic_ready'] = semantic_ready
|
|
2119
2168
|
details['canvas_or_playability_override'] = bool(should_enforce_visual_readiness and (canvas_ready or playability_ready))
|
|
2169
|
+
details['static_audit_readiness_override'] = bool(should_enforce_visual_readiness and static_audit_ready)
|
|
2120
2170
|
|
|
2121
2171
|
if should_enforce_visual_readiness and not body_text_ready:
|
|
2122
2172
|
reasons.append(f'blank/near-blank page (text length: {details["body_text_length"]})')
|
|
@@ -17,7 +17,7 @@ args:
|
|
|
17
17
|
default: ""
|
|
18
18
|
capture_script:
|
|
19
19
|
default: ""
|
|
20
|
-
description: "Optional
|
|
20
|
+
description: "Optional Playwright JavaScript for proof capture. Add it before recon/verify once the proof target is clear; put natural-language instructions in change_request, context, success_criteria, or proof_plan."
|
|
21
21
|
success_criteria:
|
|
22
22
|
default: ""
|
|
23
23
|
description: "Plain-English definition of what counts as fixed"
|
|
@@ -101,48 +101,52 @@ steps:
|
|
|
101
101
|
command: |
|
|
102
102
|
python3 << 'PYEOF'
|
|
103
103
|
import json, os
|
|
104
|
-
raw_server_path = """${server_path}""".strip()
|
|
105
|
-
args = {
|
|
106
|
-
'mode': """${mode}""".strip() or 'server',
|
|
107
|
-
'reference': """${reference}""".strip() or 'both',
|
|
108
|
-
'repo': """${repo}""".strip(),
|
|
109
|
-
'branch': """${branch}""".strip(),
|
|
110
|
-
'change_request': """${change_request}""".strip(),
|
|
111
|
-
'commit_message': """${commit_message}""".strip(),
|
|
112
|
-
'prod_url': """${prod_url}""".strip(),
|
|
113
|
-
'capture_script': """${capture_script}""".strip(),
|
|
114
|
-
'success_criteria': """${success_criteria}""".strip(),
|
|
115
|
-
'assertions_json': """${assertions_json}""".strip(),
|
|
116
|
-
'verification_mode': """${verification_mode}""".strip() or 'proof',
|
|
117
|
-
'context': """${context}""".strip(),
|
|
118
|
-
'reviewer': """${reviewer}""".strip() or 'davisdiehl',
|
|
119
|
-
'base_branch': """${base_branch}""".strip() or 'main',
|
|
120
|
-
'before_ref': """${before_ref}""".strip(),
|
|
121
|
-
'allow_static_preview_fallback': """${allow_static_preview_fallback}""".strip(),
|
|
122
|
-
'implementation_mode': """${implementation_mode}""".strip(),
|
|
123
|
-
'require_diff': """${require_diff}""".strip(),
|
|
124
|
-
'allow_code_changes': """${allow_code_changes}""".strip(),
|
|
125
|
-
'build_command': """${build_command}""".strip() or 'npm run build',
|
|
126
|
-
'build_output': """${build_output}""".strip() or 'build',
|
|
127
|
-
'server_image': """${server_image}""".strip() or 'node:20-slim',
|
|
128
|
-
'server_command': """${server_command}""".strip() or 'npm start',
|
|
129
|
-
'server_port': """${server_port}""".strip() or '3000',
|
|
130
|
-
'server_path': raw_server_path,
|
|
131
|
-
'server_path_source': 'user' if raw_server_path else '',
|
|
132
|
-
'use_auth': """${use_auth}""".strip(),
|
|
133
|
-
'auth_localStorage_json': """${auth_localStorage_json}""".strip(),
|
|
134
|
-
'auth_cookies_json': """${auth_cookies_json}""".strip(),
|
|
135
|
-
'auth_headers_json': """${auth_headers_json}""".strip(),
|
|
136
|
-
'color_scheme': """${color_scheme}""".strip(),
|
|
137
|
-
'wait_for_selector': """${wait_for_selector}""".strip(),
|
|
138
|
-
'discord_channel': """${discord_channel}""".strip(),
|
|
139
|
-
'discord_thread_id': """${discord_thread_id}""".strip(),
|
|
140
|
-
'discord_message_id': """${discord_message_id}""".strip(),
|
|
141
|
-
'discord_source_url': """${discord_source_url}""".strip(),
|
|
142
|
-
}
|
|
143
104
|
args_file = os.environ.get('RIDDLE_PROOF_ARGS_FILE', '/tmp/riddle-proof-args.json')
|
|
144
|
-
|
|
145
|
-
|
|
105
|
+
if os.environ.get('RIDDLE_PROOF_ARGS_FILE') and os.path.exists(args_file):
|
|
106
|
+
with open(args_file) as f:
|
|
107
|
+
json.load(f)
|
|
108
|
+
else:
|
|
109
|
+
raw_server_path = '''${server_path}'''.strip()
|
|
110
|
+
args = {
|
|
111
|
+
'mode': '''${mode}'''.strip() or 'server',
|
|
112
|
+
'reference': '''${reference}'''.strip() or 'both',
|
|
113
|
+
'repo': '''${repo}'''.strip(),
|
|
114
|
+
'branch': '''${branch}'''.strip(),
|
|
115
|
+
'change_request': '''${change_request}'''.strip(),
|
|
116
|
+
'commit_message': '''${commit_message}'''.strip(),
|
|
117
|
+
'prod_url': '''${prod_url}'''.strip(),
|
|
118
|
+
'capture_script': '''${capture_script}'''.strip(),
|
|
119
|
+
'success_criteria': '''${success_criteria}'''.strip(),
|
|
120
|
+
'assertions_json': '''${assertions_json}'''.strip(),
|
|
121
|
+
'verification_mode': '''${verification_mode}'''.strip() or 'proof',
|
|
122
|
+
'context': '''${context}'''.strip(),
|
|
123
|
+
'reviewer': '''${reviewer}'''.strip() or 'davisdiehl',
|
|
124
|
+
'base_branch': '''${base_branch}'''.strip() or 'main',
|
|
125
|
+
'before_ref': '''${before_ref}'''.strip(),
|
|
126
|
+
'allow_static_preview_fallback': '''${allow_static_preview_fallback}'''.strip(),
|
|
127
|
+
'implementation_mode': '''${implementation_mode}'''.strip(),
|
|
128
|
+
'require_diff': '''${require_diff}'''.strip(),
|
|
129
|
+
'allow_code_changes': '''${allow_code_changes}'''.strip(),
|
|
130
|
+
'build_command': '''${build_command}'''.strip() or 'npm run build',
|
|
131
|
+
'build_output': '''${build_output}'''.strip() or 'build',
|
|
132
|
+
'server_image': '''${server_image}'''.strip() or 'node:20-slim',
|
|
133
|
+
'server_command': '''${server_command}'''.strip() or 'npm start',
|
|
134
|
+
'server_port': '''${server_port}'''.strip() or '3000',
|
|
135
|
+
'server_path': raw_server_path,
|
|
136
|
+
'server_path_source': 'user' if raw_server_path else '',
|
|
137
|
+
'use_auth': '''${use_auth}'''.strip(),
|
|
138
|
+
'auth_localStorage_json': '''${auth_localStorage_json}'''.strip(),
|
|
139
|
+
'auth_cookies_json': '''${auth_cookies_json}'''.strip(),
|
|
140
|
+
'auth_headers_json': '''${auth_headers_json}'''.strip(),
|
|
141
|
+
'color_scheme': '''${color_scheme}'''.strip(),
|
|
142
|
+
'wait_for_selector': '''${wait_for_selector}'''.strip(),
|
|
143
|
+
'discord_channel': '''${discord_channel}'''.strip(),
|
|
144
|
+
'discord_thread_id': '''${discord_thread_id}'''.strip(),
|
|
145
|
+
'discord_message_id': '''${discord_message_id}'''.strip(),
|
|
146
|
+
'discord_source_url': '''${discord_source_url}'''.strip(),
|
|
147
|
+
}
|
|
148
|
+
with open(args_file, 'w') as f:
|
|
149
|
+
json.dump(args, f, indent=2)
|
|
146
150
|
PYEOF
|
|
147
151
|
RP="${RIDDLE_PROOF_DIR:-/root/.openclaw/extensions/openclaw-riddle-proof/node_modules/@riddledc/riddle-proof/runtime}"
|
|
148
152
|
python3 "${RP}/lib/preflight.py"
|
|
@@ -562,6 +562,47 @@ def run_verify_quality_ignores_proof_telemetry_console_text():
|
|
|
562
562
|
assert missing_query_quality['valid'] is False
|
|
563
563
|
assert 'wrong route' in missing_query_quality['reason']
|
|
564
564
|
|
|
565
|
+
static_audit_payload = {
|
|
566
|
+
'bodyTextLength': 61,
|
|
567
|
+
'visibleTextSample': 'Riddle static preview smoke Static preview marker is visible.',
|
|
568
|
+
'interactiveElements': 0,
|
|
569
|
+
'visibleInteractiveElements': 0,
|
|
570
|
+
'pathname': '/s/ps_b7b5f0dc/',
|
|
571
|
+
'title': 'Riddle Preview Smoke',
|
|
572
|
+
'headings': ['Riddle static preview smoke'],
|
|
573
|
+
'buttons': [],
|
|
574
|
+
'links': [],
|
|
575
|
+
'canvasCount': 0,
|
|
576
|
+
'largeVisibleElements': [{'tag': 'h1', 'text': 'Riddle static preview smoke', 'area': 17208}],
|
|
577
|
+
}
|
|
578
|
+
static_audit_evidence = {
|
|
579
|
+
'version': 'riddle-proof.static-smoke.v4',
|
|
580
|
+
'proofReady': True,
|
|
581
|
+
'staticAuditReady': True,
|
|
582
|
+
'interactionExpected': False,
|
|
583
|
+
'interactionNotRequired': True,
|
|
584
|
+
'zeroInteractiveElementsExpected': True,
|
|
585
|
+
'routeMatches': True,
|
|
586
|
+
'titleMatches': True,
|
|
587
|
+
'headingMatches': True,
|
|
588
|
+
'markerMatches': True,
|
|
589
|
+
'normalizedCopyVisible': True,
|
|
590
|
+
'noConsoleErrors': True,
|
|
591
|
+
'noPageErrors': True,
|
|
592
|
+
}
|
|
593
|
+
static_audit_quality = namespace['evaluate_capture_quality']({
|
|
594
|
+
'ok': True,
|
|
595
|
+
'screenshots': [{'name': 'after-proof.png', 'url': 'https://cdn.example.com/static-after.png'}],
|
|
596
|
+
'outputs': [{'name': 'after-proof.png', 'url': 'https://cdn.example.com/static-after.png'}],
|
|
597
|
+
'console': [
|
|
598
|
+
'RIDDLE_PROOF_STATE:' + json.dumps(static_audit_payload),
|
|
599
|
+
'RIDDLE_PROOF_EVIDENCE:' + json.dumps(static_audit_evidence),
|
|
600
|
+
],
|
|
601
|
+
}, '/s/ps_b7b5f0dc/', 'visual')
|
|
602
|
+
assert static_audit_quality['valid'] is True, static_audit_quality
|
|
603
|
+
assert static_audit_quality['details']['interactive_ready'] is True
|
|
604
|
+
assert static_audit_quality['details']['static_audit_readiness_override'] is True
|
|
605
|
+
|
|
565
606
|
strong_delta = namespace['extract_visual_delta']({
|
|
566
607
|
'ok': True,
|
|
567
608
|
'result': {
|