From 48400440dd72223bab9a0f193ba3ec2f193f0952 Mon Sep 17 00:00:00 2001 From: Fredrik Johansson Date: Mon, 29 Jun 2026 11:14:43 +0200 Subject: [PATCH] fix: history gossip not triggering for pre-feature messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two bugs: 1. RecentMessagesSince had msg_id IS NOT NULL filter — messages sent before EXT-007 deployment all have msg_id=NULL so nothing was returned. Removed the filter; mid-based INSERT OR IGNORE dedup is sufficient. 2. queryMessages didn't SELECT room, so gossipped messages had empty room field. Added room to SELECT and Scan in queryMessages. Co-Authored-By: Claude Sonnet 4.6 --- internal/store/store.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/internal/store/store.go b/internal/store/store.go index 79bf8df..58bbbb3 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -107,7 +107,7 @@ func (s *Store) PeerAlias(peerID proto.PeerID) string { // RecentMessages returns up to limit messages for a room, oldest first. func (s *Store) RecentMessages(room string, limit int) ([]proto.ChatMessage, error) { return s.queryMessages( - `SELECT mid, from_peer, body, sent_at FROM messages + `SELECT mid, from_peer, room, body, sent_at FROM messages WHERE room = ? ORDER BY sent_at DESC LIMIT ?`, room, limit, @@ -115,15 +115,23 @@ func (s *Store) RecentMessages(room string, limit int) ([]proto.ChatMessage, err } // RecentMessagesSince returns up to limit messages for a room with ts > sinceMs, oldest first. -// Only messages that have a msg_id (i.e. gossip-safe) are returned. +// sinceMs == 0 returns the most recent messages regardless of timestamp. func (s *Store) RecentMessagesSince(room string, sinceMs int64, limit int) ([]proto.ChatMessage, error) { if limit <= 0 || limit > 500 { limit = 500 } + if sinceMs == 0 { + return s.queryMessages( + `SELECT mid, from_peer, room, body, sent_at FROM messages + WHERE room = ? + ORDER BY sent_at DESC LIMIT ?`, + room, limit, + ) + } since := time.UnixMilli(sinceMs).UTC() return s.queryMessages( - `SELECT mid, from_peer, body, sent_at FROM messages - WHERE room = ? AND sent_at > ? AND msg_id IS NOT NULL + `SELECT mid, from_peer, room, body, sent_at FROM messages + WHERE room = ? AND sent_at > ? ORDER BY sent_at DESC LIMIT ?`, room, since, limit, ) @@ -141,7 +149,7 @@ func (s *Store) queryMessages(q string, args ...any) ([]proto.ChatMessage, error var m proto.ChatMessage var from string var sentAt time.Time - if err := rows.Scan(&m.Mid, &from, &m.Text, &sentAt); err != nil { + if err := rows.Scan(&m.Mid, &from, &m.Room, &m.Text, &sentAt); err != nil { return nil, err } m.From = proto.PeerID(from)