Repository navigation
fix(sse): judge stalled buffered turns by raw stream content - #14679
Merged
diegosouzapw merged 1 commit intoSep 24, 2026
Merged
diegosouzapw merged 1 commit into
diegosouzapw merged 1 commit into
Conversation
maxmad64bis
force-pushed
the
fix/empty-turn-idle-verdict
branch
from
September 23, 2026 18:38
f005195 to
14b9966
Compare
3 of 5 tasks
A buffered turn that stalls while reasoning stays silent carries no raw model output, yet the idle verdict passed it through as usable content. The content watchdog then killed it ~80s later: a 502 the retry budget never got a chance to prevent. Judge idle reads with the same raw-content classifier as the watchdog (hasUsefulStreamContent): no useful bytes, never a pass. While a reasoning item is still open, keep draining under an absolute ceiling (STREAM_READINESS_MAX_TIMEOUT_MS) instead of judging a working model. Pass verdicts on stalled turns carry an idle marker for follow-up logging.
maxmad64bis
force-pushed
the
fix/empty-turn-idle-verdict
branch
from
September 23, 2026 19:04
14b9966 to
0398f27
Compare
maxmad64bis
marked this pull request as ready for review
September 23, 2026 19:09
3 of 5 tasks
5 tasks done
Owner
|
Clean, well-scoped follow-up on #14213. Confirmed #14681 and #14691 (both stacked on this one) |
diegosouzapw
merged commit Sep 24, 2026
56a38a9
into
diegosouzapw:release/v3.8.51
17 of 25 checks passed
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.
Summary
Judge stalled buffered turns by raw stream content: a turn that stalled before any usable output is retried through the existing empty-turn budget instead of being exposed and killed by the content watchdog ~80 s later. When a reasoning item is still open, bounded reading continues up to the stream readiness ceiling instead of concluding early.
Related Issues
Related to #14213
Validation
npm run lint— clean on the touched files (exit 0 with suppressions); the full run is red on the base (🔴 Release branch not green: release/v3.8.51 #14547)release/v3.8.5118bbb101980c639cfabdc5663213836d917c3269, tip0398f272d3,rev-list HEAD..base= 0; file-size/eslint/unit neighbours green locally (see Reviewer Notes); CI ready-run: full suite executed, remaining reds are inherited base-red 🔴 Release branch not green: release/v3.8.51 #14547 (typecheck 4 ✗ outside the PR, identical at head and base, DocsDEEP_HEALTH_CHECK_ENABLEDpresent on the untouched base, unit shards flaky — same-base sibling feat(opencode): bound Responses headers wait with opt-in rotation budget #14558: same failing job families)Tests Added Or Updated
tests/unit/idle-verdict-14213.test.ts(new, 9 tests: pure-mute, open reasoning, closed-without-content, real content, detector vectors, continuation, ceiling, compat).Coverage Notes
open-sse/utils/emptyTurnRetry.tsis covered by the new test plus the neighbouringflush-empty-retryandflush-empty-retry-hooksuites (29 green locally).Reviewer Notes
maxTotalMs = 0keeps the historic behaviour for other callers; the ceiling defaults to the static stream-readiness max.chatCore.tsuntouched (git diff HEAD -- open-sse/handlers/chatCore.tsempty).auggie.tsTS2769/TS18047,projectCombo.tsTS2459/TS2724) reproduce byte-identically on an ephemeral worktree at the merge-base18bbb10198(same files,git diff $mbempty on both); CIAPI Route Typechecklog cites no file from this PR.