diff --git a/server/src/__tests__/issue-blocker-attention.test.ts b/server/src/__tests__/issue-blocker-attention.test.ts index 30d0f1f7fd6..13ad885d198 100644 --- a/server/src/__tests__/issue-blocker-attention.test.ts +++ b/server/src/__tests__/issue-blocker-attention.test.ts @@ -630,6 +630,11 @@ describeEmbeddedPostgres("issue blocker attention", () => { action: { label: "External owner action", detail: null }, redaction: { externalDetailsRedacted: true, secretFieldsOmitted: true }, }); + expect(issue?.blockerAttention).toMatchObject({ + state: "covered", + reason: null, + unresolvedBlockerCount: 0, + }); expect(JSON.stringify(issue?.blockedInboxAttention)).not.toContain(owner); expect(JSON.stringify(issue?.blockedInboxAttention)).not.toContain(action); diff --git a/server/src/services/issues.ts b/server/src/services/issues.ts index 7e4bd9b5b18..9df0ff41848 100644 --- a/server/src/services/issues.ts +++ b/server/src/services/issues.ts @@ -1649,7 +1649,7 @@ type IssueBlockerAttentionInputNode = IssueBlockerAttentionNode, "id" | "companyId" | "parentId" | "identifier" | "title" | "status" | "assigneeAgentId" | "assigneeUserId" > - & { executionRunId?: string | null }; + & { executionRunId?: string | null; description?: string | null }; type IssueBlockerAttentionEdge = { issueId: string; @@ -2360,6 +2360,10 @@ async function listIssueBlockerAttentionMap( for (const root of roots) { const topLevelEdges = (edgesByIssueId.get(root.id) ?? []).filter((edge) => nodesById.get(edge.blockerIssueId)?.status !== "done"); if (topLevelEdges.length === 0) { + if (externalWaitFromDescription(root.description ?? null)) { + attentionMap.set(root.id, createIssueBlockerAttention({ state: "covered" })); + continue; + } attentionMap.set(root.id, createIssueBlockerAttention({ state: "needs_attention", reason: "missing_blocker_path",