diff --git a/src/main/native-chat/ssh-transcript-range-fs.test.ts b/src/main/native-chat/ssh-transcript-range-fs.test.ts index d0113912d76..13e981a2972 100644 --- a/src/main/native-chat/ssh-transcript-range-fs.test.ts +++ b/src/main/native-chat/ssh-transcript-range-fs.test.ts @@ -93,4 +93,17 @@ describe('SSH transcript range stability', () => { TranscriptRangeReadInvalidatedError ) }) + + it('rejects a same-length rewrite even when remote mtime is coarse', async () => { + const remote = mutableProvider('old generation') + mocks.provider = remote.provider + const rangeFs = await createSshTranscriptRangeFs('ssh-owner') + const openingStamp = await rangeFs.stat(TRANSCRIPT_PATH, undefined, true) + + remote.replace('new generation', false) + + await expect(rangeFs.assertStable(TRANSCRIPT_PATH, openingStamp)).rejects.toBeInstanceOf( + TranscriptRangeReadInvalidatedError + ) + }) }) diff --git a/src/main/native-chat/ssh-transcript-range-fs.ts b/src/main/native-chat/ssh-transcript-range-fs.ts index 92bb5e33cc2..de5027d9578 100644 --- a/src/main/native-chat/ssh-transcript-range-fs.ts +++ b/src/main/native-chat/ssh-transcript-range-fs.ts @@ -109,7 +109,9 @@ export async function createSshTranscriptRangeFs( if (versionChanged) { throw new TranscriptRangeReadInvalidatedError() } - return + if (openingStamp.size === 0) { + return + } } if (!openingStamp.boundaryFingerprint) { throw new TranscriptRangeReadInvalidatedError()