Skip to content

perf: reduce chat rendering overhead with compositor-driven Draw - #340995

Merged
Justin Chen (justschen) merged 6 commits into
mainfrom
agents/chat-rendering-performance
Oct 14, 2026
Merged

Justin Chen (justschen) merged 6 commits into
mainfrom
agents/chat-rendering-performance

Conversation

@justschen

@justschen Justin Chen (justschen) commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Reduce redundant rendering and component-lifetime retention when several chat sessions are active. Related to #340236, but this is not a claim that the full reported layout regression is resolved.

  • Move Draw from per-frame SVG path updates to Atlas 120: 320 sampled poses over the unchanged 2,667 ms cycle, played by native stepped compositor transforms. Generate padded atlases at the actual icon size, device pixel ratio, and resolved theme color; share in-flight generation and resources through a per-window cache with a 16 MiB decoded-source-pixel budget.
  • Preserve visibility, activity, reduced-motion, no-icon, and disposal behavior. Cancel obsolete requests on theme/DPR changes and release the cache when its last owner leaves. Keep assembled SVG artwork for static states and a 60 FPS SVG fallback during preparation or on explicitly logged atlas failures.
  • Fix the rounded left ribbon tips being clipped at the transition from the held logo to the animated masks. The canonical face artwork and animation duration remain unchanged.
  • Retain the existing visibility-aware 30 FPS managed-shimmer behavior across progress, thinking, tools, subagents, transcript loading, and Agents-window session titles. The atlas update makes no further shimmer changes; Draw no longer uses that clock.
  • Rotate static input-border gradients behind fixed masks instead of animating the gradient angle. Clip the decorative masks so their oversized gradients do not enlarge ancestor scroll bounds.
  • Coalesce identical pet sprite frames while preserving the original poses and 800/1,200 ms holds; synchronize eyes with the body, cache unchanged gaze/accessory updates, suspend invisible surfaces, and use translation during dragging to avoid synchronous layout.
  • Release removed toolbar dropdown references and visibility subscriptions; propagate context only to current action views.
  • Reuse unchanged thinking-title markdown DOM, including correct invalidation for mutable markdown options/metadata and expansion changes.
  • Skip persistent-footer row-height measurements when an update leaves the rendered progress unchanged.

Adds/extends regression coverage for these rendering and ownership paths. No dependency manifests, new settings, persistent-progress configuration defaults, pet sprite assets, or screenshot baseline hashes change. The pixel spinner is unchanged. Atlas 120 is a source sampling density, not a forced 120 Hz JavaScript loop or a guarantee that every display presents 120 frames/s.

Performance evidence

Production Draw atlas

The native production-component probe verified five shared-atlas widgets, accelerated transform layers, and zero steady-state renderer Layout, UpdateLayoutTree, Paint, or FireAnimationFrame events. A separate real Code OSS workbench smoke run used five independently connected local mock requests: all five displayed the production atlas, shared one resource, advanced their native timelines, and removed their playback surfaces when the editors closed.

A matched production-source 60/120 comparison on an M2 Pro used five visible 12 CSS-pixel logos at DPR 2, six counterbalanced samples per option and six static controls. Only the frame-count constant was changed in the isolated 60 Hz candidate; the product remains at 120. Each primary measurement followed atlas readiness, GC, and three seconds of warmup, then measured 5.334 seconds without tracing or per-frame polling.

Metric, median of six samples Atlas 120 (selected) Atlas 60 candidate
Renderer main-thread task time 2.18 ms/s 0.89 ms/s
GPU-process CPU time 61.66 ms/s 46.44 ms/s
Background atlas readiness after component startup 447 ms 208 ms
Shared decoded source atlas at the tested size 1,003,520 bytes 501,760 bytes

The 60 candidate saved about 1.28 renderer ms/s and 24.7% of GPU-process CPU time in this isolated comparison. Both had zero steady-state layout/paint/RAF events, and their native held-pose screenshots were byte-identical. We retain 120 to preserve more motion detail on higher-refresh displays; the compositor presents at its available cadence rather than forcing 120 redraws on a 60 Hz screen.

These are component measurements, not whole-app CPU, hardware GPU utilization, battery savings, or a fresh final-branch-versus-main workbench benchmark. Earlier production batches had higher/noisier absolute renderer totals; compare within matched batches rather than combining their numbers. Other workbench animations can also keep the compositor active. The cache budget accounts for decoded source pixels, not total GPU/process memory; temporary canvases, encoded images, and per-layer overhead are additional. Background preparation is not chat response latency, and SVG fallback remains animated while it runs.

