diff --git a/src/shared/session-cursor.test.ts b/src/shared/session-cursor.test.ts index bb395a483..2edf1e16e 100644 --- a/src/shared/session-cursor.test.ts +++ b/src/shared/session-cursor.test.ts @@ -50,4 +50,17 @@ describe("getNewMessages", () => { // #then expect(next).toEqual(shorter) }) + + it("returns all messages when last key is missing", () => { + // #given + const messages = [buildMessage("m1", 1), buildMessage("m2", 2)] + getNewMessages(sessionID, messages) + const replaced = [buildMessage("n1", 1), buildMessage("n2", 2)] + + // #when + const next = getNewMessages(sessionID, replaced) + + // #then + expect(next).toEqual(replaced) + }) }) diff --git a/src/shared/session-cursor.ts b/src/shared/session-cursor.ts index 0fc942b8a..d9c38a28c 100644 --- a/src/shared/session-cursor.ts +++ b/src/shared/session-cursor.ts @@ -57,8 +57,9 @@ export function getNewMessages( const lastIndex = keys.lastIndexOf(cursor.lastKey) if (lastIndex >= 0) { startIndex = lastIndex + 1 - } else if (cursor.lastCount <= messages.length) { - startIndex = cursor.lastCount + } else { + // History changed without a shrink; reset to avoid skipping messages. + startIndex = 0 } } }