diff --git a/dashboard/src/main.test.tsx b/dashboard/src/main.test.tsx index 208482d..803f086 100644 --- a/dashboard/src/main.test.tsx +++ b/dashboard/src/main.test.tsx @@ -302,8 +302,8 @@ describe("dashboard routing and API query helpers", () => { it("limits retry actions to manually recoverable job states", () => { expect(isRetryableStatus("blocked")).toBe(true); - expect(isRetryableStatus("denied")).toBe(true); - expect(isRetryableStatus("waiting_approval")).toBe(true); + expect(isRetryableStatus("denied")).toBe(false); + expect(isRetryableStatus("waiting_approval")).toBe(false); expect(isRetryableStatus("pending")).toBe(false); expect(isRetryableStatus("running")).toBe(false); expect(isRetryableStatus("done")).toBe(false); @@ -812,7 +812,7 @@ describe("status badges", () => { thread: 58, status: "blocked", action: "reply_comment", - decision: "allowed", + decision: "auto_trusted", intent: "work_allowed", subject: "Needs a guarded retry from the list", trigger_actor: "ecarreras", diff --git a/dashboard/src/main.tsx b/dashboard/src/main.tsx index 4c1d58f..5d731d7 100644 --- a/dashboard/src/main.tsx +++ b/dashboard/src/main.tsx @@ -941,6 +941,10 @@ function shouldRefreshJobForSessionEvent(eventType: string) { } function isRetryableStatus(status: string) { + return status === "blocked"; +} + +function isDismissableStatus(status: string) { return ["blocked", "denied", "waiting_approval"].includes(status); } @@ -2081,7 +2085,8 @@ function JobDetailPage({ const [retrying, setRetrying] = React.useState(false); const [dismissing, setDismissing] = React.useState(false); const [cancelling, setCancelling] = React.useState(false); - const canRetry = Boolean(user?.is_admin && selectedJob && isRetryableStatus(selectedJob.status)); + const canRetry = Boolean(user?.is_admin && selectedJob && isRetryableStatus(selectedJob.status) && selectedJob.decision === "auto_trusted"); + const canDismiss = Boolean(user?.is_admin && selectedJob && isDismissableStatus(selectedJob.status)); const canCancel = Boolean(selectedJob && canCancelJob(selectedJob, user)); const retryLabel = retrying ? "Retrying..." : "Retry"; const dismissLabel = dismissing ? "Dismissing..." : "Dismiss"; @@ -2121,7 +2126,7 @@ function JobDetailPage({ {retryLabel} ) : null} - {canRetry ? ( + {canDismiss ? (