{ "$schema": "https://biomejs.dev/schemas/2.5.1/schema.json", "vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true }, "plugins": [ // App-server protocol and generated binding boundaries. { "path": "./scripts/lint/no-app-server-projection-rpcs.grit", "includes": ["**/src/features/chat/application/**/*.ts", "**/src/features/chat/application/**/*.tsx"] }, { "path": "./scripts/lint/no-app-server-protocol-boundary-imports.grit", "includes": ["**/src/**/*.ts", "**/src/**/*.tsx", "!**/src/app-server/**/*.ts", "!**/src/app-server/**/*.tsx"] }, { "path": "./scripts/lint/no-generated-app-server-boundary-imports.grit", "includes": [ "**/src/**/*.ts", "**/src/**/*.tsx", "!**/src/app-server/connection/**", "!**/src/app-server/protocol/turn.ts", "!**/src/app-server/protocol/server-requests.ts" ] }, // Shared source layering boundaries. { "path": "./scripts/lint/no-generated-app-server-thread-alias-imports.grit", "includes": ["**/src/app-server/connection/**/*.ts", "**/src/app-server/connection/**/*.tsx"] }, { "path": "./scripts/lint/no-generated-app-server-turn-protocol-imports.grit", "includes": ["**/src/app-server/protocol/turn.ts"] }, { "path": "./scripts/lint/no-generated-app-server-server-request-imports.grit", "includes": ["**/src/app-server/protocol/server-requests.ts"] }, { "path": "./scripts/lint/no-lower-level-boundary-imports.grit", "includes": [ "**/src/app-server/**/*.ts", "**/src/app-server/**/*.tsx", "**/src/domain/**/*.ts", "**/src/domain/**/*.tsx", "**/src/shared/**/*.ts", "**/src/shared/**/*.tsx" ] }, // Chat feature architecture. { "path": "./scripts/lint/no-chat-domain-outer-layer-imports.grit", "includes": ["**/src/features/chat/domain/**/*.ts", "**/src/features/chat/domain/**/*.tsx"] }, { "path": "./scripts/lint/no-chat-signal-imports.grit", "includes": ["**/src/**/*.ts", "**/src/**/*.tsx"] }, { "path": "./scripts/lint/no-pure-chat-state-side-effects.grit", "includes": ["**/src/features/chat/application/state/**/*.ts", "**/src/features/chat/application/state/**/*.tsx"] }, // UI and DOM source boundaries. { "path": "./scripts/lint/no-implicit-dom-bridges.grit", "includes": ["**/src/**/*.ts", "**/src/**/*.tsx"] }, { "path": "./scripts/lint/no-ui-root-imports.grit", "includes": ["**/src/**/*.ts", "**/src/**/*.tsx"] }, { "path": "./scripts/lint/no-uncontrolled-preact-form-state.grit", "includes": ["**/src/**/*.tsx"] }, // Project-wide source shape. { "path": "./scripts/lint/no-handwritten-reexports.grit", "includes": ["**/*.ts", "**/*.tsx", "**/*.mjs"] }, { "path": "./scripts/lint/no-self-referential-initializer-callback.grit", "includes": ["**/*.ts", "**/*.tsx", "**/*.mjs"] }, { "path": "./scripts/lint/no-unsafe-iterator-value.grit", "includes": ["**/*.ts", "**/*.tsx", "**/*.mjs"] }, // CSS source policy. { "path": "./scripts/lint/no-restricted-css-policy.grit", "includes": ["**/src/styles/**/*.css"] } ], "files": { "includes": [ "*.config.mjs", "*.config.ts", "*.css", "*.json", "*.jsonc", "*.mjs", "scripts/**/*.{json,jsonc}", "scripts/**/*.grit", "scripts/**/*.mjs", "src/**/*.{css,ts,tsx}", "tests/**/*.{mjs,ts,tsx}", "!src/generated" ] }, "formatter": { "indentStyle": "space", "lineWidth": 140 }, "assist": { "actions": { "source": { "noDuplicateClasses": "on", "organizeImports": "on" } } }, "linter": { "domains": { "react": "recommended", "test": "recommended" }, "rules": { "preset": "recommended", "complexity": { "useLiteralKeys": "off" }, "correctness": { "useExhaustiveDependencies": { "level": "error", "options": { "reportUnnecessaryDependencies": false } } }, "nursery": { "noExcessiveSelectorClasses": { "level": "error", "options": { "maxClasses": 4 } } }, "style": { "noCommonJs": "error" }, "suspicious": { "noImportCycles": "error" } } } }