Track performance audit fixes
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 23k
- Forks
- 5.9k
- Avg merge
- 11h 14m
- Merged PRs (30d)
- 357
Description
Track the performance work from the 2026-09-04 audit. Each implementation PR has one concern, focused tests, and a review before merge.
The audit has measured findings and profiling targets. A target is complete only after a verified improvement, or a written decision that the change is not justified. Browser and device use is excluded at Theo's request.
Work
- C1. Terminal output becomes full-buffer replay after 512 KiB.
- C2. One shell change rebuilds environment-wide indexes and atom dependencies.
- C3. Five-minute thread caches retain live subscriptions, not just values.
- C4. Loaded image attachments each start an uncached signing RPC before row visibility.
- C5. One relay token refresh blocks cache hits for other scopes.
- S1. Terminal history repeatedly splits old output and has no byte cap.
- S2. Session updates and command preparation read full conversation bodies.
- S3. Fresh checkpoint indexes discard Git's clean-file stat cache.
- S4. Every buffered assistant text event still causes three SQL reads.
- S5. Slow-client stream queues have no retained-byte bound.
- S6. OpenCode keeps unused versions of growing tool output.
- S7. Chat search scans message bodies before applying its result limit.
- S8. Self-hosted hashed web assets lack cache validators and immutable caching.
- S9. Automatic checkpoint summaries build full patches just to count lines.
- S10. Nine cursor writes run for every event, including inactive projectors.
- S11. Each client repeats the same shell projection database reads.
- S12. The light startup command model fills with message and activity bodies during uptime.
- S13. Thread pages repeat all plans and checkpoint summary data.
- S14. Single-thread resume decodes unrelated threads' events.
- S15. Native content grep is synchronous on Node and has a 250 ms search budget.
- S16. An idle terminal prompt keeps one-second process-table polling active.
- S17. OpenCode native logs write repeated growing tool payloads.
- S18. Slow provider preparation and checkpoints can delay unrelated worker items.
- W02. Compiled streaming Markdown remounts content and repeats code highlighting.
- W03. Dense terminal snapshots make tens of thousands of WASM calls.
- W04. Draft persistence serializes all draft data before its debounce.
- W05. The first chat starts a shared 2 to 6 worker diff pool before any diff request.
- W06. Up to ten hidden terminal threads still parse output and build snapshots.
- W07. Composer gradients and work-row shimmers keep generating frames.
- W08. A text delta remerges and sorts loaded timeline history before virtualization.
- W09. Dormant preview guests have no age or memory budget.
- W10. PiP captures and JPEG-encodes full-size pages before detecting an unchanged frame.
- W11. Recording retains every chunk and creates one full ArrayBuffer at stop.
- W12. Active and pinned sidebar rows remain mounted. Each filters terminal metadata.
- W13. Large diffs are parsed and hashed on the main thread, including appearance changes.
- W14. Recoverable IndexedDB caches have no size or age eviction.
- W15. The minimap scans all loaded turns and builds unbounded text previews.
- W16. Optional desktop and panel imports remain in startup dependency paths.
- M2. Text-dependent chunk keys remount the active native Markdown block.
- M3. Each text update rebuilds the whole feed and replaces every feed-row object.
- M4. Cold native diff preparation compares every eligible replacement pair before display.
- M5. Typing pauses serialize and synchronously write image-bearing draft documents.
- M6. Keep-alive review atoms retain raw, parsed, and native diff data without a byte budget.
- M7. Shell-only hooks subscribe to full detail. Hidden-route resource ownership needs narrowing.
- M8. Native-diff highlighting lacks the long-line guard used by the other highlighter.
- M9. Collapsed iOS files leave zero-height rows inside draw-loop index ranges.
- M10. iOS token patches clear unchanged attributed-text caches and repeat offset checks.
- M11. Android diff drawing scans file headers and repeatedly measures text.
- M12. Android terminal snapshots allocate whole grids and cursor redraws repaint all text.
- M13. Streaming code highlights retain obsolete cumulative versions and unfinished jobs.
- M14. One huge Markdown message or file still mounts all its internal blocks.
- M15. iOS Markdown builds full line-layout events that the public component does not consume.
- M16. Default v2 thread lists still compute the unused legacy list.
- M17. Status motion, timers, and stream haptics lack consistent visible-content gating.
- M18. Source-file highlighting prepares full token payloads, including offscreen text.
- M19. Unknown-size Android attachment copies synchronously loop through the file on JS.
- M20. An inline video can keep playing offscreen on the same focused route.
- P1. A 268,254-byte desktop screenshot is eager even though mobile CSS hides it.
- P2. Hero drift, endorsement motion, and a blinking caret run continuously.
- P3. The home page renders 84 cards for 21 endorsements.
- P4. A 1,024-pixel icon supplies a 20-pixel footer image.
- P5. Google Fonts CSS adds a third-party stylesheet to the first-render path.
- P6. A full-window texture and sticky backdrop blur may add scroll compositing cost.
- R1. Activity publication rereads and re-decodes expired rows that no longer display.
- R2. Push jobs are sequential within a batch and can wait behind a slow APNs request.
- R3. Telemetry refreshes details for all accessible processes before selecting the T3 tree.
Existing related work
- Terminal streaming: #9027.
- Terminal history: #9357.
- Draft persistence: #9049.
- Thread derivation: #9508.
- Search lookup indexing: #8969.
Review this work before making a duplicate change. Do not close another contributor's PR without approval.
Current PRs
| Item | PR | State |
|---|---|---|
| C1 | #9707 | merged, remaining work tracked |
| C2 | #9716 | merged, remaining work tracked |
| C3 | #9740 | merged |
| C4 | #9760 | merged |
| C5 | #9691 | merged |
| S1 | #9703 | merged |
| S1 | #9748 | merged |
| S2 | #9662 | merged, remaining work tracked |
| S2 | #9758 | merged, remaining work tracked |
| S4 | #9706 | merged |
| S5 | #9715 | merged |
| S6 | #9684 | merged, remaining work tracked |
| S6 | #9738 | merged, remaining work tracked |
| S8 | #9669 | merged |
| S9 | #9694 | merged |
| S10 | #9671 | merged, remaining work tracked |
| S14 | #9726 | merged |
| S17 | #9689 | merged |
| W02 | #9677, #11193, #11196, #11198 | merged |
| W03 | #9663 | merged |
| W04 | #9695 | merged |
| W05 | #9692 | merged |
| W06 | #9718 | merged |
| W07 | #9709 | merged |
| W08 | #9725 | merged |
| W12 | #9747 | merged |
| W15 | #11181 (supersedes #9771) | merged |
| M2 | #9664 | native release hold |
| M3 | #9688 | merged |
| M4 | #9693 | merged, remaining work tracked |
| M4 | #9699 | native release hold |
| M5 | #9710 | merged, remaining work tracked |
| M5 | #9713 | merged, remaining work tracked |
| M5 | #9727 | native release hold |
| M6 | #9749 | merged, remaining work tracked |
| M8 | #9673 | merged |
| M16 | #9679 | merged |
| M18 | #9752 | merged, remaining work tracked |
| P1 | #9682 | merged |
| P2 | #9697 | merged |
| P3 | #9697 | merged |
| P4 | #9682 | merged |
| P5 | #9701 | merged |
| R1 | #9708 | merged, remaining work tracked |
| R2 | #9734 | merged, remaining work tracked |
| R3 | #9768 | merged, remaining work tracked |
40 audit PRs are merged. Browser and device verification is excluded at Theo's request. Normal merge-triggered workflows are authorized. No release versions or manual releases are part of this work.
C1, C2, S2, S6, S10, M4, M5, M6, M18, R1, and R2 retain separate follow-up work. The implementation state records remaining reactor reads, live session-map retention, narrower row writes, active Markdown parsing, raw review retention, file highlighting, and native visible-word processing.
M2 and the native M4 stage stay held for a compatible native release. M5 guards and readers are merged. Its file-backed writers stay held until both platforms have new native runtime fingerprints embedding these readers and guards. Rebuilding with the old fingerprint does not exclude old OTA JavaScript. Do not change fingerprint rules or labels to remove these holds.
C3 now closes unused live detail streams and keeps completed state/cursor snapshots for five idle minutes. S1 history byte bounds, S14 thread-scoped replay, W08 timeline reuse, W12 terminal-metadata indexing, M6 derived-review caching, M18 unused highlighter startup removal, R2 HTTP deadlines, S6 unused tool-part cache removal, C4 visible-row image signing, and S2 provider command metadata reads are merged. W15 minimap unbounded previews landed in #11181 (superseding #9771). M7 shell-only selection hooks, S12 body-free command facts, and R2 per-device batch ordering have local changes under verification. R3 Linux process-detail reads are merged. Other platforms keep their current telemetry refresh path.
S3 checkpoint index reuse is deferred. Real Git tests found that a reused index can miss same-size file edits with restored modification times under default Git settings. The original production checkpoint path captures the edit. Root and the server reviewer reproduced the difference without changing user staging. An attribute-policy race can also keep stale text conversions. No S3 production change or PR was made.
C1 keeps the current wire format and a compatible mobile JS adapter. Native terminal streaming remains separate. Server history now retains at most 5,000 lines and 8 MiB of UTF-8 text. That is not an 8 MiB limit on a serialized JSON frame. M6 retains at most eight parsed sections and 4,194,304 source characters, not an exact heap-byte limit. M18 removes unused startup work but does not complete visible-range file highlighting.
C1, W04, W06, and M5 preserve Wout Stiens's contribution and squash co-author credit. W08 preserves extoci's contribution. S1 continues the focused terminal-history contribution with its original author. The source PRs remain unchanged.
Created with GPT-6 Astra (preview) in Codex.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Use the checklist and Current PRs table as the entry point, reviewing existing implementation PRs before selecting any unchecked follow-up. There are no source files or tests named in the issue; each target is done only after a verified performance improvement or a written decision that the change is not justified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- node.js, typescript, wasm
- Domain
- performance
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100