fix(server): a hung tmux call or a big memory dedupe no longer freezes the tenant (v0.448.5) - #837
Merged
Merged
Conversation
…s the tenant (v0.448.5) Every tmux spawnSync in LocalSessionBackend is now bounded (5s, SIGKILL): one send-keys held a live server for 1h55m. planConsolidation normalises once and finds exact dups via a map, so vector-less groups are linear (13.8s -> 65ms at 5.2k rows, identical plans); maintain yields between groups. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[0.448.5] - 2026-09-22
Fixed
/healthdead, listen backlog full, no DB write for two hours. (1) Every
tmuxcall inLocalSessionBackendis aspawnSync, and onesend-keys -l(a task-reconcile poke-back) waited 1h55m on a tmux server reply thatnever came, holding every request, gate check and scheduler tick behind it. All tmux calls now time out
after 5s (SIGKILL). A timed-out call reads as "unknown / not delivered", which every caller already
handles. (2) Memory maintenance's
planConsolidationnormalised content inside its inner loop (n²/2regex passes). After the unblock, one agent's 5.2k vector-less memories pinned the process at 100% CPU for
~5 minutes. Content is now normalised once and exact duplicates come from a map, so a group with no
vectors is linear: 13.8s → 65ms at that size, with identical merge plans.
maintainalso yields betweengroups. Pinned by
scripts/event-loop-freeze-test.cjs.Test:
scripts/event-loop-freeze-test.cjs(intest:governance) — fake hangingtmuxbounded; plan equivalence vs the original algorithm on 120 random groups; 5.2k-row wall-clock bound.🤖 Generated with Claude Code