From 665d1b946b19c7efe39cd3d4735a1cb6b453644a Mon Sep 17 00:00:00 2001 From: wzj-zz Date: Thu, 22 Oct 2026 07:13:11 +0800 Subject: [PATCH] fix(session): fix snapshot write failure on Windows os.rename cannot overwrite an existing file on Windows, causing all subsequent saves to fail after the first write. Remove the target file before renaming the temporary file, keeping the operation atomic on platforms that support it. Fixes #545 Fixes #541 Bug 3 Fixes #546 --- lua/opencode/services/session_tab_persistence.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/opencode/services/session_tab_persistence.lua b/lua/opencode/services/session_tab_persistence.lua index 7c410fa8..0f77c400 100644 --- a/lua/opencode/services/session_tab_persistence.lua +++ b/lua/opencode/services/session_tab_persistence.lua @@ -135,6 +135,9 @@ local function write(snapshot, reason) local ok, err = pcall(function() vim.fn.mkdir(vim.fs.dirname(path), 'p') assert(vim.fn.writefile({ encoded }, temporary) == 0, 'Failed to write session tabs') + if vim.fn.has('win32') == 1 then + os.remove(path) + end assert(os.rename(temporary, path)) end) if not ok then