From f4c17292f84f737a1c5e0ea4e809f222203cfa78 Mon Sep 17 00:00:00 2001 From: T3 Code Test Date: Wed, 5 Aug 2026 11:26:08 +0530 Subject: [PATCH 1/3] test(mobile): make the snoozed shelf easy to verify --- apps/mobile/src/features/threads/thread-list-v2-items.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/mobile/src/features/threads/thread-list-v2-items.tsx b/apps/mobile/src/features/threads/thread-list-v2-items.tsx index 6b9dd52512a..c080a9c1ec6 100644 --- a/apps/mobile/src/features/threads/thread-list-v2-items.tsx +++ b/apps/mobile/src/features/threads/thread-list-v2-items.tsx @@ -128,6 +128,7 @@ export const ThreadListV2SnoozedShelfHeader = memo(function ThreadListV2SnoozedS accessibilityLabel={props.count === 1 ? "1 snoozed thread" : `${props.count} snoozed threads`} accessibilityRole="button" accessibilityState={{ expanded: props.expanded }} + testID="thread-list-v2-snoozed-shelf" className={cn( "mb-1.5 mt-4 flex-row items-center gap-2.5", props.pane === "sidebar" ? "px-3" : "px-5", From 0c1cefa5611d659330e054777a5081a2cb17cfcc Mon Sep 17 00:00:00 2001 From: T3 Code Test Date: Wed, 5 Aug 2026 12:41:35 +0530 Subject: [PATCH 2/3] fix(mobile): avoid double dividers at thread sections --- apps/mobile/src/features/home/HomeScreen.tsx | 9 ++++++++- .../src/features/threads/thread-list-v2-items.tsx | 12 ++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/apps/mobile/src/features/home/HomeScreen.tsx b/apps/mobile/src/features/home/HomeScreen.tsx index 2b58bc342d4..ba32dc6b609 100644 --- a/apps/mobile/src/features/home/HomeScreen.tsx +++ b/apps/mobile/src/features/home/HomeScreen.tsx @@ -694,7 +694,11 @@ export function HomeScreen(props: HomeScreenProps) { ); const renderV2Item = useCallback( - ({ item }: { readonly item: ThreadListV2ListItem }) => { + ({ item, index }: { readonly item: ThreadListV2ListItem; readonly index: number }) => { + const nextItem = threadListV2Items[index + 1]; + const showTrailingDivider = + nextItem?.type === "v2-thread" || + (nextItem?.type === "v2-pending" && !nextItem.showPendingDivider); if (item.type === "v2-pending") { const pendingScopeKey = scopedProjectKey( item.pendingTask.message.environmentId, @@ -712,6 +716,7 @@ export function HomeScreen(props: HomeScreenProps) { : null } showPendingDivider={item.showPendingDivider} + showTrailingDivider={showTrailingDivider} onSelectPendingTask={props.onSelectPendingTask} onDeletePendingTask={props.onDeletePendingTask} /> @@ -744,6 +749,7 @@ export function HomeScreen(props: HomeScreenProps) { pinned={item.item.pinned} snoozePresetMinute={nowMinute} snoozeWakeLabelText={item.snoozeWakeLabelText} + showTrailingDivider={showTrailingDivider} project={ projectByKey.get(scopedProjectKey(thread.environmentId, thread.projectId)) ?? null } @@ -814,6 +820,7 @@ export function HomeScreen(props: HomeScreenProps) { serverConfigs, settlementEnvironmentIds, snoozeEnvironmentIds, + threadListV2Items, threadSearchMatchByKey, toggleSettledShelf, toggleSnoozedShelf, diff --git a/apps/mobile/src/features/threads/thread-list-v2-items.tsx b/apps/mobile/src/features/threads/thread-list-v2-items.tsx index c080a9c1ec6..88839c98334 100644 --- a/apps/mobile/src/features/threads/thread-list-v2-items.tsx +++ b/apps/mobile/src/features/threads/thread-list-v2-items.tsx @@ -205,6 +205,8 @@ export const ThreadListV2PendingRow = memo(function ThreadListV2PendingRow(props readonly pane?: "screen" | "sidebar"; /** Draws the "Pending" divider above the first queued row. */ readonly showPendingDivider: boolean; + /** Keeps row hairlines inside a section; section headers draw their own rule. */ + readonly showTrailingDivider?: boolean; readonly onSelectPendingTask: (pendingTask: PendingNewTask) => void; readonly onDeletePendingTask: (pendingTask: PendingNewTask) => void; }) { @@ -292,7 +294,9 @@ export const ThreadListV2PendingRow = memo(function ThreadListV2PendingRow(props ) : ( {rowContent} - + {props.showTrailingDivider !== false ? ( + + ) : null} )} @@ -328,6 +332,8 @@ export const ThreadListV2Row = memo(function ThreadListV2Row(props: { into the drawer surface, selection filled with the accent color — matching the v1 sidebar rows. */ readonly pane?: "screen" | "sidebar"; + /** Keeps row hairlines inside a section; section headers draw their own rule. */ + readonly showTrailingDivider?: boolean; /** Highlights the thread open in the detail pane (iPad split view). The compact Home list never sets it — phones navigate away on select. */ readonly selected?: boolean; @@ -729,7 +735,9 @@ export const ThreadListV2Row = memo(function ThreadListV2Row(props: { actions reveal behind the row. */ {cardContent} - + {props.showTrailingDivider !== false ? ( + + ) : null} )} From eaf891b449c4f418e91a216df2ed7639fe15e6e9 Mon Sep 17 00:00:00 2001 From: T3 Code Test Date: Wed, 5 Aug 2026 13:06:31 +0530 Subject: [PATCH 3/3] chore(mobile): remove unused snoozed shelf test id --- apps/mobile/src/features/threads/thread-list-v2-items.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/mobile/src/features/threads/thread-list-v2-items.tsx b/apps/mobile/src/features/threads/thread-list-v2-items.tsx index 88839c98334..24f7166916b 100644 --- a/apps/mobile/src/features/threads/thread-list-v2-items.tsx +++ b/apps/mobile/src/features/threads/thread-list-v2-items.tsx @@ -128,7 +128,6 @@ export const ThreadListV2SnoozedShelfHeader = memo(function ThreadListV2SnoozedS accessibilityLabel={props.count === 1 ? "1 snoozed thread" : `${props.count} snoozed threads`} accessibilityRole="button" accessibilityState={{ expanded: props.expanded }} - testID="thread-list-v2-snoozed-shelf" className={cn( "mb-1.5 mt-4 flex-row items-center gap-2.5", props.pane === "sidebar" ? "px-3" : "px-5",