Earlier workbench and component measurements

The following measurements predate the atlas integration. They describe the earlier animation/pet improvements, not a newly measured aggregate percentage for the final PR. Values are renderer main-thread task milliseconds per wall-clock second on an M2 Pro.

Workload Before After
Five visible chats waiting (~75 Hz original cadence) 267.4 ms/s 194.0 ms/s
Five visible chats, moderate streaming 428.3 ms/s 387.3 ms/s
Idle pet 8.39 ms/s 2.50 ms/s
Working pet 8.97 ms/s 4.26 ms/s
Pet clipped outside its viewport 8.83 ms/s 0.11 ms/s

These are three-sample diagnostic comparisons of actual component/rendering paths, not release-level statistical claims. Additional checks:

  • 305 toolbar overflow cycles and full GC: 307 -> 1 retained dropdown objects.
  • 300 identical thinking-title updates: 300 -> 1 markdown renders; a genuinely changed title still renders.
  • Native pet dragging: 288 -> 0 layouts inside steady-state pointer handlers. Total drag CPU timing was noisy, so no general CPU improvement is claimed.
  • Eight-file tool scenario: 16 -> 0 redundant progress-triggered height measurements. A counterbalanced three-sample-per-condition comparison found no significant total request-layout-duration improvement (37.67 -> 37.06 ms; p=0.54).

The original multi-second GC stalls and all possible application DOM retention remain unproven. In one retained CI text-only pair from #340236, roughly 67% of the extra layout duration occurred before the request started; these response-rendering changes cannot explain or fix the whole issue. No CI metric changes or speculative startup/layout rewrites are included.

Validation

Atlas 120 update

The following checks passed with Node 24.18.0. Client compilation and scoped hygiene were rerun for publication; successful typecheck, test, and live-rendering evidence was reused for unchanged inputs.

  • npm exec --yes --package=node@24.18.0 -- npm run build-fast -- --client-only — passed.
  • npm exec --yes --package=node@24.18.0 -- npm run typecheck-client — passed.
  • npm exec --yes --package=node@24.18.0 -- bash scripts/test.sh --run src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogoAtlas.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogo.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatListRenderer.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatContentParts/chatToolProgressPart.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatContentParts/chatThinkingContentPart.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatProgressAnimation.test.ts --reporter dot — 1,011 passed, 1 pre-existing pending.
  • npm exec --yes --package=node@24.18.0 -- node test/unit/browser/index.js --browser chromium --browser webkit --run src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogoAtlas.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogo.test.ts --reporter dot — 29 passed in each browser.
  • npm exec --yes --package=node@24.18.0 -- npm run eslint -- src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogo.ts src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogoAtlas.ts src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogoDraw.ts src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogo.test.ts src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogoAtlas.test.ts — passed.
  • npm exec --yes --package=node@24.18.0 -- npm run stylelint -- src/vs/workbench/contrib/chat/browser/widget/media/chatWorkingLogo.css — passed.
  • npm exec --yes --package=node@24.18.0 -- npm run precommit -- src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogo.ts src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogoAtlas.ts src/vs/workbench/contrib/chat/browser/widget/chatWorkingLogoDraw.ts src/vs/workbench/contrib/chat/browser/widget/media/chatWorkingLogo.css src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogo.test.ts src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogoAtlas.test.ts src/vs/workbench/contrib/chat/test/browser/widget/__snapshots__/ChatWorkingLogo_Draw_mask_geometry_preserves_moving_caps_and_fully_revealed_bands.0.snap — passed; six eligible files checked from seven requested paths.
  • Normal signed-commit pre-commit hygiene — passed.

Atlas coverage includes resource sharing and bounds, pending-generation cancellation, late-result disposal, failed-request retry, source-frame fidelity and padding, hidden/remount behavior, reduced motion, theme/DPR replacement, no-icon/inactive states, and logged SVG fallback. Native component probes and the real five-chat workbench smoke also passed.

October 13 merge and feedback validation

