diff --git a/tests/runner-e2e/cursor-native-evidence.test.ts b/tests/runner-e2e/cursor-native-evidence.test.ts index 48b83d0670..9b91cae5ee 100644 --- a/tests/runner-e2e/cursor-native-evidence.test.ts +++ b/tests/runner-e2e/cursor-native-evidence.test.ts @@ -126,8 +126,11 @@ it("requires a correlated failed semantic finalization after the delivered denia const input = { runId: "run", turnId: "turn", requestId: "request", issue: { id: "issue", status: "in_progress" }, run: { id: "run", nativeIssueId: "issue", runtimeMode: "native", status: "failed", errorCode: "native_session_interrupted", error: "native_finalization_missing: session returned no semantic result" }, events: [evidence, terminal] }; expect(hasCursorDeniedTurnTerminal(input)).toBe(true); - const declined = { ...input, issue: { ...input.issue, status: "blocked" }, run: { ...input.run, errorCode: "native_permission_declined", error: "native_finalization_missing: session returned no semantic result; Cursor permission was declined; explicit direction is required" } }; + const declined = { ...input, issue: { ...input.issue, status: "blocked" }, run: { ...input.run, errorCode: "native_permission_declined", error: "native_finalization_missing: session returned no semantic result; provider permission was declined; explicit direction is required" } }; expect(hasCursorDeniedTurnTerminal(declined)).toBe(true); + expect(hasCursorDeniedTurnTerminal({ ...declined, run: { ...declined.run, error: declined.run.error.replace("provider permission", "Cursor permission") } })).toBe(true); + expect(hasCursorDeniedTurnTerminal({ ...declined, run: { ...declined.run, error: "unrelated failure" } })).toBe(false); + expect(hasCursorDeniedTurnTerminal({ ...declined, issue: { ...declined.issue, status: "done" } })).toBe(false); expect(hasCursorDeniedTurnTerminal({ ...declined, events: [terminal] })).toBe(false); for (const status of ["succeeded", "cancelled", "timed_out", "running"]) expect(hasCursorDeniedTurnTerminal({ ...input, run: { ...input.run, status } })).toBe(false); expect(hasCursorDeniedTurnTerminal({ ...input, issue: { ...input.issue, status: "done" } })).toBe(false); diff --git a/tests/runner-e2e/cursor-native-evidence.ts b/tests/runner-e2e/cursor-native-evidence.ts index f905c63e6b..3cdefe5a5c 100644 --- a/tests/runner-e2e/cursor-native-evidence.ts +++ b/tests/runner-e2e/cursor-native-evidence.ts @@ -74,7 +74,11 @@ export function hasCursorDeniedTurnTerminal(input: { }): boolean { const run = rec(input.run), issue = rec(input.issue); const missingResult = run.errorCode === "native_session_interrupted" && run.error === "native_finalization_missing: session returned no semantic result"; - const declined = run.errorCode === "native_permission_declined" && run.error === "native_finalization_missing: session returned no semantic result; Cursor permission was declined; explicit direction is required"; + const declined = run.errorCode === "native_permission_declined" && [ + "native_finalization_missing: session returned no semantic result; provider permission was declined; explicit direction is required", + // Retained results from before the provider lifecycle boundary cleanup. + "native_finalization_missing: session returned no semantic result; Cursor permission was declined; explicit direction is required", + ].includes(run.error); if (!id(input.runId) || !id(input.turnId) || !id(input.requestId) || run.id !== input.runId || run.nativeIssueId !== issue.id || run.status !== "failed" || run.runtimeMode !== "native" || issue.status !== (declined ? "blocked" : "in_progress") || (!missingResult && !declined)) return false;