1cdaf87: Add opt-in ultracite/oxlint/gdp and ultracite/eslint/gdp presets for gdp-ts, which makes authorization checks visible to the type checker. Following upstream's strict mode, they stop proofs being forged with type assertions ({} as UserIsProjectAdmin<U, P>) or minted outside proofs/, ban other type assertions outside proofs/ and lib/ids.ts (except as const), and keep provers private to their trusted module. Upstream's no-any is left off because core already bans any. Inside proofs/, empty proof interfaces (interface X<P> extends Proof<"X", [P]> {}) are allowed, and the ESLint preset ignores _-prefixed proof arguments in no-unused-vars, as Oxlint does by default. @gdp-ts/core ships the plugin, so there is nothing extra to install: extend the preset after core.
f753c14: Add opt-in TSDoc syntax validation and public TypeScript API documentation checks to the Oxlint js-plugins preset. Selecting a plugin with --js-plugins on a config that extends the full js-plugins preset now keeps the preset's plugins.
ade34d3: Update @biomejs/biome to 2.5.15. The release adds 11 nursery rules and changes no stable rules, so the Biome presets, which exclude nursery rules, are unchanged. It speeds up HTML formatting and big-file analysis, fixes Astro expression indentation and Svelte comment placement, and reports configuration errors that Biome 2.5.14 silently ignored.
631e0dd: Update oxfmt to 0.71.0. The release changes no options; it bundles Prettier 3.9.9 for embedded languages and fixes comment placement around assignments, JSDoc alignment and several Markdown edge cases.
08e83af: Update oxlint to 1.86.0 and enable its new type-aware rule, typescript/no-generated-empty-object-type, in the core Oxlint preset. It reports type operations such as Pick<Data, never> that resolve to the empty object type {}, matching the @typescript-eslint rule of the same name that the ESLint preset already enables. Like the other type-aware rules, it only runs with oxlint --type-aware and oxlint-tsgolint installed. Older oxlint releases fail to parse a config that names the rule, so the oxlint peer range moves to ^1.86.0.
Requires oxlint >= 1.86.0
2a9348c: Update the ESLint presets' plugins: eslint 10.12, eslint-plugin-unicorn 77, eslint-plugin-jsdoc 65, @typescript-eslint 8.71, eslint-plugin-sonarjs 4.2.2, eslint-plugin-react-doctor and oxlint-plugin-react-doctor 0.9.16, plus patch releases of the Next.js, TanStack Query, n, Solid and Storybook plugins.
The ESLint core preset enables every non-deprecated JavaScript rule from unicorn, so it now also runs unicorn 77's 21 new JavaScript rules, including no-unnecessary-parameters, no-unsafe-json-serialization, prefer-promise-static-methods and a set of no-invalid-* checks for DOM, Intl, Response, Temporal and property descriptor arguments. It also enables the new type-aware @typescript-eslint/no-unsafe-enum-assignment. Unicorn 77 moves its CSS-only rules to eslint-cssicorn; the preset never enabled them for JavaScript files, so nothing is lost.
864cde1: Raise the eslint peer dependency to ^10.9.0. The ESLint core preset configures no-unmodified-loop-condition with checkConditionalExpressions, an option ESLint 10.0 to 10.8 reject, so every preset except Vue failed with Key "rules": Key "no-unmodified-loop-condition" on those releases even though the old ^10.0.0 range allowed them (eslint-plugin-unicorn also needs ESLint 10.4 or later). ultracite init and ultracite upgrade now install a release that loads the presets, and ultracite doctor and your package manager flag older ones. @eslint/js, which is no longer versioned with ESLint, keeps its own ^10.0.1 range.
Requires eslint >= 10.9.0
d7563b3: ultracite init now skips every prompt when you pass any of --pm, --editors, --agents, --hooks, --integrations, --frameworks or --workspace-framework, as documented. Before, the editor, agent, hook, skill and (with --frameworks) integration prompts still asked, which stalled scaffolding tools that call init without a TTY. --js-plugins with a linter other than Oxlint now stops init with an error instead of being silently ignored, and without --linter it skips the linter prompt.
6c7e149: ultracite init no longer hangs on a .pre-commit-config.yaml or lefthook config with CRLF line endings and many consecutive comment lines. The check that keeps the file's sequence indentation could backtrack exponentially on that input.
3dc6431: On Windows, a linter or formatter that isn't installed is now reported as missing instead of as "exited with code 1". ultracite check and ultracite fix warn and skip CSS linting when the optional Stylelint is missing, as they already did on macOS and Linux, and ultracite fix --agent now skips a missing Stylelint on every platform instead of failing.
7f085b2: Type jsPlugins as a non-null array on the Oxlint presets that always ship plugins (js-plugins, shadcn, anti-slop, next/js-plugins, tanstack/js-plugins) and on selectJsPlugins()'s return value, so spreading several of them into a root jsPlugins array typechecks.
45e7f86: The ESLint core preset enables unicorn/prefer-combined-guards's new checkMultiStatementBodies option, so consecutive guards whose bodies repeat the same statements before the same exit (for example, two if blocks that each log and continue) are reported and can be combined with ||. In TypeScript, the rule only combines bodies when type information shows every reference has the same type in both.
d5523c5: ultracite init takes --workspace-framework <path>=<framework> for monorepos whose workspaces use different frameworks. For each workspace, it writes an Oxlint, Biome or ESLint config in that directory that extends the root config and adds the workspace's presets, so framework rules only run where they apply and editors see the same rules as ultracite check.
Configuration
📅Schedule: (in timezone Europe/Warsaw)
Branch creation
At any time (no schedule defined)
Automerge
At any time (no schedule defined)
🚦Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕Ignore: Close this PR and you won't be reminded about this update again.
If you want to rebase/retry this PR, check this box
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [ultracite](https://www.ultracite.ai/) ([source](https://github.com/haydenbleasel/ultracite)) | [`7.12.2` → `7.12.4`](https://renovatebot.com/diffs/npm/ultracite/7.12.2/7.12.4) |  |  |
---
### Release Notes
<details>
<summary>haydenbleasel/ultracite (ultracite)</summary>
### [`v7.12.4`](https://github.com/haydenbleasel/ultracite/releases/tag/ultracite%407.12.4)
[Compare Source](https://github.com/haydenbleasel/ultracite/compare/ultracite@7.12.3...ultracite@7.12.4)
##### Patch Changes
- [`1cdaf87`](https://github.com/haydenbleasel/ultracite/commit/1cdaf87): Add opt-in `ultracite/oxlint/gdp` and `ultracite/eslint/gdp` presets for [gdp-ts](https://github.com/rauchg/gdp-ts), which makes authorization checks visible to the type checker. Following upstream's strict mode, they stop proofs being forged with type assertions (`{} as UserIsProjectAdmin<U, P>`) or minted outside `proofs/`, ban other type assertions outside `proofs/` and `lib/ids.ts` (except `as const`), and keep provers private to their trusted module. Upstream's `no-any` is left off because core already bans `any`. Inside `proofs/`, empty proof interfaces (`interface X<P> extends Proof<"X", [P]> {}`) are allowed, and the ESLint preset ignores `_`-prefixed proof arguments in `no-unused-vars`, as Oxlint does by default. `@gdp-ts/core` ships the plugin, so there is nothing extra to install: extend the preset after `core`.
### [`v7.12.3`](https://github.com/haydenbleasel/ultracite/releases/tag/ultracite%407.12.3)
[Compare Source](https://github.com/haydenbleasel/ultracite/compare/ultracite@7.12.2...ultracite@7.12.3)
##### Patch Changes
- [`f753c14`](https://github.com/haydenbleasel/ultracite/commit/f753c14): Add opt-in TSDoc syntax validation and public TypeScript API documentation checks to the Oxlint `js-plugins` preset. Selecting a plugin with `--js-plugins` on a config that extends the full `js-plugins` preset now keeps the preset's plugins.
- [`ade34d3`](https://github.com/haydenbleasel/ultracite/commit/ade34d3): Update `@biomejs/biome` to 2.5.15. The release adds 11 nursery rules and changes no stable rules, so the Biome presets, which exclude nursery rules, are unchanged. It speeds up HTML formatting and big-file analysis, fixes Astro expression indentation and Svelte comment placement, and reports configuration errors that Biome 2.5.14 silently ignored.
- [`631e0dd`](https://github.com/haydenbleasel/ultracite/commit/631e0dd): Update oxfmt to 0.71.0. The release changes no options; it bundles Prettier 3.9.9 for embedded languages and fixes comment placement around assignments, JSDoc alignment and several Markdown edge cases.
- [`08e83af`](https://github.com/haydenbleasel/ultracite/commit/08e83af): Update oxlint to 1.86.0 and enable its new type-aware rule, [`typescript/no-generated-empty-object-type`](https://oxc.rs/docs/guide/usage/linter/rules/typescript/no-generated-empty-object-type.html), in the core Oxlint preset. It reports type operations such as `Pick<Data, never>` that resolve to the empty object type `{}`, matching the `@typescript-eslint` rule of the same name that the ESLint preset already enables. Like the other type-aware rules, it only runs with `oxlint --type-aware` and `oxlint-tsgolint` installed. Older oxlint releases fail to parse a config that names the rule, so the `oxlint` peer range moves to `^1.86.0`.
Requires oxlint >= 1.86.0
- [`2a9348c`](https://github.com/haydenbleasel/ultracite/commit/2a9348c): Update the ESLint presets' plugins: `eslint` 10.12, `eslint-plugin-unicorn` 77, `eslint-plugin-jsdoc` 65, `@typescript-eslint` 8.71, `eslint-plugin-sonarjs` 4.2.2, `eslint-plugin-react-doctor` and `oxlint-plugin-react-doctor` 0.9.16, plus patch releases of the Next.js, TanStack Query, `n`, Solid and Storybook plugins.
The ESLint core preset enables every non-deprecated JavaScript rule from unicorn, so it now also runs unicorn 77's 21 new JavaScript rules, including [`no-unnecessary-parameters`](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v77.0.0/docs/rules/no-unnecessary-parameters.md), [`no-unsafe-json-serialization`](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v77.0.0/docs/rules/no-unsafe-json-serialization.md), [`prefer-promise-static-methods`](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v77.0.0/docs/rules/prefer-promise-static-methods.md) and a set of `no-invalid-*` checks for DOM, `Intl`, `Response`, Temporal and property descriptor arguments. It also enables the new type-aware [`@typescript-eslint/no-unsafe-enum-assignment`](https://typescript-eslint.io/rules/no-unsafe-enum-assignment). Unicorn 77 moves its CSS-only rules to `eslint-cssicorn`; the preset never enabled them for JavaScript files, so nothing is lost.
- [`864cde1`](https://github.com/haydenbleasel/ultracite/commit/864cde1): Raise the `eslint` peer dependency to `^10.9.0`. The ESLint core preset configures `no-unmodified-loop-condition` with `checkConditionalExpressions`, an option ESLint 10.0 to 10.8 reject, so every preset except Vue failed with `Key "rules": Key "no-unmodified-loop-condition"` on those releases even though the old `^10.0.0` range allowed them (`eslint-plugin-unicorn` also needs ESLint 10.4 or later). `ultracite init` and `ultracite upgrade` now install a release that loads the presets, and `ultracite doctor` and your package manager flag older ones. `@eslint/js`, which is no longer versioned with ESLint, keeps its own `^10.0.1` range.
Requires eslint >= 10.9.0
- [`d7563b3`](https://github.com/haydenbleasel/ultracite/commit/d7563b3): `ultracite init` now skips every prompt when you pass any of `--pm`, `--editors`, `--agents`, `--hooks`, `--integrations`, `--frameworks` or `--workspace-framework`, as documented. Before, the editor, agent, hook, skill and (with `--frameworks`) integration prompts still asked, which stalled scaffolding tools that call init without a TTY. `--js-plugins` with a linter other than Oxlint now stops init with an error instead of being silently ignored, and without `--linter` it skips the linter prompt.
- [`6c7e149`](https://github.com/haydenbleasel/ultracite/commit/6c7e149): `ultracite init` no longer hangs on a `.pre-commit-config.yaml` or lefthook config with CRLF line endings and many consecutive comment lines. The check that keeps the file's sequence indentation could backtrack exponentially on that input.
- [`3dc6431`](https://github.com/haydenbleasel/ultracite/commit/3dc6431): On Windows, a linter or formatter that isn't installed is now reported as missing instead of as "exited with code 1". `ultracite check` and `ultracite fix` warn and skip CSS linting when the optional Stylelint is missing, as they already did on macOS and Linux, and `ultracite fix --agent` now skips a missing Stylelint on every platform instead of failing.
- [`7f085b2`](https://github.com/haydenbleasel/ultracite/commit/7f085b2): Type `jsPlugins` as a non-null array on the Oxlint presets that always ship plugins (`js-plugins`, `shadcn`, `anti-slop`, `next/js-plugins`, `tanstack/js-plugins`) and on `selectJsPlugins()`'s return value, so spreading several of them into a root `jsPlugins` array typechecks.
- [`45e7f86`](https://github.com/haydenbleasel/ultracite/commit/45e7f86): The ESLint core preset enables `unicorn/prefer-combined-guards`'s new [`checkMultiStatementBodies`](https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v77.0.0/docs/rules/prefer-combined-guards.md#checkmultistatementbodies) option, so consecutive guards whose bodies repeat the same statements before the same exit (for example, two `if` blocks that each log and `continue`) are reported and can be combined with `||`. In TypeScript, the rule only combines bodies when type information shows every reference has the same type in both.
- [`d5523c5`](https://github.com/haydenbleasel/ultracite/commit/d5523c5): `ultracite init` takes `--workspace-framework <path>=<framework>` for monorepos whose workspaces use different frameworks. For each workspace, it writes an Oxlint, Biome or ESLint config in that directory that extends the root config and adds the workspace's presets, so framework rules only run where they apply and editors see the same rules as `ultracite check`.
</details>
---
### Configuration
📅 **Schedule**: (in timezone Europe/Warsaw)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC43NC4wIiwidXBkYXRlZEluVmVyIjoiNDQuNzQuMCIsInRhcmdldEJyYW5jaCI6ImRldiIsImxhYmVscyI6WyJkZXBzLWNvZGUiLCJyZW5vdmF0ZSJdfQ==-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
7.12.2→7.12.4Release Notes
haydenbleasel/ultracite (ultracite)
v7.12.4Compare Source
Patch Changes
1cdaf87: Add opt-inultracite/oxlint/gdpandultracite/eslint/gdppresets for gdp-ts, which makes authorization checks visible to the type checker. Following upstream's strict mode, they stop proofs being forged with type assertions ({} as UserIsProjectAdmin<U, P>) or minted outsideproofs/, ban other type assertions outsideproofs/andlib/ids.ts(exceptas const), and keep provers private to their trusted module. Upstream'sno-anyis left off because core already bansany. Insideproofs/, empty proof interfaces (interface X<P> extends Proof<"X", [P]> {}) are allowed, and the ESLint preset ignores_-prefixed proof arguments inno-unused-vars, as Oxlint does by default.@gdp-ts/coreships the plugin, so there is nothing extra to install: extend the preset aftercore.v7.12.3Compare Source
Patch Changes
f753c14: Add opt-in TSDoc syntax validation and public TypeScript API documentation checks to the Oxlintjs-pluginspreset. Selecting a plugin with--js-pluginson a config that extends the fulljs-pluginspreset now keeps the preset's plugins.ade34d3: Update@biomejs/biometo 2.5.15. The release adds 11 nursery rules and changes no stable rules, so the Biome presets, which exclude nursery rules, are unchanged. It speeds up HTML formatting and big-file analysis, fixes Astro expression indentation and Svelte comment placement, and reports configuration errors that Biome 2.5.14 silently ignored.631e0dd: Update oxfmt to 0.71.0. The release changes no options; it bundles Prettier 3.9.9 for embedded languages and fixes comment placement around assignments, JSDoc alignment and several Markdown edge cases.08e83af: Update oxlint to 1.86.0 and enable its new type-aware rule,typescript/no-generated-empty-object-type, in the core Oxlint preset. It reports type operations such asPick<Data, never>that resolve to the empty object type{}, matching the@typescript-eslintrule of the same name that the ESLint preset already enables. Like the other type-aware rules, it only runs withoxlint --type-awareandoxlint-tsgolintinstalled. Older oxlint releases fail to parse a config that names the rule, so theoxlintpeer range moves to^1.86.0.Requires oxlint >= 1.86.0
2a9348c: Update the ESLint presets' plugins:eslint10.12,eslint-plugin-unicorn77,eslint-plugin-jsdoc65,@typescript-eslint8.71,eslint-plugin-sonarjs4.2.2,eslint-plugin-react-doctorandoxlint-plugin-react-doctor0.9.16, plus patch releases of the Next.js, TanStack Query,n, Solid and Storybook plugins.The ESLint core preset enables every non-deprecated JavaScript rule from unicorn, so it now also runs unicorn 77's 21 new JavaScript rules, including
no-unnecessary-parameters,no-unsafe-json-serialization,prefer-promise-static-methodsand a set ofno-invalid-*checks for DOM,Intl,Response, Temporal and property descriptor arguments. It also enables the new type-aware@typescript-eslint/no-unsafe-enum-assignment. Unicorn 77 moves its CSS-only rules toeslint-cssicorn; the preset never enabled them for JavaScript files, so nothing is lost.864cde1: Raise theeslintpeer dependency to^10.9.0. The ESLint core preset configuresno-unmodified-loop-conditionwithcheckConditionalExpressions, an option ESLint 10.0 to 10.8 reject, so every preset except Vue failed withKey "rules": Key "no-unmodified-loop-condition"on those releases even though the old^10.0.0range allowed them (eslint-plugin-unicornalso needs ESLint 10.4 or later).ultracite initandultracite upgradenow install a release that loads the presets, andultracite doctorand your package manager flag older ones.@eslint/js, which is no longer versioned with ESLint, keeps its own^10.0.1range.Requires eslint >= 10.9.0
d7563b3:ultracite initnow skips every prompt when you pass any of--pm,--editors,--agents,--hooks,--integrations,--frameworksor--workspace-framework, as documented. Before, the editor, agent, hook, skill and (with--frameworks) integration prompts still asked, which stalled scaffolding tools that call init without a TTY.--js-pluginswith a linter other than Oxlint now stops init with an error instead of being silently ignored, and without--linterit skips the linter prompt.6c7e149:ultracite initno longer hangs on a.pre-commit-config.yamlor lefthook config with CRLF line endings and many consecutive comment lines. The check that keeps the file's sequence indentation could backtrack exponentially on that input.3dc6431: On Windows, a linter or formatter that isn't installed is now reported as missing instead of as "exited with code 1".ultracite checkandultracite fixwarn and skip CSS linting when the optional Stylelint is missing, as they already did on macOS and Linux, andultracite fix --agentnow skips a missing Stylelint on every platform instead of failing.7f085b2: TypejsPluginsas a non-null array on the Oxlint presets that always ship plugins (js-plugins,shadcn,anti-slop,next/js-plugins,tanstack/js-plugins) and onselectJsPlugins()'s return value, so spreading several of them into a rootjsPluginsarray typechecks.45e7f86: The ESLint core preset enablesunicorn/prefer-combined-guards's newcheckMultiStatementBodiesoption, so consecutive guards whose bodies repeat the same statements before the same exit (for example, twoifblocks that each log andcontinue) are reported and can be combined with||. In TypeScript, the rule only combines bodies when type information shows every reference has the same type in both.d5523c5:ultracite inittakes--workspace-framework <path>=<framework>for monorepos whose workspaces use different frameworks. For each workspace, it writes an Oxlint, Biome or ESLint config in that directory that extends the root config and adds the workspace's presets, so framework rules only run where they apply and editors see the same rules asultracite check.Configuration
📅 Schedule: (in timezone Europe/Warsaw)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.