Skip to content

All rules

Each rule below has its own page. The list comes from the rules table in packages/rules/README.md, and each page adds the rule’s metadata and docs from packages/rules. The checks guide shows how they run.

Rule Tool Catches Enable via
comment-discipline ESLint Top-level narrative, multiline comments, adjacent groups; keeps one-line whys beside code configs.recommended
no-broken-relative-links ESLint Relative Markdown links to untracked paths @house-rules/rules/markdown
design-no-raw-color ESLint Raw hex, rgb(), hsl(), etc. in CSS design() factory
design-no-raw-color-literal ESLint Raw hex, rgb(), hsl(), etc. in JS/TS strings design() factory
design-no-unknown-token ESLint var(--name) with no definition design() factory
design-scale-value ESLint CSS values off a fixed scale design() factory
use-case-is-capability ESLint A use-case file that does not export exactly one implement(...) capability, exports a second contract, or exports another value configs.capability
no-hand-rolled-surface ESLint Tool.make, Rpc.make, or HttpApiEndpoint.<method> outside packages/capability/** configs.capability
no-cycles Dependency Cruiser Circular imports layout({ scope })
packages-do-not-import-apps Dependency Cruiser Packages importing apps layout({ scope })
apps-do-not-import-other-apps Dependency Cruiser Apps importing other apps layout({ scope })
packages-imported-by-name Dependency Cruiser Local imports of packages by path instead of name layout({ scope })
packages-public-entry-only Dependency Cruiser Imports of package internals layout({ scope })
delivery-does-not-import-server Dependency Cruiser Delivery layer importing server layer layout({ scope })
server-does-not-import-delivery Dependency Cruiser Server layer importing delivery layer layout({ scope })
use-cases-do-not-import-outer-layers Dependency Cruiser Use-cases importing delivery or server layout({ scope })
no-unresolved-deep-package-imports Dependency Cruiser Unresolved deep package imports layout({ scope })
production-does-not-import-tests Dependency Cruiser Production code importing tests layout({ scope })
tests-live-in-tests-dir Dependency Cruiser Test files outside tests/ folders layout({ scope })
tests-do-not-import-internals Dependency Cruiser Tests importing package internals layout({ scope })
no-unresolved-imports Dependency Cruiser Unresolved imports layout({ scope })
app-code-in-layers Dependency Cruiser App code outside layer folders layout({ scope })
use-cases-do-not-import-use-cases Dependency Cruiser Use-case importing another use-case layout({ scope })
no-ownerless-files Dependency Cruiser utils/, helpers/, misc/ files or folders layout({ scope })
Strict compiler flags TypeScript 15 flags: strict, noUncheckedIndexedAccess, exactOptionalPropertyTypes, and more tsconfig/strict.json
Effect diagnostics TypeScript 31 diagnostics set to error tsconfig/effect.json
noReExportAll Biome export * from @house-rules/rules/biome
noExcessiveLinesPerFile Biome Files over 300 lines (warn) @house-rules/rules/biome
noNonNullAssertion Biome ! non-null assertions @house-rules/rules/biome
useFilenamingConvention Biome Files not kebab-case or export @house-rules/rules/biome
Formatter Biome indentWidth 2, lineWidth 100, indentStyle space @house-rules/rules/biome
Exact pins Node Every dependency must be an exact version, workspace:<exact>, or a Git spec with full commit SHA house-rules-pins bin
house-rules-migrations Node Cross-module foreign keys, migrations or SQL strings that touch another package’s tables, .sql files outside <package>/migrations/ (a package’s fixtures/ and tests/ excepted), use-cases that open a transaction house-rules-migrations bin