Skip to content

Architecture Decision Records

Architecture Decision Records

This project documents significant architectural decisions as ADRs. They are ordered by impact — from core architecture down to individual plugin choices.

Core Architecture

Fundamental decisions that define how this project works.

#DecisionSummary
ADR-0001Pre-built Configs16 ESLint + 8 OxLint permutations generated at build time
ADR-0002Code GenerationEmit real ES modules with imports instead of serializing config objects
ADR-0003Bitmask HashingDeterministic SHA-1 filenames from frozen bit positions

Rule Philosophy

How rules are selected, configured, and organized.

#DecisionSummary
ADR-0004Curated RulesUse presets as baselines, hand-pick every additional rule
ADR-0005Strict TypeScriptstrictTypeChecked + projectService: true for maximum type safety
ADR-0006AI ModeDedicated ai: true flag for stricter rules on AI-generated code

Integration Patterns

How configs, tools, and overrides fit together.

#DecisionSummary
ADR-0007File-Scoped OverridesSix override blocks (tests, e2e, stories, configs, declarations, scripts)
ADR-0008Prettier Compatibilityeslint-config-prettier disables all formatting conflicts
ADR-0009OxLint Integration@oxlint/migrate at build time, eslint-plugin-oxlint at runtime
ADR-0010OxLint over BiomeESLint rule compatibility and Vite ecosystem alignment

Plugin Decisions

Which plugins are included and why.

#DecisionSummary
ADR-0011PerfectionistOne plugin for all sorting (imports, exports, objects, interfaces)
ADR-0012Testing PluginsVitest, Playwright, Testing Library, Storybook — scoped by file pattern
ADR-0013CSpellSpell checking for identifiers and comments (warn severity)
ADR-0014Rule-Helpers APIFive functions for post-load config customization

Exclusion Decisions

Plugins and tools that were evaluated and intentionally not adopted.

#DecisionSummary
ADR-0015No eslint-plugin-promiseTypeScript + SonarJS already cover Promise patterns
ADR-0016No Framework LintingNo Next.js, Nuxt, Remix, or Tailwind plugins
ADR-0017@eslint-react DeferredSuperseded — re-evaluated and adopted in ADR-0019
ADR-0018No @shopify/eslint-pluginOnly 2-3 useful rules out of 29
ADR-0019Migration to @eslint-reactReplaces unmaintained eslint-plugin-react with modern engine
ADR-0020React Compat PluginUnified react/ namespace for OxLint-compatible legacy names