Skip to content

fix(core): Fix chat corruption bug in context manager.#26534

Merged
joshualitt merged 2 commits intomainfrom
jl/fix-corruption
May 5, 2026
Merged

fix(core): Fix chat corruption bug in context manager.#26534
joshualitt merged 2 commits intomainfrom
jl/fix-corruption

Conversation

@joshualitt
Copy link
Copy Markdown
Contributor

Fixes #26521

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 5, 2026

Size Change: +1.86 kB (+0.01%)

Total Size: 34 MB

Filename Size Change
./bundle/chunk-32FGWL3S.js 0 B -14.7 MB (removed) 🏆
./bundle/chunk-46SZMMNN.js 0 B -658 kB (removed) 🏆
./bundle/chunk-F6WF3VCE.js 0 B -19.5 kB (removed) 🏆
./bundle/chunk-JX2FGYWO.js 0 B -2.78 MB (removed) 🏆
./bundle/chunk-KM5NSTLI.js 0 B -12.5 kB (removed) 🏆
./bundle/chunk-QI72UPDC.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-XU2XS4AU.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-YHMTF3MY.js 0 B -49.2 kB (removed) 🏆
./bundle/core-ADXFKO77.js 0 B -48.8 kB (removed) 🏆
./bundle/devtoolsService-ZLIIDPQP.js 0 B -28 kB (removed) 🏆
./bundle/gemini-ARBICVSJ.js 0 B -583 kB (removed) 🏆
./bundle/interactiveCli-RVPIYA25.js 0 B -1.29 MB (removed) 🏆
./bundle/liteRtServerManager-7RAGIEEW.js 0 B -2.11 kB (removed) 🏆
./bundle/oauth2-provider-C7EUKDPI.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-2WKQJLHR.js 14.8 MB +14.8 MB (new file) 🆕
./bundle/chunk-72JKVQZL.js 12.5 kB +12.5 kB (new file) 🆕
./bundle/chunk-7GVEG377.js 19.5 kB +19.5 kB (new file) 🆕
./bundle/chunk-E43LTBL2.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-JB34JEXF.js 2.78 MB +2.78 MB (new file) 🆕
./bundle/chunk-SBPNNENA.js 658 kB +658 kB (new file) 🆕
./bundle/chunk-TWQRWB2R.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-UZIYJH42.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/core-FKM2HNRQ.js 48.8 kB +48.8 kB (new file) 🆕
./bundle/devtoolsService-JA3SJ2HU.js 28 kB +28 kB (new file) 🆕
./bundle/gemini-MX3OGG4K.js 583 kB +583 kB (new file) 🆕
./bundle/interactiveCli-BLR2ELUC.js 1.29 MB +1.29 MB (new file) 🆕
./bundle/liteRtServerManager-B2NTL4V4.js 2.11 kB +2.11 kB (new file) 🆕
./bundle/oauth2-provider-YWDZN7TQ.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/chunk-VJSUVOZ4.js 1.97 MB 0 B
./bundle/cleanup-YLXGC75Z.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 5.1 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-NGHTMHWQ.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-F4MWAQZS.js 0 B -652 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-BFCRS26D.js 932 B +932 B (new file) 🆕
./bundle/start-4LT2FHK4.js 652 B +652 B (new file) 🆕

compressed-size-action

@joshualitt joshualitt force-pushed the jl/fix-corruption branch from f86ff39 to e9ce4a4 Compare May 5, 2026 19:58
@joshualitt joshualitt requested a review from SandyTao520 May 5, 2026 19:58
@joshualitt joshualitt marked this pull request as ready for review May 5, 2026 19:59
@joshualitt joshualitt requested a review from a team as a code owner May 5, 2026 19:59
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a chat corruption issue by refactoring how the ContextManager synchronizes pristine history. By introducing a more robust synchronization mechanism, the system can now better maintain the integrity of the context buffer when dealing with mutated or summarized nodes. Additionally, it improves the rendering pipeline by filtering out preview nodes and refining the detection of legacy environment headers.

Highlights

  • Context Synchronization: Replaced the previous append-only logic with a robust syncPristineHistory method to ensure authoritative pristine nodes and working nodes remain chronologically consistent.
  • Preview Node Filtering: Introduced previewNodeIds filtering in the rendering pipeline to prevent temporary preview nodes from corrupting the final context sent to the LLM.
  • Legacy Header Detection: Updated the legacy environment header detection to be more robust, allowing it to be identified and skipped regardless of its position in the conversation history.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the context management system by replacing separate pruning and appending operations with a unified syncPristineHistory method in the ContextWorkingBuffer. It also introduces a mechanism to filter out preview nodes during the rendering process and improves the detection of legacy environment headers. A critical issue was identified in the syncPristineHistory logic where system-injected nodes might be unintentionally removed during synchronization because they are not part of the authoritative chat history.

Comment thread packages/core/src/context/pipeline/contextWorkingBuffer.ts Outdated
Copy link
Copy Markdown
Contributor

@SandyTao520 SandyTao520 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice unification of the append/prune logic into a single syncPristineHistory — the chronological re-weave is much easier to reason about than the previous two-step flow, and the multi-root drop semantics look correct. Filtering preview nodes from the rendered Content[] while still letting them participate in budget accounting is a clean fix for the duplicated-message corruption.

A few optional, non-blocking suggestions inline.

Comment thread packages/core/src/context/pipeline/contextWorkingBuffer.ts Outdated
Comment thread packages/core/src/context/pipeline/contextWorkingBuffer.ts Outdated
Comment thread packages/core/src/context/pipeline/contextWorkingBuffer.ts
Comment thread packages/core/src/context/contextManager.ts
Comment thread packages/core/src/context/graph/render.ts Outdated
Comment thread packages/core/src/context/graph/toGraph.ts
Comment thread packages/core/src/context/pipeline/contextWorkingBuffer.test.ts
Copy link
Copy Markdown
Contributor

@SandyTao520 SandyTao520 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Nice unification of the append/prune logic into a single syncPristineHistory — the chronological re-weave is much easier to reason about than the previous two-step flow, and the multi-root drop semantics look correct. Filtering preview nodes from the rendered Content[] while still letting them participate in budget accounting is a clean fix for the duplicated-message corruption.

Thanks for the fix!

@joshualitt joshualitt force-pushed the jl/fix-corruption branch from 3014a42 to d7748b6 Compare May 5, 2026 22:03
@joshualitt joshualitt added this pull request to the merge queue May 5, 2026
@joshualitt joshualitt removed this pull request from the merge queue due to a manual request May 5, 2026
@joshualitt joshualitt added this pull request to the merge queue May 5, 2026
Merged via the queue into main with commit 80d2690 May 5, 2026
46 of 47 checks passed
@joshualitt joshualitt deleted the jl/fix-corruption branch May 5, 2026 23:07
kimjune01 pushed a commit to kimjune01/gemini-cli-claude that referenced this pull request May 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix chat corruption bug with context manager

2 participants