Charles Yao and Claude Opus 4.8
f623dc3fe1
feat(dify_builder): recover an interrupted working step via Retry/Start over
...
When a session crashes mid working-step (e.g. build.publish; the async advance
raised and released the lock), it was a locked dead-end: working states surface
no UI actions and the composer locked with no way forward.
- Surface a RecoveryRef offer (can_continue=Retry, can_restart=Start over,
recovery_class="") on an interrupted working-state view -- built directly so a
real drift class still wins.
- Allow recovery_continue / recovery_restart at an interrupted working state in
_internal_action_allowed. recovery_continue returns the working state
(non-settled) so the runner re-runs the stalled handler; recovery_restart
resets working fields and re-enters the entry state -- both reuse existing
recovery machinery, no new action kinds / no runner change.
Adds unit tests (offer surfaced, allowance) + regression tests (recovery_continue
re-runs handle_publish and advances; recovery_restart resets to entry state;
repeat-failure re-surfaces the offer with no wedge).
This reconciler was reviewed as a standalone plan on the pre-merge base; here it
is re-applied onto feat/dify-builder after PR #41677 merged in the reworked
service.py + _internal_action_allowed gate (which makes the allowance necessary).
The apply_repair idempotency + delete-guard commits (safe fix.apply Retry) land
alongside it.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-04 00:07:14 -07:00
..
2026-09-01 11:50:52 +00:00
2026-09-02 06:54:47 +00:00
2026-08-29 14:05:35 +00:00
2026-09-04 00:07:14 -07:00
2026-09-02 06:34:33 +00:00
2026-08-18 12:01:49 +00:00
2026-09-01 11:50:52 +00:00
2026-08-29 14:06:07 +00:00
2026-08-27 02:41:43 +00:00
2026-08-29 14:05:34 +00:00
2026-08-29 14:06:07 +00:00
2026-08-29 14:05:34 +00:00
2026-08-11 07:39:01 +00:00
2026-08-11 06:19:08 +00:00
2026-08-06 04:14:12 +00:00
2026-08-27 08:51:05 +00:00
2026-09-03 06:20:21 +00:00
2026-08-21 05:56:30 +00:00
2026-08-21 05:56:30 +00:00
2026-08-21 08:13:23 +00:00
2026-08-21 08:46:06 +00:00
2026-08-21 08:05:43 +00:00
2026-08-25 01:48:12 +00:00
2026-08-31 03:22:01 +00:00
2026-08-31 03:22:01 +00:00
2026-08-26 07:14:27 +00:00
2026-09-03 01:38:59 +00:00
2026-09-03 01:38:59 +00:00
2026-09-02 06:54:47 +00:00
2026-08-21 05:56:30 +00:00
2026-09-03 06:20:21 +00:00
2026-09-03 06:20:21 +00:00
2026-09-03 08:47:14 +00:00
2026-09-03 08:47:14 +00:00
2026-09-03 01:38:59 +00:00
2026-08-21 05:56:30 +00:00
2026-08-20 05:03:08 +00:00
2026-09-03 01:38:59 +00:00
2026-09-03 08:47:14 +00:00
2026-07-28 06:32:07 +00:00
2026-08-29 14:05:34 +00:00
2026-08-29 14:05:34 +00:00
2026-08-25 10:21:32 +00:00
2026-07-22 02:15:01 +00:00
2026-08-21 06:09:26 +00:00
2026-08-20 05:11:46 +00:00
2026-08-19 07:23:47 +00:00
2026-08-29 14:06:07 +00:00
2026-08-29 14:05:35 +00:00
2026-08-31 09:30:52 +00:00
2026-08-18 12:23:33 +00:00
2026-09-01 11:50:52 +00:00
2026-09-02 06:54:47 +00:00
2026-08-18 12:01:49 +00:00
2026-08-20 05:11:46 +00:00
2026-08-25 10:21:32 +00:00
2026-08-11 07:39:01 +00:00
2026-09-02 06:54:47 +00:00
2026-08-26 06:32:13 +00:00
2026-08-28 14:47:16 +00:00
2026-08-28 14:47:16 +00:00
2026-09-02 06:54:47 +00:00
2026-08-18 12:01:49 +00:00
2026-08-18 12:26:01 +00:00
2026-08-28 14:47:16 +00:00
2026-08-26 07:33:37 +00:00
2026-09-02 10:30:42 +00:00
2026-08-28 14:47:17 +00:00
2026-08-29 14:05:34 +00:00
2026-08-31 05:55:38 +00:00
2026-08-29 14:05:34 +00:00
2026-08-18 12:01:29 +00:00
2026-08-11 07:39:01 +00:00
2026-08-11 07:39:01 +00:00
2026-08-29 14:05:35 +00:00
2026-08-18 12:23:33 +00:00
2026-08-12 07:45:39 +00:00
2026-09-02 06:54:47 +00:00
2026-08-23 12:38:04 -07:00
2026-09-01 11:50:52 +00:00
2026-08-28 14:47:16 +00:00
2026-08-28 14:47:16 +00:00
2026-08-25 10:26:06 +00:00
2026-09-01 11:50:52 +00:00
2026-08-18 12:01:49 +00:00
2026-08-10 03:27:56 +00:00
2026-08-04 13:14:02 +00:00
2026-08-28 14:47:17 +00:00
2026-07-15 03:37:16 +00:00
2026-08-29 14:05:34 +00:00
2026-08-27 12:15:07 +00:00
2026-08-29 14:05:34 +00:00
2026-08-12 08:42:09 +00:00
2026-09-01 11:50:52 +00:00
2026-08-29 14:05:34 +00:00
2026-07-16 09:32:11 +00:00
2026-09-03 05:02:09 +00:00
2026-08-18 12:01:49 +00:00
2026-08-11 16:37:14 +00:00
2026-08-11 16:37:14 +00:00
2026-08-18 12:23:33 +00:00
2026-08-07 00:42:13 +00:00
2026-08-29 14:05:34 +00:00
2026-08-31 04:37:07 +00:00
2026-08-31 04:37:07 +00:00
2026-08-26 07:33:37 +00:00
2026-08-26 07:33:37 +00:00
2026-08-15 09:54:09 +00:00
2026-08-29 14:05:35 +00:00
2026-08-20 13:13:43 +00:00
2026-09-03 06:00:13 +00:00
2026-08-06 04:06:04 +00:00
2026-08-08 11:52:15 +00:00
2026-08-24 01:57:17 +00:00
2026-08-08 11:52:15 +00:00
2026-08-29 14:05:35 +00:00
2026-08-29 14:06:07 +00:00
2026-08-20 05:12:30 +00:00
2026-08-29 14:05:34 +00:00
2026-09-02 06:54:47 +00:00
2026-08-05 10:03:23 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-09-02 06:54:47 +00:00
2026-08-29 14:05:34 +00:00
2026-07-27 09:36:44 +00:00
2026-08-07 09:21:13 +00:00
2026-08-29 14:05:34 +00:00
2026-08-29 14:05:34 +00:00
2026-07-27 02:12:57 +00:00
2026-08-20 05:11:46 +00:00
2026-08-28 14:47:16 +00:00
2026-08-20 05:05:31 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-08-20 02:27:49 +00:00
2026-08-29 14:05:34 +00:00
2026-08-24 04:01:02 +00:00
2026-08-02 02:49:17 +00:00
2026-08-28 14:32:27 +00:00
2026-08-29 14:05:35 +00:00
2026-08-24 03:20:32 +00:00
2026-08-25 10:21:32 +00:00
2026-08-13 05:19:52 +00:00
2026-07-28 03:20:27 +00:00
2026-08-18 12:26:01 +00:00
2026-09-01 11:50:52 +00:00
2026-09-02 06:54:47 +00:00
2026-08-18 12:23:33 +00:00
2026-09-02 06:54:47 +00:00
2026-08-06 01:08:39 +00:00
2026-08-11 07:39:01 +00:00