Repository navigation
merge: sync upstream v3.5.50 into fork - #126
Merged
Merged
Conversation
…ing reader.cancel() Bun's reader.cancel() is a no-op on fetch response bodies (oven-sh/bun#35093), so cancelling teeStream's output on client disconnect never released the upstream response's native buffer — causing multi-GB RSS growth over time (#382). Drain the reader to completion instead, matching the pattern already used in discard-body-cancel.ts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Addresses PR review nits: releaseLock() after the drain loop now matches the sibling drainBody() pattern in discard-body-cancel.ts, and a comment notes the drain's read() calls are bounded by request-handler.ts's effectiveSignal aborting the underlying fetch() on the same disconnect. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
fix(proxy): stop leaking native buffers on client disconnect (#382)
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…or detection Both PR-number extraction pipelines ended in a bare grep -oE with no downstream neutralizer, so a release range with only one merge style (GitHub-UI vs manual --no-ff) made the other pipeline exit 1 and, under set -e, abort the whole Generate Changelog step before any output was written. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Small delta over the v3.5.48 sync: 6 commits, 7 files (+199/−8). One conflict (stream-tee.ts cancel handler). Reconciliation — NEW STANDING FORK DIVERGENCE: - Upstream 50ec29b/a29c5722fb replaced teeStream's cancel-propagation with a drain-to-done loop (Bun cancel-leak fix, oven-sh/bun#35093). The fork KEEPS reader.cancel(reason) propagation: here teeStream wraps the semantic-liveness/terminal-recovery stream chain (not the raw fetch body), and propagation is load-bearing — it records streamTerminalState="client_cancelled" via the inner stream's cancel handler, and it tears down stalled upstreams during stall-recovery, where upstream's drain (bounded only by the fetch abort signal) would hang forever on a live client. Upstream's teardown-must-not-throw intent IS adopted (cancel rejection swallowed). Upstream's new stream-tee.test.ts drain assertions adapted to the divergence; fork's own lifecycle tests unchanged and green. Also inherited cleanly: release-workflow empty-match grep guard (448fa65), codex provider tweak, version 3.5.50.
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
Small sync over #124 (v3.5.48): 6 upstream commits, 7 files (+199/−8), one conflict.
New standing fork divergence — teeStream cancel semantics
Upstream 50ec29b replaced teeStream's
reader.cancel(reason)with a drain-to-done loop (Bun cancel-leak fix, oven-sh/bun#35093). The fork keeps cancel propagation: our teeStream wraps the semantic-liveness/terminal-recovery stream chain (not the raw fetch body), and propagation is load-bearing — it recordsstreamTerminalState="client_cancelled"via the inner stream's cancel handler (contract documented at response-handler.ts's onCancel), and it tears down stalled upstreams during stall-recovery, where a drain bounded only by the fetch abort signal would hang forever on a live client. Upstream's teardown-must-not-throw intent is adopted (cancel rejection swallowed). Their new drain-assertion test is adapted to the divergence; the fork's stricter lifecycle tests pass unchanged.Also inherited
Release-workflow empty-match grep guard, codex provider tweak, version 3.5.50.
Verification
build ✅ · lint (7 pre-existing warnings) ✅ · typecheck ✅ · format ✅ · isolated per-file sweep: 402 files, 1 failure = the documented
incremental-vacuum-adaptiveenvironmental flake.