From bb4733fd12ecdbebe36db2599693a7a455eed2a8 Mon Sep 17 00:00:00 2001 From: Tataihono Nikora Date: Thu, 2 Apr 2026 04:17:23 +0000 Subject: [PATCH 1/2] fix(manager): fix lint errors and add no-verify CLAUDE.md rule Remove eslint-disable/enable comments referencing undefined rules (react-hooks/set-state-in-effect, @next/next/no-img-element) and fix blank lines left behind. Add CLAUDE.md rule to never skip hooks. Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 1 + .../coverage/coverage-report-client.tsx | 48 ++++++++++++------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 339b044e..977c2a9e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -108,6 +108,7 @@ Cursor does not load this file automatically. Keep `.cursor/rules/project-contex - Conventional commits: `feat:`, `fix:`, `chore:`, `docs:`. - Branch naming: `feat/description`, `fix/description`, `chore/description`, `docs/description`. - PRs should target `main`. Squash merge. +- **NEVER skip pre-commit hooks (`--no-verify`).** If the hook fails, fix the underlying issue. The hook exists to prevent broken code from reaching CI. ### Environment Variables diff --git a/apps/manager/src/features/coverage/coverage-report-client.tsx b/apps/manager/src/features/coverage/coverage-report-client.tsx index d379da87..e9ebbd99 100644 --- a/apps/manager/src/features/coverage/coverage-report-client.tsx +++ b/apps/manager/src/features/coverage/coverage-report-client.tsx @@ -16,7 +16,7 @@ import { apiFetch } from "@/lib/api-fetch" function useHydrated(): boolean { const [hydrated, setHydrated] = useState(false) - // eslint-disable-next-line react-hooks/set-state-in-effect -- intentional: hydrate after mount to avoid SSR mismatch + useEffect(() => setHydrated(true), []) return hydrated } @@ -394,7 +394,6 @@ function formatPercent(count: number, total: number): number { function useSessionMode(initial: Mode): [Mode, (value: Mode) => void] { const [mode, setMode] = useState(initial) - /* eslint-disable react-hooks/set-state-in-effect -- intentional: hydrate from sessionStorage after mount to avoid SSR mismatch */ useEffect(() => { try { const stored = window.sessionStorage.getItem(SESSION_MODE_KEY) @@ -405,7 +404,6 @@ function useSessionMode(initial: Mode): [Mode, (value: Mode) => void] { // ignore storage errors } }, []) - /* eslint-enable react-hooks/set-state-in-effect */ const updateMode = useCallback((value: Mode) => { setMode(value) @@ -424,7 +422,6 @@ function useSessionReportType( ): [ReportType, (value: ReportType) => void] { const [reportType, setReportType] = useState(initial) - /* eslint-disable react-hooks/set-state-in-effect -- intentional: hydrate from sessionStorage after mount to avoid SSR mismatch */ useEffect(() => { try { const stored = window.sessionStorage.getItem(SESSION_REPORT_KEY) @@ -435,7 +432,6 @@ function useSessionReportType( // ignore storage errors } }, []) - /* eslint-enable react-hooks/set-state-in-effect */ const updateReportType = useCallback((value: ReportType) => { setReportType(value) @@ -488,7 +484,9 @@ function ModeToggle({ Explore {isOpen && ( -
+
{options.map((option) => (
{collections.length > 0 && ( -
+
Showing {totalCollections} {totalCollections !== collections.length ? ` of ${collections.length}` : ""}{" "} collection {collections.length === 1 ? "" : "s"} - {(filter !== "all" || typeFilter !== "all" || searchQuery.trim()) && ( + {(filter !== "all" || + typeFilter !== "all" || + searchQuery.trim()) && (