Repository navigation
Conversation
Publish the exact locally tested candidate tree. See the draft PR for focused validation, remaining native/operational coverage and acceptance holds.
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Configure and enforce the upload idle timer src/claude/intercept/picker-listener.ts |
The listener adds an optional uploadIdleMs setting and a 60-second default. It arms and rearms the timer on upload progress, pauses it during backpressure, and clears it on completion or the first upstream response. On expiry, it marks the client gone, logs the timeout, and stops the unfinished upload. |
Observe and validate backpressure behavior tests/helpers/picker-upload-backpressure.ts, tests/claude-integration/claude-picker-upload.test.ts |
The tests observe HTTP/1 and HTTP/2 flow-control events. They verify stalled uploads time out, progressing uploads deliver all bytes, response streams remain open, and backpressure pauses the idle timer until reads resume. |
Document timeout and cleanup behavior structure/clients/claude-desktop.md, docs-site/src/content/docs/guides/claude-code.md, docs-site/src/content/docs/{fr,ja,ko,ru,tr,zh-cn,zh-tw}/guides/claude-code.md |
The documentation describes the 60-second pre-response idle timeout, backpressure handling, cleanup behavior, and the timeout’s exclusions. |
Priority:
Estimated code review effort: 3 (Moderate) | ~25 minutes
Change: Bug fix
Sequence Diagram(s)
sequenceDiagram
participant Client
participant PickerListener
participant Upstream
Client->>PickerListener: Send upload data
PickerListener->>Upstream: Relay upload data
Upstream-->>PickerListener: Apply backpressure
PickerListener->>PickerListener: Pause idle timer
Upstream-->>PickerListener: Resume reading or send first response
PickerListener->>PickerListener: Resume or clear idle timer
PickerListener->>Client: On timeout, close without success response
Suggested reviewers: lidge-jun, ingwannu
Merge Risk: 
Minimal · up to f52b8
-
No actionable issue is established for this change. The separate live-upload and platform acceptance work remains outside this code-risk assessment.
Pre-merge checks: 
4
-
Full details: Title check
-
Explanation
The title "fix(claude): expire idle picker uploads while preserving backpressure" matches the main change. The changeset adds a 60-second pre-response idle timer for picker uploads in src/claude/intercept/picker-listener.ts, pauses it under upstream backpressure, and adds tests and helpers plus docs for the new behavior. The title is specific, concise, and follows a conventional commit style. It does not cover HTTP/2 stream reset or the closeInput socket change, which is expected for a short title.
-
Finishing Touches
-
📝 Generate docstrings
-
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands.
|
✅ Deterministic PR hygiene checks passed. |
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai full review Please review the complete current head Exact-head fork CI |
✅ Action performedFull review finished. |
Preserve the published PR history while integrating dev 9e48f78. Retain the idle-only policy, request backpressure handling and response cleanup. Validation: Bun 1.4.4, 83 focused TLS tests; typecheck, structure, privacy, file-size gates and 593-page documentation build passed.
|
@coderabbitai review |
✅ Action performed
|
|
The reviewed 12-file candidate is preserved unchanged at |
Summary
Close unfinished Picker uploads after 60 seconds without body progress, before the first upstream response. Nonempty chunks reset the idle timer; upstream backpressure pauses it. Body completion, the first response, cancellation and shutdown remove it. This adds no overall upload-duration limit, and existing runtime/protocol limits still apply.
HTTP/1.1 expiry closes the underlying socket without advertising an empty success response. HTTP/2 expiry closes only the affected stream. Existing admission limits, response-stream cleanup and the eight localized Picker guides remain aligned.
Current integration
Current head:
f52b83beb7a66ddc68f6f1db118d6101230f6e16.Merged
devat9e48f782cbac4a666b09574cb57a21be391c8d5bwhile preserving the original branch history. The PR was 170 commits behind that base. The two automatically merged files were inspected; the proposal remains 12 files, +289/-5 relative to that base. No timeout policy, scan configuration or assertion was relaxed.Verification
Current integrated tree:
4d794af5beeb6f0ba4228b27c359099077ee7656. Its GitHub tree was verified to match the locally tested tree.Bun 1.4.4, Linux:
EPERM); the permitted loopback run passed. This is controlled local TLS evidence.Current-head hosted checks
All checks applicable to this head passed:
cigate passed, along with type/lint/build gates, the documentation build, structure/storage/API checks, npm-global and Docker smoke.CodeRabbit skipped its automatic review after the Ready transition because this repository has fewer than ten stars. Its successful status is not counted as a fresh review of this head; the independent final-tree review is described below.
The workflow skipped native macOS/Windows and Desktop-only jobs under its existing PR/path policy. Those skips are not native-platform acceptance evidence.
The older CodeQL run
40339832919failed during Actions/Python result upload. That historical result is retained; the new head completed all three analyses successfully without weakening scan coverage.Review scope and remaining acceptance
All four existing inline findings were addressed before this integration. A fresh read-only code review found no additional timer, backpressure, cleanup or admission defect.
The upstream maintainer's condition remains a separate acceptance question: reproduce a real claude.ai upload stall that its own timeout does not already cover, and decide whether the 60-second default policy is appropriate. The controlled fixtures do not establish that live-edge behavior. Installed Claude Desktop macOS/Windows acceptance, sustained client churn and explicit maintainer approval are not claimed.
This fork review concerns the implemented idle-only candidate and its evidence. Review readiness does not record upstream policy acceptance, deployment or merge approval.
Checklist
Summary by CodeRabbit
New Features
Documentation