Merged main at 68343b4619b in signed merge commit 49f739bef80, preserving both sides of the toolbar and pet test conflicts. Fixed the selected review comment: the border regression test is a sibling of the gutter test, rather than being registered inside it.

  • npm exec --yes --package=node@24.18.0 -- bash scripts/test.sh --run src/vs/workbench/contrib/chat/test/browser/widget/input/chatInputPart.test.ts --grep '^ChatInputPart working borders rotate fixed gradients inside masks at any input aspect ratio$' --reporter spec — 1 independently discovered test passed.
  • npm exec --yes --package=node@24.18.0 -- bash scripts/test.sh --run src/vs/base/test/browser/ui/toolbar/toolbar.test.ts --run src/vs/base/test/browser/animationSync.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatPetWidget.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatProgressAnimation.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogo.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/input/chatInputPart.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatContentParts/chatThinkingContentPart.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatContentParts/chatToolProgressPart.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatListRenderer.test.ts --run src/vs/sessions/contrib/sessions/test/browser/sessionsList.test.ts --reporter dot — 1,374 passed, 2 existing pending.
  • Client build/typecheck, changed-file ESLint, merge-commit signing, and pre-commit hygiene passed at that revision.

Cross-browser and inline-chat CI follow-up

Commits eafb7800b7b and f0d27923970 fixed the failures found after the merge:

  • Account for 1/64 CSS-pixel layout quantization and computed-style serialization in the border-size test, add fractional dimensions, and wait for the browser test runner's asynchronous stylesheet imports.
  • Fix a real screenshot regression rather than accept its baseline: the large rotating gradient leaked into ancestor scroll bounds even when masked/transparent, causing focus to shift the inline-chat composer upward. overflow: clip on the decorative mask removes that overflow without clipping the input itself. Tests cover active/idle and compact/non-compact inputs.
  • Preserve the new upstream attachment-session test while merging main at b0e941623ad.

Validation at that revision:

  • npm exec --yes --package=node@24.18.0 -- npm run test-browser-no-install -- --browser chromium --browser webkit --run src/vs/workbench/contrib/chat/test/browser/widget/input/chatInputPart.test.ts --reporter dot — 4 passed in each browser.
  • npm exec --yes --package=node@24.18.0 -- bash scripts/test.sh --run src/vs/workbench/contrib/chat/test/browser/widget/input/chatInputPart.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatListRenderer.test.ts --reporter dot — 803 passed, 1 existing pending.
  • Client build/typecheck, changed-file ESLint, CSS stylelint, and Light/Dark inline-chat fixture checks passed. No screenshot baseline hashes were changed.

On f0d27923970, GitHub CI passed Screenshots & Tests, Screenshots, Playwright Fixture Tests, macOS Browser, Linux Browser, all Electron-Unit platforms, and Compile & Hygiene. Separate Linux smoke failures involved a timeout and a settings-editor click; they were not addressed through unrelated source changes. These historical results are not a claim that CI for the new atlas commit has passed.

Not run for the atlas update: Windows/Linux live rendering or hardware-power/battery measurements, a complete post-patch production comparison of all eight regressed scenarios, or a matched reproduction of the original long user workload/GC stalls. Universal native OS-hide/minimize suspension is not claimed: production uses document/intersection and widget lifecycle signals, and the isolated Electron hide/minimize probe did not always report a hidden document. The component-explorer service was unavailable for the atlas follow-up; native production-component and real-workbench checks provided the live evidence instead. Performance scripts, traces, heap snapshots, and videos remain local investigation artifacts, not product files.

Manual testing

  1. Run five concurrent sessions; type, scroll, switch sessions, and resize while waiting, streaming, and using tools.
  2. Inspect Draw at normal size on ordinary- and high-refresh displays. Check that the rounded left tips remain consistent at the held-to-moving transition and that the cycle does not change speed.
  3. Change theme/custom progress colors, zoom, and monitor/DPR while requests run. Check correct colors and sharp edges, without stale atlases, neighboring-frame bleed, or a changed icon footprint.
  4. Scroll running indicators offscreen, switch sessions, hide/reopen Chat, then cancel/complete/restart requests. Check Draw and the unchanged shimmer resume and stop correctly.
  5. Toggle reduced motion during a request and exercise monochrome/no-icon modes. Reduced motion should show the assembled static logo; no-icon mode should not allocate an atlas.
  6. Inspect the input border in narrow/wide layouts and Light/Dark/High Contrast, including inline chat gaining focus without shifting its composer.
  7. Exercise pet idle/working transitions, gaze/accessories, dragging/throwing near edges, zoom/resize, and hidden disable/re-enable.
  8. Expand/collapse thinking during updates; verify real title changes, formatting, links, and focus remain correct.
  9. Resize toolbars into/out of overflow repeatedly, then open submenus and invoke actions after changing the selected item/session. Smoke-test a non-Chat toolbar too.

