Skip to content

test: warden react best practices review #33

test: warden react best practices review

test: warden react best practices review #33

Triggered via pull request February 8, 2026 19:13
Status Failure
Total duration 1m 58s
Artifacts

warden.yml

on: pull_request
Fit to window
Zoom out
Zoom in

Annotations

4 errors and 12 warnings
Event listener leak: missing cleanup: web/src/components/Sidebar.tsx#L105
Window resize listener is never removed, creating a memory leak. Add cleanup function to useEffect.
Missing event listener cleanup causes memory leak: web/src/components/Sidebar.tsx#L105
The resize event listener is added but never removed (lines 105-111). Add cleanup to prevent memory leaks.
review
Process completed with exit code 1.
review
react-best-practices: Found 1 high+ severity issues; code-simplifier: Found 1 high+ severity issues
Unnecessary effect for deriving workspace count: web/src/components/Sidebar.tsx#L49
workspaceCount is derived from workspaces.length and should be calculated during render, not in useEffect. Use `const workspaceCount = workspaces?.length || 0` directly instead of state + effect.
Missing dependencies in useCallback: web/src/components/Sidebar.tsx#L88
handleNavigate depends on navigate, isOpen, and onToggle but only declares empty deps, causing stale closures.
Unnecessary effect for derived state (workspaceCount): web/src/components/Sidebar.tsx#L49
workspaceCount can be derived directly from workspaces?.length during render instead of using useEffect with setState, avoiding unnecessary re-renders.
Missing dependencies in handleNavigate callback: web/src/components/Sidebar.tsx#L88
handleNavigate useCallback is missing navigate and onToggle dependencies, which can cause stale closures. Add them or remove useCallback.
Event listener not cleaned up in effect: web/src/components/Sidebar.tsx#L105
The resize event listener is added but never removed, causing memory leaks. Add a cleanup function to remove the listener.
Redundant state: workspaceCount is never used: web/src/components/Sidebar.tsx#L35
The workspaceCount state is set but never read. Remove the state and effect (lines 35, 49-51) to eliminate unnecessary complexity.
Redundant state: sidebarWidth is never used: web/src/components/Sidebar.tsx#L36
The sidebarWidth state is set but never read. Remove the state and effects (lines 36, 54-59, 105-111) to eliminate unnecessary complexity.
Remove debug console.log from production code: web/src/components/Sidebar.tsx#L61
Debug logging on every render (lines 62-64) should be removed to reduce unnecessary complexity and improve performance.
useCallback missing dependency array values: web/src/components/Sidebar.tsx#L88
handleNavigate (lines 88-91) uses navigate, isOpen, and onToggle but doesn't list them in dependencies. This creates stale closures.
Using array index as React key is an anti-pattern: web/src/components/Sidebar.tsx#L161
Changed from `key={ws.name}` to `key={index}`. Using index as key can cause rendering issues and breaks React's reconciliation.
useCallback missing required dependencies: web/src/components/Sidebar.tsx#L88
handleNavigate callback at line 88 is missing `navigate` and `onToggle` in dependency array, causing stale closure bugs.
review
Failed to update skill check for security-review: HttpError: Server Error