diff --git a/ui/src/lib/inbox.test.ts b/ui/src/lib/inbox.test.ts index 784e38cb..bbdf5cba 100644 --- a/ui/src/lib/inbox.test.ts +++ b/ui/src/lib/inbox.test.ts @@ -319,6 +319,21 @@ describe("inbox helpers", () => { }); }); + it("excludes read mine issues from the inbox badge count", () => { + const result = computeInboxBadgeData({ + approvals: [], + joinRequests: [], + dashboard, + heartbeatRuns: [], + mineIssues: [makeIssue("1", false), makeIssue("2", false), makeIssue("3", true)], + dismissed: new Set(), + }); + + expect(result.mineIssues).toBe(1); + // inbox = mineIssues(1) + agent-error alert(1) + budget alert(1) + expect(result.inbox).toBe(3); + }); + it("keeps read issues in the touched list but excludes them from unread counts", () => { const issues = [makeIssue("1", true), makeIssue("2", false)]; diff --git a/ui/src/lib/inbox.ts b/ui/src/lib/inbox.ts index 9f26e998..03698cfc 100644 --- a/ui/src/lib/inbox.ts +++ b/ui/src/lib/inbox.ts @@ -362,7 +362,7 @@ export function computeInboxBadgeData({ const visibleJoinRequests = joinRequests.filter( (jr) => !dismissed.has(`join:${jr.id}`), ).length; - const visibleMineIssues = mineIssues.length; + const visibleMineIssues = mineIssues.filter((issue) => issue.isUnreadForMe).length; const agentErrorCount = dashboard?.agents.error ?? 0; const monthBudgetCents = dashboard?.costs.monthBudgetCents ?? 0; const monthUtilizationPercent = dashboard?.costs.monthUtilizationPercent ?? 0;