fix(ui): resolve toast icon inside the toast component#34874
Merged
Conversation
showToastV2 resolved its icon with children() at call time, creating an ownerless computation per toast that Solid can never dispose. Callers outside a reactive root (event handlers, promise callbacks) leaked one tracking computation per toast and spammed 'computations created outside a createRoot' warnings in development. Resolve the icon inside the toast component so the computation is owned by the toast and disposed with it.
Contributor
There was a problem hiding this comment.
Pull request overview
This PR fixes a SolidJS lifecycle leak in showToastV2 by ensuring the toast icon is resolved within the toast’s render-owned reactive context (instead of at call time), preventing ownerless computations that can’t be disposed.
Changes:
- Move
children(() => opts.icon)into thetoaster.showrender callback so the computation is owned/disposed with the toast. - Add a browser test that guards against eager icon resolution (and the associated ownerless reactive tracking) at
showToastV2call time.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| packages/ui/src/v2/components/toast-v2.tsx | Defers icon resolution to the toast render owner by moving children() inside the toaster.show callback. |
| packages/app/test-browser/toast-owner.test.ts | Adds coverage to ensure showToastV2 does not resolve the icon (and thus doesn’t create ownerless reactive work) at call time. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Wiktor102
pushed a commit
to Wiktor102/opencode
that referenced
this pull request
Jul 5, 2026
github-actions Bot
added a commit
to wallentx/opencode-termux
that referenced
this pull request
Jul 6, 2026
* ci: Add Android build and publish workflow with APK artifact upload Signed-off-by: wallentx <william.allentx@gmail.com> * ci: Allow publish workflow to run with android_only input Signed-off-by: wallentx <william.allentx@gmail.com> * ci: Use github.token instead of committer output in publish workflow Signed-off-by: wallentx <william.allentx@gmail.com> * feat: Add aarch64-linux-android target to sidecar binaries Signed-off-by: wallentx <william.allentx@gmail.com> * ci: Simplify publish workflow and fix Android build conditions Signed-off-by: wallentx <william.allentx@gmail.com> * feat: Refactor app initialization and add WSL path conversion Signed-off-by: wallentx <william.allentx@gmail.com> * ci: Fix Android-only workflow condition and update dependencies Signed-off-by: wallentx <william.allentx@gmail.com> * sync release versions for v1.17.13 * chore: bump gitlab-ai-provider to 6.10.0 (anomalyco#34756) * chore: update nix node_modules hashes * feat(stats): redesign lab hero * feat(stats): add lab overview * feat(stats): redesign lab usage * feat(data): another redesigned lab section * feat(stats): use catalog descriptions * chore: generate * fix(stats): refine lab page tooltips * fix(stats): include locale header in vary (anomalyco#34789) * zen: new inference * fix(desktop): keep window tabs across app close (anomalyco#34807) * fix(app): stabilize session timeline layout continuity (anomalyco#34533) * feat(desktop): refine session tab preview popover (anomalyco#34792) * fix(ui): raise v2 tooltip layer (anomalyco#34455) Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> * chore: update nix node_modules hashes * fix(opencode): update Cerebras SDK reasoning replay (anomalyco#34826) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> * chore: update nix node_modules hashes * fix(app): resolve target session lineage outside router transition (anomalyco#34838) * chore: generate * fix(opencode): filter session list by resolved instance directory (anomalyco#34842) * fix(app): only allow \(...\) syntax for inline latex (anomalyco#34850) * test(opencode): cover Windows session list directory spellings (anomalyco#34857) * fix(app): scope session tab indicators to the tab's server (anomalyco#34861) * chore: generate * fix(app): clear original prompt after retarget (anomalyco#34863) * fix(app): seed session status before warming session info (anomalyco#34864) * feat(app): v2 review panel overhaul (anomalyco#31882) Co-authored-by: LukeParkerDev <10430890+Hona@users.noreply.github.com> * fix(app): keep terminal mounted when switching session tabs in a workspace (anomalyco#34852) Co-authored-by: Brendan Allan <git@brendonovich.dev> * fix(ui): resolve toast icon inside the toast component (anomalyco#34874) * fix(copilot): honor advertised model endpoints (anomalyco#34958) * fix(stats): polish lab pages * feat(stats): redesign model hero * chore: generate * feat(tui): add debug info dialog with copy to clipboard (anomalyco#35004) * zen: new inference * zen: new inference * feat(app): navigate tabs on mousedown in new layout (anomalyco#35042) * zen: new inference * zen: new inference * fix(app): keep v2 review pane mounted across session tab switches (anomalyco#35074) * feat: experimental codemode (anomalyco#34677) * chore: generate * fix(ci): setup Node 24 before bun install for node-gyp (anomalyco#35076) * revert: back out experimental codemode (anomalyco#35077) * feat(codemode): add confined execution package (anomalyco#35079) * chore: generate * chore: update nix node_modules hashes * chore: remove root node-gyp pin after Node 24 setup (anomalyco#35092) * feat(desktop): add recently closed projects to home (anomalyco#34926) * feat(app): align subagent UI with v2 (anomalyco#34931) Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> * chore: generate * feat(desktop): papercut fixes (anomalyco#34939) * refactor(opencode): expose MCP tools in native shape from the service (anomalyco#35103) * feat(app): improvements to model search (anomalyco#34954) * chore: generate * feat(opencode): add code-mode MCP adapter (anomalyco#35085) * chore: generate * chore: update nix node_modules hashes * feat(app): dropdown search fix (anomalyco#34961) Co-authored-by: Brendan Allan <git@brendonovich.dev> * fix(opencode): provide Observability beneath all route service graphs (anomalyco#35171) * chore: upgrade turbo (anomalyco#35173) * feat(stats): add model momentum section * chore: generate * fix(core): rewrite replacements while hoisting layers (anomalyco#35175) * fix(stats): link market share labs * chore: artifacts * chore: generate * feat(tui): render code-mode execute tool with child calls (anomalyco#35113) * refactor(opencode): fail the execute tool on program failure (anomalyco#35180) * fix(tui): align execute child calls with task indentation (anomalyco#35190) * refactor(core): move path resolve into fs service (anomalyco#35202) * feat(opencode): gate execute tool behind code mode flag (anomalyco#35185) * chore: generate * cleanup: tweak compaction prompt (anomalyco#35220) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> * fix(app): restore unfocused composer typing (anomalyco#35249) * fix(app): delay initial tab preview (anomalyco#35266) Co-authored-by: Jay <53023+jayair@users.noreply.github.com> * fix(desktop): stabilize esm shim injection (anomalyco#35270) * fix(app): match new session panel corners (anomalyco#35257) * tui: preserve spinner registration (anomalyco#35292) * feat: Add aarch64-linux-android target to sidecar binaries Signed-off-by: wallentx <william.allentx@gmail.com> * chore(ci): Improve workflow portability and add Android build support Signed-off-by: wallentx <william.allentx@gmail.com> * feat(ci): Add Android artifact build workflow and guidance Signed-off-by: wallentx <william.allentx@gmail.com> * fix(opencode): use NDK sysroot for Android artifact build * fix(opencode): pass Android NDK libc paths to Zig * fix(opencode): patch OpenTUI Android system libs * fix(opencode): rely on NDK libc config for Android * fix(opencode): resolve Android OpenTUI loader relatively * chore(ci): add Android Bun compile smoke target * fix(opencode): relocate Android Bun payload pointer * chore(ci): build Android Bun runtime from source * fix(ci): install LLVM for Android Bun source build * fix(ci): bootstrap LLVM 21 for Android Bun build * fix(ci): keep Bun Android build inside source tree * fix(ci): link Android NDK runtimes for Bun build * fix(ci): use Android strip for Bun runtime build * chore(termux): add release mirror workflows * chore(termux): align app token variables * chore(termux): use app client id input * chore(termux): fall back to github token * chore(termux): prepare v1.17.13 --------- Signed-off-by: wallentx <william.allentx@gmail.com> Co-authored-by: wallentx <william.allentx@gmail.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: James Long <longster@gmail.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.
Problem
showToastV2resolves its icon with Solid'schildren()helper at call time.children()creates a memo, andshowToastV2is typically called outside any reactive root (event handlers, promise callbacks), so every toast leaks one ownerless computation that Solid can never dispose and that keeps tracking its dependencies forever.In development this also spams the console:
We hit this at scale via error toasts fired from async file-listing failures (~2 warnings per toast, hundreds per page load in the failing scenario).
Fix
Move the
children()call inside thetoaster.showrender component, so the computation is owned by the toast and disposed when the toast unmounts.Test
packages/app/test-browser/toast-owner.test.tsasserts the icon is not resolved at call time and that no ownerless computation keeps re-running on signal updates. Fails before the fix (icon resolved eagerly), passes after.