返回全部文章

31 小时长跑

发布于:
agent-runcandyrushevidence

从 7 月 4 日上午到 7 月 5 日午后,一支智能体集群全程无人写下一行代码,就把 一套游戏功能集从设计记录推进到了绿色构建。它在 4 分 45 秒内提交了 17 个 issue,跨两个仓库合并了 18 个 PR,并在断电终止本次会话前 65 分钟,自行为其 目标条件盖章确认。整个窗口期内没有任何改动被回滚。

这就是凭证。每一根条形都是一个 PR,按它的开启与合并时间定位;悬停或用 Tab 键逐一浏览即可查看详情。绿色标记是目标条件达成的时刻;虚线标记是断电。

CandyRush PR (opened → merged)UTools PRGoal metPower lostOvernight
06:56 design record08:04 · 17 issues filed14:50 goal met15:56 power lost
Jul 4 · 06:0012:0018:00Jul 5 · 00:0006:0012:00
18 个 PR,开启 → 合并,以本次运行自身的时钟计(美国东部时间)。阴影带 = 夜间;绿线 = 达成目标 14:50;虚线 = 断电 15:56。悬停或聚焦某根条形,可查看其跨度、周期与差异。
已提交 issue
17
用时 4m 45s
已合并 PR
18
17 CandyRush + 1 UTools
PR 周期中位数
40m
开启 → 合并
交付变更量
+16,213
−2,885 · 398 个文件改动
测试,0 失败
4,048
3,546 EditMode + 502 PlayMode
撤离余量
65m 53s
达成目标 → 断电

开局

这次运行并非始于代码,而是始于一份文档。一场通宵的设计会谈产出了一份记录 十五项决策的文档,并把解决这些决策的十七条答复一并折入其中,于 06:56 作为 PR #329 落到 CandyRush 的 dev 分支上。整个运行都以这份记录为标尺来 衡量。

随后,计划在十分钟内经三次提交被强化为可自主执行:07:22 的自主执行手册、 07:30 的评审策略,以及 07:32 的目标命令草案。在提交任何 issue 之前, 一场八智能体的对抗式扇出把这些草案与真实源码逐一比对,返回了六处更正——每一 处都是运行原本会在其上继续构建的 bug。其中一处彻底驳倒了 Boss 卡死的假设。 另一处发现,单凭 director.Time = 0 无法重新触发波次片段,因此战斗循环必须 改走 RebuildGraph 路径——而旗舰 PR 正是这样落地的。

