With the default busy_input_mode=interrupt, a burst of rapid gateway messages arriving while context compression is in flight could interrupt the current turn and start a fresh turn against the pre-rotation parent session. Because compression is interrupt-immune (#23975), the still- running compression later rotates the id out from under that new turn, and if the new turn also grew past the compression threshold it started its own uncancellable compression on the same stale parent — forking multiple orphaned one-shot sibling continuations (#56391). While a state.db compression lock is held for the session, demote 'interrupt' busy-input mode to 'queue' semantics (mirroring the subagent protection in #30170), so the follow-up message waits for the in-flight compression + its id rotation to land instead of racing a new turn against the stale parent. Ack copy explains the compression demotion. Fixes #56391. |
||
|---|---|---|
| .. | ||
| ci | ||
| lib | ||
| tests | ||
| whatsapp-bridge | ||
| analyze_livetest.py | ||
| benchmark_browser_eval.py | ||
| build_model_catalog.py | ||
| build_skills_index.py | ||
| check-windows-footguns.py | ||
| check_subprocess_stdin.py | ||
| contributor_audit.py | ||
| discord-voice-doctor.py | ||
| docker_config_migrate.py | ||
| hermes-gateway | ||
| install.cmd | ||
| install.ps1 | ||
| install.sh | ||
| install_psutil_android.py | ||
| keystroke_diagnostic.py | ||
| kill_modal.sh | ||
| lint_diff.py | ||
| LIVETEST_README.md | ||
| profile-tui.py | ||
| release.py | ||
| run_tests.sh | ||
| run_tests_parallel.py | ||
| sample_and_compress.py | ||
| tool_search_livetest.py | ||