大型 CLAUDE.md 不会再被「只看开头就整篇重写」:2.1.312 给 Write 加了一道保险
如果你在 monorepo 的子目录里放过很长的 CLAUDE.md,或者用 @ 引入了一份很大的规范文件,可能遇到过一种让人心惊的情况:让 Claude「顺手补一条规则」,结果文件后半部分不见了。CLI 2.1.312 专门修了这个问题。
发生了什么
更新说明的意思是:修复了 Claude 在只看到子目录中超大 CLAUDE.md、规则文件或 @ 引入文件的开头后,就把它整个覆盖的问题;现在 Write 会要求 Claude 读完整个文件,或者改为原地编辑。
问题的根源不难理解。很大的文件被读进上下文时,往往只会读到前面一部分。Claude 如果基于这「半份」内容用 Write 写回去,等于用一份残缺的副本替换了原文件,后面没读到的规则就丢了。
现在的行为
2.1.312 起,碰到这类大文件时,Write 不会直接执行整篇覆盖,而是提示 Claude 二选一:
- 先把文件完整读完,确认掌握全部内容后再写;
- 改用 Edit 做局部修改,只动需要改的那几行。
对记忆和规则类文件来说,后者通常才是正确做法:加一条规则不该重写整份文件。
对你的意义
- 规则文件更安全。子目录 CLAUDE.md、
.claude/rules下的规则、被@引入的长文档,这些往往是团队多人维护的「约定」,被悄悄截断的代价很高。 - diff 更干净。原地编辑产生的改动更小,代码审查时一眼就能看出加了什么。
- 仍然建议纳入版本控制。这道保险减少了事故,但 CLAUDE.md 放进 git、改动走 review,依旧是最可靠的兜底。
顺手的建议
- 单个 CLAUDE.md 太长本身就是信号:可以按目录拆分,或把细节挪到被引用的独立文件里,让每份文件保持在容易通读的长度。
- 让 Claude 修改规则时,直接说「用 Edit 在某一节末尾追加」,比「更新一下 CLAUDE.md」更不容易出意外。
小结
这是一条不起眼但很实用的修复:大文件不会再因为「只看了开头」而被整篇改写。升级到 2.1.312 后,维护长规则文件可以少一分担心。