Fusion
c21e6fef15
perf(executor): recover approved steps on engine restart
...
When the engine restarts mid-step, an in-progress step may have already
passed plan + code review but not yet been flipped to done by the agent's
next task_update call. Previously, the next executor pass re-entered the
step and replayed both reviews — measured at 5-20 min of pure waste per
restart (observed in FN-2215 Step 1 and FN-2207 Step 6).
recoverApprovedStepsOnResume scans the task log for any in-progress step
whose most recent "code review Step N: APPROVE" entry is newer than its
most recent "Step N → pending" transition, and marks those steps done
before execute() runs. Safely skips steps that were reset after approval
(e.g. by a workflow revision) or only received REVISE verdicts.
Called from both the engine-restart path (resumeOrphaned) and the
unpause path, matching the two places the task log shows as vulnerable
to this race.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-21 20:12:00 -07:00
..
2026-04-19 01:03:36 -07:00
2026-04-20 08:30:24 -07:00
2026-04-08 13:31:07 -07:00
2026-04-08 13:31:07 -07:00
2026-04-19 10:13:34 -07:00
2026-04-19 10:13:34 -07:00
2026-04-08 10:35:28 -07:00
2026-04-16 16:05:12 -07:00
2026-04-08 01:39:15 -07:00
2026-04-08 01:39:15 -07:00
2026-04-19 10:13:34 -07:00
2026-04-19 10:13:34 -07:00
2026-04-21 02:40:50 -07:00
2026-04-19 20:48:13 -07:00
2026-04-19 20:48:14 -07:00
2026-04-19 20:48:14 -07:00
2026-04-19 20:48:14 -07:00
2026-04-10 09:42:51 -07:00
2026-04-09 15:14:19 -07:00
2026-04-16 19:49:07 -07:00
2026-04-19 10:13:34 -07:00
2026-04-19 10:13:34 -07:00
2026-04-08 10:08:29 -07:00
2026-04-15 16:32:16 -07:00
2026-04-16 23:07:40 -07:00
2026-04-16 23:07:40 -07:00
2026-04-02 09:10:42 -07:00
2026-04-17 14:09:37 -07:00
2026-03-25 18:32:10 -04:00
2026-04-16 04:34:49 -07:00
2026-04-16 04:34:49 -07:00
2026-04-15 01:01:14 -07:00
2026-04-15 13:33:27 -07:00
2026-04-18 00:44:27 -07:00
2026-04-18 00:44:27 -07:00
2026-04-15 03:30:56 -07:00
2026-04-15 03:30:56 -07:00
2026-04-08 07:19:35 -07:00
2026-04-19 20:48:13 -07:00
2026-04-20 08:30:24 -07:00
2026-04-20 08:30:24 -07:00
2026-04-08 14:26:30 -07:00
2026-03-29 20:52:07 -07:00
2026-03-29 20:52:07 -07:00
2026-04-19 10:13:34 -07:00
2026-04-21 20:12:00 -07:00
2026-04-19 20:48:13 -07:00
2026-04-20 08:30:24 -07:00
2026-04-19 20:48:13 -07:00
2026-04-15 16:18:50 -07:00
2026-04-19 20:48:13 -07:00
2026-04-19 20:48:13 -07:00
2026-04-19 20:48:13 -07:00
2026-04-19 20:48:14 -07:00
2026-04-19 20:48:14 -07:00
2026-04-17 10:03:46 -07:00
2026-04-17 10:03:46 -07:00
2026-04-18 22:47:17 -07:00
2026-04-19 10:13:34 -07:00
2026-04-15 07:02:38 -07:00
2026-04-19 20:48:13 -07:00
2026-04-02 09:10:42 -07:00
2026-04-18 23:41:47 -07:00
2026-04-19 20:48:13 -07:00
2026-04-19 10:13:34 -07:00
2026-04-19 10:13:34 -07:00
2026-04-19 10:13:34 -07:00
2026-04-20 08:30:24 -07:00
2026-04-18 10:41:34 -07:00
2026-04-17 14:09:37 -07:00
2026-04-08 06:53:36 -07:00
2026-04-18 12:21:14 -07:00
2026-04-08 14:58:34 -07:00
2026-04-08 14:58:34 -07:00
2026-04-16 22:38:50 -07:00
2026-04-19 10:13:34 -07:00
2026-04-19 20:48:13 -07:00
2026-04-14 21:30:56 -07:00
2026-04-14 21:30:56 -07:00
2026-04-16 07:53:31 -07:00
2026-04-16 07:53:31 -07:00
2026-04-19 10:13:34 -07:00
2026-04-19 10:13:34 -07:00
2026-04-11 15:23:03 -07:00
2026-04-14 09:28:05 -07:00
2026-04-08 04:55:39 -07:00
2026-04-19 20:48:13 -07:00
2026-04-15 17:06:36 -07:00
2026-04-15 17:06:36 -07:00
2026-04-15 18:23:05 -07:00
2026-04-13 08:57:48 -07:00
2026-04-20 08:30:24 -07:00
2026-04-15 17:06:36 -07:00
2026-04-13 08:57:48 -07:00
2026-04-15 23:33:45 -07:00
2026-04-16 23:07:40 -07:00
2026-04-16 23:07:40 -07:00
2026-04-19 10:13:34 -07:00
2026-04-20 08:30:24 -07:00
2026-04-17 12:13:39 -07:00
2026-04-17 12:13:39 -07:00
2026-04-09 18:21:29 -07:00
2026-04-15 13:33:27 -07:00
2026-04-21 20:12:00 -07:00
2026-04-20 12:59:58 -07:00
2026-04-21 20:12:00 -07:00
2026-04-02 09:10:42 -07:00
2026-04-02 09:10:42 -07:00
2026-04-10 08:01:03 -07:00
2026-04-08 11:21:18 -07:00
2026-04-16 04:53:09 -07:00
2026-04-16 04:53:09 -07:00
2026-04-21 20:12:00 -07:00