Summary
Two listener cleanup paths in App.tsx still use React-style return cleanup semantics that SolidJS does not execute.
Current evidence (master)
src/App.tsx:194-204 returns a function from createEffect after adding a keydown listener.
src/App.tsx:212-265 returns a function from onMount after adding a resize listener.
In SolidJS, cleanup must be registered via onCleanup(...) inside the reactive scope.
Why this matters
- Re-opening the context/settings panel can accumulate
keydown listeners.
- The
resize listener may survive component disposal.
CodeRabbit references
Acceptance criteria
- Replace returned cleanup functions with
onCleanup(...) in both locations.
- Ensure only one active
keydown handler exists while panel is open.
- Ensure
resize handler is removed when component unmounts.
Summary
Two listener cleanup paths in
App.tsxstill use React-style return cleanup semantics that SolidJS does not execute.Current evidence (master)
src/App.tsx:194-204returns a function fromcreateEffectafter adding akeydownlistener.src/App.tsx:212-265returns a function fromonMountafter adding aresizelistener.In SolidJS, cleanup must be registered via
onCleanup(...)inside the reactive scope.Why this matters
keydownlisteners.resizelistener may survive component disposal.CodeRabbit references
Acceptance criteria
onCleanup(...)in both locations.keydownhandler exists while panel is open.resizehandler is removed when component unmounts.