perf: index history fallback updates - #381
Open
robinfai wants to merge 2 commits into
Open
Conversation
robinfai
marked this pull request as ready for review
August 9, 2026 16:07
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
Why
mergeHistoryUpdatespreviously ranfindIndexover the remaining fallbackupdates for every typed thread update. Large histories therefore repeatedly
serialized and scanned the same updates, with worst-case
O(T * F)work.The indexed implementation builds two
O(F)lookup maps once and resolves eachmatch in
O(log F). On a 77-turn, 2,306-item history with 5,112 fallbackupdates and 3,566 typed updates, the isolated merge phase decreased from an
average 1,100.0 ms to 8.6 ms. An instrumented full-load comparison observed
adapter time decrease from 16.22 s to 15.05 s; the isolated merge measurement
is the stable performance claim because end-to-end timings include process and
transport variance.
This change does not trim ACP metadata, batch notifications, or introduce
client-specific behavior.
Validation
npm run typechecknpm test— 357 passed, 28 skippednpm run build