ultracite@8.0.1
Patch Changes
-
40d646a:
ultracite fix --claudeand--codexhand agents better information and report results more accurately:- Rule names reach the agent as they’re written in the config, such as
no-unused-varsandtypescript/no-explicit-any, instead of Oxlint’seslint(no-unused-vars). - ESLint diagnostics now carry the rule’s description and documentation URL, read with the
json-with-metadataformatter. Biome diagnostics carry the rule’s documentation URL and its description frombiome explain, since Biome’s JSON reporter includes no help text. - The prompt tells the agent that the run is non-interactive, so it explains a decision it can’t make in its final message instead of asking a question and waiting for an answer that can’t come.
- Files are handed over in path order, so the same project gets its fix in the same file on every run. Before each file after the first, Ultracite lints it again: an earlier file’s fix can clear its issues (breaking an import cycle fixes both files), and the agent was being handed diagnostics that no longer applied. A file with nothing left is skipped.
- A file the agent deleted, or one that no longer parses, now counts as unfixed. Before, its issues could disappear from the report and show as fixed.
- Rule names reach the agent as they’re written in the config, such as
-
2543859: Update the vendored
anti-slopOxlint plugin to upstream commit13909c9and enable its three new rules in theultracite/oxlint/anti-sloppreset.require-readable-spacingrestores blank lines around structural boundaries — top-level declarations, multiline bindings, control flow, returns, and blocks — a pattern AI-generated code tends to pack together, while consecutive single-line bindings stay grouped at any scope (dmmulroy/anti-slop#45). Its autofix only inserts whitespace and never removes existing blank lines, soultracite fixrestores the spacing without fighting the formatter.no-array-filter-maprejects adjacent eagerfilter/mappasses over arrays, andno-reduce-accumulator-copyrejects reducers that copy their accumulator on every iteration. Expect a one-time whitespace-only diff fromultracite fixafter upgrading if you extend the preset (#803). -
0a671cc: On the ESLint toolchain,
ultracite fix --hookno longer deletes an import an agent has just added. A post-edit hook runs between the agent’s edits, so the import is unused until the code that uses it lands, andunused-imports/no-unused-importsremoved it first. The hook run now turns that rule off, as the Biome hook already skipsnoUnusedImports(#483).no-unused-varsstill reports the import if it stays unused. -
de08bd3: The ESLint core preset no longer configures a
noderesolver forimport-x, which neededeslint-import-resolver-node, a packageinitnever installed. The TypeScript resolver it keeps resolves JavaScript files too. -
c13e042:
react/jsx-no-target-blanknow checks forms as well as links (forms: true) in the Oxlint and ESLint React presets, as Biome’snoBlankTargetalready does. The rules fileinitwrites for agents now says to addrel="noopener noreferrer"totarget="_blank"links instead ofrel="noopener", which Oxlint and ESLint report because it still sends the referrer. It also says to avoid import cycles again, which the Oxlint and ESLint core presets report. -
9853406: The
oxlint.config.tsthatultracite initwrites now setsenv: core.env. Oxlint doesn’t carryenvthroughextends, so the browser globals the core preset declares never reached projects, and rules that depend on them stayed quiet:no-implied-evaldidn’t reportsetTimeout("…")orsetInterval("…"), andno-evaldidn’t reportwindow.eval(…). Workspace configs written byinitnow repeatenv: root.envalongsideignorePatternsandsettings, and an.oxlintrc.jsonthatinitmigrates keeps itsenvon top of core’s. Re-runultracite initto update an existing config, or addenv: core.envto it yourself. -
7984c6e: The Oxlint
js-pluginspreset now enables the 32 SonarJS rules that the ESLint core preset already runs without type information, including the security rulessonarjs/slow-regex,sonarjs/sql-queries,sonarjs/disabled-auto-escapingandsonarjs/dompurify-unsafe-config. SonarJS marks these rulesrequiresTypeChecking, but they also check the syntax tree, so they work through Oxlint’s JS plugin bridge. The preset had left out every marked rule.