-
The effect intentionally reloads when the memoized load callback's identity changes (i.e. when filter dropdowns/queryValue change), which is the documented use of useCallback-as-dep. The new React 19 lint rule flags any setState inside an effect as cascading-render risk. Adding a directed disable with rationale instead of refactoring, since the current behavior is intended UX (live filter response).
-
Initial frontend setup: Vite + React 19 + TypeScript, ESLint, Redux store (auth, tabs), React Router with RequireAuth guard, AppShell layout, TopBar/NavOverlay components, plus first-pass pages (Login, Dashboard, UserList, UserDetail) and API layer (request/types/usr) wired to the user backend module. Establishes the frontend foundation so future module loops can add their own pages under frontend/src/pages/<module>/ per docs/08 path convention.