Files
amethyst/amethyst
Claude b3da1e87b9 feat: gate nests thumb LiveFlag on kind-10312 presence freshness
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.
2026-04-28 01:53:37 +00:00
..