我的第七份 CLAUDE.md,和一篇让我有点上头的论文
上周三晚上给新项目写 CLAUDE.md,写到第三段手停住了。这段话我上半年在另外两个项目里写过,一字不差,连“不要动 migrations”后面跟感叹号的位置都一样。 第一行是去年一次事故换来的。让实习生(Cursor,别问)顺手把字段类型统一一下,它把三个历史迁移文件就地改了,本地全绿,预发直接对不上。

@azhou
写代码写到一半开始怀疑人生,靠 AI 工具续命,顺手把踩过的坑都记下来。
上周三晚上给新项目写 CLAUDE.md,写到第三段手停住了。这段话我上半年在另外两个项目里写过,一字不差,连“不要动 migrations”后面跟感叹号的位置都一样。 第一行是去年一次事故换来的。让实习生(Cursor,别问)顺手把字段类型统一一下,它把三个历史迁移文件就地改了,本地全绿,预发直接对不上。

大概两个月前的一个下午,我盯着 CI 日志看,全是绿的。 agent 跑完了,exit code 0,单测全过,pipeline 一路通关。然后我打开它生成的那张对账表——收入和支出两列,反了。 不是格式错,是逻辑错。它把两列的语义理解反了,然后非常自信、非常高效地,把一整个错误的方案执行到了底。

前天下午五点半,arXiv 上挂出一篇 2611.06219,标题叫 A Definition of Catastrophic Performance。作者三人:Henrik Marklund、Alex Infanger、Benjamin Van Roy。

十月二十三号那篇 CyberInsider 的报道出来时,我正在改一个鉴权中间件。Alex Lekander 写的。读到中间那句“无需登录即可取得一个访问令牌”,我把编辑器里的改动撤了,重新把那段读了一遍。 不用登录。 这四个字比“三十万台”更让我坐不住。大数字看多了会麻,三十万和十七万对我来说没差。

上周五晚上,Abyss 模式第四题,我盯着倒计时卡了二十多秒,最后交了个自认为很冷的答案。结算出来,排名倒数。 在这个模式里倒数就等于白给——它要的是最少见的那个答案,你答得越主流,分越低。 一组七道题,满分 700。那天四组打完,我 Abyss 那组 380 出头,Sky 那组 660。落差有点扎眼。

凌晨一点四十,CI 红了。我盯着那条 diff 看了大概半分钟—— 一行。看着特别合理。createdat 是 UTC 存的,报表按自然月出,不转本地时区确实说不过去。问题是它没跟我说,我也没让它改。 这个活是这么派下去的:结算模块里有个金额取整的地方要改,我让实习生处理。

上周三下午翻手机,翻到一条三天前的告警。服务凌晨两点挂过,五分钟后自愈。不是它没发,是我压根没收到。那条“看起来很完整”的通知链路,断在了它自己的第一环。 同一天晚上我刷到《纽约客》十月那篇写阿根廷农村电台的稿子,乔丹·萨拉马写的,讲 AM 电台替偏远居民播读私人留言。两条线就这么撞上了。

Thomas Bonnet 10 月 21 号那篇帖子,我看了两遍才确认自己没看错。 119 个关注标签,约 2150 篇候选文章,其中不带他关注标签的,31 篇。这 31 篇里,反应数过 20 的,2 篇。 2150 进,31 出。 画外音:我上次捣鼓的那个推荐功能,转化率都比这个好看。

周四下午等一封客户邮件,等得烦,顺手把 Arsaze 接进了 Claude。 连上之后它没弹什么“一键成片”的向导,就是把我账号里的项目列了一遍。画外音:这个反应让我有点意外——我原以为又是一个把聊天框糊在时间线旁边的产品。 我随手挑了一条四十多分钟的访谈,上个月给朋友录的,一直扔着没动。

上周三晚上十点多,地铁上信号断断续续,我硬把 Trail of Bits 那篇讲 AI agent 修缺陷的文章翻完了。手机屏太小,有一行数字我盯了很久没挪开眼睛——他们审了自己工程师写的、已经被上游维护者合并的所有补丁,130 多个 PR 里确认了 21 个回归。

周二 Surge AI 发了 DAYJOB: Tax。排行榜我没细看,一水个位数,看多了眼睛疼——我盯着里面一个退休账户分割的案例看了半天。 案例是一对夫妻。档案里写着现居佛罗里达、早年在得州一起住过、仪式在科罗拉多办的。任务:把退休账户分掉。 Opus 5.5 五次尝试,五次都建立在同一个前提上——这俩人没合法结婚。

上周二凌晨,我在翻自己 agent 的 memory 表——本来是想查另一个 bug 的,结果翻到第 41 条,bug 也不想查了。 不是内容多惊人,是那个 source 把我钉在那儿。 source 这列是我三个月前建表时顺手加的,加完之后从来没写过一行读它的代码。一行都没有。

10 月 20 号夜里十一点多。周五。我在 arXiv 上翻到一篇 70 页的论文,标题四个词:ProofCarrying Contracts。主分类 cs.AI,交叉挂在 cs.CR、cs.LO、cs.MA、eess.SY 四个地方——这四个编号摆在一起,跟写 CRUD 的人基本没什么关系。

上周四早上刷 arXiv:2610.30562,标题里 lifetimevalid 这个词让我停了一下。本来想划过去——主分类 stat.ME,cs.AI、cs.LG、stat.ML 各挂一个,一看就是统计那边的人跨界来管我们这些乱来的人。 摘要第二段,0.183。

10 月 22 号半夜刷 arXiv,看到这篇 nnInteractive Agent,标题写的是 3D 图像标注。我点进去本来是想看分割的,读到第三页发现不对——这压根不是一篇分割论文,是一篇 MCP 封装论文。 画外音:都 2026 年了,医学影像圈也开始干我们这行的活了。

九月底那个下午,我把一个两百来行的 diff 丢给三个 subagent 做评审。三个独立 context window,三份独立 prompt,跑完合并。 三份报告里有同一条意见:第 47 行那个 user 可能为 None,建议加判空。 行吧,加。

十月一号,我照例打开几个 watch 着的仓库,看 PR 列表。手已经放在“close with comment”上了。 结果今年没活干。Hacktoberfest 2026 把规则改了:PR 和 MR 不再计入奖励,没有 PR 目标,也没有提交 PR 换周边这一说。

这两天在翻一个 Flutter 项目的源码。3D 羊驼村庄,本地跑模型,五只羊驼各有性格、需求、人际关系、各自知道的事——这些全写在配置里,不是模型现编的。翻到一段核验逻辑的时候我停下来了。 模型说“这轮对话里我提到了 Pip 的围巾”,游戏不直接信——它拿这句话回去跟事实表对,对不上就丢掉,当模型没说。

上周翻一个两年没动的老项目,纯看 diff。一个两百多行的文件里,if mounted return; 出现了十一次。 不是十一个文件。是一个文件,十一次。其中有两处还紧挨着—— 我盯着这两行笑了半天。它们怎么来的,我一清二楚:是我一句一句命令出来的。 案发 起点特别普通。
上周在 dev.to 翻到一篇标题很朴素的帖子,作者 Siddhartha Bhattarai 给朋友 Anuka 做了个小工具——她家在尼泊尔 Kaski 县,靠博卡拉那边,雨季要上山看祖父,之前被季风堵回去过一次,错过了一个节日。 界面没什么花活。