From b9c2c646fd5313a316be3aae250bd42a61fa0ca5 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 4 Jun 2026 22:48:06 +0000 Subject: [PATCH] feat(dm): log a 'window settled' line when every relay is done or stalled The demand-driven rewrite dropped the round model's 'load done: all relays' completion line, leaving no aggregate signal for 'this is as far as history goes right now'. Log one per protocol on the exhausted false->true edge, with the done vs stalled relay breakdown, restoring that diagnostic. --- .../nip59GiftWraps/AccountGiftWrapsHistoryEoseManager.kt | 6 ++++++ .../datasource/ChatroomNip04HistorySubAssembler.kt | 6 ++++++ .../datasource/ChatroomListNip04HistorySubAssembler.kt | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip59GiftWraps/AccountGiftWrapsHistoryEoseManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip59GiftWraps/AccountGiftWrapsHistoryEoseManager.kt index 8630cd87fa..179cad473f 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip59GiftWraps/AccountGiftWrapsHistoryEoseManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/relayClient/reqCommand/account/nip59GiftWraps/AccountGiftWrapsHistoryEoseManager.kt @@ -217,7 +217,13 @@ class AccountGiftWrapsHistoryEoseManager( val stalled = stalledRelays[user.pubkeyHex] ?: emptySet() val pending = relays.any { !pager.isDone(user.pubkeyHex, it) && it !in stalled } val ex = !pending + val was = exhaustedByUser[user.pubkeyHex] ?: false exhaustedByUser[user.pubkeyHex] = ex + if (ex && !was) { + val done = relays.filter { pager.isDone(user.pubkeyHex, it) }.map { it.url } + val stuck = relays.filter { it in stalled && !pager.isDone(user.pubkeyHex, it) }.map { it.url } + Log.d(TAG) { "[giftwrap.history] window settled (nothing more reachable) — done=$done stalled=$stuck" } + } if (activeUser == user.pubkeyHex) _exhausted.value = ex } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/datasource/ChatroomNip04HistorySubAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/datasource/ChatroomNip04HistorySubAssembler.kt index b358bf348b..d1d433a37b 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/datasource/ChatroomNip04HistorySubAssembler.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/privateDM/datasource/ChatroomNip04HistorySubAssembler.kt @@ -207,7 +207,13 @@ class ChatroomNip04HistorySubAssembler( val stalled = stalledRelays[pk] ?: emptySet() val pending = relays.all.any { !pager.isDone(pk, it) && it !in stalled } val ex = !pending + val was = exhaustedByConvo[pk] ?: false exhaustedByConvo[pk] = ex + if (ex && !was) { + val done = relays.all.filter { pager.isDone(pk, it) }.map { it.url } + val stuck = relays.all.filter { it in stalled && !pager.isDone(pk, it) }.map { it.url } + Log.d("DMPagination") { "[convo.nip04.history] window settled (nothing more reachable) — done=$done stalled=$stuck" } + } if (activeConvo == pk) _exhausted.value = ex } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/rooms/datasource/ChatroomListNip04HistorySubAssembler.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/rooms/datasource/ChatroomListNip04HistorySubAssembler.kt index 2ea913b2a8..721ca082d4 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/rooms/datasource/ChatroomListNip04HistorySubAssembler.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chats/rooms/datasource/ChatroomListNip04HistorySubAssembler.kt @@ -193,7 +193,13 @@ class ChatroomListNip04HistorySubAssembler( val stalled = stalledRelays[user.pubkeyHex] ?: emptySet() val pending = relays.any { !pager.isDone(user.pubkeyHex, it) && it !in stalled } val ex = !pending + val was = exhaustedByUser[user.pubkeyHex] ?: false exhaustedByUser[user.pubkeyHex] = ex + if (ex && !was) { + val done = relays.filter { pager.isDone(user.pubkeyHex, it) }.map { it.url } + val stuck = relays.filter { it in stalled && !pager.isDone(user.pubkeyHex, it) }.map { it.url } + Log.d("DMPagination") { "[rooms.nip04.history] window settled (nothing more reachable) — done=$done stalled=$stuck" } + } if (activeUser == user.pubkeyHex) _exhausted.value = ex }