mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-16 15:15:35 +02:00
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:
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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user