Repository navigation
Conversation
nwparker
force-pushed
the
oom/09-b-git-worktree-persistence
branch
from
July 24, 2026 07:48
04e4e5d to
4f0bb9e
Compare
nwparker
force-pushed
the
oom/10-b-providers
branch
from
July 24, 2026 07:48
4ff523b to
a5eed58
Compare
nwparker
force-pushed
the
oom/09-b-git-worktree-persistence
branch
from
July 25, 2026 02:21
4f0bb9e to
45a6b3b
Compare
nwparker
force-pushed
the
oom/10-b-providers
branch
from
July 25, 2026 02:21
a5eed58 to
b76a9fb
Compare
nwparker
force-pushed
the
oom/09-b-git-worktree-persistence
branch
from
July 25, 2026 02:39
45a6b3b to
980b8d8
Compare
nwparker
force-pushed
the
oom/10-b-providers
branch
from
July 25, 2026 02:39
b76a9fb to
6b9120c
Compare
nwparker
force-pushed
the
oom/09-b-git-worktree-persistence
branch
from
July 25, 2026 03:10
980b8d8 to
ed0d6de
Compare
nwparker
force-pushed
the
oom/10-b-providers
branch
from
July 25, 2026 03:10
6b9120c to
b23c447
Compare
Files: 37 applied, 1 deleted (from 6eb70d8) Co-authored-by: Orca <help@stably.ai>
nwparker
force-pushed
the
oom/09-b-git-worktree-persistence
branch
from
July 25, 2026 03:34
ed0d6de to
c54092b
Compare
nwparker
force-pushed
the
oom/10-b-providers
branch
from
July 25, 2026 03:34
b23c447 to
72ce9d9
Compare
Contributor
Author
|
Superseded by #10548, which re-scopes this work to the bound-at-ingress doctrine (see #10533 and An audit found the original #10179 scope was ~50x the size of the fix for the crash it targeted, and that bounds had landed ahead of their callers. Every file in these slices was re-adjudicated individually: ingress bounds (transport frames, PTY flow control, on-disk transcripts, parsing, enumeration, media decode, user-keyed accumulators) were kept; interior ceilings behind an already-bounded input were dropped. 1,882 files → 1,155, full suite green, and no No memory protection was lost — only speculation. |
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.
OOM hardening slice 10/29 — bound SSH/PTY/filesystem provider memory
Summary
This slice re-introduces memory ceilings across Orca's main-process providers: bounded fetch-response bodies, HTML→PDF input/output/concurrency caps, and a large set of SSH provider bounds (process-list validation, bounded remote directory listing, folder-download budget, PTY live-roster, PTY output-delivery credit accounting, spawn-exit race tracking, and provider-registry caps). It also switches several SSH RPCs to bounded relay methods with no unbounded fallback.
ELI5
Imagine the app talking to a remote computer over SSH and asking "list this folder" or "print this page to PDF." Before, it would happily accept an unlimited flood of data and could run out of memory. This change puts polite size limits on everything: how big a downloaded reply can be, how many files a remote folder-download will grab, how many terminals it remembers, and so on. Most limits are huge and you'll never notice them, but a few (like "only download folders under ~4096 files" and "only 2 PDF exports at once") are low enough that ordinary use could bump into them.
Proof of OOM fix
Regressions
Normal-path (ordinary use, below the new limits):⚠️ needs sign-off:
Overload-only (extreme input / sustained backpressure) — intended, documented degradations:
Build / CI
✅ Inherited defect FIXED in this slice
src/main/providers/ssh-filesystem-download.ts— Folder download hard-failed at the shared 4,096-entry transfer cap, rejecting any real checkout containing node_modules/build output.Adversarial review
datato deliver() regardless of credit overflow (falls back to createDirectCredit), so no terminal output is dropped. HTML->PDF admission (browser-pdf-admission.ts, MAX_CONCURRENT_PRINTS=2) releases credit correctly on success/error/timeout/idle via print.then(release,release) + releaseIfIdle() in finally — no leak; 32MB input / 64MB output / 2 concurrent are overload-only for a manual export action.\n\nThe one confirmed normal-path regression is the remote FOLDER DOWNLOAD budget: 4,096 total entries / depth 64 across the entire recursive tree, enforced client-side (independent of relay version), with no override wired at the provider layer. Downloading an ordinary project folder (repo checkout, anything containing node_modules or build output) now fails with 'SSH directory transfer exceeds the entries limit' where it previously succeeded. This is a deliberate user action and 4,096 is low relative to real folder sizes, so it is genuinely reachable in ordinary use — this is why I withhold signoff and recommend the human confirm whether 4,096 is the intended ceiling for the download-folder feature (it may warrant a higher limit, distinct from the 100k single-directory listing cap). The readDir/markdown bounded-method-no-fallback change is real but conditional on an out-of-date relay, so lower severity. No off-by-one, ordering, or leak bugs found in the bounds themselves.Files
38 files changed (+2437 / −214).
🤖 Decomposed, reviewed & assembled by Claude Code from the reverted #10179. Draft — do not merge out of order.