Repository navigation
Conversation
nwparker
force-pushed
the
oom/26-b-renderer-editor-terminal
branch
from
July 24, 2026 07:49
e6c630e to
1edaa5e
Compare
nwparker
force-pushed
the
oom/27-b-renderer-components
branch
from
July 24, 2026 07:49
db22c47 to
0dc8f04
Compare
nwparker
force-pushed
the
oom/26-b-renderer-editor-terminal
branch
from
July 25, 2026 02:21
1edaa5e to
0989736
Compare
nwparker
force-pushed
the
oom/27-b-renderer-components
branch
from
July 25, 2026 02:21
0dc8f04 to
49f07ba
Compare
nwparker
force-pushed
the
oom/26-b-renderer-editor-terminal
branch
from
July 25, 2026 02:40
0989736 to
b4dd4b3
Compare
nwparker
force-pushed
the
oom/27-b-renderer-components
branch
from
July 25, 2026 02:40
49f07ba to
5bf5366
Compare
nwparker
force-pushed
the
oom/26-b-renderer-editor-terminal
branch
from
July 25, 2026 03:11
b4dd4b3 to
f7f7b90
Compare
nwparker
force-pushed
the
oom/27-b-renderer-components
branch
from
July 25, 2026 03:11
5bf5366 to
1f063cd
Compare
Files: 58 applied, 0 deleted (from 6eb70d8) Co-authored-by: Orca <help@stably.ai>
nwparker
force-pushed
the
oom/26-b-renderer-editor-terminal
branch
from
July 25, 2026 03:34
f7f7b90 to
e4f6b98
Compare
nwparker
force-pushed
the
oom/27-b-renderer-components
branch
from
July 25, 2026 03:34
1f063cd to
9a4f14d
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 27/29 — bound renderer components (native-chat, pet, sidebar, automations)
Summary
This slice re-lands memory ceilings across renderer components: a byte/entry-bounded native-chat scope cache (drafts, session options, pending sends), bounded custom-pet blob/media caches and load queue, a rolling 256KB automation-run output buffer, bounded file-explorer undo history, model-enrichment caps, and ~12 concurrency caps on repo/host/worktree fan-outs. All changes are whole-file and ship with dedicated bound tests.
ELI5
The app has lots of little in-memory "scratch pads" — draft chat text, pet images, automation logs, undo history — that previously grew forever and could crash the app by eating all memory. This change puts a size limit on each: once a pad is full it drops the oldest stuff (or refuses new stuff). It also stops the app from firing off hundreds of network/git requests at once by only allowing a handful in parallel. Normal users never notice; only pathological inputs hit the limits.
Proof of OOM fix
Regressions
Normal-path (ordinary use, below the new limits): none — behavior is unchanged below the ceilings.
Overload-only (extreme input / sustained backpressure) — intended, documented degradations:
Build / CI
main:src/renderer/src/components/sidebar/WorktreeContextMenu.tsx: TRUE CONFLICT with fix(worktree) fix(worktree): reconcile symlinked creates by Git identity #10266 (symlinked-create reconcile): keep both the worktree-identity reconcile and the OOM change.Adversarial review
Verified numeric ceilings and judged headroom:
All caps ship with dedicated bound tests (custom-pet-load-queue.test.ts, pet-blob-cache.test.ts, fileExplorerUndoRedo.test.ts, native-chat-*.test.ts, automation-run-output-snapshot.test.ts, WorkspacePortScanner.test.tsx, useFileExplorerTree.test.ts, plus fanout-boundary tests). OOM evidence is real and corroborated. No off-by-one, no missing release on error/abort, no broken FIFO. Safe to open as a draft PR for human review.
Files
58 files changed (+2300 / −840).
🤖 Decomposed, reviewed & assembled by Claude Code from the reverted #10179. Draft — do not merge out of order.
Made with Orca 🐋