mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-08 23:54:39 +00:00
Correctness: - GeoRelayDirectory.relays is now @Volatile; on the process-wide `shared` directory the CSV refresh was written by one thread and read by others with no memory barrier, so readers could keep using the FALLBACK list forever and never route to the correct rendezvous relays. - sendPostSync bails before cancel() when a geohash cell has no resolvable relays, so the composer text + draft are preserved instead of the message being silently dropped with its draft deleted. - Teleport detection compares on the common geohash prefix; a cell finer than the fixed 8-char device fix could never be a startsWith prefix, so the user was wrongly marked teleported even when physically present. Performance: - GeoRelayDirectory.closest precomputes each relay's great-circle distance once instead of recomputing the trig inside the sort comparator (was O(n log n) haversine calls over the ~370-relay directory). - GeohashChatChannel.relays() memoizes the derived set, invalidated by a new directory version token, instead of re-sorting the whole directory (and allocating a fresh Set) on every call. - filterFollowingGeohashChats groups cells by relay into one filter each (g = [cells]) rather than one REQ per (cell, relay). Leak/thread-safety: - FollowingGeohashChatSubAssembler.userJobMap is a ConcurrentHashMap and endSub now removes the entry (it previously cancelled the jobs but left the stale entry behind). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0172JoMccseEKenyWan6txWV