Draft status

Remains a draft. The branch contains the merge-conflict, test-discovery, screenshot/browser, rounded-tail, and Atlas 120 fixes without rewriting history. Local validation passed; GitHub CI for the updated head and broader cross-platform/performance review must complete before marking it ready for review.

Share a visibility-aware 30 FPS Draw/shimmer clock and use transform-based input borders. Avoid redundant pet sprite and gaze updates, eliminate drag-induced layouts, release removed toolbar dropdowns, reuse unchanged thinking titles, and skip no-op progress height measurements.

Related to #340236; this does not claim to resolve the full layout regression.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 12, 2026 06:39
@justschen Justin Chen (justschen) changed the title chat: reduce animation, pet, and progress rendering overhead perf: reduce animation, pet, and progress rendering overhead Oct 12, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The new input-border regression test is nested inside another test and is not reliably discovered or executed.

1 open finding
What changed in this PR

Reduces chat UI rendering, animation, and object-retention overhead across the workbench and Agents window.

Changes:

  • Adds a shared visibility-aware 30 FPS progress-animation clock.
  • Optimizes pet rendering, dragging, thinking titles, progress measurements, and toolbar cleanup.
  • Expands regression coverage for the optimized paths.
File Description
src/​vs/​base/​browser/​animationSync.ts Adds visibility callbacks and safer synchronization.
src/​vs/​base/​browser/​ui/​toolbar/​toolbar.ts Releases removed dropdown references and listeners.
src/​vs/​base/​test/​browser/​animationSync.test.ts Tests visibility and paused-animation handling.
src/​vs/​base/​test/​browser/​ui/​toolbar/​toolbar.test.ts Tests dropdown cleanup and context propagation.
build/​lib/​stylelint/​vscode-known-variables.json Updates recognized chat CSS variables.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatProgressAnimation.ts Implements the shared animation clock.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatWorkingLogo.ts Budgets Draw rendering to 30 FPS.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatWidget.ts Manages transcript shimmer animation.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatPetWidget.ts Optimizes pet frames, visibility, gaze, and dragging.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatListRenderer.ts Avoids unchanged footer measurements.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​input/​chatInputPart.ts Adds visibility-aware border animation elements.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatContentParts/​chatProgressContentPart.ts Manages shimmer and reports rendered changes.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatContentParts/​chatThinkingStyleContentPart.ts Manages thinking-title and spinner animations.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatContentParts/​chatThinkingContentPart.ts Reuses unchanged rendered titles.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatContentParts/​chatSubagentContentPart.ts Cleans up managed spinner animation.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatContentParts/​chatToolInputOutputContentPart.ts Manages collapsible tool-title shimmer.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​media/​chat.css Uses compositor border rotation and managed shimmer.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​media/​chatPet.css Supports translated dragging and paused pet animation.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatContentParts/​media/​chatThinkingContent.css Styles managed thinking shimmer.
src/​vs/​workbench/​contrib/​chat/​browser/​widget/​chatContentParts/​media/​chatConfirmationWidget.css Styles managed confirmation shimmer.
src/​vs/​workbench/​contrib/​chat/​test/​browser/​widget/​chatProgressAnimation.test.ts Tests clock sharing and cancellation.
src/​vs/​workbench/​contrib/​chat/​test/​browser/​widget/​chatWorkingLogo.test.ts Tests Draw frame budgeting.
src/​vs/​workbench/​contrib/​chat/​test/​browser/​widget/​chatPetWidget.test.ts Tests pet rendering and lifecycle optimizations.
src/​vs/​workbench/​contrib/​chat/​test/​browser/​widget/​chatListRenderer.test.ts Tests footer and title reuse.
src/​vs/​workbench/​contrib/​chat/​test/​browser/​widget/​input/​chatInputPart.test.ts Tests input-border geometry and animation.
src/​vs/​workbench/​contrib/​chat/​test/​browser/​widget/​chatContentParts/​chatToolProgressPart.test.ts Tests shimmer synchronization and visibility.
src/​vs/​workbench/​contrib/​chat/​test/​browser/​widget/​chatContentParts/​chatThinkingContentPart.test.ts Tests title-render caching and invalidation.
src/​vs/​sessions/​contrib/​sessions/​browser/​views/​sessionsList.ts Shares the progress clock for session titles.
src/​vs/​sessions/​contrib/​sessions/​browser/​media/​sessionsList.css Adds managed and reduced-motion title styling.
src/​vs/​sessions/​contrib/​sessions/​test/​browser/​sessionsList.test.ts Tests session-title animation behavior.

