Cursor 把前端从 Solid 迁去 React,Bun 从 Zig 换去 Rust 大约一百万行,Cognition 的官网从 Astro 挪到 Next.js 当案例研究发。三件事,三家不一样,前后脚冒出来。你要是只看新闻标题,会觉得这就是 2026 年初的普通技术动态:谁还不在换栈呢。
但有个细节我一直没放下。Anthropic 文档里那条演示“大规模迁移”功能的示例命令,用的正是从 Solid 到 React。这条示例在互联网档案馆里至少四月就能查到,比大多数人讨论 Cursor 迁移的时间更早。也就是说,我们还在等 Cursor 给解释,这个动作本身已经被写进工具说明书、变成一个标准用例了。争论还没开始,它就默认对了。这比“迁移该不该”严重多了:该不该这种事,各家能吵到下一个版本;可当“不需要论证”被装进产品文档,判断这个环节就整个从流程里被删掉了。
我把它叫做:无证迁移。
无证迁移,不是说迁移有罪,是说这个动作少了一个责任环节:你得能说清为什么是现在、为什么是那个目标、数据上凭什么。这些不非得是公开博客。一份可查的决策记录、一组跑过的基准、一个回滚条件,都算证。无证迁移就是——命令跑完了,这些全没有,然后代码已经在新栈上活着了。
Cursor 这笔就是个完整样本。博客里给了个“实验性质”的姿态,四个字,往下看什么都没有。没有推理、没有 benchmark、没有任何论证。而且它选在 Solid 2.0 RC 刚放出来、社区注意力全盯着这个节点的时候抽身。一个用 Solid 写了大量核心模块的团队,连个数据都不给。我知道有人会觉得我往伦理上带——不是伦理,是工程责任:完成一个迁移,和完成一个能被别人背书的迁移,从来是两码事。而 Anthropic 的示例更早把这个动作从“需要判断”降级成了“可以执行”。判断和执行的裂缝,就藏在文档里那一条命令里。
Bun 那次听着像是有证的。Jarred Sumner 后来解释了几条:Zig 那边遇到的一类 bug、内存管理上的问题。可这些说明是什么时候给的?是事后在公开场合回应,不是迁移交付的一部分。一百万行 Zig 到 Rust,几天搬完,决策依据变成了 QA 环节的事后补充,而不是本该走在代码前面的东西。这放在几年前没法想象:这么大体量的转换,说明文档从来不是可选项,它是开工前必须砸在地上的桩。
再看一个反过来的。TanStack 拿 React Server Components 做实验,上了、测量了、发现不划算、停掉,还写了分析。注意,这不是一次成功的迁移,这是一次中止的迁移——但它是完整的。它证明了“有证”不等于“成功”,而是每一步都有理由,理由还能被质疑。他们把成本讲清楚了,所以能坦然抽身。这种“中止但有证”的迁移,比好些“成功了但无证”的值钱得多。后者可能是蒙的,只是赶上了好坑。
这周的号就吹到这里:下次再看到谁迁了栈,先别点赞,先问一句——说明呢?数据、基准、边界、回滚退路,在不在?你自己用 AI 做迁移的时候,别把“AI 说适合”当成证。AI 给的是执行,不是判断。判断你来下,证据你出。
这个词能活多久,看两个条件。一是别被当成棍子使,谁拿它当骂人话用,它就废了;二是如果哪天大家真把迁移说明当成交付物的一部分、默认没说明就是没做完,那它自己退场,也算完成任务。在那之前它得在。因为迁移的成本正在被 AI 压到接近零,我们需要一张证,把判断从执行里重新提出来。半年内如果没人认领、或者只剩我自己在说这个词,我就回炉,不占这块空地。
