diff --git a/NucleicRemote/NucleicRemote/Models/RemoteStore.swift b/NucleicRemote/NucleicRemote/Models/RemoteStore.swift index cfe8834..97e1d0e 100644 --- a/NucleicRemote/NucleicRemote/Models/RemoteStore.swift +++ b/NucleicRemote/NucleicRemote/Models/RemoteStore.swift @@ -477,7 +477,10 @@ final class RemoteStore: ObservableObject { } cb.openSnapshot = { [weak self] snap in guard let self, hostID == self.openSessionHostID, snap.summary.sessionID == self.openSessionID else { return } - self.openEvents = snap.recentEvents + // Merge, don't replace: a fresh open merges into an empty transcript (the tail window), + // while a reconnect's warm-resubscribe delta appends to the history already on screen + // instead of truncating it to the host's 200-event tail. + self.openEvents = Self.mergedEvents(self.openEvents, snap.recentEvents) self.openApprovals = snap.pendingApprovals } cb.openEvents = { [weak self] batch in