@riddledc/riddle-proof 0.8.11 → 0.8.12
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/advanced/engine-harness.cjs +97 -12
- package/dist/advanced/engine-harness.js +2 -2
- package/dist/advanced/index.cjs +98 -12
- package/dist/advanced/index.d.cts +2 -2
- package/dist/advanced/index.d.ts +2 -2
- package/dist/advanced/index.js +4 -4
- package/dist/advanced/proof-run-core.cjs +31 -1
- package/dist/advanced/proof-run-core.d.cts +1 -1
- package/dist/advanced/proof-run-core.d.ts +1 -1
- package/dist/advanced/proof-run-core.js +3 -1
- package/dist/advanced/proof-run-engine.cjs +46 -12
- package/dist/advanced/proof-run-engine.d.cts +2 -2
- package/dist/advanced/proof-run-engine.d.ts +2 -2
- package/dist/advanced/proof-run-engine.js +2 -2
- package/dist/advanced/runner.js +2 -2
- package/dist/{chunk-5N5QFI2S.js → chunk-7GZY5PLT.js} +31 -1
- package/dist/{chunk-46DDSZJR.js → chunk-JBY2SU5U.js} +18 -12
- package/dist/{chunk-5N6MQCLC.js → chunk-NGX4SUQN.js} +1 -1
- package/dist/{chunk-BBUO7HM4.js → chunk-RTLA6CPP.js} +53 -1
- package/dist/{chunk-2PXL3RDB.js → chunk-SZUC4MDN.js} +1 -1
- package/dist/cli/index.js +3 -3
- package/dist/cli.cjs +97 -12
- package/dist/cli.js +3 -3
- package/dist/engine-harness.cjs +97 -12
- package/dist/engine-harness.js +2 -2
- package/dist/index.cjs +97 -12
- package/dist/index.js +3 -3
- package/dist/{proof-run-core-CE0jx7wL.d.cts → proof-run-core-CrpYH-qH.d.cts} +6 -3
- package/dist/{proof-run-core-CE0jx7wL.d.ts → proof-run-core-CrpYH-qH.d.ts} +6 -3
- package/dist/proof-run-core.cjs +31 -1
- package/dist/proof-run-core.d.cts +1 -1
- package/dist/proof-run-core.d.ts +1 -1
- package/dist/proof-run-core.js +3 -1
- package/dist/{proof-run-engine-B7DCPzpK.d.cts → proof-run-engine-C6vYAZd8.d.cts} +4 -4
- package/dist/{proof-run-engine-BomAcXhA.d.ts → proof-run-engine-h9C1lC0w.d.ts} +4 -4
- package/dist/proof-run-engine.cjs +46 -12
- package/dist/proof-run-engine.d.cts +2 -2
- package/dist/proof-run-engine.d.ts +2 -2
- package/dist/proof-run-engine.js +2 -2
- package/dist/runner.js +2 -2
- package/package.json +1 -1
- package/runtime/lib/verify.py +97 -11
- package/runtime/tests/recon_verify_smoke.py +154 -4
- package/runtime/tests/trust_boundary_regression.py +12 -0
package/dist/engine-harness.cjs
CHANGED
|
@@ -471,6 +471,25 @@ function visualDeltaShipGateReason(state = {}) {
|
|
|
471
471
|
if (reason) return `visual_delta.status=${status} blocks ready_to_ship for visual/UI proof: ${reason}`;
|
|
472
472
|
return `visual_delta.status=${status} blocks ready_to_ship for visual/UI proof`;
|
|
473
473
|
}
|
|
474
|
+
function proofAssessmentHardBlockersForState(state = {}) {
|
|
475
|
+
const request = objectValue(state?.proof_assessment_request);
|
|
476
|
+
const blockers = [];
|
|
477
|
+
const add = (value) => {
|
|
478
|
+
if (typeof value !== "string") return;
|
|
479
|
+
const trimmed = value.trim();
|
|
480
|
+
if (trimmed && !blockers.includes(trimmed)) blockers.push(trimmed);
|
|
481
|
+
};
|
|
482
|
+
if (Array.isArray(request.hard_blockers)) {
|
|
483
|
+
for (const blocker of request.hard_blockers) add(blocker);
|
|
484
|
+
}
|
|
485
|
+
add(state?.structured_interaction_capture_failure_summary);
|
|
486
|
+
add(state?.structured_interaction_failure_summary);
|
|
487
|
+
const mergeRecommendation = String(state?.merge_recommendation || "").trim();
|
|
488
|
+
if (mergeRecommendation === "do-not-merge" && blockers.length) {
|
|
489
|
+
add("merge_recommendation=do-not-merge because the proof bundle contains hard blockers.");
|
|
490
|
+
}
|
|
491
|
+
return blockers;
|
|
492
|
+
}
|
|
474
493
|
function visualDeltaEvidenceIssueCode(state = {}, blocker = "") {
|
|
475
494
|
const visualDelta = visualDeltaForState(state || {});
|
|
476
495
|
const status = String(visualDelta.status || "").trim();
|
|
@@ -505,6 +524,7 @@ function validateShipGate(state = {}) {
|
|
|
505
524
|
const visualDelta = visualDeltaForState(state);
|
|
506
525
|
const visualDeltaRequired = visualDeltaRequiredForState(state);
|
|
507
526
|
const visualDeltaBlocker = visualDeltaShipGateReason(state);
|
|
527
|
+
const hardBlockers = proofAssessmentHardBlockersForState(state);
|
|
508
528
|
const reasons = [];
|
|
509
529
|
if (!["before", "prod", "both"].includes(reference)) {
|
|
510
530
|
reasons.push(`reference must be before, prod, or both; got ${reference}`);
|
|
@@ -536,6 +556,9 @@ function validateShipGate(state = {}) {
|
|
|
536
556
|
if (visualDeltaBlocker) {
|
|
537
557
|
reasons.push(visualDeltaBlocker);
|
|
538
558
|
}
|
|
559
|
+
for (const blocker of hardBlockers) {
|
|
560
|
+
reasons.push(`proof hard blocker prevents ready_to_ship: ${blocker}`);
|
|
561
|
+
}
|
|
539
562
|
return {
|
|
540
563
|
ok: reasons.length === 0,
|
|
541
564
|
reasons,
|
|
@@ -552,7 +575,8 @@ function validateShipGate(state = {}) {
|
|
|
552
575
|
proof_assessment_source: proofAssessment.source,
|
|
553
576
|
visual_delta_required: visualDeltaRequired,
|
|
554
577
|
visual_delta_status: typeof visualDelta.status === "string" ? visualDelta.status : null,
|
|
555
|
-
visual_delta_passed: typeof visualDelta.passed === "boolean" ? visualDelta.passed : null
|
|
578
|
+
visual_delta_passed: typeof visualDelta.passed === "boolean" ? visualDelta.passed : null,
|
|
579
|
+
hard_blockers: hardBlockers
|
|
556
580
|
}
|
|
557
581
|
};
|
|
558
582
|
}
|
|
@@ -1038,6 +1062,10 @@ var init_proof_run_core = __esm({
|
|
|
1038
1062
|
}],
|
|
1039
1063
|
required_state: ["verify_decision_request"]
|
|
1040
1064
|
},
|
|
1065
|
+
verify_capture_blocked: {
|
|
1066
|
+
purpose: "Verify capture produced conclusive failed browser evidence and should stop instead of retrying proof authoring.",
|
|
1067
|
+
required_state: ["verify_decision_request"]
|
|
1068
|
+
},
|
|
1041
1069
|
verify_supervisor_judgment: {
|
|
1042
1070
|
purpose: "Supervising agent judges whether captured evidence proves the change is ready to ship.",
|
|
1043
1071
|
accepted_inputs: [{
|
|
@@ -1286,14 +1314,18 @@ function verifyAssessment(state) {
|
|
|
1286
1314
|
};
|
|
1287
1315
|
}
|
|
1288
1316
|
if (state?.verify_status === "capture_incomplete") {
|
|
1317
|
+
const captureQuality = verifyDecision?.capture_quality || {};
|
|
1318
|
+
const terminalBlocker = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true;
|
|
1319
|
+
const recommendedStage = terminalBlocker ? null : verifyDecision?.continue_with_stage || verifyDecision?.recommended_stage || "author";
|
|
1320
|
+
const continueWithStage = terminalBlocker ? null : verifyDecision?.continue_with_stage || verifyDecision?.recommended_stage || "author";
|
|
1289
1321
|
return {
|
|
1290
|
-
decision:
|
|
1322
|
+
decision: captureQuality?.decision || "revise_capture",
|
|
1291
1323
|
summary: verifyDecision?.summary || "Verify needs another internal capture iteration before the evidence can be judged.",
|
|
1292
|
-
recommendedStage
|
|
1293
|
-
continueWithStage
|
|
1324
|
+
recommendedStage,
|
|
1325
|
+
continueWithStage,
|
|
1294
1326
|
escalationTarget: "agent",
|
|
1295
|
-
reasons: Array.isArray(
|
|
1296
|
-
raw:
|
|
1327
|
+
reasons: Array.isArray(captureQuality?.reasons) ? captureQuality.reasons : [],
|
|
1328
|
+
raw: captureQuality || verifyDecision,
|
|
1297
1329
|
source: "workflow_capture"
|
|
1298
1330
|
};
|
|
1299
1331
|
}
|
|
@@ -2513,7 +2545,9 @@ ${implementRes.stderr || ""}`;
|
|
|
2513
2545
|
convergenceSignals
|
|
2514
2546
|
};
|
|
2515
2547
|
if (verifyStatus !== "evidence_captured") {
|
|
2516
|
-
|
|
2548
|
+
const captureQuality = verifyDecisionRequest?.capture_quality || {};
|
|
2549
|
+
const captureTerminalBlocker = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true;
|
|
2550
|
+
if (!captureTerminalBlocker && (verifyContinueWithStage || verifyRecommendedStage || "author") === "author") {
|
|
2517
2551
|
updateState(config.statePath, (currentState) => {
|
|
2518
2552
|
currentState.author_status = "needs_authoring";
|
|
2519
2553
|
currentState.proof_plan_status = "needs_authoring";
|
|
@@ -2521,7 +2555,7 @@ ${implementRes.stderr || ""}`;
|
|
|
2521
2555
|
});
|
|
2522
2556
|
state = readState(config.statePath);
|
|
2523
2557
|
}
|
|
2524
|
-
const checkpointName = "verify_capture_retry";
|
|
2558
|
+
const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
|
|
2525
2559
|
const summary = stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
|
|
2526
2560
|
recordAttempt("verify", "checkpoint", summary, {
|
|
2527
2561
|
autoApproved: verifyRes.autoApproved || false,
|
|
@@ -2534,11 +2568,11 @@ ${implementRes.stderr || ""}`;
|
|
|
2534
2568
|
summary,
|
|
2535
2569
|
{
|
|
2536
2570
|
ok: true,
|
|
2537
|
-
nextActions: ["inspect_after_capture", "continue_internal_loop_with_checkpoint", "return_to_recon_if_baseline_is_wrong"],
|
|
2571
|
+
nextActions: captureTerminalBlocker ? ["inspect_after_capture", "report_specific_browser_evidence_blocker", "start_a_new_run_after_the_product_or_script_is_fixed"] : ["inspect_after_capture", "continue_internal_loop_with_checkpoint", "return_to_recon_if_baseline_is_wrong"],
|
|
2538
2572
|
advanceOptions: verifyLoopAdvanceOptions,
|
|
2539
|
-
recommendedAdvanceStage: verifyRecommendedStage || "author",
|
|
2540
|
-
continueWithStage: verifyContinueWithStage || "author",
|
|
2541
|
-
blocking:
|
|
2573
|
+
recommendedAdvanceStage: captureTerminalBlocker ? null : verifyRecommendedStage || "author",
|
|
2574
|
+
continueWithStage: captureTerminalBlocker ? null : verifyContinueWithStage || "author",
|
|
2575
|
+
blocking: captureTerminalBlocker,
|
|
2542
2576
|
details: verifyDetails,
|
|
2543
2577
|
verifyStatus,
|
|
2544
2578
|
verifySummary,
|
|
@@ -4602,6 +4636,17 @@ function proofAssessmentRequestsShip(payload) {
|
|
|
4602
4636
|
const continueStage = String(payload.continue_with_stage || "");
|
|
4603
4637
|
return decision === "ready_to_ship" || recommendedStage === "ship" || continueStage === "ship";
|
|
4604
4638
|
}
|
|
4639
|
+
function proofAssessmentHardBlockers(state, payload) {
|
|
4640
|
+
const blockers = proofAssessmentHardBlockersForState(state || {});
|
|
4641
|
+
if (Array.isArray(payload.hard_blockers)) {
|
|
4642
|
+
for (const blocker of payload.hard_blockers) {
|
|
4643
|
+
if (typeof blocker !== "string") continue;
|
|
4644
|
+
const trimmed = blocker.trim();
|
|
4645
|
+
if (trimmed && !blockers.includes(trimmed)) blockers.push(trimmed);
|
|
4646
|
+
}
|
|
4647
|
+
}
|
|
4648
|
+
return blockers;
|
|
4649
|
+
}
|
|
4605
4650
|
function proofAssessmentContinuation(result, payload) {
|
|
4606
4651
|
const proof_assessment_json = jsonParam(payload);
|
|
4607
4652
|
return { ...baseContinuation(result), proof_assessment_json };
|
|
@@ -5541,6 +5586,33 @@ async function routeCheckpoint(request, state, result, agent, input) {
|
|
|
5541
5586
|
adapter_details: assessment.details || null
|
|
5542
5587
|
})
|
|
5543
5588
|
});
|
|
5589
|
+
const hardBlockers = proofAssessmentHardBlockers(context.fullRiddleState || {}, payload);
|
|
5590
|
+
if (proofAssessmentRequestsShip(payload) && hardBlockers.length) {
|
|
5591
|
+
const summary = hardBlockers[0];
|
|
5592
|
+
recordEvent(state, {
|
|
5593
|
+
kind: "agent.proof_assessment.hard_blocked",
|
|
5594
|
+
checkpoint,
|
|
5595
|
+
stage: "verify",
|
|
5596
|
+
summary,
|
|
5597
|
+
details: compactRecord({
|
|
5598
|
+
hard_blockers: hardBlockers,
|
|
5599
|
+
proof_assessment: payload,
|
|
5600
|
+
agent_duration_ms: durationMs
|
|
5601
|
+
})
|
|
5602
|
+
});
|
|
5603
|
+
return {
|
|
5604
|
+
blocker: {
|
|
5605
|
+
code: "proof_hard_blocker",
|
|
5606
|
+
checkpoint,
|
|
5607
|
+
message: "Riddle Proof cannot mark ready_to_ship while the proof bundle contains a hard blocker: " + summary,
|
|
5608
|
+
details: compactRecord({
|
|
5609
|
+
hard_blockers: hardBlockers,
|
|
5610
|
+
proofAssessment: payload,
|
|
5611
|
+
verifyDecisionRequest: context.fullRiddleState?.verify_decision_request || result.verifyDecisionRequest || result.checkpointContract?.verify_decision_request || null
|
|
5612
|
+
})
|
|
5613
|
+
}
|
|
5614
|
+
};
|
|
5615
|
+
}
|
|
5544
5616
|
const visualBlocker = proofAssessmentVisualBlocker({
|
|
5545
5617
|
...context.fullRiddleState || {},
|
|
5546
5618
|
verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
|
|
@@ -5598,6 +5670,19 @@ async function routeCheckpoint(request, state, result, agent, input) {
|
|
|
5598
5670
|
}
|
|
5599
5671
|
};
|
|
5600
5672
|
}
|
|
5673
|
+
if (checkpoint === "verify_capture_blocked") {
|
|
5674
|
+
return {
|
|
5675
|
+
blocker: {
|
|
5676
|
+
code: "verify_capture_blocked",
|
|
5677
|
+
checkpoint,
|
|
5678
|
+
message: result.summary || "Verify captured conclusive failed browser evidence and stopped instead of retrying proof authoring.",
|
|
5679
|
+
details: compactRecord({
|
|
5680
|
+
verifyDecisionRequest: result.verifyDecisionRequest || result.checkpointContract?.verify_decision_request || null,
|
|
5681
|
+
checkpointContract: result.checkpointContract || null
|
|
5682
|
+
})
|
|
5683
|
+
}
|
|
5684
|
+
};
|
|
5685
|
+
}
|
|
5601
5686
|
if (checkpoint === "awaiting_stage_advance") {
|
|
5602
5687
|
const next = recommendedContinuation(result) || defaultAwaitingStageContinuation(result);
|
|
5603
5688
|
if (next) {
|
package/dist/engine-harness.js
CHANGED
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
createDisabledRiddleProofAgentAdapter,
|
|
3
3
|
readRiddleProofRunStatus,
|
|
4
4
|
runRiddleProofEngineHarness
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RTLA6CPP.js";
|
|
6
6
|
import "./chunk-YZUVEJ5B.js";
|
|
7
7
|
import "./chunk-FMOYUYH2.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-7GZY5PLT.js";
|
|
9
9
|
import "./chunk-4FOHZ7JG.js";
|
|
10
10
|
import "./chunk-VY4Y5U57.js";
|
|
11
11
|
import "./chunk-MLKGABMK.js";
|
package/dist/index.cjs
CHANGED
|
@@ -471,6 +471,25 @@ function visualDeltaShipGateReason(state = {}) {
|
|
|
471
471
|
if (reason) return `visual_delta.status=${status} blocks ready_to_ship for visual/UI proof: ${reason}`;
|
|
472
472
|
return `visual_delta.status=${status} blocks ready_to_ship for visual/UI proof`;
|
|
473
473
|
}
|
|
474
|
+
function proofAssessmentHardBlockersForState(state = {}) {
|
|
475
|
+
const request = objectValue(state?.proof_assessment_request);
|
|
476
|
+
const blockers = [];
|
|
477
|
+
const add = (value) => {
|
|
478
|
+
if (typeof value !== "string") return;
|
|
479
|
+
const trimmed = value.trim();
|
|
480
|
+
if (trimmed && !blockers.includes(trimmed)) blockers.push(trimmed);
|
|
481
|
+
};
|
|
482
|
+
if (Array.isArray(request.hard_blockers)) {
|
|
483
|
+
for (const blocker of request.hard_blockers) add(blocker);
|
|
484
|
+
}
|
|
485
|
+
add(state?.structured_interaction_capture_failure_summary);
|
|
486
|
+
add(state?.structured_interaction_failure_summary);
|
|
487
|
+
const mergeRecommendation = String(state?.merge_recommendation || "").trim();
|
|
488
|
+
if (mergeRecommendation === "do-not-merge" && blockers.length) {
|
|
489
|
+
add("merge_recommendation=do-not-merge because the proof bundle contains hard blockers.");
|
|
490
|
+
}
|
|
491
|
+
return blockers;
|
|
492
|
+
}
|
|
474
493
|
function visualDeltaEvidenceIssueCode(state = {}, blocker = "") {
|
|
475
494
|
const visualDelta = visualDeltaForState(state || {});
|
|
476
495
|
const status = String(visualDelta.status || "").trim();
|
|
@@ -505,6 +524,7 @@ function validateShipGate(state = {}) {
|
|
|
505
524
|
const visualDelta = visualDeltaForState(state);
|
|
506
525
|
const visualDeltaRequired = visualDeltaRequiredForState(state);
|
|
507
526
|
const visualDeltaBlocker = visualDeltaShipGateReason(state);
|
|
527
|
+
const hardBlockers = proofAssessmentHardBlockersForState(state);
|
|
508
528
|
const reasons = [];
|
|
509
529
|
if (!["before", "prod", "both"].includes(reference)) {
|
|
510
530
|
reasons.push(`reference must be before, prod, or both; got ${reference}`);
|
|
@@ -536,6 +556,9 @@ function validateShipGate(state = {}) {
|
|
|
536
556
|
if (visualDeltaBlocker) {
|
|
537
557
|
reasons.push(visualDeltaBlocker);
|
|
538
558
|
}
|
|
559
|
+
for (const blocker of hardBlockers) {
|
|
560
|
+
reasons.push(`proof hard blocker prevents ready_to_ship: ${blocker}`);
|
|
561
|
+
}
|
|
539
562
|
return {
|
|
540
563
|
ok: reasons.length === 0,
|
|
541
564
|
reasons,
|
|
@@ -552,7 +575,8 @@ function validateShipGate(state = {}) {
|
|
|
552
575
|
proof_assessment_source: proofAssessment.source,
|
|
553
576
|
visual_delta_required: visualDeltaRequired,
|
|
554
577
|
visual_delta_status: typeof visualDelta.status === "string" ? visualDelta.status : null,
|
|
555
|
-
visual_delta_passed: typeof visualDelta.passed === "boolean" ? visualDelta.passed : null
|
|
578
|
+
visual_delta_passed: typeof visualDelta.passed === "boolean" ? visualDelta.passed : null,
|
|
579
|
+
hard_blockers: hardBlockers
|
|
556
580
|
}
|
|
557
581
|
};
|
|
558
582
|
}
|
|
@@ -1038,6 +1062,10 @@ var init_proof_run_core = __esm({
|
|
|
1038
1062
|
}],
|
|
1039
1063
|
required_state: ["verify_decision_request"]
|
|
1040
1064
|
},
|
|
1065
|
+
verify_capture_blocked: {
|
|
1066
|
+
purpose: "Verify capture produced conclusive failed browser evidence and should stop instead of retrying proof authoring.",
|
|
1067
|
+
required_state: ["verify_decision_request"]
|
|
1068
|
+
},
|
|
1041
1069
|
verify_supervisor_judgment: {
|
|
1042
1070
|
purpose: "Supervising agent judges whether captured evidence proves the change is ready to ship.",
|
|
1043
1071
|
accepted_inputs: [{
|
|
@@ -1286,14 +1314,18 @@ function verifyAssessment(state) {
|
|
|
1286
1314
|
};
|
|
1287
1315
|
}
|
|
1288
1316
|
if (state?.verify_status === "capture_incomplete") {
|
|
1317
|
+
const captureQuality = verifyDecision?.capture_quality || {};
|
|
1318
|
+
const terminalBlocker = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true;
|
|
1319
|
+
const recommendedStage = terminalBlocker ? null : verifyDecision?.continue_with_stage || verifyDecision?.recommended_stage || "author";
|
|
1320
|
+
const continueWithStage = terminalBlocker ? null : verifyDecision?.continue_with_stage || verifyDecision?.recommended_stage || "author";
|
|
1289
1321
|
return {
|
|
1290
|
-
decision:
|
|
1322
|
+
decision: captureQuality?.decision || "revise_capture",
|
|
1291
1323
|
summary: verifyDecision?.summary || "Verify needs another internal capture iteration before the evidence can be judged.",
|
|
1292
|
-
recommendedStage
|
|
1293
|
-
continueWithStage
|
|
1324
|
+
recommendedStage,
|
|
1325
|
+
continueWithStage,
|
|
1294
1326
|
escalationTarget: "agent",
|
|
1295
|
-
reasons: Array.isArray(
|
|
1296
|
-
raw:
|
|
1327
|
+
reasons: Array.isArray(captureQuality?.reasons) ? captureQuality.reasons : [],
|
|
1328
|
+
raw: captureQuality || verifyDecision,
|
|
1297
1329
|
source: "workflow_capture"
|
|
1298
1330
|
};
|
|
1299
1331
|
}
|
|
@@ -2513,7 +2545,9 @@ ${implementRes.stderr || ""}`;
|
|
|
2513
2545
|
convergenceSignals
|
|
2514
2546
|
};
|
|
2515
2547
|
if (verifyStatus !== "evidence_captured") {
|
|
2516
|
-
|
|
2548
|
+
const captureQuality = verifyDecisionRequest?.capture_quality || {};
|
|
2549
|
+
const captureTerminalBlocker = captureQuality?.terminal_blocker === true || captureQuality?.blocking === true;
|
|
2550
|
+
if (!captureTerminalBlocker && (verifyContinueWithStage || verifyRecommendedStage || "author") === "author") {
|
|
2517
2551
|
updateState(config.statePath, (currentState) => {
|
|
2518
2552
|
currentState.author_status = "needs_authoring";
|
|
2519
2553
|
currentState.proof_plan_status = "needs_authoring";
|
|
@@ -2521,7 +2555,7 @@ ${implementRes.stderr || ""}`;
|
|
|
2521
2555
|
});
|
|
2522
2556
|
state = readState(config.statePath);
|
|
2523
2557
|
}
|
|
2524
|
-
const checkpointName = "verify_capture_retry";
|
|
2558
|
+
const checkpointName = captureTerminalBlocker ? "verify_capture_blocked" : "verify_capture_retry";
|
|
2525
2559
|
const summary = stringValue(proofAssessment.summary) || "Verify ran, but the proof packet still needs internal capture-plan work before it should ship.";
|
|
2526
2560
|
recordAttempt("verify", "checkpoint", summary, {
|
|
2527
2561
|
autoApproved: verifyRes.autoApproved || false,
|
|
@@ -2534,11 +2568,11 @@ ${implementRes.stderr || ""}`;
|
|
|
2534
2568
|
summary,
|
|
2535
2569
|
{
|
|
2536
2570
|
ok: true,
|
|
2537
|
-
nextActions: ["inspect_after_capture", "continue_internal_loop_with_checkpoint", "return_to_recon_if_baseline_is_wrong"],
|
|
2571
|
+
nextActions: captureTerminalBlocker ? ["inspect_after_capture", "report_specific_browser_evidence_blocker", "start_a_new_run_after_the_product_or_script_is_fixed"] : ["inspect_after_capture", "continue_internal_loop_with_checkpoint", "return_to_recon_if_baseline_is_wrong"],
|
|
2538
2572
|
advanceOptions: verifyLoopAdvanceOptions,
|
|
2539
|
-
recommendedAdvanceStage: verifyRecommendedStage || "author",
|
|
2540
|
-
continueWithStage: verifyContinueWithStage || "author",
|
|
2541
|
-
blocking:
|
|
2573
|
+
recommendedAdvanceStage: captureTerminalBlocker ? null : verifyRecommendedStage || "author",
|
|
2574
|
+
continueWithStage: captureTerminalBlocker ? null : verifyContinueWithStage || "author",
|
|
2575
|
+
blocking: captureTerminalBlocker,
|
|
2542
2576
|
details: verifyDetails,
|
|
2543
2577
|
verifyStatus,
|
|
2544
2578
|
verifySummary,
|
|
@@ -5336,6 +5370,17 @@ function proofAssessmentRequestsShip(payload) {
|
|
|
5336
5370
|
const continueStage = String(payload.continue_with_stage || "");
|
|
5337
5371
|
return decision === "ready_to_ship" || recommendedStage === "ship" || continueStage === "ship";
|
|
5338
5372
|
}
|
|
5373
|
+
function proofAssessmentHardBlockers(state, payload) {
|
|
5374
|
+
const blockers = proofAssessmentHardBlockersForState(state || {});
|
|
5375
|
+
if (Array.isArray(payload.hard_blockers)) {
|
|
5376
|
+
for (const blocker of payload.hard_blockers) {
|
|
5377
|
+
if (typeof blocker !== "string") continue;
|
|
5378
|
+
const trimmed = blocker.trim();
|
|
5379
|
+
if (trimmed && !blockers.includes(trimmed)) blockers.push(trimmed);
|
|
5380
|
+
}
|
|
5381
|
+
}
|
|
5382
|
+
return blockers;
|
|
5383
|
+
}
|
|
5339
5384
|
function proofAssessmentContinuation(result, payload) {
|
|
5340
5385
|
const proof_assessment_json = jsonParam(payload);
|
|
5341
5386
|
return { ...baseContinuation(result), proof_assessment_json };
|
|
@@ -6275,6 +6320,33 @@ async function routeCheckpoint(request, state, result, agent, input) {
|
|
|
6275
6320
|
adapter_details: assessment.details || null
|
|
6276
6321
|
})
|
|
6277
6322
|
});
|
|
6323
|
+
const hardBlockers = proofAssessmentHardBlockers(context.fullRiddleState || {}, payload);
|
|
6324
|
+
if (proofAssessmentRequestsShip(payload) && hardBlockers.length) {
|
|
6325
|
+
const summary = hardBlockers[0];
|
|
6326
|
+
recordEvent(state, {
|
|
6327
|
+
kind: "agent.proof_assessment.hard_blocked",
|
|
6328
|
+
checkpoint,
|
|
6329
|
+
stage: "verify",
|
|
6330
|
+
summary,
|
|
6331
|
+
details: compactRecord({
|
|
6332
|
+
hard_blockers: hardBlockers,
|
|
6333
|
+
proof_assessment: payload,
|
|
6334
|
+
agent_duration_ms: durationMs
|
|
6335
|
+
})
|
|
6336
|
+
});
|
|
6337
|
+
return {
|
|
6338
|
+
blocker: {
|
|
6339
|
+
code: "proof_hard_blocker",
|
|
6340
|
+
checkpoint,
|
|
6341
|
+
message: "Riddle Proof cannot mark ready_to_ship while the proof bundle contains a hard blocker: " + summary,
|
|
6342
|
+
details: compactRecord({
|
|
6343
|
+
hard_blockers: hardBlockers,
|
|
6344
|
+
proofAssessment: payload,
|
|
6345
|
+
verifyDecisionRequest: context.fullRiddleState?.verify_decision_request || result.verifyDecisionRequest || result.checkpointContract?.verify_decision_request || null
|
|
6346
|
+
})
|
|
6347
|
+
}
|
|
6348
|
+
};
|
|
6349
|
+
}
|
|
6278
6350
|
const visualBlocker = proofAssessmentVisualBlocker({
|
|
6279
6351
|
...context.fullRiddleState || {},
|
|
6280
6352
|
verification_mode: context.fullRiddleState?.verification_mode || request.verification_mode
|
|
@@ -6332,6 +6404,19 @@ async function routeCheckpoint(request, state, result, agent, input) {
|
|
|
6332
6404
|
}
|
|
6333
6405
|
};
|
|
6334
6406
|
}
|
|
6407
|
+
if (checkpoint === "verify_capture_blocked") {
|
|
6408
|
+
return {
|
|
6409
|
+
blocker: {
|
|
6410
|
+
code: "verify_capture_blocked",
|
|
6411
|
+
checkpoint,
|
|
6412
|
+
message: result.summary || "Verify captured conclusive failed browser evidence and stopped instead of retrying proof authoring.",
|
|
6413
|
+
details: compactRecord({
|
|
6414
|
+
verifyDecisionRequest: result.verifyDecisionRequest || result.checkpointContract?.verify_decision_request || null,
|
|
6415
|
+
checkpointContract: result.checkpointContract || null
|
|
6416
|
+
})
|
|
6417
|
+
}
|
|
6418
|
+
};
|
|
6419
|
+
}
|
|
6335
6420
|
if (checkpoint === "awaiting_stage_advance") {
|
|
6336
6421
|
const next = recommendedContinuation(result) || defaultAwaitingStageContinuation(result);
|
|
6337
6422
|
if (next) {
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runRiddleProof
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NGX4SUQN.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-RTLA6CPP.js";
|
|
99
99
|
import {
|
|
100
100
|
RIDDLE_PROOF_RUN_STATE_VERSION,
|
|
101
101
|
appendRunEvent,
|
|
@@ -112,7 +112,7 @@ import {
|
|
|
112
112
|
RIDDLE_PROOF_RUN_CARD_VERSION,
|
|
113
113
|
createRiddleProofRunCard
|
|
114
114
|
} from "./chunk-FMOYUYH2.js";
|
|
115
|
-
import "./chunk-
|
|
115
|
+
import "./chunk-7GZY5PLT.js";
|
|
116
116
|
import {
|
|
117
117
|
RIDDLE_PROOF_CHECKPOINT_PACKET_VERSION,
|
|
118
118
|
RIDDLE_PROOF_CHECKPOINT_RESPONSE_VERSION,
|
|
@@ -94,6 +94,7 @@ interface ShipGateValidation {
|
|
|
94
94
|
visual_delta_required: boolean;
|
|
95
95
|
visual_delta_status: string | null;
|
|
96
96
|
visual_delta_passed: boolean | null;
|
|
97
|
+
hard_blockers?: string[];
|
|
97
98
|
};
|
|
98
99
|
}
|
|
99
100
|
declare function resolveRiddleProofDir(config?: PluginConfig): string;
|
|
@@ -120,7 +121,7 @@ declare function buildSetupArgs(params: WorkflowParams, config: ReturnType<typeo
|
|
|
120
121
|
target_image_hash: string;
|
|
121
122
|
viewport_matrix_json: string;
|
|
122
123
|
deterministic_setup_json: string;
|
|
123
|
-
reference: "
|
|
124
|
+
reference: "prod" | "before" | "both";
|
|
124
125
|
base_branch: string;
|
|
125
126
|
before_ref: string;
|
|
126
127
|
allow_static_preview_fallback: string;
|
|
@@ -220,6 +221,7 @@ declare function invalidateVerifyEvidence(state?: any): {
|
|
|
220
221
|
declare function visualDeltaRequiredForState(state?: any): boolean;
|
|
221
222
|
declare function visualDeltaForState(state?: any): Record<string, any>;
|
|
222
223
|
declare function visualDeltaShipGateReason(state?: any): string | null;
|
|
224
|
+
declare function proofAssessmentHardBlockersForState(state?: any): string[];
|
|
223
225
|
declare function requiredBaselineLabelsForState(state?: any): string[];
|
|
224
226
|
declare function validateShipGate(state?: any): ShipGateValidation;
|
|
225
227
|
declare function buildCheckpointContract(state: any, request: {
|
|
@@ -339,6 +341,7 @@ declare const proofRunCore_invalidateVerifyEvidence: typeof invalidateVerifyEvid
|
|
|
339
341
|
declare const proofRunCore_mergeStateFromParams: typeof mergeStateFromParams;
|
|
340
342
|
declare const proofRunCore_noImplementationModeFor: typeof noImplementationModeFor;
|
|
341
343
|
declare const proofRunCore_previewModeFromWorkflowMode: typeof previewModeFromWorkflowMode;
|
|
344
|
+
declare const proofRunCore_proofAssessmentHardBlockersForState: typeof proofAssessmentHardBlockersForState;
|
|
342
345
|
declare const proofRunCore_readState: typeof readState;
|
|
343
346
|
declare const proofRunCore_recordStageAttempt: typeof recordStageAttempt;
|
|
344
347
|
declare const proofRunCore_requiredBaselineLabelsForState: typeof requiredBaselineLabelsForState;
|
|
@@ -353,7 +356,7 @@ declare const proofRunCore_visualDeltaShipGateReason: typeof visualDeltaShipGate
|
|
|
353
356
|
declare const proofRunCore_workflowFile: typeof workflowFile;
|
|
354
357
|
declare const proofRunCore_writeState: typeof writeState;
|
|
355
358
|
declare namespace proofRunCore {
|
|
356
|
-
export { proofRunCore_BUNDLED_RIDDLE_PROOF_DIR as BUNDLED_RIDDLE_PROOF_DIR, proofRunCore_CHECKPOINT_CONTRACT_VERSION as CHECKPOINT_CONTRACT_VERSION, type proofRunCore_CheckpointInputContract as CheckpointInputContract, type proofRunCore_PluginConfig as PluginConfig, proofRunCore_RIDDLE_PROOF_DIR_CANDIDATES as RIDDLE_PROOF_DIR_CANDIDATES, type proofRunCore_ShipGateValidation as ShipGateValidation, proofRunCore_WORKFLOW_STAGE_ORDER as WORKFLOW_STAGE_ORDER, type proofRunCore_WorkflowAction as WorkflowAction, type proofRunCore_WorkflowParams as WorkflowParams, type proofRunCore_WorkflowStage as WorkflowStage, proofRunCore_buildCheckpointContract as buildCheckpointContract, proofRunCore_buildSetupArgs as buildSetupArgs, proofRunCore_checkpointContinueStage as checkpointContinueStage, proofRunCore_clearStageDecisionRequest as clearStageDecisionRequest, proofRunCore_ensureAction as ensureAction, proofRunCore_ensureStageLoopState as ensureStageLoopState, proofRunCore_invalidateVerifyEvidence as invalidateVerifyEvidence, proofRunCore_mergeStateFromParams as mergeStateFromParams, proofRunCore_noImplementationModeFor as noImplementationModeFor, proofRunCore_previewModeFromWorkflowMode as previewModeFromWorkflowMode, proofRunCore_readState as readState, proofRunCore_recordStageAttempt as recordStageAttempt, proofRunCore_requiredBaselineLabelsForState as requiredBaselineLabelsForState, proofRunCore_resolveConfig as resolveConfig, proofRunCore_resolveRiddleProofDir as resolveRiddleProofDir, proofRunCore_setStageDecisionRequest as setStageDecisionRequest, proofRunCore_summarizeState as summarizeState, proofRunCore_validateShipGate as validateShipGate, proofRunCore_visualDeltaForState as visualDeltaForState, proofRunCore_visualDeltaRequiredForState as visualDeltaRequiredForState, proofRunCore_visualDeltaShipGateReason as visualDeltaShipGateReason, proofRunCore_workflowFile as workflowFile, proofRunCore_writeState as writeState };
|
|
359
|
+
export { proofRunCore_BUNDLED_RIDDLE_PROOF_DIR as BUNDLED_RIDDLE_PROOF_DIR, proofRunCore_CHECKPOINT_CONTRACT_VERSION as CHECKPOINT_CONTRACT_VERSION, type proofRunCore_CheckpointInputContract as CheckpointInputContract, type proofRunCore_PluginConfig as PluginConfig, proofRunCore_RIDDLE_PROOF_DIR_CANDIDATES as RIDDLE_PROOF_DIR_CANDIDATES, type proofRunCore_ShipGateValidation as ShipGateValidation, proofRunCore_WORKFLOW_STAGE_ORDER as WORKFLOW_STAGE_ORDER, type proofRunCore_WorkflowAction as WorkflowAction, type proofRunCore_WorkflowParams as WorkflowParams, type proofRunCore_WorkflowStage as WorkflowStage, proofRunCore_buildCheckpointContract as buildCheckpointContract, proofRunCore_buildSetupArgs as buildSetupArgs, proofRunCore_checkpointContinueStage as checkpointContinueStage, proofRunCore_clearStageDecisionRequest as clearStageDecisionRequest, proofRunCore_ensureAction as ensureAction, proofRunCore_ensureStageLoopState as ensureStageLoopState, proofRunCore_invalidateVerifyEvidence as invalidateVerifyEvidence, proofRunCore_mergeStateFromParams as mergeStateFromParams, proofRunCore_noImplementationModeFor as noImplementationModeFor, proofRunCore_previewModeFromWorkflowMode as previewModeFromWorkflowMode, proofRunCore_proofAssessmentHardBlockersForState as proofAssessmentHardBlockersForState, proofRunCore_readState as readState, proofRunCore_recordStageAttempt as recordStageAttempt, proofRunCore_requiredBaselineLabelsForState as requiredBaselineLabelsForState, proofRunCore_resolveConfig as resolveConfig, proofRunCore_resolveRiddleProofDir as resolveRiddleProofDir, proofRunCore_setStageDecisionRequest as setStageDecisionRequest, proofRunCore_summarizeState as summarizeState, proofRunCore_validateShipGate as validateShipGate, proofRunCore_visualDeltaForState as visualDeltaForState, proofRunCore_visualDeltaRequiredForState as visualDeltaRequiredForState, proofRunCore_visualDeltaShipGateReason as visualDeltaShipGateReason, proofRunCore_workflowFile as workflowFile, proofRunCore_writeState as writeState };
|
|
357
360
|
}
|
|
358
361
|
|
|
359
|
-
export {
|
|
362
|
+
export { visualDeltaShipGateReason as A, BUNDLED_RIDDLE_PROOF_DIR as B, CHECKPOINT_CONTRACT_VERSION as C, workflowFile as D, writeState as E, type PluginConfig as P, RIDDLE_PROOF_DIR_CANDIDATES as R, type ShipGateValidation as S, type WorkflowParams as W, type WorkflowStage as a, type CheckpointInputContract as b, WORKFLOW_STAGE_ORDER as c, type WorkflowAction as d, buildCheckpointContract as e, buildSetupArgs as f, checkpointContinueStage as g, clearStageDecisionRequest as h, ensureAction as i, ensureStageLoopState as j, invalidateVerifyEvidence as k, previewModeFromWorkflowMode as l, mergeStateFromParams as m, noImplementationModeFor as n, proofAssessmentHardBlockersForState as o, proofRunCore as p, readState as q, resolveConfig as r, recordStageAttempt as s, requiredBaselineLabelsForState as t, resolveRiddleProofDir as u, setStageDecisionRequest as v, summarizeState as w, validateShipGate as x, visualDeltaForState as y, visualDeltaRequiredForState as z };
|
|
@@ -94,6 +94,7 @@ interface ShipGateValidation {
|
|
|
94
94
|
visual_delta_required: boolean;
|
|
95
95
|
visual_delta_status: string | null;
|
|
96
96
|
visual_delta_passed: boolean | null;
|
|
97
|
+
hard_blockers?: string[];
|
|
97
98
|
};
|
|
98
99
|
}
|
|
99
100
|
declare function resolveRiddleProofDir(config?: PluginConfig): string;
|
|
@@ -120,7 +121,7 @@ declare function buildSetupArgs(params: WorkflowParams, config: ReturnType<typeo
|
|
|
120
121
|
target_image_hash: string;
|
|
121
122
|
viewport_matrix_json: string;
|
|
122
123
|
deterministic_setup_json: string;
|
|
123
|
-
reference: "
|
|
124
|
+
reference: "prod" | "before" | "both";
|
|
124
125
|
base_branch: string;
|
|
125
126
|
before_ref: string;
|
|
126
127
|
allow_static_preview_fallback: string;
|
|
@@ -220,6 +221,7 @@ declare function invalidateVerifyEvidence(state?: any): {
|
|
|
220
221
|
declare function visualDeltaRequiredForState(state?: any): boolean;
|
|
221
222
|
declare function visualDeltaForState(state?: any): Record<string, any>;
|
|
222
223
|
declare function visualDeltaShipGateReason(state?: any): string | null;
|
|
224
|
+
declare function proofAssessmentHardBlockersForState(state?: any): string[];
|
|
223
225
|
declare function requiredBaselineLabelsForState(state?: any): string[];
|
|
224
226
|
declare function validateShipGate(state?: any): ShipGateValidation;
|
|
225
227
|
declare function buildCheckpointContract(state: any, request: {
|
|
@@ -339,6 +341,7 @@ declare const proofRunCore_invalidateVerifyEvidence: typeof invalidateVerifyEvid
|
|
|
339
341
|
declare const proofRunCore_mergeStateFromParams: typeof mergeStateFromParams;
|
|
340
342
|
declare const proofRunCore_noImplementationModeFor: typeof noImplementationModeFor;
|
|
341
343
|
declare const proofRunCore_previewModeFromWorkflowMode: typeof previewModeFromWorkflowMode;
|
|
344
|
+
declare const proofRunCore_proofAssessmentHardBlockersForState: typeof proofAssessmentHardBlockersForState;
|
|
342
345
|
declare const proofRunCore_readState: typeof readState;
|
|
343
346
|
declare const proofRunCore_recordStageAttempt: typeof recordStageAttempt;
|
|
344
347
|
declare const proofRunCore_requiredBaselineLabelsForState: typeof requiredBaselineLabelsForState;
|
|
@@ -353,7 +356,7 @@ declare const proofRunCore_visualDeltaShipGateReason: typeof visualDeltaShipGate
|
|
|
353
356
|
declare const proofRunCore_workflowFile: typeof workflowFile;
|
|
354
357
|
declare const proofRunCore_writeState: typeof writeState;
|
|
355
358
|
declare namespace proofRunCore {
|
|
356
|
-
export { proofRunCore_BUNDLED_RIDDLE_PROOF_DIR as BUNDLED_RIDDLE_PROOF_DIR, proofRunCore_CHECKPOINT_CONTRACT_VERSION as CHECKPOINT_CONTRACT_VERSION, type proofRunCore_CheckpointInputContract as CheckpointInputContract, type proofRunCore_PluginConfig as PluginConfig, proofRunCore_RIDDLE_PROOF_DIR_CANDIDATES as RIDDLE_PROOF_DIR_CANDIDATES, type proofRunCore_ShipGateValidation as ShipGateValidation, proofRunCore_WORKFLOW_STAGE_ORDER as WORKFLOW_STAGE_ORDER, type proofRunCore_WorkflowAction as WorkflowAction, type proofRunCore_WorkflowParams as WorkflowParams, type proofRunCore_WorkflowStage as WorkflowStage, proofRunCore_buildCheckpointContract as buildCheckpointContract, proofRunCore_buildSetupArgs as buildSetupArgs, proofRunCore_checkpointContinueStage as checkpointContinueStage, proofRunCore_clearStageDecisionRequest as clearStageDecisionRequest, proofRunCore_ensureAction as ensureAction, proofRunCore_ensureStageLoopState as ensureStageLoopState, proofRunCore_invalidateVerifyEvidence as invalidateVerifyEvidence, proofRunCore_mergeStateFromParams as mergeStateFromParams, proofRunCore_noImplementationModeFor as noImplementationModeFor, proofRunCore_previewModeFromWorkflowMode as previewModeFromWorkflowMode, proofRunCore_readState as readState, proofRunCore_recordStageAttempt as recordStageAttempt, proofRunCore_requiredBaselineLabelsForState as requiredBaselineLabelsForState, proofRunCore_resolveConfig as resolveConfig, proofRunCore_resolveRiddleProofDir as resolveRiddleProofDir, proofRunCore_setStageDecisionRequest as setStageDecisionRequest, proofRunCore_summarizeState as summarizeState, proofRunCore_validateShipGate as validateShipGate, proofRunCore_visualDeltaForState as visualDeltaForState, proofRunCore_visualDeltaRequiredForState as visualDeltaRequiredForState, proofRunCore_visualDeltaShipGateReason as visualDeltaShipGateReason, proofRunCore_workflowFile as workflowFile, proofRunCore_writeState as writeState };
|
|
359
|
+
export { proofRunCore_BUNDLED_RIDDLE_PROOF_DIR as BUNDLED_RIDDLE_PROOF_DIR, proofRunCore_CHECKPOINT_CONTRACT_VERSION as CHECKPOINT_CONTRACT_VERSION, type proofRunCore_CheckpointInputContract as CheckpointInputContract, type proofRunCore_PluginConfig as PluginConfig, proofRunCore_RIDDLE_PROOF_DIR_CANDIDATES as RIDDLE_PROOF_DIR_CANDIDATES, type proofRunCore_ShipGateValidation as ShipGateValidation, proofRunCore_WORKFLOW_STAGE_ORDER as WORKFLOW_STAGE_ORDER, type proofRunCore_WorkflowAction as WorkflowAction, type proofRunCore_WorkflowParams as WorkflowParams, type proofRunCore_WorkflowStage as WorkflowStage, proofRunCore_buildCheckpointContract as buildCheckpointContract, proofRunCore_buildSetupArgs as buildSetupArgs, proofRunCore_checkpointContinueStage as checkpointContinueStage, proofRunCore_clearStageDecisionRequest as clearStageDecisionRequest, proofRunCore_ensureAction as ensureAction, proofRunCore_ensureStageLoopState as ensureStageLoopState, proofRunCore_invalidateVerifyEvidence as invalidateVerifyEvidence, proofRunCore_mergeStateFromParams as mergeStateFromParams, proofRunCore_noImplementationModeFor as noImplementationModeFor, proofRunCore_previewModeFromWorkflowMode as previewModeFromWorkflowMode, proofRunCore_proofAssessmentHardBlockersForState as proofAssessmentHardBlockersForState, proofRunCore_readState as readState, proofRunCore_recordStageAttempt as recordStageAttempt, proofRunCore_requiredBaselineLabelsForState as requiredBaselineLabelsForState, proofRunCore_resolveConfig as resolveConfig, proofRunCore_resolveRiddleProofDir as resolveRiddleProofDir, proofRunCore_setStageDecisionRequest as setStageDecisionRequest, proofRunCore_summarizeState as summarizeState, proofRunCore_validateShipGate as validateShipGate, proofRunCore_visualDeltaForState as visualDeltaForState, proofRunCore_visualDeltaRequiredForState as visualDeltaRequiredForState, proofRunCore_visualDeltaShipGateReason as visualDeltaShipGateReason, proofRunCore_workflowFile as workflowFile, proofRunCore_writeState as writeState };
|
|
357
360
|
}
|
|
358
361
|
|
|
359
|
-
export {
|
|
362
|
+
export { visualDeltaShipGateReason as A, BUNDLED_RIDDLE_PROOF_DIR as B, CHECKPOINT_CONTRACT_VERSION as C, workflowFile as D, writeState as E, type PluginConfig as P, RIDDLE_PROOF_DIR_CANDIDATES as R, type ShipGateValidation as S, type WorkflowParams as W, type WorkflowStage as a, type CheckpointInputContract as b, WORKFLOW_STAGE_ORDER as c, type WorkflowAction as d, buildCheckpointContract as e, buildSetupArgs as f, checkpointContinueStage as g, clearStageDecisionRequest as h, ensureAction as i, ensureStageLoopState as j, invalidateVerifyEvidence as k, previewModeFromWorkflowMode as l, mergeStateFromParams as m, noImplementationModeFor as n, proofAssessmentHardBlockersForState as o, proofRunCore as p, readState as q, resolveConfig as r, recordStageAttempt as s, requiredBaselineLabelsForState as t, resolveRiddleProofDir as u, setStageDecisionRequest as v, summarizeState as w, validateShipGate as x, visualDeltaForState as y, visualDeltaRequiredForState as z };
|
package/dist/proof-run-core.cjs
CHANGED
|
@@ -44,6 +44,7 @@ __export(proof_run_core_exports, {
|
|
|
44
44
|
mergeStateFromParams: () => mergeStateFromParams,
|
|
45
45
|
noImplementationModeFor: () => noImplementationModeFor,
|
|
46
46
|
previewModeFromWorkflowMode: () => previewModeFromWorkflowMode,
|
|
47
|
+
proofAssessmentHardBlockersForState: () => proofAssessmentHardBlockersForState,
|
|
47
48
|
readState: () => readState,
|
|
48
49
|
recordStageAttempt: () => recordStageAttempt,
|
|
49
50
|
requiredBaselineLabelsForState: () => requiredBaselineLabelsForState,
|
|
@@ -525,6 +526,25 @@ function visualDeltaShipGateReason(state = {}) {
|
|
|
525
526
|
if (reason) return `visual_delta.status=${status} blocks ready_to_ship for visual/UI proof: ${reason}`;
|
|
526
527
|
return `visual_delta.status=${status} blocks ready_to_ship for visual/UI proof`;
|
|
527
528
|
}
|
|
529
|
+
function proofAssessmentHardBlockersForState(state = {}) {
|
|
530
|
+
const request = objectValue(state?.proof_assessment_request);
|
|
531
|
+
const blockers = [];
|
|
532
|
+
const add = (value) => {
|
|
533
|
+
if (typeof value !== "string") return;
|
|
534
|
+
const trimmed = value.trim();
|
|
535
|
+
if (trimmed && !blockers.includes(trimmed)) blockers.push(trimmed);
|
|
536
|
+
};
|
|
537
|
+
if (Array.isArray(request.hard_blockers)) {
|
|
538
|
+
for (const blocker of request.hard_blockers) add(blocker);
|
|
539
|
+
}
|
|
540
|
+
add(state?.structured_interaction_capture_failure_summary);
|
|
541
|
+
add(state?.structured_interaction_failure_summary);
|
|
542
|
+
const mergeRecommendation = String(state?.merge_recommendation || "").trim();
|
|
543
|
+
if (mergeRecommendation === "do-not-merge" && blockers.length) {
|
|
544
|
+
add("merge_recommendation=do-not-merge because the proof bundle contains hard blockers.");
|
|
545
|
+
}
|
|
546
|
+
return blockers;
|
|
547
|
+
}
|
|
528
548
|
function visualDeltaEvidenceIssueCode(state = {}, blocker = "") {
|
|
529
549
|
const visualDelta = visualDeltaForState(state || {});
|
|
530
550
|
const status = String(visualDelta.status || "").trim();
|
|
@@ -559,6 +579,7 @@ function validateShipGate(state = {}) {
|
|
|
559
579
|
const visualDelta = visualDeltaForState(state);
|
|
560
580
|
const visualDeltaRequired = visualDeltaRequiredForState(state);
|
|
561
581
|
const visualDeltaBlocker = visualDeltaShipGateReason(state);
|
|
582
|
+
const hardBlockers = proofAssessmentHardBlockersForState(state);
|
|
562
583
|
const reasons = [];
|
|
563
584
|
if (!["before", "prod", "both"].includes(reference)) {
|
|
564
585
|
reasons.push(`reference must be before, prod, or both; got ${reference}`);
|
|
@@ -590,6 +611,9 @@ function validateShipGate(state = {}) {
|
|
|
590
611
|
if (visualDeltaBlocker) {
|
|
591
612
|
reasons.push(visualDeltaBlocker);
|
|
592
613
|
}
|
|
614
|
+
for (const blocker of hardBlockers) {
|
|
615
|
+
reasons.push(`proof hard blocker prevents ready_to_ship: ${blocker}`);
|
|
616
|
+
}
|
|
593
617
|
return {
|
|
594
618
|
ok: reasons.length === 0,
|
|
595
619
|
reasons,
|
|
@@ -606,7 +630,8 @@ function validateShipGate(state = {}) {
|
|
|
606
630
|
proof_assessment_source: proofAssessment.source,
|
|
607
631
|
visual_delta_required: visualDeltaRequired,
|
|
608
632
|
visual_delta_status: typeof visualDelta.status === "string" ? visualDelta.status : null,
|
|
609
|
-
visual_delta_passed: typeof visualDelta.passed === "boolean" ? visualDelta.passed : null
|
|
633
|
+
visual_delta_passed: typeof visualDelta.passed === "boolean" ? visualDelta.passed : null,
|
|
634
|
+
hard_blockers: hardBlockers
|
|
610
635
|
}
|
|
611
636
|
};
|
|
612
637
|
}
|
|
@@ -720,6 +745,10 @@ var CHECKPOINT_CONTRACT_SPECS = {
|
|
|
720
745
|
}],
|
|
721
746
|
required_state: ["verify_decision_request"]
|
|
722
747
|
},
|
|
748
|
+
verify_capture_blocked: {
|
|
749
|
+
purpose: "Verify capture produced conclusive failed browser evidence and should stop instead of retrying proof authoring.",
|
|
750
|
+
required_state: ["verify_decision_request"]
|
|
751
|
+
},
|
|
723
752
|
verify_supervisor_judgment: {
|
|
724
753
|
purpose: "Supervising agent judges whether captured evidence proves the change is ready to ship.",
|
|
725
754
|
accepted_inputs: [{
|
|
@@ -1136,6 +1165,7 @@ function summarizeState(state) {
|
|
|
1136
1165
|
mergeStateFromParams,
|
|
1137
1166
|
noImplementationModeFor,
|
|
1138
1167
|
previewModeFromWorkflowMode,
|
|
1168
|
+
proofAssessmentHardBlockersForState,
|
|
1139
1169
|
readState,
|
|
1140
1170
|
recordStageAttempt,
|
|
1141
1171
|
requiredBaselineLabelsForState,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { B as BUNDLED_RIDDLE_PROOF_DIR, C as CHECKPOINT_CONTRACT_VERSION, b as CheckpointInputContract, P as PluginConfig, R as RIDDLE_PROOF_DIR_CANDIDATES, S as ShipGateValidation, c as WORKFLOW_STAGE_ORDER, d as WorkflowAction, W as WorkflowParams, a as WorkflowStage, e as buildCheckpointContract, f as buildSetupArgs, g as checkpointContinueStage, h as clearStageDecisionRequest, i as ensureAction, j as ensureStageLoopState, k as invalidateVerifyEvidence, m as mergeStateFromParams, n as noImplementationModeFor, l as previewModeFromWorkflowMode, o as
|
|
1
|
+
export { B as BUNDLED_RIDDLE_PROOF_DIR, C as CHECKPOINT_CONTRACT_VERSION, b as CheckpointInputContract, P as PluginConfig, R as RIDDLE_PROOF_DIR_CANDIDATES, S as ShipGateValidation, c as WORKFLOW_STAGE_ORDER, d as WorkflowAction, W as WorkflowParams, a as WorkflowStage, e as buildCheckpointContract, f as buildSetupArgs, g as checkpointContinueStage, h as clearStageDecisionRequest, i as ensureAction, j as ensureStageLoopState, k as invalidateVerifyEvidence, m as mergeStateFromParams, n as noImplementationModeFor, l as previewModeFromWorkflowMode, o as proofAssessmentHardBlockersForState, q as readState, s as recordStageAttempt, t as requiredBaselineLabelsForState, r as resolveConfig, u as resolveRiddleProofDir, v as setStageDecisionRequest, w as summarizeState, x as validateShipGate, y as visualDeltaForState, z as visualDeltaRequiredForState, A as visualDeltaShipGateReason, D as workflowFile, E as writeState } from './proof-run-core-CrpYH-qH.cjs';
|
package/dist/proof-run-core.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { B as BUNDLED_RIDDLE_PROOF_DIR, C as CHECKPOINT_CONTRACT_VERSION, b as CheckpointInputContract, P as PluginConfig, R as RIDDLE_PROOF_DIR_CANDIDATES, S as ShipGateValidation, c as WORKFLOW_STAGE_ORDER, d as WorkflowAction, W as WorkflowParams, a as WorkflowStage, e as buildCheckpointContract, f as buildSetupArgs, g as checkpointContinueStage, h as clearStageDecisionRequest, i as ensureAction, j as ensureStageLoopState, k as invalidateVerifyEvidence, m as mergeStateFromParams, n as noImplementationModeFor, l as previewModeFromWorkflowMode, o as
|
|
1
|
+
export { B as BUNDLED_RIDDLE_PROOF_DIR, C as CHECKPOINT_CONTRACT_VERSION, b as CheckpointInputContract, P as PluginConfig, R as RIDDLE_PROOF_DIR_CANDIDATES, S as ShipGateValidation, c as WORKFLOW_STAGE_ORDER, d as WorkflowAction, W as WorkflowParams, a as WorkflowStage, e as buildCheckpointContract, f as buildSetupArgs, g as checkpointContinueStage, h as clearStageDecisionRequest, i as ensureAction, j as ensureStageLoopState, k as invalidateVerifyEvidence, m as mergeStateFromParams, n as noImplementationModeFor, l as previewModeFromWorkflowMode, o as proofAssessmentHardBlockersForState, q as readState, s as recordStageAttempt, t as requiredBaselineLabelsForState, r as resolveConfig, u as resolveRiddleProofDir, v as setStageDecisionRequest, w as summarizeState, x as validateShipGate, y as visualDeltaForState, z as visualDeltaRequiredForState, A as visualDeltaShipGateReason, D as workflowFile, E as writeState } from './proof-run-core-CrpYH-qH.js';
|
package/dist/proof-run-core.js
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
mergeStateFromParams,
|
|
14
14
|
noImplementationModeFor,
|
|
15
15
|
previewModeFromWorkflowMode,
|
|
16
|
+
proofAssessmentHardBlockersForState,
|
|
16
17
|
readState,
|
|
17
18
|
recordStageAttempt,
|
|
18
19
|
requiredBaselineLabelsForState,
|
|
@@ -26,7 +27,7 @@ import {
|
|
|
26
27
|
visualDeltaShipGateReason,
|
|
27
28
|
workflowFile,
|
|
28
29
|
writeState
|
|
29
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-7GZY5PLT.js";
|
|
30
31
|
import "./chunk-MLKGABMK.js";
|
|
31
32
|
export {
|
|
32
33
|
BUNDLED_RIDDLE_PROOF_DIR,
|
|
@@ -43,6 +44,7 @@ export {
|
|
|
43
44
|
mergeStateFromParams,
|
|
44
45
|
noImplementationModeFor,
|
|
45
46
|
previewModeFromWorkflowMode,
|
|
47
|
+
proofAssessmentHardBlockersForState,
|
|
46
48
|
readState,
|
|
47
49
|
recordStageAttempt,
|
|
48
50
|
requiredBaselineLabelsForState,
|