[eric] lint: extend max-folder-items governance to frontend (documented exceptions, drop blanket ignore)

This commit is contained in:
ciregenz
2026-05-23 19:53:56 -07:00
parent 56dbd6d633
commit 6b7f66af3f
2 changed files with 22 additions and 2 deletions
+22 -2
View File
@@ -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": [],