Back to all posts

The 31-Hour Run

Published:
agent-runcandyrushevidence

Between the morning of July 4 and mid-afternoon July 5, an agent fleet took a game feature set from a design record to a green build without a human writing a line of code. It filed 17 issues in 4 minutes 45 seconds, merged 18 pull requests across two repositories, and stamped its own goal condition 65 minutes before a power cut ended the session. Nothing was reverted in the window.

This is the receipt. Every bar is one pull request, positioned by when it opened and when it merged; hover or tab through them for the detail. The green mark is the moment the goal condition was met; the dashed mark is the power cut.

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 pull requests, opened → merged, on the run's own clock (US Eastern). Shaded band = overnight; green line = goal met 14:50; dashed line = power lost 15:56. Hover or focus a bar for its span, cycle, and diff.
Issues filed
17
in 4m 45s
PRs merged
18
17 CandyRush + 1 UTools
Median PR cycle
40m
opened → merged
Diff shipped
+16,213
−2,885 · 398 files changed
Tests, 0 failed
4,048
3,546 EditMode + 502 PlayMode
Extraction margin
65m 53s
goal met → power lost

The setup

The run did not start with code. It started with a document. Out of an overnight design session came a record of fifteen decisions, folded together with the seventeen answers that resolved them, and it landed on the CandyRush dev branch at 06:56 as PR #329. That record is what the whole run was measured against.

Then the plan was hardened for autonomy in three commits inside ten minutes: the autonomous-execution runbook at 07:22, the review policy at 07:30, and a draft goal command at 07:32. Before any issue was filed, an eight-agent adversarial fan-out read the drafts against the actual source and returned six corrections — each a bug the run would otherwise have built on. One refuted the boss-stall theory outright. One found that a bare director.Time = 0 cannot re-fire wave clips, so the combat loop had to route through the RebuildGraph path — which is exactly how the flagship shipped.

