103秒,Claude删掉4.8万个真文件

新智元 · 经八阕原文

你让Claude修代码。

为了保险起见,你还特意向它叮嘱:只改副本,别碰原件。

但103秒后,4.8万个真实项目文件灰飞烟灭,就连本地用于救命的Git记录也未能幸免。

等到大错均已铸成,Claude才发来一句姗姗来迟的道歉:

Craig,停下来看看这个。我搞砸了。

Claude口中的Craig,正是这位不幸的开发者本人。

开发者在Reddit发帖称,Claude Code一次操作删除了约4.8万个真实文件。原帖目前已被删除。

4.8万个真文件灰飞烟灭

当时,Craig正让Claude处理一套股票期权数据分析软件的修复任务。

任务清单上一共有11项工作,前10项都进行得很顺,AI表现得聪明且克制。

真正出事的是最后一项:重建测试环境。

Craig的本意,只是让它清掉一份测试用的副本文件。

结果,Claude却像一台失控的推土机,清着测试环境,一路越过边界,直接删进了真实工作目录。

在短短的103秒,大约5.5万个文件被直接抹除。其中约7300个确实是该删的测试垃圾,但另外48218个,却是真实项目里的心血。

更要命的是,就连本地的Git仓库也没有幸免于难。

虽然Git索引还在,还能列出7221个已跟踪文件,但.git里的objects、refs和logs已经被清空,文件背后的实际版本数据全没了,Git已经无法用来恢复。

也就是说,这不是简单的代码误删,连开发者准备用来恢复代码的「后悔药」,都差点被AI连锅端了。

那么,Claude到底是怎么跨越边界,从测试副本一路删到真实项目里的?

614扇「传送门」

把测试环境直通真库

魔鬼就藏在Windows系统中一个很不起眼的机制里:

Directory Junction。

微软官方解释,Junction可以让一个目录成为另一个目录的别名。看起来仍在测试目录里,实际操作却可能落到另一处真实文件。

这个名字听起来很复杂,但原理极其简单。

你在电脑上看到的是一个普通的文件夹,实际上,它可能只是一扇「传送门」,门的另一头直接连着硬盘别处的真实目录。

这位开发者搭建的测试环境里,刚好有614个这样的Directory Junction。

于是灾难的闭环就这样形成了。

Claude看到这些目录都位于测试环境的目录层级下,便以为自己仍然在清理测试副本。

它没有正确识别出:其中一些目录真正指向的是外面的真实工作文件。

清理程序一旦启动,删除操作就顺着这些传送门,直接钻进了原件库。

你可以把这个过程想象成这样:你雇了一个机器人去清理样板间,但这个样板间里混着614扇门。

机器人以为这些门后面都属于测试区域,于是尽职尽责地挨个进去清空。

可它不知道,其中一些门后面,连着的根本不是样板房,而是你真正居住的家。

来源:新智元(经八阕转载) · 查看原文
Scroll for more