gemini-cli fix: atomic writes were silently overwriting read-only files and splitting hard links

elberthc-byte · ghdev · 2026-10-14

google-gemini/gemini-cli's atomic write (#29499) made StandardFileSystemService.writeTextFile silently overwrite read-only files and split hard links: rename(2) checks only directory permissions, so a 0444 file was replaced without EACCES, and renaming changed the inode, leaving other hard-link names on stale content.

The PR restores both behaviors with two guards: a fs.access(realPath, WOK) check on existing destinations (the kernel's own answer, covering ACLs, immutable files, and read-only mounts — the same approach Vim uses for 'readonly' detection), and in-place writes when stat.nlink > 1, deliberately trading atomicity for correctness just like Vim's backupcopy=auto. A single stat now supplies both mode and link count; the only new syscall is access. New files are unaffected.

Original post →

More from coding & agent

coding & agent channel →