At 08:04:24 the filing burst began: seventeen issues, a letter-coded plan A through Q, hit GitHub in 4 minutes 45 seconds (#330–#346), carrying the repository's first milestone. The board was set, and the goal command fired.

The run, hour by hour

Every issue got the same treatment: an implementation subagent wrote the change, the orchestrator ran the full test suites against it, a reviewer graded the diff, and only then did it merge. Pull requests went in one at a time, dev green after each. The median open-to-merge cycle across the run was 40 minutes.

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
The full ladder: 18 pull requests as opened → merged spans. Amber = CandyRush, violet = the UTools toolkit PR. Dashed lines mark goal met (14:50) and power lost (15:56), both on Jul 5.
PRClosesDeliveredOpenedMergedCycleDiffFiles
UTools #11SwarmTools CompileCheck: csproj sync in the batch bootJul 4 09:5510:2329m+14/−01
#347#330Boss-stall root cause: cheat reset clobbered AutoKillBossesJul 4 09:5610:4853m+104/−447
#348#331Phantom second exit portal: generator fixed + art sanitizer11:0311:3835m+142/−1176
#349#332Arc-aware segment data model — StageData byte-identical12:4513:2641m+514/−28166
#350#333Persistent exit gates: the Hades door model, lock machine14:2515:1247m+1,034/−87419
#351#334Escalation formula: Fixed64 depth × tier over 8 boss sites16:0716:5346m+775/−3033
#353#352Interlude: cheat-init race the run found in its own fix17:0717:4033m+83/−03
#354 ★#335Infinite-loop combat via Load/RebuildGraph, tier++, 120s verses18:5719:5457m+1,483/−1,24423
#355#337Anti-farm economy: trash-XP plateau — heaviest PR of the run22:4523:2943m+2,888/−6934
#356#336Enemy tier hue shift — the diegetic difficulty meter23:58Jul 5 00:3335m+480/−09
#357#338Mini-boss Gauntlet: the risk room, chest-economy monopoly01:3002:1040m+1,648/−2331
#358#339Horde: 75-second timed survival window03:0103:4039m+1,635/−1323
#359#340Hunt: kill quota, beacon arrows, persistent marks05:0405:4541m+2,033/−1531
#360#341Props rework: 50-second timed loot-grab06:2006:5938m+388/−1914
#361#342Risk portals: 1-in-3 elite routes, entry gold, skull pips07:3608:1640m+768/−6223
#362#345HUD status line: per-archetype phases, tier badge, quotas08:5509:3238m+570/−1531
#363#343Run results: additive composite score + per-arc stars10:2511:0440m+942/−5715
#364#344Lobby rework, Run-first — final verification ran inside this cycle12:0114:152h 14m+712/−2229

Times are US Eastern. Totals for the run: +16,199/−2,885 across 397 file-changes on CandyRush, plus +14 on UTools.

Through the night

Seven of the eighteen pull requests merged between 23:29 and 08:16 while the house slept — the anti-farm economy, the tier-hue difficulty meter, and three full archetypes among them. The heaviest diff of the whole run — +2,888 for the economy — opened the night shift at 23:29, and the six merges that followed before morning held cycles between 35 and 41 minutes. The loop did not slow down because no one was watching it.

The flagship, #354, merged at 19:54 the way the pre-flight fan-out said it had to: infinite-loop combat routed through Load/RebuildGraph. Earlier the run's own review of its own morning fix surfaced a startup race; it filed #352, fixed it, and merged #353 within 45 minutes. That kind of self-audit is why nothing needed reverting.

The toolkit that unblocked the rest

Agent / toolkit

The one pull request that was not CandyRush mattered out of proportion to its size. UTools #11 touched a single file — Assets/com.irsiksoftware.swarmtools/Editor/SwarmTools.cs, +14/−0, opened 09:55 and merged 10:23, a 29-minute cycle — and taught the CompileCheck step to sync the IDE project files inside the same batch boot. That killed the stale-.csproj CS2001 failure class for every later pull request of the run.

UTools is a first-party toolkit of 27 com.irsiksoftware.* packages — animation, audio, determinism, economy, logging, navigation, save, simulation, swarmtools, and the rest — consumed by CandyRush as UPM local-file references (Packages/manifest.jsonfile:../../UTools/…). Because the two repositories track parallel branches, UTools has to sit on exactly the branch CandyRush expects or CandyRush will not compile. The run kept UTools main and CandyRush dev green against each other the entire time.

The tape

#364 merged at 14:15, the hand-off comment posted at 14:17, and the run kept the engines running for one last full pass over the exact dev tip 674f7745. At 14:50:03 the goal condition was stamped:

CompileCheck
exit 0
double-pass · analyzer clean
EditMode
3,546/3,547
0 failed · 1 env-gated skip
PlayMode
502/520
0 failed · 18 skips
failures.json
[ ]
both suites · trees clean

Net of the run: +151 EditMode tests, both failures.json empty, and working trees clean on both repositories. The two PlayMode reds the run started with were root-caused and gone by lunch on day one, never to return.

The extraction

Run mode's whole thesis is that greed has a price: stay one verse too long and the wipe takes everything. Sixty-six minutes after the goal condition was stamped, the run got to live out its own premise. The Windows event log recorded a dirty shutdown at 15:55:56 — the power went out. It stayed out for 3 hours 31 minutes, restored at 19:26:31.

14:15 final merge14:50 goal met15:56 power lost19:26 power restored
The extraction window, 14:00 → 20:00 Eastern. The margin between the goal-condition stamp and the dirty shutdown was 65m 53s.

The margin was 65 minutes 53 seconds. The wipe hit an empty room: every byte was already on origin, and the machine came back to clean trees on both repos. The narrowest escape was not even the stamp — the final roughly 33-minute verification pass ran until 14:50. An hour earlier and the outage kills it mid-suite. As it played out: zero loss.

What this proves

The point of the run is not that it was fast, though it was. It is that every claim in this post has a number behind it, and every number was measured rather than asserted: the cycle times come from the pull-request timestamps, the diff totals from git, the test counts from the suite output, the outage from the kernel-power event. An agent fleet can do a day and a half of real engineering unattended — and it can leave a trail clean enough that you do not have to take anyone's word for it.


All timestamps are US Eastern (UTC−4), reconstructed from git history, the GitHub API, and the Windows event log (Event 6008 / Kernel-Power 41). The CandyRush and UTools repositories are private; every figure here is measured data, not an estimate.