Conversation
Simplify cn utility to use clsx only, fix tailwindcss import with
source("."), and gitignore meta.json.
Made-with: Cursor
Rename "Cursor Cloud specific instructions" to "Development instructions" and remove outdated "Known flaky test" section. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Upgrade solid-js, @solidjs/web, babel-preset-solid to 2.0.0-beta.3
- Split all createEffect calls into (compute, apply) form
- Replace onMount with onSettled (return cleanup)
- Replace Index with For keyed={false}
- Replace classList with class array/object form
- Replace produce/path-style setStore with draft-first and storePath
- Replace createResource with createSignal + createEffect
- Remove batch (automatic in 2.0), on helper, solid-js/store, solid-js/web
- Add stale-request guards for async createResource replacements
- Add defer: true to 5 effects that require deferred initial execution
- Fix aria-pressed/aria-expanded to use string literals
- Fix readOnly to lowercase readonly
The createResource→createEffect migration left promise chains without .catch() handlers, risking unhandled rejections for contextMenuComponentName and contextMenuFilePath. Made-with: Cursor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
@react-grab/cli
grab
@react-grab/amp
@react-grab/claude-code
@react-grab/codex
@react-grab/copilot
@react-grab/cursor
@react-grab/droid
@react-grab/gemini
@react-grab/opencode
react-grab
@react-grab/relay
@react-grab/utils
commit: |
The design-system bundles react-grab/src via noExternal, so it needs matching Solid 2.0 dependencies to avoid babel-preset-solid 1.x generating "solid-js/web" imports (removed in 2.0). - Upgrade solid-js, @solidjs/web, babel-preset-solid to 2.0.0-beta.3 - Add @solidjs/web to noExternal in tsup config - Replace solid-js/web import with @solidjs/web - Replace onMount with onSettled (return cleanup) - Unwrap For callback accessors (Solid 2.0 always passes Accessor<T>) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
1 issue found across 21 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/react-grab/src/components/selection-label/index.tsx">
<violation number="1" location="packages/react-grab/src/components/selection-label/index.tsx:190">
P2: Returning a function from `createEffect` does not register a cleanup handler in SolidJS (unlike React's `useEffect`). The returned function simply becomes the `prev` argument for the next execution. You must use `onCleanup` to properly clear the timeout (you will also need to re-import it).</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| autoResizeTextarea(inputRef, TEXTAREA_MAX_HEIGHT_PX); | ||
| } | ||
| }, 0); | ||
| return () => clearTimeout(focusTimeout); |
There was a problem hiding this comment.
P2: Returning a function from createEffect does not register a cleanup handler in SolidJS (unlike React's useEffect). The returned function simply becomes the prev argument for the next execution. You must use onCleanup to properly clear the timeout (you will also need to re-import it).
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/react-grab/src/components/selection-label/index.tsx, line 190:
<comment>Returning a function from `createEffect` does not register a cleanup handler in SolidJS (unlike React's `useEffect`). The returned function simply becomes the `prev` argument for the next execution. You must use `onCleanup` to properly clear the timeout (you will also need to re-import it).</comment>
<file context>
@@ -157,36 +155,42 @@ export const SelectionLabel: Component<SelectionLabelProps> = (props) => {
+ autoResizeTextarea(inputRef, TEXTAREA_MAX_HEIGHT_PX);
+ }
+ }, 0);
+ return () => clearTimeout(focusTimeout);
+ }
+ },
</file context>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
| setStore( | ||
| storePath("labelInstances", index, "errorMessage", errorMessage), | ||
| ); | ||
| } |
There was a problem hiding this comment.
Non-atomic store update splits single produce into two calls
Low Severity
The updateLabelInstance method was refactored from a single atomic produce call (updating both status and errorMessage together) into two separate setStore(storePath(...)) calls. If Solid 2.0's auto-batching doesn't cover this synchronous sequence, effects could observe an intermediate state where status is updated but errorMessage is not yet set, potentially causing brief UI inconsistencies.
| viewportChangeFrameId = null; | ||
| } | ||
| }, | ||
| ); |
There was a problem hiding this comment.
Bounds recalc interval missing cleanup return from effect
Low Severity
The bounds recalc interval createEffect creates a setInterval when shouldRunInterval is true but does not return a cleanup function from the apply callback. The interval is only cleaned up manually when shouldRunInterval becomes false, or via a separate onCleanup. If Solid 2.0's effect disposal runs the apply's returned cleanup before the separate onCleanup, the interval could briefly leak during cleanup ordering edge cases.
| autoResizeTextarea(inputRef, TEXTAREA_MAX_HEIGHT_PX); | ||
| } | ||
| }, 0); | ||
| return () => clearTimeout(focusTimeout); |
| (previousIndex) => (previousIndex + 1) % SELECTION_HINT_COUNT, | ||
| ); | ||
| }, SELECTION_HINT_CYCLE_INTERVAL_MS); | ||
| return () => clearInterval(intervalId); |
| } | ||
| actions.activate(); | ||
| }, store.keyHoldDuration); | ||
| return () => clearHoldTimer(); |


Summary
createEffectsplit form,onSettled,For keyed={false}, class arrays, draft-firstsetStore,storePathcreateResourcewithcreateSignal+createEffect(with stale-request guards and.catch()handlers)batch,on,solid-js/store,solid-js/webTest plan
pnpm typecheckpassespnpm buildsucceedspnpm test)🤖 Generated with Claude Code
Note
Medium Risk
Large framework upgrade to
solid-js@2.0.0-beta.3with widespread lifecycle/reactivity and store-update refactors across interactive UI components, which may introduce subtle rendering/timing regressions. No auth/security or persistent data changes, but runtime behavior and cleanup semantics change broadly.Overview
Upgrades
react-grabanddesign-systemto Solid 2.0 beta by bumpingsolid-js, adding@solidjs/web, and updatingbabel-preset-solid; build configs now keep@solidjs/webnon-external intsup.Refactors Solid usage across components/core to Solid 2 APIs:
renderimports switch to@solidjs/web,onMount/onCleanuppatterns are replaced withonSettledreturning cleanups,createEffectis migrated to the new split signature, and list rendering is updated (e.g.,IndextoForwithkeyed={false}and accessor-based item reads).Reworks state management and async derivations for Solid 2: store updates move to draft-first
setStore/storePath(removingproduceusage), andcreateResourcecallsites are replaced withcreateSignal+createEffectincluding stale-request guards and error handling. Minor JSX/a11y tweaks includereadonlycasing andaria-pressed/aria-expandedstring values.Written by Cursor Bugbot for commit b631052. This will update automatically on new commits. Configure here.
Summary by cubic
Migrate
react-grabanddesign-systemto Solid 2.0 beta to modernize APIs, align builds, and prevent unhandled promise rejections.Refactors
createEffect(compute/apply), replaceonMountwithonSettled(return cleanup), switchIndex→For(keyed={false}), use class arrays/objects, and adopt draft-firstsetStorewithstorePath; removedbatch,on,solid-js/store, andsolid-js/web(now using@solidjs/webforrender).createResourcewithcreateSignal+createEffect, adding stale-request guards and.catch()to avoid unhandled rejections.aria-pressed/aria-expandeduse string values; correctedreadonlycasing.@solidjs/webtotsupnoExternalinreact-grabanddesign-system.Dependencies
solid-jsto2.0.0-beta.3and added@solidjs/web@2.0.0-beta.3in both packages.babel-preset-solidto2.0.0-beta.3.Written for commit b631052. Summary will update on new commits.