fix(web-probe): keep nonblocking canaries nonblocking

This commit is contained in:
Codex
2026-06-26 15:45:13 +00:00
parent 41e196f94d
commit 65dee9e1af
+11 -3
View File
@@ -1870,6 +1870,7 @@ function runSentinelQuickVerify(state: SentinelCicdState, reason: string, timeou
}
let promptIndex = 0;
const sessionInvarianceChecks = sessionInvarianceChecksByRound(scenario);
const nonBlockingCanaryWarnings: string[] = [];
for (const item of commandSequence) {
const type = stringAt(item, "type");
const repeat = Math.max(1, typeof item.repeat === "number" && Number.isFinite(item.repeat) ? Math.trunc(item.repeat) : 1);
@@ -1938,6 +1939,7 @@ function runSentinelQuickVerify(state: SentinelCicdState, reason: string, timeou
}));
}
const invariantResult = runQuickVerifySessionInvarianceChecks(state, observerId, sessionInvarianceChecks.get(promptIndex) ?? [], deadline, promptIndex, steps);
nonBlockingCanaryWarnings.push(...mergeWarnings(record(invariantResult).warnings));
if (invariantResult.ok !== true) {
return recordQuickVerify(state, finalizeQuickVerifyFailure(state, {
runId,
@@ -1949,7 +1951,7 @@ function runSentinelQuickVerify(state: SentinelCicdState, reason: string, timeou
failure: text(invariantResult.failure ?? "observe-session-invariance-check-failed"),
promptSource: prompts.summary,
elapsedMs: elapsedMs(),
warnings: elapsedWarnings(),
warnings: mergeWarnings(nonBlockingCanaryWarnings, elapsedWarnings()),
}));
}
}
@@ -1994,7 +1996,7 @@ function runSentinelQuickVerify(state: SentinelCicdState, reason: string, timeou
findings,
screenshot: record(artifactSummary).screenshot,
publicOrigin: stringAt(state.publicExposure, "publicBaseUrl"),
warnings: mergeWarnings(analysisWarnings, elapsedWarnings()),
warnings: mergeWarnings(analysisWarnings, nonBlockingCanaryWarnings, elapsedWarnings()),
valuesRedacted: true,
});
}
@@ -2020,8 +2022,10 @@ function runQuickVerifySessionInvarianceChecks(
promptIndex: number,
steps: Record<string, unknown>[],
): Record<string, unknown> {
const warnings: string[] = [];
for (const check of checks) {
const checkId = nonEmptyString(check.id) ?? `after-round-${promptIndex}`;
const blocking = check.blocking === true;
const commands: { readonly type: string; readonly enabled: boolean }[] = [
{ type: "refreshCurrentSession", enabled: check.refreshCurrent === true },
{ type: "switchAwayAndBack", enabled: check.switchAwayAndBack === true },
@@ -2051,11 +2055,15 @@ function runQuickVerifySessionInvarianceChecks(
const result = runChildCli(args, remainingSeconds(deadline, 60));
steps.push({ phase: `observe-session-invariance-${command.type}`, ok: result.ok, promptIndex, checkId, result: result.result });
if (!result.ok) {
if (!blocking) {
warnings.push(`non-blocking session invariance canary ${checkId}/${command.type} failed after round ${promptIndex}; continuing Code Agent multi-round quick verify because scenario marks this check blocking=false.`);
continue;
}
return { ok: false, failure: `observe-session-invariance-${command.type}-failed`, checkId, promptIndex, valuesRedacted: true };
}
}
}
return { ok: true, promptIndex, checkCount: checks.length, valuesRedacted: true };
return { ok: true, promptIndex, checkCount: checks.length, warnings, valuesRedacted: true };
}
function finalizeQuickVerifyFailure(state: SentinelCicdState, input: {