From 6b7f66af3fc0d26afad06e7867ff24e9f037b542 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Sat, 23 May 2026 19:53:56 -0700 Subject: [PATCH] [eric] lint: extend max-folder-items governance to frontend (documented exceptions, drop blanket ignore) --- frontend/.lintignore-max-folder-items | 0 linter/config/config.json | 24 ++++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) delete mode 100644 frontend/.lintignore-max-folder-items diff --git a/frontend/.lintignore-max-folder-items b/frontend/.lintignore-max-folder-items deleted file mode 100644 index e69de29b..00000000 diff --git a/linter/config/config.json b/linter/config/config.json index 5c8fba95..818bb2c2 100644 --- a/linter/config/config.json +++ b/linter/config/config.json @@ -15,7 +15,7 @@ "eslint-knip": "Node tooling deferred to a later pass.", "classes": "Placeholder check, not wired up. endpoints: orphaned-endpoint triage deferred.", "max-file-lines-exceptions": "Grandfather list of pre-existing >300-line files (existing debt, not new). Paths updated after the folder-tree restructure moved several of them.", - "max-folder-items-exceptions": "Exact-path allow for folders that are intentionally big. backend/ and backend/apps are FastAPI feature-package registries (each child is an app mounted in main.py); agents/ aggregates agent subsystems; core/, service/, tools_lib/, tests/ are conventionally flat. These replaced a blanket backend/.lintignore-max-folder-items so the rule still catches NEW unplanned bloat in every other folder. The webapp_template Vite scaffold is a payload, exempted as a whole subtree by its own .lintignore-max-folder-items (same as vendored mcp-bundles).", + "max-folder-items-exceptions": "Exact-path allow for folders that are intentionally big. backend/ and backend/apps are FastAPI feature-package registries (each child is an app mounted in main.py); agents/ aggregates agent subsystems; core/, service/, tools_lib/, tests/ are conventionally flat. These replaced a blanket backend/.lintignore-max-folder-items so the rule still catches NEW unplanned bloat in every other folder. Frontend entries follow the same idea and replaced the blanket frontend/.lintignore-max-folder-items: app/pages is the page registry, AgentChat/Dashboard/ChatInput/Settings-sections/Onboarding are organizational parents holding sub-areas, and shared/state (Redux slices) plus hooks/styles/steps/ac/editor and the *-cards/*-bubbles dirs are conventionally flat peer collections. The webapp_template Vite scaffold is a payload, exempted as a whole subtree by its own .lintignore-max-folder-items (same as vendored mcp-bundles).", "import-cycles": "Flags RUNTIME circular imports only (SCC>1). Skips type-only imports (import type / export type) and dynamic import() since neither runs at module init, which is why the idiomatic Redux store<->hooks type cycle is not flagged. Frontend alias resolution comes from import-cycle-aliases. Zero cycles today; the check keeps it that way." }, "rules": { @@ -138,7 +138,27 @@ "backend/apps/outputs", "backend/apps/service", "backend/apps/tools_lib", - "backend/tests" + "backend/tests", + "frontend/src/shared", + "frontend/src/shared/state", + "frontend/src/shared/hooks", + "frontend/src/shared/styles", + "frontend/src/app/pages", + "frontend/src/app/pages/AgentChat", + "frontend/src/app/pages/AgentChat/ChatInput", + "frontend/src/app/pages/AgentChat/ChatInput/hooks", + "frontend/src/app/pages/AgentChat/ChatInput/model-picker", + "frontend/src/app/pages/AgentChat/mcp-cards", + "frontend/src/app/pages/AgentChat/tool-bubbles", + "frontend/src/app/pages/Dashboard", + "frontend/src/app/pages/Dashboard/hooks/interaction", + "frontend/src/app/pages/Settings/sections", + "frontend/src/app/pages/Tools/cards", + "frontend/src/app/pages/Views", + "frontend/src/app/components/Onboarding", + "frontend/src/app/components/Onboarding/steps", + "frontend/src/app/components/Onboarding/ac", + "frontend/src/app/components/editor" ], "no-nested-imports": [], "import-cycles": [],