独立开发者Terry Godier上周用Claude一次性生成了一个天文观测工具网站,取名Dark Hours,域名darkhours.io,用来告诉用户当晚适不适合看星星。一天之后,另一个同名开源项目DarkHours.app的作者Miguel Beher在Bluesky上回复了他的一条评论:这两个项目连名字都差不多。Godier起初还想着改名字、做功能区分,一小时后他彻底改了主意——直接把域名重定向到Beher的项目,放弃原计划的iOS版本,公开道歉。促使他态度急转的,是一个已经在原版仓库里被修复的bug。

一个已修复的bug,比截图更有说服力

Beher的DarkHours.app是个业余爱好者常用的开源工具,托管在GitHub上,MIT协议,功能是把天气、月光、暗夜时长、光污染、银河可见度、流星雨、极光预报、卫星过境这些变量揉在一起给"今晚适不适合观星"打分。这类小众垂类项目很难靠版权维权,全凭社区口碑撑着原创性认定。

真正让Godier无法辩解的,不是界面像、名字像,而是他的版本复现了一个会把用户随机路由到墨西哥境内某处的定位bug——这个bug在原版里早就修好了。一个当前版本里根本不存在的历史bug,出现在了一个号称"独立开发"的新项目里,这比任何截图对比都更接近铁证。

Dark Hours 事件时间线 上线 Claude生成 darkhours.io 被指撞脸 Beher在Bluesky 回复留言 实锤浮现 复现墨西哥 随机定位bug 认错下线 域名重定向 放弃iOS版

Claude是怎么"看见"一个已经消失的bug的

这才是这件事真正的技术悬念,也是Godier博客里完全没有解释的地方。一个bug已经被原作者修复,意味着当前的GitHub代码里根本找不到它。Claude要么是训练数据里存过修复之前的历史版本快照,把旧代码当成了"标准答案";要么是生成过程中触发了某种检索或工具调用,抓到了仓库的历史提交记录。

这两种可能对应的问题完全不同——前者是训练数据管理的老毛病,后者则涉及AI编程工具在生成时到底"看"了多少不该看的东西。Godier的博客里没有一个字提到自己是怎么发现这个细节的,Beher那边也没有公开技术复盘。这个空白目前没人能填。

  • 提醒.一个AI生成的项目复现了已修复的bug,说明它参考的很可能不是"现状",而是某个历史版本,具体机制目前无法证实。

MIT协议保得住法律,保不住信任

Beher的项目用的是MIT协议,理论上代码怎么抄都不算违法,任何人拿去改、拿去用,甚至换个名字上线,法律上都站得住。这也是为什么整件事从头到尾没出现律师函、没出现DMCA投诉——Beher选的方式是在Bluesky上留一句话,Godier一小时内自己认错、自己动手把域名转走。

对比几年前GitHub Copilot因为输出片段和训练数据高度雷同被起诉的争议,这次的解决速度和方式完全不是一个量级。没有诉讼,没有拉锯,社区自己两句话就把事情解决了。但这恰恰说明,MIT这类宽松协议挡得住官司,挡不住"你的东西被人一键复制上线"这种伤害本身——协议保护的是使用权,保护不了作者花时间踩坑、修bug、攒口碑的那部分价值。

代码可以合法复制,声誉和信任没法一键回滚。

谁该为"vibe coding"的原创性尽调负责

Godier的应对算得上体面:认账、导流、放弃计划中的iOS App、公开承诺以后不再用这种方式生成网页项目。但他自己也留了个尾巴——他说以后不会"用Claude创建iOS软件",只用来问问题、调试代码,潜台词是网页项目的门槛本来就比iOS App低,出了事撤下来成本也小。

这提醒所有靠AI编程助手快速上线小工具的独立开发者:如果产品定位本身就是一个活跃的小众垂类(天文、健身打卡、习惯追踪这类开源爱好者常年耕作的领域),上线前搜一搜同名或同类项目,几分钟的事,能省掉一次公开道歉。对开源维护者来说,Beher这次算幸运——bug证据摆在那儿,识别成本很低;换一个功能没那么独特的项目,被AI悄悄"复刻"了可能自己都发现不了。

  • 风险.AI生成代码里混入的历史版本痕迹,普通用户和开发者本人都很难在上线前察觉。