No JS linter today (tsc + vitest + playwright). Solid app, 248 files. oxlint has no eslint-plugin-solid equivalent, so reactivity rules stay uncovered (they are uncovered today too). Effort: M.
Baseline: 29 findings — 20 no-unassigned-vars (almost all Solid ref bindings: let root; <div ref={root}> — false positives), 6 no-unused-expressions, 1 each prefer-string-starts-ends-with, no-irregular-whitespace, no-control-regex.
Agent plan
Goal: oxlint is the primary lint gate (edit loop + CI), per workspace AGENTS.md "Frontend tooling". Audit source: oxlint 1.80.0 run on this tree, 2026-08-25.
Checklist:
Validation:
bunx oxlint (or npx oxlint) exits 0 on the tree
complexity-gate check <src> exits 0
- CI green
Current status: Planned
Next action: open PR
No JS linter today (tsc + vitest + playwright). Solid app, 248 files. oxlint has no
eslint-plugin-solidequivalent, so reactivity rules stay uncovered (they are uncovered today too). Effort: M.Baseline: 29 findings — 20
no-unassigned-vars(almost all Solidrefbindings:let root; <div ref={root}>— false positives), 6no-unused-expressions, 1 eachprefer-string-starts-ends-with,no-irregular-whitespace,no-control-regex.Agent plan
Goal: oxlint is the primary lint gate (edit loop + CI), per workspace
AGENTS.md"Frontend tooling". Audit source: oxlint 1.80.0 run on this tree, 2026-08-25.Checklist:
.oxlintrc.jsonreffalse positives: preferlet root!: HTMLDivElementor disableno-unassigned-varsfor.tsxlintscript runs oxlint; CI "Lint" step uses it.oxlintrc.json).complexity-gate.json(complexity-gate init, defaults) andcomplexity-gate check <src>in CI; existing FAILs are legacy — gate only changed functions via hooks, but CI baseline must be clean or explicitly allowlistedValidation:
bunx oxlint(ornpx oxlint) exits 0 on the treecomplexity-gate check <src>exits 0Current status: Planned
Next action: open PR