Anton Panasenko
b75ec48a2c
Preserve active recovery turns when clients reconnect ( #61014 )
...
## Why
A recovery turn can occupy the core turn slot before `TurnStarted` is published and thread statuses reflect it. During this window, `thread/resume` with configuration overrides could treat an unsubscribed thread as idle and shut it down, interrupting recovery.
## What changed
Require the core turn slot to be empty before replacing a loaded thread during resume. Expose `CodexThread::has_active_turn()` and reuse it in the residency unload check.
## Testing
Add a regression test that blocks paginated history writes to hold a recovery turn before status publication, reconnects with a configuration override, and verifies that the client receives completion for the preserved recovery turn.
GitOrigin-RevId: f295038c8502a9b2849ddc08614db4a3cb5610cf
2026-11-12 04:17:58 +00:00
..
2026-11-11 22:31:42 +00:00
2026-10-29 17:25:51 +00:00
2026-11-03 15:02:57 +00:00
2026-11-03 12:33:26 +00:00
2026-11-05 16:08:23 +00:00
2026-11-10 11:17:06 +00:00
2026-11-12 04:17:58 +00:00
2026-11-12 01:57:33 +00:00
2026-11-10 01:31:19 +00:00
2026-11-12 00:44:27 +00:00
2026-11-10 11:17:06 +00:00
2026-11-07 10:41:36 +00:00
2026-11-02 17:05:56 +00:00
2026-10-26 20:26:32 +00:00
2026-11-04 00:19:12 +00:00
2026-11-07 10:41:36 +00:00
2026-11-05 22:03:29 +00:00
2026-11-11 23:36:19 +00:00
2026-11-12 01:57:33 +00:00
2026-11-05 04:25:19 +00:00
2026-11-05 05:09:32 +00:00
2026-11-05 05:09:32 +00:00
2026-11-10 02:09:01 +00:00
2026-11-10 02:09:01 +00:00
2026-11-10 21:28:22 +00:00
2026-11-11 06:41:15 +00:00
2026-11-11 18:58:56 +00:00
2026-11-11 23:36:19 +00:00
2026-11-11 06:17:00 +00:00
2026-11-10 03:02:25 +00:00
2026-10-30 20:39:47 +00:00
2026-11-07 05:59:44 +00:00
2026-11-12 04:17:58 +00:00
2026-11-05 22:49:46 +00:00
2026-11-11 23:36:19 +00:00
2026-10-27 05:52:01 +00:00
2026-11-03 23:49:01 +00:00
2026-11-03 04:08:59 +00:00
2026-11-10 11:17:06 +00:00
2026-11-10 21:26:11 +00:00
2026-11-05 04:25:19 +00:00
2026-10-27 23:53:09 +00:00
2026-11-05 00:55:46 +00:00
2026-11-11 23:49:59 +00:00
2026-11-10 01:51:29 +00:00
2026-11-11 23:49:59 +00:00
2026-11-11 19:16:19 +00:00
2026-11-06 00:37:27 +00:00
2026-11-10 08:52:35 +00:00
2026-11-10 21:58:49 +00:00
2026-11-11 23:49:59 +00:00
2026-11-12 00:27:01 +00:00
2026-11-10 03:02:25 +00:00
2026-11-12 01:57:33 +00:00
2026-11-11 23:23:09 +00:00
2026-11-12 01:57:33 +00:00
2026-11-10 04:56:49 +00:00
2026-11-06 22:26:03 +00:00
2026-11-02 20:34:35 +00:00
2026-11-09 16:37:22 +00:00
2026-11-06 04:24:04 +00:00
2026-11-09 16:37:22 +00:00
2026-11-10 16:58:06 +00:00
2026-11-10 04:43:24 +00:00
2026-11-10 03:01:14 +00:00
2026-10-27 16:36:32 +00:00
2026-11-09 12:54:46 +00:00
2026-11-12 02:43:37 +00:00
2026-11-11 18:58:21 +00:00
2026-11-12 02:53:52 +00:00
2026-11-12 00:27:01 +00:00
2026-11-10 22:22:35 +00:00
2026-11-07 10:41:36 +00:00
2026-11-10 21:26:11 +00:00
2026-10-27 05:52:01 +00:00
2026-11-04 23:46:52 +00:00
2026-10-27 05:52:01 +00:00
2026-11-06 17:47:31 +00:00
2026-11-10 11:17:06 +00:00
2026-11-10 09:54:57 +00:00
2026-10-30 07:11:56 +00:00
2026-11-10 08:34:17 +00:00
2026-11-12 00:27:01 +00:00
2026-11-11 06:41:15 +00:00
2026-11-12 02:15:25 +00:00
2026-11-12 00:44:27 +00:00
2026-11-11 22:31:42 +00:00
2026-10-30 16:35:54 +00:00
2026-11-04 09:51:28 +00:00
2026-10-27 05:52:01 +00:00
2026-11-03 15:02:57 +00:00
2026-11-12 00:28:23 +00:00
2026-11-12 00:28:56 +00:00
2026-11-04 00:52:58 +00:00
2026-10-28 21:09:05 +00:00
2026-11-12 01:57:33 +00:00
2026-11-11 09:58:13 +00:00
2026-11-11 22:31:42 +00:00
2026-10-27 05:52:01 +00:00