From 9b5a40437972b5324e8bc3fde20b7c00172bd255 Mon Sep 17 00:00:00 2001 From: Devin Foley Date: Sun, 29 Mar 2026 23:18:10 -0700 Subject: [PATCH] Fix inbox ordering: self-touched issues no longer sink to bottom issueLastActivityTimestamp() returned 0 for issues where the user was the last to touch them (myLastTouchAt >= updatedAt) and no external comment existed. This pushed those items to the bottom of the inbox list regardless of how recently they were updated. Now falls back to updatedAt instead, so recently updated items sort to the top of the Recent tab as expected. Co-Authored-By: Paperclip --- ui/src/lib/inbox.test.ts | 20 ++++++++++++++++++++ ui/src/lib/inbox.ts | 6 +----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/ui/src/lib/inbox.test.ts b/ui/src/lib/inbox.test.ts index af7c1d354df..1fa25676eba 100644 --- a/ui/src/lib/inbox.test.ts +++ b/ui/src/lib/inbox.test.ts @@ -342,6 +342,26 @@ describe("inbox helpers", () => { ]); }); + it("sorts self-touched issues without external comments by updatedAt", () => { + const recentSelfTouched = makeIssue("recent", false); + recentSelfTouched.lastExternalCommentAt = null as unknown as Date; + recentSelfTouched.updatedAt = new Date("2026-03-11T05:00:00.000Z"); + recentSelfTouched.myLastTouchAt = new Date("2026-03-11T05:00:00.000Z"); + + const olderCommented = makeIssue("older", false); + olderCommented.lastExternalCommentAt = new Date("2026-03-11T03:00:00.000Z"); + + const items = getInboxWorkItems({ + issues: [olderCommented, recentSelfTouched], + approvals: [], + }); + + expect(items.map((i) => (i.kind === "issue" ? i.issue.id : ""))).toEqual([ + "recent", + "older", + ]); + }); + it("can include sections on recent without forcing them to be unread", () => { expect( shouldShowInboxSection({ diff --git a/ui/src/lib/inbox.ts b/ui/src/lib/inbox.ts index 3b4297b8f2b..54bc3a5edec 100644 --- a/ui/src/lib/inbox.ts +++ b/ui/src/lib/inbox.ts @@ -123,11 +123,7 @@ export function issueLastActivityTimestamp(issue: Issue): number { const lastExternalCommentAt = normalizeTimestamp(issue.lastExternalCommentAt); if (lastExternalCommentAt > 0) return lastExternalCommentAt; - const updatedAt = normalizeTimestamp(issue.updatedAt); - const myLastTouchAt = normalizeTimestamp(issue.myLastTouchAt); - if (myLastTouchAt > 0 && updatedAt <= myLastTouchAt) return 0; - - return updatedAt; + return normalizeTimestamp(issue.updatedAt); } export function sortIssuesByMostRecentActivity(a: Issue, b: Issue): number {