🧠 Review effort: Balanced


💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Merge main while retaining the toolbar lifecycle and pet optimization regressions alongside upstream coverage. Register the input-border regression test at suite scope so it is discovered without running the preceding gutter test.

Validated the exact border test independently, all ten affected test files (1374 passing, two existing pending), the client build/typecheck, and targeted ESLint.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Screenshot Changes

Base: 95ba2e3c Current: 3281e073

Changed (2)

sessions/chatCompositeBar/MixedStatuses/Light
Before After
before after
chat/widget/chatWidget/PersistentProgress/AnimationStyles/Off/ReducedMotion/Light
Before After
before after

Clip oversized decorative gradients at their mask so they cannot increase ancestor scroll ranges or shift the inline-chat composer on focus. Cover compact and working inputs with an overflow regression test.

Allow the geometry assertion to account for 1/64px browser layout rounding and computed-style serialization, including fractional input dimensions. Verified Chromium, WebKit, Electron, and stable inline-chat fixtures without accepting a regressed screenshot baseline.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Retain the new upstream attachment-session test alongside border geometry and overflow coverage. Wait for the browser runner's asynchronous CSS imports before making geometry assertions.

Validated Chromium and WebKit input tests, 803 Electron input/renderer tests (one existing pending), client typecheck, and targeted lint.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Move steady-state Draw playback from SVG path updates to compositor transforms backed by padded, theme- and DPR-aware shared atlases. Preserve reduced-motion and visibility lifecycles with cancellation, bounded resource ownership, and a logged 60 Hz SVG fallback.

Keep the rounded ribbon tips consistent across the held-to-moving transition and cover atlas fidelity, cache bounds, theme/DPR changes, cancellation, and disposal. Leave existing shimmer behavior unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justschen Justin Chen (justschen) changed the title perf: reduce animation, pet, and progress rendering overhead perf: reduce chat rendering overhead with compositor-driven Draw Oct 14, 2026
Merge main at ffad3bc, preserving both the upstream session-list DOM helpers and the shared-shimmer retry helper. Retain all upstream and branch test coverage without changing the Atlas 120 renderer or existing shimmer behavior.

Validated the merged client build and typecheck, 385 Electron tests (4 pending), 233 Chromium tests, 233 WebKit tests, and resolved-file hygiene.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justschen

Copy link
Copy Markdown
Collaborator Author

October 14 merge-conflict resolution

Merged main at ffad3bce5a8 into this branch in signed merge commit 529117d6a79, without rewriting history.

The only conflict was in the imports in sessionsList.test.ts: upstream added $/append, while this branch added retry. Both are retained, preserving the upstream hover/metadata tests and this PR's shared-shimmer lifecycle test. Atlas 120 and the shared-shimmer implementation are unchanged.

Local validation with Node 24.18.0:

  • npm exec --yes --package=node@24.18.0 -- npm run build-fast -- --client-only — passed.
  • npm exec --yes --package=node@24.18.0 -- npm run typecheck-client — passed.
  • npm exec --yes --package=node@24.18.0 -- bash scripts/test.sh --run src/vs/sessions/contrib/sessions/test/browser/sessionsList.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatWidget.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/input/chatInputPart.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogoAtlas.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatWorkingLogo.test.ts --run src/vs/workbench/contrib/chat/test/browser/widget/chatProgressAnimation.test.ts --reporter dot — 385 passed, 4 pending.
  • npm exec --yes --package=node@24.18.0 -- node test/unit/browser/index.js --browser chromium --browser webkit --run src/vs/sessions/contrib/sessions/test/browser/sessionsList.test.ts --reporter dot — 233 passed in Chromium and 233 in WebKit.
  • npm exec --yes --package=node@24.18.0 -- npm run precommit -- src/vs/sessions/contrib/sessions/test/browser/sessionsList.test.ts — passed.
  • Normal merge-commit hooks — passed; hygiene checked 690 files.
  • Commit signature verified; working tree clean after pushing.

@justschen
Justin Chen (justschen) marked this pull request as ready for review October 14, 2026 19:23
@justschen
Justin Chen (justschen) enabled auto-merge (squash) October 14, 2026 19:23
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.

3 participants