b3da1e87b9
The kind-30312 status tag goes stale silently when a host crashes without publishing a CLOSED replacement, so checkStatus()'s 8-hour fallback was the only liveness signal — abandoned rooms still showed LiveFlag for up to 8h after the audio stopped. Adds a per-thumb relay probe: kinds=[10312], #a=[roomATag], limit=1. The relay returns the single most-recent presence event among all speakers in the room, then keeps streaming so fresh heartbeats land in real time. Speakers re-emit kind-10312 every ~60 s while publishing, so a presence newer than 180 s means at least one speaker is still in the room; older flips the badge to EndedFlag even though the 30312 event still says OPEN. UX: optimistic on first paint (LiveFlag while we have no presence data), self-corrects within one round-trip once the relay replies. Files: - NestThumbStatusFilterAssembler.kt: per-room limit:1 REQ + observeNestRoomLatestPresence composable that scans the LiveActivitiesChannel's notes for max(createdAt) of cached presence events. - RelaySubscriptionsCoordinator.kt: register nestThumbStatus. - NestsFeedLoaded.kt: thread card.id into a private RenderLiveOrEndedFromPresence helper that gates the OPEN badge on freshness.