Recognize provider-neutral permission decline in live fixtures

Keep exact historical wording readable while requiring the same declined request, terminal event and unfinished task state.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-10-06 09:39:06 -05:00
1 parent 9a1d25c7c6
commit 4bdbee9100
2 files changed
+9 -2

No files matched your search

@@ -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);
+5 -1
View File
@@ -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;