ultracite@8.0.2
Patch Changes
- 9f80955: Make
ultracite fix --claudeand--codexjudge each retry by what the previous edit actually did. An issue that’s still reported gets the old note asking for a structurally different approach, but one that only appeared after the edit is now handed back as new, with the agent told to build on the fix rather than undo it. Before, a correct ARIA button pattern that then trippedprefer-tag-over-role, or a correct<button>missing itstype, was treated as a failed fix and thrown away. When an issue needs a person’s decision, the agent now lists it at the end of its final message. Ultracite stops retrying it and shows the agent’s explanation in the summary, where it used to be discarded. The handoff also gets three fixes. Biome’sa11yrules now reach the agent with their help text and documentation link, which a pattern that didn’t allow digits in a rule group had dropped. A path Oxlint has no files to lint, such as a Markdown file, no longer crashes the run. And Biome’s internal errors, such asinternalError/iofor a file it can’t write, are no longer handed to the agent as lint issues. - 30e03ef: Give
jsx-a11y/label-has-associated-controlinultracite/oxlint/reactthe options the ESLint react preset already sets:<Label>counts as a label,<Input>,<Select>,<Textarea>,<Checkbox>and<Radio>count as controls, and a control is found up to three levels deep. Oxlint used to miss a<Label>with no control, and flagged an<Input>inside a<label>, or an input nested three deep, as unlabelled. Biome’snoLabelWithoutControlinultracite/biome/coregets the same label and control components. - 947ca03: Turn off
promise/prefer-await-to-theninultracite/oxlint/coreandultracite/eslint/core, andgithub/no-theninultracite/oxlint/js-pluginsandultracite/eslint/core. Both rules match.then(),.catch()and.finally()by method name, without type information, so they flagged APIs that aren’t promises, such as Zod’s.catch()fallback. They also flagged a fire-and-forget promise given a.catch()handler. Oxlint closed the false positive as not planned.promise/always-returnandpromise/catch-or-returnare now on in both presets, so an unhandled promise chain is still reported. In ESLint,unicorn/prefer-awaitmoves toultracite/eslint/type-aware, where it uses type information to skip calls that aren’t on a promise. The test-file overrides that turnedpromise/prefer-await-to-thenoff in the jest and vitest presets are gone, since the rule is off everywhere. - c198d06: Stop
unicorn/no-useless-undefinedinultracite/oxlint/corefrom checking function call arguments. A required parameter typedstring | undefinedhas to be passedundefinedexplicitly, but Oxlint flaggedconsume(undefined)andultracite fixrewrote it toconsume(), which TypeScript rejects with TS2554. The rule can’t see parameter types, so it now runs withcheckArguments: false. It still reportslet value = undefined,return undefinedand the rest of its checks.ultracite/eslint/coresets the same option. eslint-plugin-unicorn already skipped arguments in TypeScript files, and now skips them in JavaScript too. Biome’snoUselessUndefinednever checked arguments.