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-21 00:52:39 +00:00
2026-09-04 00:07:14 -07:00
2026-08-11 07:39:01 +00:00
2026-09-02 06:34:33 +00:00
2026-09-04 09:44:01 +08:00
2026-09-03 08:47:14 +00:00
2026-09-01 11:50:52 +00:00
2026-08-07 09:21:13 +00:00
2026-08-28 02:26:41 +00:00
2026-09-02 06:54:47 +00:00
2026-08-13 17:50:05 +00:00
2026-08-15 00:56:09 +00:00
2026-08-21 11:55:25 +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:13:23 +00:00
2026-08-21 08:46:06 +00:00
2026-08-21 08:05:43 +00:00
2026-09-02 06:54:47 +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 08:47:14 +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-09-03 08:47:14 +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-04-13 13:05:23 +00:00
2026-07-08 03:07:27 +00:00
2026-08-20 18:59:44 +00:00
2026-08-24 05:29:14 +00:00
2026-08-25 10:21:32 +00:00
2026-07-24 11:35:12 +00:00
2026-07-08 03:07:27 +00:00
2026-08-29 07:04:18 +00:00
2026-07-08 03:07:27 +00:00
2026-09-02 10:30:42 +00:00
2026-08-20 05:05:31 +00:00
2026-08-21 00:52:39 +00:00
2026-08-31 09:30:52 +00:00
2026-07-15 06:48:28 +00:00
2026-07-15 09:31:09 +00:00
2026-09-01 11:50:52 +00:00
2026-09-02 06:54:47 +00:00
2026-04-16 08:50:02 +00:00
2026-08-11 07:39:01 +00:00
2026-06-18 00:18:03 +00:00
2026-08-25 10:21:32 +00:00
2026-09-02 06:54:47 +00:00
2026-08-26 06:32:13 +00:00
2026-08-11 07:39:01 +00:00
2025-09-06 03:32:23 +08:00
2026-09-02 06:54:47 +00:00
2026-08-25 10:21:32 +00:00
2026-04-16 08:50:02 +00:00
2026-07-08 03:07:27 +00:00
2026-08-25 10:21:32 +00:00
2026-09-02 06:54:47 +00:00
2026-09-02 10:30:42 +00:00
2026-07-15 09:31:09 +00:00
2026-09-02 10:30:42 +00:00
2026-08-17 02:41:26 +00:00
2026-07-07 02:06:49 +00:00
2026-05-14 10:34:31 +00:00
2026-08-19 06:57:47 +00:00
2026-06-19 01:02:01 +00:00
2026-08-19 10:34:37 +00:00
2026-08-06 08:27:37 +00:00
2026-09-02 06:54:47 +00:00
2026-09-01 11:50:52 +00:00
2026-09-03 11:12:22 +08:00
2026-08-10 03:27:56 +00:00
2026-08-04 13:14:02 +00:00
2026-08-20 05:05:31 +00:00
2026-07-15 06:48:28 +00:00
2026-06-18 00:18:03 +00:00
2026-07-15 06:48:28 +00:00
2026-07-03 03:45:21 +00:00
2026-08-12 08:42:09 +00:00
2026-09-01 11:50:52 +00:00
2026-09-01 11:50:52 +00:00
2026-07-24 07:11:48 +00:00
2026-07-23 01:48:36 +00:00
2026-07-02 17:00:47 +00:00
2026-08-03 02:24:18 +00:00
2026-09-03 05:02:09 +00:00
2026-08-11 16:37:14 +00:00
2026-08-07 00:42:13 +00:00
2026-08-11 07:39:01 +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-07-08 03:07:27 +00:00
2026-08-26 07:33:37 +00:00
2026-06-22 06:45:03 +00:00
2026-07-08 03:07:27 +00:00
2026-08-24 01:55:48 +00:00
2026-08-15 00:56:09 +00:00
2026-08-20 13:13:43 +00:00
2026-08-20 13:13:43 +00:00
2026-09-03 06:00:13 +00:00
2026-07-08 03:07:27 +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-26 07:02:45 +00:00
2026-08-20 08:52:45 +00:00
2026-07-15 06:48:28 +00:00
2026-08-20 07:48:02 +00:00
2026-09-02 06:54:47 +00:00
2026-08-25 10:21:32 +00:00
2026-09-01 11:50:52 +00:00
2026-09-02 06:54:47 +00:00
2026-08-24 05:29:14 +00:00
2026-08-11 07:39:01 +00:00
2026-08-20 13:13:42 +00:00
2026-08-19 06:57:47 +00:00
2026-07-27 02:12:57 +00:00
2026-08-25 10:21:32 +00:00
2026-08-11 07:39:01 +00:00
2026-08-20 05:05:31 +00:00
2026-07-08 03:07:27 +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-09-01 11:50:52 +00:00
2026-08-02 02:49:17 +00:00
2026-08-28 14:32:27 +00:00
2026-08-21 00:52:39 +00:00
2026-04-16 02:21:04 +00:00
2026-07-21 02:07:47 +00:00
2026-08-03 02:24:18 +00:00
2026-08-25 10:21:32 +00:00
2026-07-15 05:58:37 +00:00
2026-06-30 08:19:58 +00:00
2026-03-20 14:54:23 +08:00
2026-07-15 06:48:28 +00:00
2026-09-01 11:50:52 +00:00
2026-09-02 06:54:47 +00:00
2026-08-12 01:55:36 +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
2026-08-11 07:39:01 +00:00
2026-08-12 07:45:39 +00:00