• 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).
    zichun authored
     
    Browse Code »
  • 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.
    zichun authored
     
    Browse Code »