Merge branch 'codex/work-folders-remote-recovery-refresh' into codex/work-folders-session-compat-refresh
* codex/work-folders-remote-recovery-refresh: test(campaign): prioritize explicit no-retry errors over cleanup noise
This commit is contained in:
commit
1019f90747
|
|
@ -3,7 +3,7 @@ import type { FailureClass } from "./types.js";
|
|||
const TRANSIENT =
|
||||
/(?:\b429\b|\b5\d\d\b|rate.?limit|ECONN(?:RESET|REFUSED)|socket hang up|network (?:error|interruption|timeout)|service unavailable|(?:provider|server|bootstrap|browser|webserver|health|daytona|sandbox|ingress|preview|connection|harness).*(?:temporar|timed? out|timeout|closed|failed|unavailable|interrupt|reset|refused|create|start|connect)|(?:timed? out|timeout).*(?:provider|server|bootstrap|browser|webserver|health|daytona|sandbox|ingress|preview|connection|harness))/i;
|
||||
const PERMANENT =
|
||||
/(?:retryable=false|effective_model_mismatch|missing (?:credential|fixture secret)|invalid.*(?:credential|api key)|unauthorized|forbidden|qualification|model.*(?:unsupported|incompatible)|artifact.*incompatible|runner_remote_.*(?:incompatible|unavailable)|immutable image digest)/i;
|
||||
/(?:missing (?:credential|fixture secret)|invalid.*(?:credential|api key)|unauthorized|forbidden|qualification|model.*(?:unsupported|incompatible)|artifact.*incompatible|runner_remote_.*(?:incompatible|unavailable)|immutable image digest)/i;
|
||||
const CANDIDATE =
|
||||
/(?:matcher|expected.*observed|marker|issue status|run status|runtime mode|wrong output|missing output)/i;
|
||||
|
||||
|
|
@ -14,6 +14,8 @@ export function classifyFailure(error: unknown): FailureClass {
|
|||
return "transient_infrastructure";
|
||||
if (/secret.*(?:leak|plaintext|redaction)/i.test(message))
|
||||
return "secret_leak";
|
||||
if (/retryable=false|effective_model_mismatch/i.test(message))
|
||||
return "permanent_infrastructure";
|
||||
if (/cleanup|teardown|lease.*release/i.test(message)) {
|
||||
return TRANSIENT.test(message)
|
||||
? "transient_infrastructure"
|
||||
|
|
|
|||
|
|
@ -738,9 +738,9 @@ describe("runner E2E failure policy", () => {
|
|||
});
|
||||
|
||||
describe("runner E2E server isolation", () => {
|
||||
it("does not retry a provider rejection explicitly marked nonretryable", () => {
|
||||
it.each(["", "; cleanup: provider failed to start"])("does not retry an explicitly nonretryable provider rejection%s", (suffix) => {
|
||||
const failure = classifyFailure(new Error(
|
||||
"failed to start ACPX provider: ACPX sidecar command session.open was rejected (retryable=false, classification=effective_model_mismatch)",
|
||||
"failed to start ACPX provider: ACPX sidecar command session.open was rejected (retryable=false, classification=effective_model_mismatch)" + suffix,
|
||||
));
|
||||
expect(failure).toBe("permanent_infrastructure");
|
||||
expect(shouldRetryFailure(failure)).toBe(false);
|
||||
|
|
|
|||
Loading…
Reference in New Issue