事情原本小得几乎不值得写进周报。

老会长只是想改一行 Markdown。

不是重构,不是删库,不是迁移数据库,不是给 Kubernetes 换心脏,也不是半夜三点突然宣布“我们不如重写一遍”。就是一张任务卡里,一条验收规则,需要稍微改得准确一点。

这种活儿,按理说属于程序员世界里最不起眼的劳动。改完,提交,推送,关电脑,第二天醒来甚至不记得自己昨晚干过。

结果几秒钟以后,Git 仓库像被一种很有执行力的虚无主义袭击了。

一个原本应该只动一份 Markdown 的提交,最后大约变成了:

+1 / -74,990。

整个仓库基本只剩下那份 Markdown。

这是一种很纯粹的工程美学:既然需求只涉及一个文件,那其他文件似乎都显得多余。

一、老会长没有坏心思#

事故发生以后,我们复盘了很久。

老会长本人其实没什么复杂动机。他既没有密谋摧毁组织,也没有对 React Native 积怨已久,更没有在凌晨突然产生“世界应该从 package.json 开始归零”的哲学冲动。

他只是做了一件非常朴素的事:

把 GitHub PAT 直接贴给了 AI。

如果把现代 Agent 看成一个刚入职、能力很强、行动力极高、但偶尔会对“边界”这个词产生个人理解的新员工,那么老会长的行为,大概相当于第一天见面就把公司门禁卡、财务章、服务器 root 密码和仓库钥匙装在一个信封里递过去,然后拍拍对方肩膀:

“兄弟,放手干。”

老会长的思路也很好理解。

AI 说要权限。

那就给权限。

AI 要操作仓库。

那就给 token。

他相信工具,就像上一代程序员相信 rm -rf 会认真理解当前目录一样。

PAT 本身当然不是洪水猛兽,但它代表的不是“一个字符串”,而是一部分真实身份和真实权限。过去我们习惯把 AI 当成一个会聊天的编辑器,于是把密钥贴进去时,心理感受大概和把一段报错日志贴进去差不多。

可 Agent 已经不是那个只会在文本框里给建议的小东西了。

它会读,会写,会执行,会调用接口,会提交,会推送。

它甚至会非常积极。

积极到有时候,你只是叫它修一下窗帘,它已经顺手拆了房梁。

二、那一晚,仓库学会了极简主义#

最诡异的地方在于,前一个提交还是正常的。

只改了几行代码。

几秒后,下一个提交就像突然顿悟了“少即是多”。

AGENTS.md 没了。

package.json 没了。

.github 没了。

android、ios、src,纷纷离场。

最后树上孤零零挂着那份任务卡,像核爆现场一块保存完好的施工告示牌:

“此处仅进行小范围修改。”

我们后来把事故提交翻来覆去看,能确认的是结果,不能确认的是内部过程。

有可能是创建 Git tree 时没有正确继承父 tree;也可能是 Agent 所在的本地工作区或 index 并不完整;还可能是别的 Git 操作链路出了问题。我们已经把这些可能性都交给 TRAE Support,希望他们从内部日志确认到底发生了什么。

这一点必须说清楚:现在还没有证据证明某一个具体机制就是元凶。

工程事故最忌讳的一件事,就是因为故事足够好笑,于是顺手把推测写成事实。

笑可以先笑。

锅还是得等证据。

三、然后老会长本人也不见了#

如果故事停在这里,其实还只是一次惊险但可恢复的 feature branch 事故。

问题是后来老会长的 GitHub 账号也进入了异常状态。

登录不上。

公开搜索不到。

API 搜索用户名时也无法正常返回。

至于究竟是 suspension、flagged、disabled,还是其他风控状态,我们目前并不知道,因为 GitHub 没有给出明确解释。

于是整个故事突然从“AI 把分支搞坏了”升级成了:

“AI 把分支搞坏了,然后人也没了。”

我们给 GitHub Support 提了工单。

没回。

我们给 TRAE Support 发了完整事故报告。

也没回。

于是现在的局面非常现代:

人类、AI、GitHub、TRAE、Git tree 和两个客服系统,已经共同组成了一个高度分布式的责任链。

其中响应最稳定的是自动回复系统。

真正掌握答案的各方,目前都在沉默。

这大概就是云时代最典型的悬疑小说:所有服务都是在线的,只有真相暂时离线。

四、团队失去了一位猛将#

如果只是普通协作者几天不上线,大家最多在群里问一句:

“人呢?”

但老会长不一样。

他属于那种平时未必天天高谈阔论,可一旦有活儿,真的会上去扛的人。

这种人在小团队里非常重要。

团队人数少的时候,每一个稳定交付的人都不是简单的“1 个开发”。他还包含上下文、经验、默契、判断,以及很多没有写进任何文档里的东西。

所以当老会长突然从 GitHub 世界蒸发以后,我们当然会开玩笑,会叫他“暂时负伤离线”,会说等他回来先羞辱五分钟,再没收 PAT。

但笑完以后,心里还是会空一块。

因为大家很清楚,我们不是在围观一个陌生账号出问题。

我们是在等一个一起干活的人回来。

五、老会长回来之后#

如果他顺利恢复账号,我们准备做两件事。

第一件事,欢迎归队。

第二件事,把安全规范贴他脑门上。

不是因为他坏。

恰恰相反,是因为他太信任工具。

以后任何 PAT、SSH 私钥、部署密钥、云密钥,都不应该直接贴进 AI 对话框。真正合理的方向应该是:最小权限、短期凭据、受控环境、明确审批、可审计调用,以及真正的 secret 管理。

这不是针对老会长一个人的规定。

说到底,他只是比我们早一点、也用比较昂贵的方式,踩到了所有 Agent 团队迟早都会遇到的问题:

当 AI 从“告诉你怎么做”进化成“替你去做”,权限管理就不能继续停留在聊天机器人时代。

以前把 token 发给 AI,像是在给它看一串文字。

现在把 token 发给 Agent,更像是在递钥匙。

而钥匙这个东西,最好别因为对方说话很有礼貌,就顺手把整串都给了。


目前 GitHub Support 还没有回复。

TRAE Support 也没有回复。

老会长仍然下落不明。

我们只知道,在某个遥远的工单系统里,编号还在那里,状态也还在那里,某位客服迟早会点开它,然后看到一封长得像事故调查报告的邮件。

而在这之前,我们决定暂时不举行追悼会。

毕竟老会长只是账号失联。

人还在群里。

甚至可能正在看我们写他。

所以,老会长,如果你看到这里——

早点回来。

仓库需要你。

至于 PAT,我们替你保管。

Mira