H2KFORGIVEN
fc2fac73bd
fix(compressor): prevent orphan user turn after compaction via turn-pair preservation
...
When the last user message sits exactly at head_end (the first compressible
index), _ensure_last_user_message_in_tail's final max(last_user_idx,
head_end + 1) clamp returns head_end + 1, pushing the user into the compressed
region without its assistant reply. The summariser then records it as a
pending ask, and the next session re-executes the already-completed task
(lights off twice, file deleted twice, message re-sent).
Fix: apply Causal Coupling — a compaction boundary must never split a
(user -> assistant [-> tool results]) turn-pair. Add _find_turn_pair_end and,
when the clamp would orphan the user, push the cut forward to pair_end so the
completed pair is summarised together and marked done.
8 new tests in TestTurnPairPreservation; 133 compressor tests pass.
2026-07-01 00:27:09 -07:00
..
2026-06-30 16:22:18 -07:00
2026-06-30 15:41:44 -05:00
2026-06-08 22:46:57 -07:00
2026-06-30 03:27:12 -07:00
2026-05-28 00:20:11 -07:00
2026-06-12 08:51:10 +00:00
2026-07-01 00:20:32 -07:00
2026-07-01 00:20:32 -07:00
2026-06-27 19:23:15 -07:00
2026-06-30 12:07:01 -07:00
2026-06-30 17:28:33 -07:00
2026-06-15 05:25:17 -07:00
2026-06-19 01:53:32 +05:30
2026-05-29 04:22:27 -07:00
2026-06-30 17:20:41 -07:00
2026-06-17 17:33:32 -07:00
2026-06-21 16:39:02 -07:00
2026-06-30 00:59:59 -05:00
2026-06-29 09:18:10 -04:00
2026-07-01 00:27:09 -07:00
2026-05-29 19:05:03 -07:00
2026-06-30 00:19:49 -07:00
2026-06-30 13:36:29 +05:30
2026-07-01 00:09:42 -07:00
2026-06-28 22:52:51 -07:00
2026-05-25 00:32:08 -07:00
2026-06-30 17:29:03 -07:00
2026-05-26 15:41:11 -07:00
2026-06-12 08:51:10 +00:00
2026-06-17 05:40:05 -07:00
2026-06-28 15:10:21 -07:00
2026-06-29 20:31:17 -07:00
2026-06-30 03:57:14 -07:00
2026-06-13 21:14:32 -07:00
2026-06-27 04:01:12 +05:30
2026-06-30 11:51:22 -07:00
2026-06-03 12:00:27 -07:00
2026-06-18 22:13:07 -07:00
2026-06-28 22:52:59 -07:00
2026-06-07 18:33:20 -07:00
2026-05-28 00:20:11 -07:00
2026-06-30 16:56:01 -07:00
2026-06-30 11:54:16 -05:00
2026-06-30 03:44:41 -05:00
2026-06-30 15:16:21 -05:00
2026-06-25 02:17:29 +05:30
2026-06-21 12:03:46 -07:00
2026-06-19 15:23:41 +08:00
2026-06-25 12:24:34 -05:00
2026-07-01 00:09:42 -07:00
2026-07-01 00:09:42 -07:00
2026-06-30 03:27:41 -07:00
2026-05-27 00:43:32 -07:00
2026-06-13 05:51:41 -07:00
2026-06-07 08:36:48 -07:00
2026-06-23 08:01:50 +00:00
2026-06-27 21:22:49 -07:00
2026-06-28 20:46:32 -07:00
2026-06-25 19:00:48 -07:00
2026-06-30 03:41:55 -07:00
2026-06-27 20:56:49 -07:00
2026-06-25 00:17:17 -07:00
2026-06-02 20:23:09 +00:00
2026-06-19 07:34:15 -07:00
2026-06-30 00:59:29 -05:00
2026-06-16 10:37:37 -07:00
2026-06-28 05:28:45 -07:00
2026-06-25 22:03:02 -07:00
2026-06-13 21:14:32 -07:00
2026-05-28 04:53:27 -07:00
2026-05-25 23:17:33 -07:00
2026-06-22 06:42:30 -07:00
2026-06-25 19:00:48 -07:00
2026-06-30 17:28:33 -07:00
2026-06-19 17:15:52 -07:00
2026-06-24 23:02:48 -05:00
2026-06-29 20:31:17 -07:00
2026-05-25 01:41:19 -07:00
2026-05-25 01:41:19 -07:00
2026-05-24 18:04:54 -07:00
2026-05-24 18:04:54 -07:00
2026-06-30 20:01:16 +05:30
2026-06-27 22:03:14 -07:00
2026-06-28 01:15:21 -07:00
2026-06-30 23:08:37 -07:00
2026-06-24 23:03:45 -05:00
2026-06-30 01:43:08 -05:00
2026-06-30 00:59:29 -05:00
2026-05-28 04:52:42 -07:00
2026-05-28 04:52:42 -07:00