08:04:24,提交狂潮开始:十七个 issue、一套以字母编码、从 A 到 Q 的计划, 在 4 分 45 秒内涌入 GitHub(#330–#346),并带上了该仓库的第一个里程碑。 棋盘就位,目标命令启动。

逐小时的运行

每个 issue 都得到同样的处理:一个实现子智能体写下改动,编排者对其运行完整的 测试套件,一个评审者为该差异评级,只有到那时它才会合并。PR 逐个进入,每次 合并后 dev 都保持绿色。整个运行中,从开启到合并的周期中位数为 40 分钟

CandyRush PRUTools toolkit
14:50 goal met15:56 power lost
UTools #11
#347
#348
#349
#350
#351
#353
#354 ★
#355
#356
#357
#358
#359
#360
#361
#362
#363
#364
Jul 4 · 06:0012:0018:00Jul 5 · 00:0006:0012:00
完整阶梯:18 个 PR,以开启 → 合并的时间跨度呈现。琥珀色 = CandyRush,紫色 = UTools 工具包 PR。虚线标记达成目标(14:50)与断电(15:56),两者均在 7 月 5 日。
PR关闭交付内容开启合并周期差异文件
UTools #11SwarmTools CompileCheck:批处理启动中同步 csprojJul 4 09:5510:2329m+14/−01
#347#330Boss 卡死根因:作弊重置覆盖了 AutoKillBossesJul 4 09:5610:4853m+104/−447
#348#331幽灵第二出口传送门:修复生成器 + 美术净化器11:0311:3835m+142/−1176
#349#332弧段感知的分段数据模型 —— StageData 字节一致12:4513:2641m+514/−28166
#350#333持久出口门:Hades 式门模型,锁定状态机14:2515:1247m+1,034/−87419
#351#334升级公式:Fixed64 深度 × 层级,覆盖 8 个 Boss 点位16:0716:5346m+775/−3033
#353#352插曲:本次运行在自身修复中发现的作弊初始化竞态17:0717:4033m+83/−03
#354 ★#335经由 Load/RebuildGraph 的无限循环战斗,tier++,120s 乐段18:5719:5457m+1,483/−1,24423
#355#337反刷经济:垃圾 XP 收益封顶 —— 本次运行体量最大的 PR22:4523:2943m+2,888/−6934
#356#336敌人层级色相偏移 —— 融入游戏世界的难度计23:58Jul 5 00:3335m+480/−09
#357#338小 Boss 试炼场:风险房间,宝箱经济垄断01:3002:1040m+1,648/−2331
#358#339兽潮:75 秒限时生存窗口03:0103:4039m+1,635/−1323
#359#340狩猎:击杀配额、信标箭头、持久标记05:0405:4541m+2,033/−1531
#360#341道具重做:50 秒限时搜刮06:2006:5938m+388/−1914
#361#342风险传送门:1/3 精英路线、入场金币、骷髅标记07:3608:1640m+768/−6223
#362#345HUD 状态栏:各原型阶段、层级徽章、配额08:5509:3238m+570/−1531
#363#343运行结算:叠加式综合得分 + 每弧段星级10:2511:0440m+942/−5715
#364#344大厅重做,Run 模式优先 —— 最终验证在本周期内完成12:0114:152h 14m+712/−2229

时间均为美国东部时间。本次运行的总计:CandyRush 上 +16,199/−2,885,涉及 397 处文件改动,另加 UTools 上的 +14

通宵

十八个 PR 中有七个是在全家熟睡时、于 23:29 到 08:16 之间合并的——其中 包括反刷经济、层级色相难度计,以及三种完整的原型玩法。整场运行中变更量 最大的差异——为经济系统而作的 +2,888——在 23:29 拉开了夜班的序幕,而在 天亮前紧随其后的六次合并,周期都保持在 35 到 41 分钟之间。这个循环并没有 因为无人盯着就慢下来。

旗舰 PR #354 于 19:54 合并,方式正如飞行前扇出所预言的那样:无限循环战斗经由 Load/RebuildGraph 路由。更早时,运行对自己上午那处修复的评审暴露出一个 启动竞态;它提交了 #352,修好后在 45 分钟内合并了 #353。正是这种自我审计, 才让一切都无需回滚。

为其余一切扫清障碍的工具包

智能体 / 工具包

那唯一一个不属于 CandyRush 的 PR,其重要性远超其体量。UTools #11 只改动了 一个文件——Assets/com.irsiksoftware.swarmtools/Editor/SwarmTools.cs+14/−0,09:55 开启、10:23 合并,周期 29 分钟——它教会了 CompileCheck 步骤在同一次批处理启动中同步 IDE 项目文件。这就为本次运行之后的每一个 PR 消灭了因 .csproj 过期而触发的 CS2001 失败类别。

UTools 是一套第一方工具包,包含 27com.irsiksoftware.* 软件包—— animation、audio、determinism、economy、logging、navigation、save、 simulation、swarmtools 等等——被 CandyRush 作为 UPM 本地文件引用 (Packages/manifest.jsonfile:../../UTools/…)来使用。由于这两个仓库 跟踪并行的分支,UTools 必须恰好处在 CandyRush 所期望的分支上,否则 CandyRush 无法编译。整场运行始终让 UTools 的 main 与 CandyRush 的 dev 相互保持绿色。

收官

#364 于 14:15 合并,交接说明在 14:17 发布,随后运行让引擎继续运转, 对准确的 dev 顶端 674f7745 做了最后一次完整测试通过。在 14:50:03,目标 条件被盖章确认:

CompileCheck
exit 0
双遍 · 分析器无告警
EditMode
3,546/3,547
0 失败 · 1 个环境门控跳过
PlayMode
502/520
0 失败 · 18 个跳过
failures.json
[ ]
两套测试 · 工作树干净

本次运行的净收获:EditMode 测试净增 +151,两个 failures.json 均为空, 且两个仓库的工作树都保持干净。运行开始时那两处 PlayMode 红灯,在第一天午饭前 就被定位根因并清除,再未复现。

撤离

Run 模式的核心论点是:贪婪是有代价的——多贪一个乐段,团灭就会带走一切。在目标 条件被盖章确认的六十六分钟之后,这次运行得以亲身演绎它自己的前提。Windows 事件日志在 15:55:56 记录了一次非正常关机——断电了。停电持续了 3 小时 31 分钟,于 19:26:31 恢复。

14:15 最终合并14:50 达成目标15:56 断电19:26 电力恢复
撤离窗口,14:00 → 20:00 东部时间。目标条件盖章与非正常关机之间的余量为 65m 53s。

余量是 65 分 53 秒。团灭砸中的是一间空屋:每一个字节都已在 origin 上, 机器回来时两个仓库的工作树都干干净净。最惊险的一刻甚至不是那次盖章——最后那趟 约 33 分钟的验证通过一直跑到 14:50。若早一个小时,停电就会在测试套件跑到一半时 将其扼杀。而实际结果是:零损失。

这证明了什么

这次运行的意义不在于它有多快,尽管它确实很快。而在于本文中的每一项主张背后 都有一个数字,并且每个数字都是测量得来、而非断言而来:周期时间来自 PR 的 时间戳,差异总量来自 git,测试计数来自套件输出,停电时长来自内核电源事件。 一支智能体集群可以在无人值守下完成一天半的真实工程——而且它能留下一条足够 干净的轨迹,让你无需听信任何人的一面之词。


所有时间戳均为美国东部时间(UTC−4),由 git 历史、GitHub API 与 Windows 事件日志(Event 6008 / Kernel-Power 41)重建而来。CandyRush 与 UTools 仓库 均为私有;文中每一个数字都是测量数据,而非估算。