π§ chore(sync): advance main to dev/v1.6 for the v1.6.0-rc.6 cut - #603
Conversation
Review-driven corrections to the v1.5.2 docs/api batch (040d490), found by two adversarially-verified review passes. Targets v1.6 (no standalone v1.5.2). - π fix(api): define NotificationOutboxEntry/NotificationOutboxResult schemas β both were referenced by $ref but never declared, making the assembled OpenAPI document invalid (Swagger UI/Redoc/codegen failed on the unresolved refs) - β test(api): add a recursive guard that fails on ANY dangling #/components/schemas/* $ref, so this class of bug can't regress - π fix(api): emit the canonical /api/v1 base in every pagination _links (container list, watch, security vulnerabilities, update-operations, audit) to match the migrated spec - π fix(api): correct registryWebhookSignature headers in the spec β drop x-gitlab-token (never checked), add x-registry-signature + x-harbor-signature (both accepted by the handler) - π fix(api): revert LogoutResponse.logoutUrl to type:string (the handler omits the field, it never emits null) - π fix(api): correct the remote-trigger 409 description (rollback-container only), document the outbox GET 500, and the scan-all 400 scanner-not-configured case - β test(api): add spec-structure tests for /api/v1/log/components, /auth/status, /api/v1/app auth posture, RegistryWebhookResponse, and the full /api/v1/webhooks/registry responses - π docs(api): correct the registry webhook header list in api/index.mdx; drop legacy dd.trigger.include from the edited eligibility row; document the now-reachable GET /api/v1/containers/backups in CHANGELOG
- π fix(ui): cancelUpdateOperation now POSTs /api/v1/operations/:id/cancel (was the deprecated /api/ alias slated for removal in v1.6.0, which would have 404'd) - π fix(ui): ConfigView webhook panel and copyable curl example show /api/v1/webhook/* to match the published docs
β¦anches - π docs(readme): point the docs-refresh note and roadmap row at v1.6 (the standalone v1.5.2 lane was dropped β folded into v1.6) - π docs(contributing): add the qlty-smells advisory row and renumber the pre-push pipeline table to match lefthook.yml - β test(web): cover the docs-link-rewriter bare /docs/assets and single-quoted-attribute branches
- suppressHydrationWarning on the 7 homepage .reveal wrappers (the pre-hydration reveal bootstrap mutates them, causing a hydration mismatch) - og:image + twitter:image on /compare, /compare/[slug], and the Trivy security advisory (page-level openGraph was replacing the layout's and dropping the share image) - dockge compare: i18n row reflects shipped 17-locale support (was stale 'Planned'/competitor; both ship i18n now β tie)
- discord-icon.tsx: official Discord mark, mirrors github-icon API - site-config: discordUrl invite - footer: Discord social link between GitHub and Docs - README: Community section pointing to Discord + GitHub Issues
First commit of #242 table unification. Adds an isMobile prop (default false, non-regressive): the first non-icon column pins sticky-left during horizontal scroll, interactive rows are floored at a 44px touch target, and the 8px resize handle is hidden on touch. 3769 ui tests green at 100% coverage. Refs: #242
Removes the DataCardGrid/DataListAccordion render branches and the view-mode switcher binding from the 5 simple data views; DataTable now renders unconditionally. Also drops AuditView's ?view= URL-query mode mechanism (now a no-op). useViewMode/DataCardGrid/DataListAccordion source files are deleted in a later commit. 3763 ui tests green at 100% coverage, typecheck clean. Refs: #242
Removes the card/list render branches and view-mode switcher from the 4 remaining non-container views. AgentsView drops its non-table EmptyState (DataTable empty slot covers it); SecurityView keeps its breakpoint-driven isCompact column swap; TriggersView's inline test button moves into the DataTable actions column. 3763 ui tests green at 100% coverage, typecheck clean. Refs: #242
Removes the ~427-line DataCardGrid/DataListAccordion render block and the containerViewMode switcher from ContainersGroupedViews/ContainersView/ContainersListContent; the column picker is now always shown, and the template-context type + its typecheck guard drop containerViewMode. Dead helpers (getContainerViewMemo, getGroupByKey) removed. 3747 ui tests green at 100% coverage, tsc clean. Refs: #242
Removes DataCardGrid.vue and DataListAccordion.vue (now-unused card/list surfaces) plus useViewMode.ts and auditViewMode.ts, each with its spec. Cleans up the main.ts global registrations, the preferences index export, the ComponentImports/main registration assertions, the data-view stubs, and rewrites the lifecycle spec off useViewMode. 3674 ui tests green at 100% coverage, tsc clean. Refs: #242
The table/cards/list switcher is dead now that every view is table-only. Removes the modelValue/viewModes props, the update:modelValue emit, defaultViewModes, viewModeName/viewModeLabel, and the switcher button group; keeps the count display, filter toggle, badge, slots, and filter panel. Test stubs simplified to match. 3669 ui tests green at 100% coverage, tsc clean. Refs: #242
Every view is table-only now, so viewMode/mode are dead. Bumps CURRENT_SCHEMA_VERSION 7->8, removes containers.viewMode and views.*.mode from the schema and DEFAULTS (security/agents keep their sort fields; the mode-only views collapse to empty stubs), and strips the dead migration branches (SIMPLE_VIEW_MODE_KEYS, migrateSimpleViewModePreferences, migrateAuditViewPreference, the mode logic in migrateSortableViewPreference/migrateContainersPreference/sanitizeContainers). Legacy dd-*-view-v1 keys stay in LEGACY_KEYS so they're still cleaned up, just not migrated. mergeDefaults drops any persisted mode field, so no explicit v7->v8 transform is needed. 3657 ui tests green at 100% coverage, tsc clean. Refs: #242
After schema v8 dropped every view-mode field, the ViewMode type, VIEW_MODES set, and isViewMode guard have zero consumers. Removes them from schema.ts/validators.ts and the preferences index re-export, with their validators.spec/index.spec tests. 3651 ui tests green at 100% coverage, tsc clean. Refs: #242
The v1.5.1 brand refresh (#439) moved the website to the cropped whale "headshot" icon but left the app UI on the old full-body whale. Ship the same icon set in ui/ so the product matches getdrydock.com. - Replace ui/public favicon.ico, favicon-96x96.png, apple-touch-icon.png and both web-app-manifest PNGs with the website's headshot assets - Remove the stale favicon.svg (browsers preferred it over the PNGs, so it kept rendering the old mark) and its <link>; the website ships no SVG - Add a ?v=2 cache-buster to the icon links so existing installs re-fetch instead of serving the aggressively cached old favicon - Match the website manifest's "any maskable" PWA icon purpose Ref: #439
β¦ast (#466) The SPA history-mode fallback returned index.html for every unmatched path, including a request for a content-hashed /assets/*.js bundle that a prior build referenced but the upgrade deleted. Browsers won't execute a module script served as text/html, so a page cached from the old build (often by a reverse proxy that ignores the HTML's Cache-Control: no-store) white-screened, and caching proxies could poison the asset URL with HTML. - π fix(api): return a clean 404 (no-store) for /assets/* misses in the UI catch-all instead of the SPA shell (app/api/ui.ts) - β test(api): cover the 404 branch + the index.html fallback branch (app/api/ui.test.ts β 100% coverage on ui.ts) - π docs(server): add a "Reverse proxy caching (blank page after an update)" section with browser/proxy cache guidance + per-proxy notes Doesn't self-heal an already-blank page (clearing the browser/proxy cache is still the fix for that), but stops drydock turning a missing bundle into a silent white screen. Ref: #466
C8-fix for #242 responsive DataTable β corrects the a11y/touch defects shipped in 4b11bd8: - logical inset props (start-0/end-0) so the sticky identity + actions columns render correctly in RTL (ar) - z-stack fix: header sticky cell z-20 out-stacks body sticky cell z-10 - 48px min touch row height (Material 3), overscroll-x-contain (Safari back-nav), scope=col on all header cells - new per-theme --dd-sticky-separator token (>=3:1, WCAG 1.4.11) replacing the sub-threshold grey box-shadow; avoids reusing the 1.58:1 --dd-border-strong Follow-up (not in this commit): AppIconButton size=toolbar renders 32px β clears WCAG 2.5.8 min (24px) but under the 44px target.
β¦ainer width - β¨ feat(ui): card mode renders each row as a stacked card (title from the first non-icon column, priority-or-order subtitle, dt/dd body) reusing the existing cell/actions/full-row slots β no per-view changes needed - β¨ feat(ui): native sort select + direction toggle replace the clickable table header in card mode, emitting the same update:sortKey/update:sortAsc - π i18n(ui): add sharedComponents.dataTable.sortBy + sort direction labels - β test(ui): 41 new card-mode specs (breakpoint boundaries, slot reuse, sort control edge cases, virtual-scroll spacers, 44px touch targets, logical-properties-only RTL guard) Card mode triggers on DataTable's own container width (ResizeObserver), deliberately separate from the 768px window-based isMobile prop. Refs: #242
- β¨ feat(ui): first @media print rules in the app β cards keep break-inside: avoid so a card never splits across pages, the card-mode sort chrome (select + direction toggle) is hidden on paper, and the table's horizontal scroll container becomes overflow: visible so off-screen columns print instead of being clipped - β test(ui): source-assertion specs for the print block (house pattern from the column-sizing standard) + DOM assertions for the two new hook classes (dd-data-table-scroll, dd-data-table-card-sort-bar) Refs: #242
β¦ composition - β¨ feat(ui): new DataTableColumn fields β cardTitle forces a column to be the card title (table mode unaffected); cardPriority drives subtitle promotion (highest positive wins, ties by declared order) and body demotion (negative = out of the card; data stays reachable via the DetailPanel). Deliberately distinct from the auto-hide priority field, whose semantics run the opposite direction (higher = dropped first) β Containers pipes those values through, so reusing them would have promoted registry/uptime as the subtitle - π fix(ui): NotificationsView card title was the bare enabled ToggleSwitch (first non-icon column) β name is now flagged cardTitle, triggers is the subtitle - π fix(ui): AuditView card title was the raw timestamp β containerName is now the title, action the subtitle - β¨ feat(ui): density annotations β Containers subtitle = update kind with server/registry/uptime demoted; Watchers demotes cron; Agents subtitle = status with docker/os demoted; Servers subtitle = status; Security wide branch subtitle = critical - π fix(ui): Dashboard recent-updates widget mobile columns had empty labels, rendering blank dt labels in card mode β now reuse the desktop i18n keys - β test(ui): 27 new specs across DataTable, useColumnVisibility, and eight view suites, incl. regression proof that the auto-hide priority field no longer influences card composition Refs: #242
- β¨ feat(ui): new useFocusTrap composable β saves the previously focused element on activation, focuses the container (tabindex=-1), cycles Tab/Shift+Tab within focusable descendants, and restores focus on deactivation or scope disposal when the saved element is still connected. Built on a post-flush watchEffect because watch with immediate+post still runs its first call synchronously at setup, before template refs bind - β¨ feat(ui): DetailPanel activates the trap only when open on mobile β the desktop panel is a non-modal sticky sidebar that stays open across row clicks, so trapping or moving focus there would break keyboard row-browsing (matches the existing conditional aria-modal) - π fix(ui): mobile panel offset used physical right-0 β now logical end-0 so the overlay anchors correctly in RTL locales - β test(ui): 15 composable specs (activation, restore, disconnected restore target, wrap both directions, no-focusables, disposal) + 6 DetailPanel specs incl. desktop must-not-steal-focus guards Refs: #242
β¦only User column pickers hide columns from the table, but card mode (<640px container) deliberately ignores the hidden set β mobile has no picker to un-hide a column, so every non-demoted column must stay reachable there. - β¨ feat(ui): hiddenColumnKeys prop filters the table pipeline at normalizedColumns, so flex width redistribution excludes hidden columns and the template loops need no changes; full-width/spacer colspans follow the filtered count - β¨ feat(ui): card computeds now read an unfiltered normalized set (cardResolvedColumns) with a card-side first-non-icon fallback, so the card title stays stable even when its column is table-hidden - β test(ui): 10 specs β th/td/colgroup omission, width redistribution, sticky-column reflow when the first non-icon column is hidden, colspan shrink, card-mode precedence (hidden column reappears in cards), and composition with cardPriority demotion (each mechanism in its own mode) Refs: #242
β¦ble, picker)
- β¨ feat(ui): defaulted views.{security,watchers,servers,audit,agents}
.hiddenColumns preference fields β persisted as the HIDDEN set (not the
visible set, unlike Containers) so columns added in future releases stay
visible for existing users; no schema version bump needed, mergeDefaults
backfills; sanitizeViews clamps garbage, unknown keys, and required keys
- β¨ feat(ui): useViewColumnVisibility composable β per-call state seeded
from preferences with deep-watch write-back, required-column toggle
no-op, hiddenCount scoped to the current column set, reset
- β¨ feat(ui): shared DataTableColumnPicker component modeled on the
Containers picker (config icon trigger + hidden-count badge, teleported
flip-aware popover, Escape/outside-click close), hidden below 640px β
no picker on mobile since card mode ignores hiding; required rows never
emit toggle
- π i18n(ui): sharedComponents.columnPicker keys (tooltip, heading,
reset, badge tooltip)
- β
test(ui): 41 specs across sanitize clamps, composable persistence,
and picker interaction; preferences .ts files stay gate-enforced at 100%
Refs: #242
β¦and Audit - β¨ feat(ui): each view marks its identity column required, derives pickerColumns from tableColumns, persists hiding via useViewColumnVisibility, and renders DataTableColumnPicker in the filter bar's extra-buttons slot - β»οΈ refactor(ui): SecurityView's compact (<1024px window) branch no longer swaps to a two-column set β tableColumns always returns all 7 and the severity columns are force-hidden via the hiddenColumnKeys union instead, so card mode finally sees the full set (critical subtitle annotation engages on mobile); the picker hides in compact so users can't toggle columns the override would re-hide - π fix(ui): SecurityView spec mocked useBreakpoints with plain objects instead of refs, so template auto-unwrap never applied and every isCompact v-if was constantly truthy in tests β dormant infra bug, now real refs - β test(ui): sync guards pinning each view's column keys to VIEW_TABLE_COLUMN_KEYS, picker render/toggle/persistence per view, Security compact-union and picker-absence cases Refs: #242
β¦ path - β»οΈ refactor(ui): delete the bespoke picker (in-memory visible-set ref, non-teleported popover, hand-rolled positioning) in favor of DataTableColumnPicker + useViewColumnVisibility - β¨ feat(ui): picker choices now persist to preferences.views.agents.hiddenColumns β the bespoke picker had no persistence and reset on every reload - β»οΈ refactor(ui): the compact (<1024px window) collapse to required columns now flows through the hiddenColumnKeys union instead of pre-filtering, so card mode sees the full 7-column set; the in-name compact badge row is unchanged - ποΈ remove(ui): dead agentsView.list.toggleColumns/columnPickerHeading keys across all 17 locales (key-parity gate forbids orphans) - β test(ui): sync guard, required flag, persistence, compact union/picker-absence, badge-row cases; useBreakpoints mock switched to real refs (same dormant auto-unwrap bug class as SecurityView.spec) Refs: #242
Containers pre-filtered its columns before DataTable saw them, so picker-hidden and width-auto-hidden columns vanished from mobile cards β where no picker exists to bring them back. - π fix(ui): tableColumns now maps the full column catalog and hiding flows through DataTable's hiddenColumnKeys prop (picker-hidden βͺ width-auto-hidden), which card mode ignores by design; the uptime ticker stays gated on picker-visibility so opt-out users pay no cost - β»οΈ refactor(ui): ContainersListContent adopts the shared DataTableColumnPicker; bespoke popover, showColumnPicker plumbing, and global click/scroll handlers deleted; new resetColumns restores the shipped default set (opt-in uptime stays hidden) - ποΈ remove(ui): activeColumns (zero consumers) and the +N auto-hidden badge (picker-hidden count is the actionable signal); dead containerComponents.listContent picker keys purged from all 17 locales - β test(ui): hiddenColumnKeys cases (picker-only, auto-only, union, opt-in column), reset, wiring assertions across five containers specs Refs: #242
- ποΈ remove(ui): dataFilterBar.viewMode/viewModeLabel/viewModes.* (the switcher died in a76780f) and dataCardGrid/dataListAccordion keys (components died in d3329a0) from sharedComponents - ποΈ remove(ui): dead per-view card/list label sets (audit, security, registries, servers, triggers, watchers, agents) β every removal backed by a zero-consumer grep incl. template-literal t() sweeps - π i18n(ui): securityView.card.total kept (live in SecurityDetailPanel); all 17 locales updated in lockstep, -884 lines Refs: #242
Settles the mainβdev/v1.6 divergence. main carried the rc.3/rc.4/rc.5 cuts plus #579/#580/#581/#583/#586, while dev/v1.6 was left holding superseded #566-era UI. Verified lossless before merging β main is a strict superset of dev/v1.6: - Three-way merge-base analysis over all 112 differing paths found 0 files where dev/v1.6 advanced and main did not. - All 14 dev-side rc.3 CHANGELOG bullets are already present on main under the identical [1.6.0-rc.3] heading. - e2e/features/step_definitions/ui.js exists only on dev because #581 deleted it deliberately during the Cucumber hardening. - The 16 non-English dashboardView.updateKind.digest keys were removed deliberately by #580 alongside the EN "Digest" β "Image update" rename, so the runtime falls back to the current wording until Crowdin re-translates. Carrying dev's pre-rename values forward would have undone that fix. - The remaining conflicts were stale rc.3 version strings and the #566 update-status vocabulary that #580 superseded. Every conflict resolved to main. The resulting tree is byte-identical to origin/main (tree 6dd9fc1).
Rescued from the `fix/playwright-qa-readiness` worktree during the mainβdev reconciliation audit β this commit had reached neither branch and would have been lost when that worktree was cleaned up. It's the root-cause fix for the Playwright flake that burned an rc.5 cut cycle (`apiRequestContext.post: Timeout 45000ms` on the notification-bell spec, plus the intermittent "Start drydock" Cucumber failures). ## What it does - **`e2e/playwright/auth.setup.ts`** β auth setup now polls `/api/v1/containers` until the *complete* 29-container QA fixture snapshot is present (specific named containers with their `dd.group` labels and a populated `result`) before writing `storageState`. Previously specs could start against a half-populated store, so assertions raced the startup watcher scan. 180s poll budget at 2s intervals, setup timeout raised to 240s. - **`test/qa-compose.yml`** β parks the local and remote watcher crons on `0 0 29 2 *` with `JITTER=0` and `WATCHEVENTS=false`, so no scheduled or event-driven rescan can mutate fixtures mid-suite. The startup scan still runs; only the later races are removed. - **`.github/tests/e2e-playwright-workflow.test.ts`** β coverage asserting the readiness gating stays wired up. ## Verification Full pre-push gate green: clean-tree, ts-nocheck, biome, qlty, qlty-smells, scripts-test, workflow-tests (9 files / 46 tests), typecheck-ui, coverage (app + ui both at 100%), build. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> β¨ Added - Playwright fixture-readiness gating for 29 expected QA containers before saving `storageState`. - Workflow test coverage for setup sequencing and readiness configuration. - Documentation of the startup race and cold-stack validation. π§ Changed - Increased Playwright setup timeout to 240 seconds with a 180-second readiness polling budget. - Disabled scheduled and event-driven watcher rescans during browser tests while preserving the startup scan. - Added required container, label, result, and update-availability checks. - Readiness validation is tightly coupled to a hardcoded set of 29 containers and labels. - The `0 0 29 2 *` watcher schedule should remain intentional and documented as a disabled schedule. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
β¦anch (#590) v1.6's rc.3βrc.5 fixes landed straight on `main` while `dev/v1.6` sat 112 files behind holding superseded UI, and nothing caught it for weeks. Two gaps made that possible; both are closed here. ## 1. `release-cut.yml` refuses to tag a drifted main New *Assert main is in sync with the active dev branch* step derives `dev/vX.Y` from the release tag and fails the cut when main's tree differs, so a direct-to-main fix can't be tagged without being forward-ported first. - Derives the branch from the tag rather than hardcoding a version (`v1.6.0-rc.6` β `dev/v1.6`, `v1.10.3-rc.1` β `dev/v1.10`). - Skips cleanly when the dev branch is absent β retired after GA, or not yet created. - Runs after `Checkout` and before any tagging or publishing work. **It compares trees, not commit ancestry.** This repo allows squash merges only (`allow_merge_commit: false`, `allow_rebase_merge: false`), so every `dev β main` sync mints a commit `dev` lacks. A `merge-base --is-ancestor` check would fail on every cut after the first and would have to be disabled, defeating the guard. Identical trees is the invariant that actually holds. ## 2. `ci-verify.yml` now gates `dev/**` pull requests The trigger was `pull_request: branches: [main]`, so **PRs into `dev/v1.6` ran no backend or frontend CI at all** β dev was only ever as good as whatever the author ran locally. The integration branch is where features are supposed to land, so it now gets the same gate main gets. ## Verification Full pre-push gate green (284s): clean-tree, ts-nocheck, biome, qlty, qlty-smells, scripts-test, workflow-tests, typecheck-ui, coverage (app + ui at 100%), build, zizmor. New tests cover the failure path, the tree-not-ancestry choice, the post-GA skip, step ordering, and the widened trigger. Guard logic was also exercised against the live repo: tagβbranch derivation for 5 tag shapes, `ls-remote` presence/absence, and a real `main` vs `dev/v1.6` comparison (currently in sync, so a cut today passes). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog β¨ Added - Added a release guard that blocks tagging and publishing when `main`βs tree differs from the active `dev/vX.Y` branch. - Added coverage for drift detection, retired development branches, tree comparison, ordering, and CI triggers. π§ Changed - CI verification now runs for pull requests targeting `main` and `dev/**`. - Confirm the release guard derives the expected development branch correctly from `release_tag`. - Confirm missing development branches intentionally bypass the drift check. - Confirm the guard executes before all tagging and publishing steps. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
The switcher read as buried under the logo, title, and tagline. Since the tagline directly above it is English, a non-English reader hit a sentence they may not read before finding their own language. It is now the first thing rendered. Kept inside `<div align="center">` rather than above it, so it stays centered instead of rendering left-aligned over a centered logo. Applied to all seven READMEs (`README.md` + 6 translations) so the copies do not drift β the Spanish one needed a different matcher since Spanish is bold rather than a link there. Pure move: 2 lines changed per file, no content edits. Full pre-push gate green (275s), `release-docs-identity` 11/11. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ### Changelog - π§ Changed language switcher placement in all seven README files, moving it above the logo while keeping it within the centered header. - ποΈ Removed the previous switcher locations without changing content. - β Full pre-push gate passed, including `release-docs-identity` (11/11). <!-- end of auto-generated comment: release notes by coderabbit.ai -->
β¦anch (#592) #590 makes release-cut refuse to tag a drifted `main`. This is the other half: the automation that was creating the drift. Renovate and Crowdin both opened their PRs against `main`. Every one of those merges put work on `main` that `dev/v1.6` never received β 11 such PRs are open right now β so with #590 in place the next cut would fail on drift the bots themselves caused. ## Renovate `baseBranches` now matches `dev/vX.Y` by pattern instead of falling through to the default branch. A pattern rather than a pinned `dev/v1.6` so it follows the branch into `dev/v1.7` without an edit that gets forgotten at the minor bump. Verified the regex accepts `dev/v1.6` and `dev/v1.10` and rejects `main`, `dev/v1.6.1`, and `release/v1.6`. ## Crowdin The action's base branch is a static input, so a hardcoded value would go stale the same way. A new step resolves it at run time: highest `dev/vX.Y` on origin, sorted with `-V` so `dev/v1.10` beats `dev/v1.9` rather than losing a lexical compare. Falls back to the default branch when no dev branch exists β the window between a GA and the next branch being cut β so translations are never stranded with nowhere to land. Needs `fetch-depth: 0`; the default shallow clone has no refs to query. Source upload now also fires on `dev/**`, since that's where the English strings change first. Resolution logic was run against the live repo: it returns `dev/v1.6`. ## Playwright `pull_request` was `[main]` only, so **no PR into `dev/v1.6` has ever run the browser suite.** The first signal was release-cut polling "Wait for successful E2E Playwright on release source SHA", which is a cut cycle burned on something a PR run would have caught. Same widening #590 applied to `ci-verify`. ## Verification Full pre-push gate green (275s): clean-tree, ts-nocheck, biome, qlty, qlty-smells, scripts-test, workflow-tests, typecheck-ui, coverage (app + ui at 100%), build, zizmor. New `integration-branch-targets.test.ts` covers the Renovate pattern against five branch shapes, the Crowdin resolution step and its fallback, the `fetch-depth` requirement, and both widened trigger lists. The 11 open bot PRs get retargeted once this lands. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> β¨ Added - Tests covering integration-branch matching, Crowdin fallback behavior, checkout depth, and workflow triggers. π§ Changed - Renovate now targets only `dev/vX.Y` branches. - Crowdin dynamically targets the highest matching `dev/vX.Y` branch, falling back to the default branch. - Crowdin uploads now trigger from `main` and `dev/**`. - Playwright and `ci-verify` cover pull requests targeting `main` and `dev/**`. - Crowdin uses full-depth checkout for branch resolution. - Contributor guidance now directs changes and PRs to the active release branch. π Fixed - Prevented bot- and contributor-created drift on `main` from causing release-cut failures. - Retarget the 11 existing bot PRs to the appropriate integration branch after merge. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@fontsource/comic-mono](https://fontsource.org/fonts/comic-mono) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/other/comic-mono)) | [`5.2.5` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fcomic-mono/5.2.5/5.3.0) |  |  | | [@fontsource/commit-mono](https://fontsource.org/fonts/commit-mono) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/other/commit-mono)) | [`5.2.5` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fcommit-mono/5.2.5/5.3.0) |  |  | | [@fontsource/ibm-plex-mono](https://fontsource.org/fonts/ibm-plex-mono) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/google/ibm-plex-mono)) | [`5.2.7` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fibm-plex-mono/5.2.7/5.3.0) |  |  | | [@fontsource/inconsolata](https://fontsource.org/fonts/inconsolata) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/google/inconsolata)) | [`5.2.8` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2finconsolata/5.2.8/5.3.0) |  |  | | [@fontsource/jetbrains-mono](https://fontsource.org/fonts/jetbrains-mono) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/google/jetbrains-mono)) | [`5.2.8` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fjetbrains-mono/5.2.8/5.3.0) |  |  | | [@fontsource/source-code-pro](https://fontsource.org/fonts/source-code-pro) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/google/source-code-pro)) | [`5.2.7` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fsource-code-pro/5.2.7/5.3.0) |  |  | | [@iconify-json/lucide](https://icon-sets.iconify.design/lucide/) | [`1.2.116` β `1.2.118`](https://renovatebot.com/diffs/npm/@iconify-json%2flucide/1.2.116/1.2.118) |  |  | | [@iconify-json/tabler](https://icon-sets.iconify.design/tabler/) | [`1.2.35` β `1.2.37`](https://renovatebot.com/diffs/npm/@iconify-json%2ftabler/1.2.35/1.2.37) |  |  | | [@tailwindcss/vite](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)) | [`4.3.2` β `4.3.3`](https://renovatebot.com/diffs/npm/@tailwindcss%2fvite/4.3.2/4.3.3) |  |  | | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`25.9.4` β `25.9.5`](https://renovatebot.com/diffs/npm/@types%2fnode/25.9.4/25.9.5) |  |  | | [@vitejs/plugin-vue](https://redirect.github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#readme) ([source](https://redirect.github.com/vitejs/vite-plugin-vue/tree/HEAD/packages/plugin-vue)) | [`6.0.7` β `6.0.8`](https://renovatebot.com/diffs/npm/@vitejs%2fplugin-vue/6.0.7/6.0.8) |  |  | | [@vitest/coverage-v8](https://vitest.dev/guide/coverage) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8)) | [`4.1.9` β `4.1.10`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/4.1.9/4.1.10) |  |  | | [knip](https://knip.dev) ([source](https://redirect.github.com/webpro-nl/knip/tree/HEAD/packages/knip)) | [`6.24.0` β `6.27.0`](https://renovatebot.com/diffs/npm/knip/6.24.0/6.27.0) |  |  | | [postcss](https://postcss.org/) ([source](https://redirect.github.com/postcss/postcss)) | [`8.5.16` β `8.5.21`](https://renovatebot.com/diffs/npm/postcss/8.5.16/8.5.21) |  |  | | [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.3.2` β `4.3.3`](https://renovatebot.com/diffs/npm/tailwindcss/4.3.2/4.3.3) |  |  | | [vite](https://vite.dev) ([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`8.1.3` β `8.1.5`](https://renovatebot.com/diffs/npm/vite/8.1.3/8.1.5) |  |  | | [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.9` β `4.1.10`](https://renovatebot.com/diffs/npm/vitest/4.1.9/4.1.10) |  |  | | [vue](https://vuejs.org/) ([source](https://redirect.github.com/vuejs/core)) | [`3.5.39` β `3.5.40`](https://renovatebot.com/diffs/npm/vue/3.5.39/3.5.40) |  |  | | [vue-i18n](https://redirect.github.com/intlify/vue-i18n/tree/master/packages/vue-i18n#readme) ([source](https://redirect.github.com/intlify/vue-i18n/tree/HEAD/packages/vue-i18n)) | [`11.4.6` β `11.4.7`](https://renovatebot.com/diffs/npm/vue-i18n/11.4.6/11.4.7) |  |  | | [vue-router](https://router.vuejs.org) ([source](https://redirect.github.com/vuejs/router)) | [`5.1.0` β `5.2.0`](https://renovatebot.com/diffs/npm/vue-router/5.1.0/5.2.0) |  |  | --- ### Release Notes <details> <summary>fontsource/font-files (@​fontsource/comic-mono)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/90f4206a30838317875479a13ee5046613af42f7...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/90f4206a30838317875479a13ee5046613af42f7...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/commit-mono)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/90f4206a30838317875479a13ee5046613af42f7...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/90f4206a30838317875479a13ee5046613af42f7...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/ibm-plex-mono)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/inconsolata)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/jetbrains-mono)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/source-code-pro)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/9c74cedc2a2c1989d2faf595c62c23f617144a30...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/9c74cedc2a2c1989d2faf595c62c23f617144a30...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>tailwindlabs/tailwindcss (@​tailwindcss/vite)</summary> ### [`v4.3.3`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#433---2026-07-16) [Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v4.3.2...v4.3.3) ##### Fixed - Support `--watch --poll[=ms]` in `@tailwindcss/cli` when filesystem events are unreliable or unavailable ([#​20297](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20297)) - Canonicalization: match arbitrary hex colors against theme colors case-insensitively (e.g. `bg-[#fff]` and `bg-[#FFF]` β `bg-white`) ([#​20298](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20298)) - Prevent Preflight from overriding Firefox's native `iframe:focus-visible` outline styles ([#​20292](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20292)) - Ensure `theme('colors.foo')` in JS plugins resolves correctly when both `--color-foo` and `--color-foo-bar` exist ([#​20299](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20299)) - Ensure fractional opacity modifiers work with named shadow sizes like `shadow-sm/12.5`, `text-shadow-sm/12.5`, `drop-shadow-sm/12.5`, and `inset-shadow-sm/12.5` ([#​20302](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20302)) - Parse selectors like `[data-foo]div` as two selectors instead of one ([#​20303](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20303)) - Ensure `@tailwindcss/postcss` rebuilds when a preprocessor like Sass changes the input CSS without changing the input file on disk ([#​20310](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20310)) - Ensure CSS nesting is handled even when Lightning CSS isn't run, such as in `@tailwindcss/browser` and Tailwind Play ([#​20124](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20124)) - Prevent achromatic theme colors from shifting hue when mixed in polar color spaces like `oklch` ([#​20314](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20314)) - Ensure `--spacing(0)` is optimized to `0px` instead of `0` so it remains a `<length>` when used in `calc(β¦)` ([#​20319](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20319)) - Load `@parcel/watcher` only when needed in `@tailwindcss/cli --watch` mode, so one-off builds and `--watch --poll` work when `@parcel/watcher` can't be loaded ([#​20325](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20325)) - Use explicit platform fonts instead of `system-ui` and `ui-sans-serif` so CJK text respects the page's `lang` attribute on Windows ([#​20318](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20318)) - Prevent `@tailwindcss/upgrade` from rewriting ignored files when run from a subdirectory ([#​20329](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20329)) - Ensure earlier `@source` rules pointing to nested files are scanned when later `@source` rules point to files in parent folders ([#​20335](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20335)) - Prevent `@tailwindcss/vite` from triggering full page reloads when scanned files are processed by Vite but haven't been loaded as modules yet ([#​20336](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20336)) </details> <details> <summary>vitejs/vite-plugin-vue (@​vitejs/plugin-vue)</summary> ### [`v6.0.8`](https://redirect.github.com/vitejs/vite-plugin-vue/blob/HEAD/packages/plugin-vue/CHANGELOG.md#small-608-2026-07-14-small) ##### Features - **plugin-vue:** add forced vapor mode option ([#​766](https://redirect.github.com/vitejs/vite-plugin-vue/issues/766)) ([d59c3c0](https://redirect.github.com/vitejs/vite-plugin-vue/commit/d59c3c04b0c5cd920bab5f0f6000bedfef901e1c)) ##### Bug Fixes - **deps:** update all non-major dependencies ([#​781](https://redirect.github.com/vitejs/vite-plugin-vue/issues/781)) ([d369e5a](https://redirect.github.com/vitejs/vite-plugin-vue/commit/d369e5a57592ed525c4da5ef0458cb89a6977ad2)) </details> <details> <summary>vitest-dev/vitest (@​vitest/coverage-v8)</summary> ### [`v4.1.10`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.10) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10) ##### Β Β Β π Bug Fixes - **browser**: Check fs access in builtin commands \[backport to v4] Β -Β by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (claude-opus-4-8)** in [#​10680](https://redirect.github.com/vitest-dev/vitest/issues/10680) [<samp>(5c18d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5c18dd267) - **vm**: Fix external module resolve error with deps optimizer query for encoded URI \[backport to v4] Β -Β by [@​SveLil](https://redirect.github.com/SveLil) and [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [#​10661](https://redirect.github.com/vitest-dev/vitest/issues/10661) [<samp>(bae52)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bae52b511) ##### Β Β Β Β [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10) </details> <details> <summary>webpro-nl/knip (knip)</summary> ### [`v6.27.0`](https://redirect.github.com/webpro-nl/knip/releases/tag/knip%406.27.0): Release 6.27.0 [Compare Source](https://redirect.github.com/webpro-nl/knip/compare/knip@6.26.0...knip@6.27.0) - Add Temporal plugin ([`98191a0`](https://redirect.github.com/webpro-nl/knip/commit/98191a04aad0572bead191b101bfecef75067b0c)) - Handle -d alias for react-email dir argument ([`53d1fec`](https://redirect.github.com/webpro-nl/knip/commit/53d1fec3213db8d6a84dfa7a82050b122782e065)) - Expand pnpm script references with forwarded arguments ([`33e9799`](https://redirect.github.com/webpro-nl/knip/commit/33e9799df39450033061b9c4c07daf22f5d15721)) - Treat path-shaped script tokens as file references, extend known global binaries ([`d9508c2`](https://redirect.github.com/webpro-nl/knip/commit/d9508c282ab81351beda4b2f859435b49f142c51)) - Mark tsdown neverBundle dependencies as referenced ([`5fd863b`](https://redirect.github.com/webpro-nl/knip/commit/5fd863ba12e68842f91ab1a94e7e30d1e571da92)) - Support TanStack Start in tanstack-router plugin ([`bd63cd8`](https://redirect.github.com/webpro-nl/knip/commit/bd63cd8af88dac03a98aa17f1add322f7bdf4a94)) - Mark vite ssr.external dependencies as referenced ([`91de938`](https://redirect.github.com/webpro-nl/knip/commit/91de938032062cb667bced0eadef9e67d1e20b1f)) - Expand bun, npm, and yarn script references with forwarded arguments ([`b5a3176`](https://redirect.github.com/webpro-nl/knip/commit/b5a31767a83e2cec3fb20c3b146d94c0412a4fd6)) - Add Latitude as sponsor ([`4267675`](https://redirect.github.com/webpro-nl/knip/commit/42676759cad5fb10ac96fd7c0457037e906f4b68)) - Regenerate plugin list in docs ([`1d2cdff`](https://redirect.github.com/webpro-nl/knip/commit/1d2cdffb4d4151f848c44e066eff43e9efbf44fe)) - Support Vue 2 template auto-imports (close [#​1881](https://redirect.github.com/webpro-nl/knip/issues/1881)) ([`2157f39`](https://redirect.github.com/webpro-nl/knip/commit/2157f3913f77216d268b2255899b6fc58609f9bb)) - Ignore block-commented stylesheet imports (resolve [#​1880](https://redirect.github.com/webpro-nl/knip/issues/1880), close [#​1882](https://redirect.github.com/webpro-nl/knip/issues/1882)) ([`a627f53`](https://redirect.github.com/webpro-nl/knip/commit/a627f53221547d5397d70722fcc2fd723889e579)) - Support TypeScript 5.0 narrowing for ssr.external ([`989292f`](https://redirect.github.com/webpro-nl/knip/commit/989292f79b9d19028bfc7ba988b74ba691041a45)) - Resolve local binaries from bun run ([`5e9a7f0`](https://redirect.github.com/webpro-nl/knip/commit/5e9a7f0286e2c2175bb299c514cc7b67a7cf24f1)) - Support Vitest inline project config extensions ([`f682327`](https://redirect.github.com/webpro-nl/knip/commit/f682327f6181f44e3924715efa7404aa39e532f0)) - Resolve package names from aliased node\_modules paths ([`c273d5f`](https://redirect.github.com/webpro-nl/knip/commit/c273d5fbc1b0d3eaf27b38c3f31d3a2a4b6b184a)) - Support Tailwind CSS URL imports ([`57a4770`](https://redirect.github.com/webpro-nl/knip/commit/57a4770447cc4c8f9ea4ffb9171c0c92eed4f255)) - Resolve unbuilt workspace package exports (close [#​1877](https://redirect.github.com/webpro-nl/knip/issues/1877)) ([`1b0a2c0`](https://redirect.github.com/webpro-nl/knip/commit/1b0a2c0ee784db165c7f92fe10397a6cb513c1cf)) - Skip unresolved imports of gitignored generated files ([`605c904`](https://redirect.github.com/webpro-nl/knip/commit/605c9049f73838beb1c6fee83c6a5421ae1a6d07)) - Attribute imports of aliased packages to the declared dependency ([`d05e775`](https://redirect.github.com/webpro-nl/knip/commit/d05e775c9a3a5676dc9eadcc1093f7d9983efd06)) - Flag unresolvable imports of transitive peer deps as unlisted (resolve [#​1883](https://redirect.github.com/webpro-nl/knip/issues/1883)) ([`18f0bff`](https://redirect.github.com/webpro-nl/knip/commit/18f0bff4ea683837f75ca744d3fbde52df49b297)) - Don't count ambient module declarations in script files as imports ([`e52aecf`](https://redirect.github.com/webpro-nl/knip/commit/e52aecfd7c022cbe72b1c11dde3f4968579ac409)) - Update rolldown snapshot ([`a63e927`](https://redirect.github.com/webpro-nl/knip/commit/a63e92788239062682603a5727ede371db7845c8)) - Remove obsolete workarounds from ecosystem tests ([`a521cf7`](https://redirect.github.com/webpro-nl/knip/commit/a521cf790d726c18e644e2e316cdc09eb654f607)) - Handle snapshotSerializers in Vitest plugin (resolve [#​1884](https://redirect.github.com/webpro-nl/knip/issues/1884)) ([`b597de9`](https://redirect.github.com/webpro-nl/knip/commit/b597de951f6f0e897afdbbbb8a7d0c06c8d2437d)) - Set the stage ([`c059c2b`](https://redirect.github.com/webpro-nl/knip/commit/c059c2be5803609924b852c2bf0cd90906a6a831)) ### [`v6.26.0`](https://redirect.github.com/webpro-nl/knip/releases/tag/knip%406.26.0): Release 6.26.0 [Compare Source](https://redirect.github.com/webpro-nl/knip/compare/knip@6.25.0...knip@6.26.0) - ci: add path filters ([#​1871](https://redirect.github.com/webpro-nl/knip/issues/1871)) ([`4249935`](https://redirect.github.com/webpro-nl/knip/commit/4249935adffe1b8eca9570fb325fa19cc8010584)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - Add CodeRabbit as gold sponsor ([`1da09fd`](https://redirect.github.com/webpro-nl/knip/commit/1da09fdc8f4d851f3cad30659200018bfb47a5e0)) - Fix up docs a bit more ([`39125a7`](https://redirect.github.com/webpro-nl/knip/commit/39125a7f473e006f61629781bff1ac4a050ca460)) - Don't report ambient declaration files as unused ([`aed361c`](https://redirect.github.com/webpro-nl/knip/commit/aed361c00a82829c2fc80a65a2f7af174316782e)) - Register oclif command files as entries ([`3b4d58c`](https://redirect.github.com/webpro-nl/knip/commit/3b4d58c9da83d93b6821a2b24f57b919ba886756)) - Add electron-vite plugin ([`d92107e`](https://redirect.github.com/webpro-nl/knip/commit/d92107ea504833b3ee7ad2b695e22d40528b24c3)) - Add esbuild plugin ([`ef3b601`](https://redirect.github.com/webpro-nl/knip/commit/ef3b601d957546554de2cb1fbff859f5bdafb741)) - Ignore more globally available binaries ([`8292981`](https://redirect.github.com/webpro-nl/knip/commit/829298129fdfd1b41a1f8dff5022b9fbbe25f454)) - Resolve `#`-imports to source when node condition is unbuilt (resolve [#​1873](https://redirect.github.com/webpro-nl/knip/issues/1873)) ([`f2713ed`](https://redirect.github.com/webpro-nl/knip/commit/f2713ed1e499ab286b86615d4b8ec34f711d1bd2)) - Ignore gh as a globally available binary ([`a6f0772`](https://redirect.github.com/webpro-nl/knip/commit/a6f0772e5db03a8412a3ac036756779f22d1a27d)) - Resolve Vitest benchmark files as entries ([`5742913`](https://redirect.github.com/webpro-nl/knip/commit/57429139f7e93f2a4bee35a53d450c4f45dea9ff)) - Extract shared Vue auto-import machinery into plugins/\_vue ([`7301075`](https://redirect.github.com/webpro-nl/knip/commit/73010753d432ae58eb12c7eec9c5723036009749)) - Scope compiler extensions per workspace ([`5e6f82b`](https://redirect.github.com/webpro-nl/knip/commit/5e6f82b963a83e5801484efbc01a4b6a9ce39ea3)) - Resolve auto-imported components in the Vue SFC compiler ([`009aad8`](https://redirect.github.com/webpro-nl/knip/commit/009aad8f9dab589898e5dba4c85fa41ea57c1a49)) - Add plugins for the Vue auto-import ecosystem ([`f638c83`](https://redirect.github.com/webpro-nl/knip/commit/f638c8302cdd26a63e477344a7cf44ef60af7788)) - Enable Vue SFC compiler on unplugin-vue and [@​vitejs/plugin-vue](https://redirect.github.com/vitejs/plugin-vue) ([`9396ab1`](https://redirect.github.com/webpro-nl/knip/commit/9396ab159919147ef81dad16e365e531b32b4b12)) - Recognize vite-plugin-vue-meta-layouts (same layouts convention) ([`3ceee89`](https://redirect.github.com/webpro-nl/knip/commit/3ceee89228b0173eddc0466bf50e8181286ffebc)) - Add vite-plugin-pages and unplugin-icons plugins ([`9bc1754`](https://redirect.github.com/webpro-nl/knip/commit/9bc17540bcf8eb142474ed84837c1e2cebb7fe73)) - Add vite-plugin-pwa and [@​intlify/unplugin-vue-i18n](https://redirect.github.com/intlify/unplugin-vue-i18n) plugins ([`45dea0a`](https://redirect.github.com/webpro-nl/knip/commit/45dea0a397ed754c34617ed18deef4dc6f0ec0d4)) - Dog, food. ([`e1249ad`](https://redirect.github.com/webpro-nl/knip/commit/e1249ade2558d3801d85e2dc63349d884f3443d4)) - Update query snapshot ([`a45941d`](https://redirect.github.com/webpro-nl/knip/commit/a45941d2db381c04f8a38416533217ee84f77ca7)) - Don't misread Nitro route types as Vue component auto-imports ([`43aecd5`](https://redirect.github.com/webpro-nl/knip/commit/43aecd5414eb63bec3637f37ffac0c62a71e7e74)) - Read oxlint jsPlugins from vite-plus vite.config and .oxlintrc.json ([`589ffda`](https://redirect.github.com/webpro-nl/knip/commit/589ffda4e3a7d0c0d772191ad6f8d6e60dd298cf)) - Add vite-plus plugin for run.tasks and staged scripts ([`f041c19`](https://redirect.github.com/webpro-nl/knip/commit/f041c191e4e10dd181ad212b71079e3e10bcf341)) - Support [@​vite-pwa/nuxt](https://redirect.github.com/vite-pwa/nuxt) PWA config in nuxt.config ([`8fa7b11`](https://redirect.github.com/webpro-nl/knip/commit/8fa7b116690e37484798ad98eca002d26c0c80fe)) - Add [@​vite-pwa/assets-generator](https://redirect.github.com/vite-pwa/assets-generator) plugin ([`4254f7d`](https://redirect.github.com/webpro-nl/knip/commit/4254f7d53a284a4ea4612f650ae03495bcb0d582)) - Add [@​nuxtjs/i18n](https://redirect.github.com/nuxtjs/i18n) plugin ([`dfb9acb`](https://redirect.github.com/webpro-nl/knip/commit/dfb9acbe5a08ebc85562f59a04e7f4bedb4925f1)) - Read plugin entries from vite.config options and index.html ([`d533da8`](https://redirect.github.com/webpro-nl/knip/commit/d533da8cc2b431d206eb7c55323ea51846eca0bb)) - Fix false positives in VitePress, next-mdx and unplugin-vue-i18n plugins ([`b99702a`](https://redirect.github.com/webpro-nl/knip/commit/b99702a76e26b1943a16517f1633de3a0713c196)) - Respect optional peers in pnpm and Yarn packageExtensions ([`aab080b`](https://redirect.github.com/webpro-nl/knip/commit/aab080bbd436494316df045011ab22cbebca06b4)) - Detect babel plugins in the Storybook config ([`5dea975`](https://redirect.github.com/webpro-nl/knip/commit/5dea975adf9b88971ad56434132282a099c7d58c)) - Add shared AST helpers for imported calls and first property values ([`c84bb7a`](https://redirect.github.com/webpro-nl/knip/commit/c84bb7a87a17f1921c12bb02bcfd43f905cae595)) - Inline trivial resolveFromAST wrappers and normalize orval and sst ([`620079d`](https://redirect.github.com/webpro-nl/knip/commit/620079d1d07b69a69bbb67b6a6e68963b6c2fc21)) - Extract inline resolveFromAST implementations to dedicated files ([`b5231c1`](https://redirect.github.com/webpro-nl/knip/commit/b5231c12f915428067d790187d2dd4c44e2559d4)) - Normalize resolveFromAST files to a uniform contract ([`fc1ba0f`](https://redirect.github.com/webpro-nl/knip/commit/fc1ba0fb45aaf623de678a57bea3b5567ea04750)) - chore: migrate to Astro 7 and SΓ€tteri ([#​1875](https://redirect.github.com/webpro-nl/knip/issues/1875)) ([`f256a5b`](https://redirect.github.com/webpro-nl/knip/commit/f256a5b276c3d69dd5081c591bbb183aacebf766)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - Show contributor count on docs homepage ([`6b8454a`](https://redirect.github.com/webpro-nl/knip/commit/6b8454a2841905ce7f08e1a23b54bc17a0854608)) - Exclude gitignored package entry points ([`606e5d0`](https://redirect.github.com/webpro-nl/knip/commit/606e5d051b4f0620c776aa23352153b8253bd75b)) - Add Tauri plugin ([`199180d`](https://redirect.github.com/webpro-nl/knip/commit/199180da79c71acc80865dc65ce89653a26d9579)) - Add Laravel plugin ([`1974533`](https://redirect.github.com/webpro-nl/knip/commit/197453378f2b60e5143a30ec78b438f02b37c53b)) - Add Quasar plugin ([`a220729`](https://redirect.github.com/webpro-nl/knip/commit/a220729074bfbb9e7d03ba329e89ad553c3a7799)) ### [`v6.25.0`](https://redirect.github.com/webpro-nl/knip/releases/tag/knip%406.25.0): Release 6.25.0 [Compare Source](https://redirect.github.com/webpro-nl/knip/compare/knip@6.24.0...knip@6.25.0) - fix: derive package name from package.json under Yarn `nodeLinker: pnpm` store ([#​1852](https://redirect.github.com/webpro-nl/knip/issues/1852)) ([`3764605`](https://redirect.github.com/webpro-nl/knip/commit/3764605ed150b975fb6c88c4c4aa47f5bf9ae149)) - thanks [@​blowery](https://redirect.github.com/blowery)! - Pick up types used in module augmentations via path aliases (resolve [#​1850](https://redirect.github.com/webpro-nl/knip/issues/1850)) ([`9cc5a41`](https://redirect.github.com/webpro-nl/knip/commit/9cc5a4132793990b5fcf9eae6f3db37426d979c0)) - feat: add support for `packageExtensions` in yarn and pnpm ([#​1847](https://redirect.github.com/webpro-nl/knip/issues/1847)) ([`61d3164`](https://redirect.github.com/webpro-nl/knip/commit/61d3164cdac6e9252b3c52ce3bb2909949b4690e)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - fix(ci): do not run integration on forks ([#​1855](https://redirect.github.com/webpro-nl/knip/issues/1855)) ([`d23c10d`](https://redirect.github.com/webpro-nl/knip/commit/d23c10d1ae764c0b70addaafc79f01c543cc5efa)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - chore(ci): improve security through specific permissions ([#​1856](https://redirect.github.com/webpro-nl/knip/issues/1856)) ([`1eb42e6`](https://redirect.github.com/webpro-nl/knip/commit/1eb42e639f9ec12d6d2ef88e1aaf07397b5bf226)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - chore(ci): add concurrency blocks ([#​1857](https://redirect.github.com/webpro-nl/knip/issues/1857)) ([`3bf3d11`](https://redirect.github.com/webpro-nl/knip/commit/3bf3d115cf677fadcfe8fa72ce0e68cfd435d399)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - fix(next): resolve src/ entry patterns like Next.js does ([#​1859](https://redirect.github.com/webpro-nl/knip/issues/1859)) ([`6e6a509`](https://redirect.github.com/webpro-nl/knip/commit/6e6a5094e924a5cd104867f3907dbbb378f871b3)) - thanks [@​dayongkr](https://redirect.github.com/dayongkr)! - Fix Bun test defaults ([#​1860](https://redirect.github.com/webpro-nl/knip/issues/1860)) ([`2ac4c04`](https://redirect.github.com/webpro-nl/knip/commit/2ac4c0427d2ac03939661f6dc236d15d11414fd5)) - thanks [@​jakeleventhal](https://redirect.github.com/jakeleventhal)! - Extend agentic guidelines re. plugins ([`da606eb`](https://redirect.github.com/webpro-nl/knip/commit/da606eb522f01187def8747d7ddb917c6735157d)) - Support rspack and path aliases in require.context ([`d231d67`](https://redirect.github.com/webpro-nl/knip/commit/d231d67a5e8713c2f48f9d695ae12a9dbfa0260e)) - Support path aliases in import.meta.glob (resolve [#​1821](https://redirect.github.com/webpro-nl/knip/issues/1821)) ([`fc7bb1e`](https://redirect.github.com/webpro-nl/knip/commit/fc7bb1ecc194e69f9f493bff5b33a4cc807fd788)) - Register MDX compiler in Storybook plugin ([`6f18138`](https://redirect.github.com/webpro-nl/knip/commit/6f1813809608cd36e44af22583805e686c51c5bd)) - Resolve TypeDoc customCss and customJs files ([`105687d`](https://redirect.github.com/webpro-nl/knip/commit/105687daf682884257a2d40f26967d80ea4abef8)) - Resolve inline Babel presets/plugins in Jest transform ([`38e4a4a`](https://redirect.github.com/webpro-nl/knip/commit/38e4a4a4a06d902cf55457155f666c3b91e05f28)) - Mark graphql-codegen generated outputs as entries ([`1255369`](https://redirect.github.com/webpro-nl/knip/commit/125536921f1845eeec1347091b238bb615f329e0)) - Add Fumadocs plugin ([`77c2142`](https://redirect.github.com/webpro-nl/knip/commit/77c2142fcc6ad6fdee651c5dc60a74c158cd8de3)) - Support next.config.mts in Next.js plugin ([`0f27e77`](https://redirect.github.com/webpro-nl/knip/commit/0f27e772935bba5eaeca73ee75ce028412c4a1cc)) - Add script command parser built on unbash ([`195510c`](https://redirect.github.com/webpro-nl/knip/commit/195510c6c912ade9cd7846302d2f9256ede9852c)) - Gate Bun test entries on an actual bun test invocation ([`92903ec`](https://redirect.github.com/webpro-nl/knip/commit/92903ec29bb8b86586e3d7e846236d8c38787ea9)) - Detect Node.js test runner via script command parser ([`a0bfe7b`](https://redirect.github.com/webpro-nl/knip/commit/a0bfe7ba2958a1270604764a9ebf09425ce857d4)) - Extract shared command walker for bash-parser and plugins ([`1301475`](https://redirect.github.com/webpro-nl/knip/commit/13014753d5031cf1de8081b3d148212a5894dde0)) - Normalize aliased glob patterns to posix for Win ([`23b4a74`](https://redirect.github.com/webpro-nl/knip/commit/23b4a744330d0dddd2b1517f2f2d72c9d373a0b9)) - Resolve inherited tsconfig paths from the extended config's directory (resolve [#​1866](https://redirect.github.com/webpro-nl/knip/issues/1866)) ([`e3f0e5c`](https://redirect.github.com/webpro-nl/knip/commit/e3f0e5c69641bb7dfab06585251c98e3b3def049)) - Handle var interpolations in shell cmd scripts (resolve [#​1867](https://redirect.github.com/webpro-nl/knip/issues/1867)) ([`9422d06`](https://redirect.github.com/webpro-nl/knip/commit/9422d06adb07fd29a3388ee6b037cda47fe28d1a)) - Update query snapshot ([`5e192e9`](https://redirect.github.com/webpro-nl/knip/commit/5e192e996fd680c41674c9503437ee148b0f1870)) - Add support for Prettier overrides ([#​1869](https://redirect.github.com/webpro-nl/knip/issues/1869)) ([`5dc7f12`](https://redirect.github.com/webpro-nl/knip/commit/5dc7f1235ff201c461a71f8a757c611441f1607a)) - thanks [@​remcohaszing](https://redirect.github.com/remcohaszing)! - Handle Serverless esbuild inject entries ([#​1865](https://redirect.github.com/webpro-nl/knip/issues/1865)) ([`46111ef`](https://redirect.github.com/webpro-nl/knip/commit/46111ef2f42c2ea89a43d8944b5efdcde7db2884)) - thanks [@​jakeleventhal](https://redirect.github.com/jakeleventhal)! - docs: add links to Discord and Contributing in issue templates ([#​1868](https://redirect.github.com/webpro-nl/knip/issues/1868)) ([`5ab3483`](https://redirect.github.com/webpro-nl/knip/commit/5ab3483e30733edc234e9913b3bf4bf05de45470)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - Add eve (Vercel framework) plugin ([#​1864](https://redirect.github.com/webpro-nl/knip/issues/1864)) ([`20cd970`](https://redirect.github.com/webpro-nl/knip/commit/20cd970d2039835dd9bad79ee2e7f3a82cef1b6e)) - thanks [@​jakeleventhal](https://redirect.github.com/jakeleventhal)! - Add circular dependencies as opt-in `cycles` issue type (resolve [#​1734](https://redirect.github.com/webpro-nl/knip/issues/1734)) ([#​1812](https://redirect.github.com/webpro-nl/knip/issues/1812)) ([`1b0ed6b`](https://redirect.github.com/webpro-nl/knip/commit/1b0ed6b3906d726b37a89b495fb22331ec2a0fbb)) - chore(ci): remove redundant tag triggers ([#​1863](https://redirect.github.com/webpro-nl/knip/issues/1863)) ([`c61d008`](https://redirect.github.com/webpro-nl/knip/commit/c61d0086e4e669a8aeee230dc5ac3606832ea893)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - Fix up docs a bit ([`89a2d8d`](https://redirect.github.com/webpro-nl/knip/commit/89a2d8d6ac27ee866a15a8bcf5a49da3cba91b08)) </details> <details> <summary>postcss/postcss (postcss)</summary> ### [`v8.5.21`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8521) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.20...8.5.21) - Fixed childless at-rule losing semicolon before comment (by [@​sarathfrancis90](https://redirect.github.com/sarathfrancis90)). - Fixed docs (by [@​isker](https://redirect.github.com/isker)). ### [`v8.5.20`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8520) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.19...8.5.20) - Fixed missing space if `AtRule#params` is set after (by [@​sarathfrancis90](https://redirect.github.com/sarathfrancis90)). - Fixed mixing AST error on warnings (by [@​MahinAnowar](https://redirect.github.com/MahinAnowar)). ### [`v8.5.19`](https://redirect.github.com/postcss/postcss/releases/tag/8.5.19) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.18...8.5.19) - Fixed cleaning `before` for new nodes inserted to `Root` (by [@​MahinAnowar](https://redirect.github.com/MahinAnowar)). ### [`v8.5.18`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8518) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.17...8.5.18) - Restricted loading previous source maps file to the `opts.from` folder for security reasons (use `unsafeMap: true` to disable the check). ### [`v8.5.17`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8517) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.16...8.5.17) - Fixed `Maximum call stack size exceeded` error. - Fixed Prototype hijacking for `postcss.fromJSON()`. - Fixed `Input#origin()` for unmapped end position (by [@​chatman-media](https://redirect.github.com/chatman-media)). </details> <details> <summary>vitejs/vite (vite)</summary> ### [`v8.1.5`](https://redirect.github.com/vitejs/vite/releases/tag/v8.1.5) [Compare Source](https://redirect.github.com/vitejs/vite/compare/v8.1.4...v8.1.5) Please refer to [CHANGELOG.md](https://redirect.github.com/vitejs/vite/blob/v8.1.5/packages/vite/CHANGELOG.md) for details. ### [`v8.1.4`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-814-2026-07-09-small) [Compare Source](https://redirect.github.com/vitejs/vite/compare/v8.1.3...v8.1.4) ##### Features - **legacy:** prefer oxc as minifier (fix [#​21973](https://redirect.github.com/vitejs/vite/issues/21973)) ([#​22468](https://redirect.github.com/vitejs/vite/issues/22468)) ([ab5dafa](https://redirect.github.com/vitejs/vite/commit/ab5dafa8e66296ef201f615489fb57954bb740ce)) ##### Bug Fixes - **build:** add workaround for building on stackblitz ([#​22840](https://redirect.github.com/vitejs/vite/issues/22840)) ([575c32c](https://redirect.github.com/vitejs/vite/commit/575c32c29925c554f4ef4068738ab89c6878f615)) - **build:** keep `import.meta.url` in preload function as-is ([#​22839](https://redirect.github.com/vitejs/vite/issues/22839)) ([f1f90ed](https://redirect.github.com/vitejs/vite/commit/f1f90ed4742b3cf453428c7e581a6016a4d47321)) - **deps:** update all non-major dependencies ([#​22865](https://redirect.github.com/vitejs/vite/issues/22865)) ([d4295a9](https://redirect.github.com/vitejs/vite/commit/d4295a9ffce428c0e51892373e00c07fccc0498a)) - **deps:** update rolldown-related dependencies ([#​22866](https://redirect.github.com/vitejs/vite/issues/22866)) ([7cf07e4](https://redirect.github.com/vitejs/vite/commit/7cf07e4c5f7a6af276012e0c2ec06e08499e951e)) - **html:** avoid backtracking in import-only check ([#​22848](https://redirect.github.com/vitejs/vite/issues/22848)) ([b5868c0](https://redirect.github.com/vitejs/vite/commit/b5868c01a124d345664450aaebd677bfba964c05)) - **optimizer:** avoid optimizer run for transform request before init ([#​22852](https://redirect.github.com/vitejs/vite/issues/22852)) ([72a5e21](https://redirect.github.com/vitejs/vite/commit/72a5e2192506f51a5efd09c059815a5c43a9eacb)) - **ssr:** align named export function call stacktrace column with Node ([#​22829](https://redirect.github.com/vitejs/vite/issues/22829)) ([173a1b6](https://redirect.github.com/vitejs/vite/commit/173a1b648c321e0f836e5a94fc47c4fa9b081bfc)) - strip pure CSS chunk imports when chunkImportMap is enabled ([#​22841](https://redirect.github.com/vitejs/vite/issues/22841)) ([648bd04](https://redirect.github.com/vitejs/vite/commit/648bd04933093d0aac9565f21a49811437776886)) ##### Documentation - fix incorrect `@default` for `server.cors` ([#​22859](https://redirect.github.com/vitejs/vite/issues/22859)) ([70435b2](https://redirect.github.com/vitejs/vite/commit/70435b2551ee4fe3a0d55c8a3bb61b96f44d2763)) ##### Miscellaneous Chores - **deps:** update dependency postcss-modules to v9 ([#​22867](https://redirect.github.com/vitejs/vite/issues/22867)) ([a9539d6](https://redirect.github.com/vitejs/vite/commit/a9539d69efc7a4ccf988bbf5da31c2b416ba990e)) ##### Code Refactoring - eliminate ineffectiveDynamicImport warn ([#​22876](https://redirect.github.com/vitejs/vite/issues/22876)) ([ea22fb3](https://redirect.github.com/vitejs/vite/commit/ea22fb352aad9a42c0a9d08f39d8a0bae8c111a5)) ##### Tests - avoid warnings ([#​22851](https://redirect.github.com/vitejs/vite/issues/22851)) ([af21ab6](https://redirect.github.com/vitejs/vite/commit/af21ab68adac3380dc9a854d2fe3f776654301cd)) ##### Build System - remove the custom onLog function ([#​22878](https://redirect.github.com/vitejs/vite/issues/22878)) ([2c4a217](https://redirect.github.com/vitejs/vite/commit/2c4a217a63dc0a7fcb10bc710a988f32b173f481)) - replace deprecated `onwarn` with `onLog` ([#​22741](https://redirect.github.com/vitejs/vite/issues/22741)) ([c581b55](https://redirect.github.com/vitejs/vite/commit/c581b5588cb8e94603d17bce2ff9fec8e8e0a3bf)) </details> <details> <summary>vuejs/core (vue)</summary> ### [`v3.5.40`](https://redirect.github.com/vuejs/core/blob/HEAD/CHANGELOG.md#3540-2026-07-16) [Compare Source](https://redirect.github.com/vuejs/core/compare/v3.5.39...v3.5.40) ##### Bug Fixes - **compiler-core:** avoid leaking slot branch keys ([#​15051](https://redirect.github.com/vuejs/core/issues/15051)) ([20c9d26](https://redirect.github.com/vuejs/core/commit/20c9d263d3bfafdfbcc1921f259fd8f711e18659)), closes [#​15048](https://redirect.github.com/vuejs/core/issues/15048) - **hydration:** pass namespace when patching dynamic props ([#​15082](https://redirect.github.com/vuejs/core/issues/15082)) ([e0d2723](https://redirect.github.com/vuejs/core/commit/e0d27234ddd2061383cb5dcc475d6b9558ed8e4f)), closes [#​15081](https://redirect.github.com/vuejs/core/issues/15081) [#​15050](https://redirect.github.com/vuejs/core/issues/15050) - **reactivity:** handle effect removal during scope stop ([#​15084](https://redirect.github.com/vuejs/core/issues/15084)) ([378f978](https://redirect.github.com/vuejs/core/commit/378f9783248a4a4f20781d665d4f7089f39cae6e)), closes [#​15083](https://redirect.github.com/vuejs/core/issues/15083) - **runtime-core:** skip lazy hydration for detached roots ([#​15092](https://redirect.github.com/vuejs/core/issues/15092)) ([97f3525](https://redirect.github.com/vuejs/core/commit/97f3525551ad06103083eb2cbf9858c5e57cd58e)), closes [#​15091](https://redirect.github.com/vuejs/core/issues/15091) - **runtime-core:** unwind dangling blocks when slot content throws ([#​15071](https://redirect.github.com/vuejs/core/issues/15071)) ([ddc132d](https://redirect.github.com/vuejs/core/commit/ddc132d7c054ecd2029ddcc95bcba770cd44f022)), closes [#​15070](https://redirect.github.com/vuejs/core/issues/15070) - **runtime-dom:** respect current select model type ([#​15010](https://redirect.github.com/vuejs/core/issues/15010)) ([eb89e93](https://redirect.github.com/vuejs/core/commit/eb89e935a771ab7fc3f8e67a82bc8fc7ea28bdaa)), closes [#​15009](https://redirect.github.com/vuejs/core/issues/15009) - **server-renderer:** handle errors in optimized component renders ([#​12601](https://redirect.github.com/vuejs/core/issues/12601)) ([474907c](https://redirect.github.com/vuejs/core/commit/474907c0f01d021c564545137051a2b56eb4a769)), closes [#​12575](https://redirect.github.com/vuejs/core/issues/12575) - **server-renderer:** remove package dependency cycle ([#​15063](https://redirect.github.com/vuejs/core/issues/15063)) ([4d35eca](https://redirect.github.com/vuejs/core/commit/4d35ecadb6f625b0f7407ccee0e357c2dd8084c7)) - **shared:** prevent SSR comment escaping from creating closing delimiters ([#​15045](https://redirect.github.com/vuejs/core/issues/15045)) ([bd962bb](https://redirect.github.com/vuejs/core/commit/bd962bbaca746d8f65775a07723420406ebad0da)) - **types:** don't constrain component $el type to Element ([#​15040](https://redirect.github.com/vuejs/core/issues/15040)) ([164460a](https://redirect.github.com/vuejs/core/commit/164460a52988c44dc34a541219c88120078372a0)) </details> <details> <summary>intlify/vue-i18n (vue-i18n)</summary> ### [`v11.4.7`](https://redirect.github.com/intlify/vue-i18n/releases/tag/v11.4.7) [Compare Source](https://redirect.github.com/intlify/vue-i18n/compare/v11.4.6...v11.4.7) <!-- Release notes generated using configuration in .github/release.yml at v11.4.7 --> **Full Changelog**: <intlify/vue-i18n@v11.4.6...v11.4.7> </details> <details> <summary>vuejs/router (vue-router)</summary> ### [`v5.2.0`](https://redirect.github.com/vuejs/router/releases/tag/v5.2.0) [Compare Source](https://redirect.github.com/vuejs/router/compare/v5.1.0...v5.2.0) ##### Β Β Β π Features - Add helpful diagnostics Β -Β by [@​posva](https://redirect.github.com/posva) in [#​2737](https://redirect.github.com/vuejs/router/issues/2737) [<samp>(628fe)</samp>](https://redirect.github.com/vuejs/router/commit/628fe18a) ##### Β Β Β π Bug Fixes - Allow pinia 4 Β -Β by [@​posva](https://redirect.github.com/posva) [<samp>(16535)</samp>](https://redirect.github.com/vuejs/router/commit/16535337) - **scroll**: Ignore stale async scrollBehavior results Β -Β by [@​baozjj](https://redirect.github.com/baozjj) and [@​cursoragent](https://redirect.github.com/cursoragent) in [#​2730](https://redirect.github.com/vuejs/router/issues/2730) [<samp>(303df)</samp>](https://redirect.github.com/vuejs/router/commit/303dfe19) - **unplugin**: Reject invalid hex digits in \[x+hh] character codes Β -Β by [@​greymoth-jp](https://redirect.github.com/greymoth-jp) in [#​2744](https://redirect.github.com/vuejs/router/issues/2744) [<samp>(4d967)</samp>](https://redirect.github.com/vuejs/router/commit/4d967411) ##### Β Β Β Β [View changes on GitHub](https://redirect.github.com/vuejs/router/compare/v5.1.0...v5.2.0) </details> --- ### Configuration π **Schedule**: (in timezone America/New_York) - Branch creation - "before 6am on monday" - Automerge - At any time (no schedule defined) π¦ **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β» **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. π» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/CodesWhat/drydock). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDIuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI3NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: scttbnsn <80784472+scttbnsn@users.noreply.github.com>
> βΉοΈ **Note**
>
> This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev)
([source](https://redirect.github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome))
| [`2.4.16` β
`2.5.5`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.4.16/2.5.5)
|

|

|
| [@tailwindcss/postcss](https://tailwindcss.com)
([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss))
| [`4.3.1` β
`4.3.3`](https://renovatebot.com/diffs/npm/@tailwindcss%2fpostcss/4.3.1/4.3.3)
|

|

|
|
[@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`25.9.4` β
`25.9.5`](https://renovatebot.com/diffs/npm/@types%2fnode/25.9.4/25.9.5)
|

|

|
| [fumadocs-core](https://fumadocs.dev) | [`16.10.6` β
`16.11.5`](https://renovatebot.com/diffs/npm/fumadocs-core/16.10.6/16.11.5)
|

|

|
| [fumadocs-mdx](https://fumadocs.dev) | [`15.0.13` β
`15.2.0`](https://renovatebot.com/diffs/npm/fumadocs-mdx/15.0.13/15.2.0)
|

|

|
| [fumadocs-ui](https://fumadocs.dev) | [`16.10.6` β
`16.11.5`](https://renovatebot.com/diffs/npm/fumadocs-ui/16.10.6/16.11.5)
|

|

|
| [lefthook](https://redirect.github.com/evilmartians/lefthook) |
[`2.1.9` β
`2.1.10`](https://renovatebot.com/diffs/npm/lefthook/2.1.9/2.1.10) |

|

|
| [lucide-react](https://lucide.dev)
([source](https://redirect.github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react))
| [`1.21.0` β
`1.25.0`](https://renovatebot.com/diffs/npm/lucide-react/1.21.0/1.25.0)
|

|

|
| [tailwindcss](https://tailwindcss.com)
([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss))
| [`4.3.1` β
`4.3.3`](https://renovatebot.com/diffs/npm/tailwindcss/4.3.1/4.3.3) |

|

|
---
### Release Notes
<details>
<summary>biomejs/biome (@​biomejs/biome)</summary>
###
[`v2.5.5`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#255)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.4...@biomejs/biome@2.5.5)
##### Patch Changes
- [#​10972](https://redirect.github.com/biomejs/biome/pull/10972)
[`ab8c21b`](https://redirect.github.com/biomejs/biome/commit/ab8c21b35e81708276e4283a4a0ff86ea815e345)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/)
for unions of bigint literals. The rule now reports missing bigint cases
and compares bigint literals by value, including binary, octal,
hexadecimal, and separator-containing spellings. For example, this
switch now reports the missing `2n` case:
```ts
declare const value: 1n | 2n;
switch (value) {
case 1n:
break;
}
```
- [#​10972](https://redirect.github.com/biomejs/biome/pull/10972)
[`ab8c21b`](https://redirect.github.com/biomejs/biome/commit/ab8c21b35e81708276e4283a4a0ff86ea815e345)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed false positives in
[`noBaseToString`](https://biomejs.dev/linter/rules/no-base-to-string/)
and
[`useNullishCoalescing`](https://biomejs.dev/linter/rules/use-nullish-coalescing/)
when member, stringification, or nullish inference cannot complete.
These rules now suppress diagnostics instead of reporting from partial
type information. For example, neither expression is reported when a
recursive type cannot be fully resolved:
```ts
type Recursive = Recursive;
declare const value: Recursive;
String(value);
value || "fallback";
```
- [#​10977](https://redirect.github.com/biomejs/biome/pull/10977)
[`0bf7486`](https://redirect.github.com/biomejs/biome/commit/0bf748653e488d0b959d39847641438cdb28188b)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10922](https://redirect.github.com/biomejs/biome/issues/10922):
the action
[`useSortedAttributes`](https://biomejs.dev/assist/actions/use-sorted-attributes/)
no longer triggers for HTML instructions.
- [#​10957](https://redirect.github.com/biomejs/biome/pull/10957)
[`cf263c4`](https://redirect.github.com/biomejs/biome/commit/cf263c4700e9f24115e541d1f142934a9b2d878f)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed
[`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/)
failing to detect `Object.fromEntries`, `Object.defineProperty`, and
`Reflect.defineProperty` calls with comments between their tokens.
- [#​10983](https://redirect.github.com/biomejs/biome/pull/10983)
[`edc0ed7`](https://redirect.github.com/biomejs/biome/commit/edc0ed738ab8da3d512d527196684bd668090854)
Thanks [@​ayaangazali](https://redirect.github.com/ayaangazali)! -
Fixed
[#​10980](https://redirect.github.com/biomejs/biome/issues/10980):
[`useAriaPropsSupportedByRole`](https://biomejs.dev/linter/rules/use-aria-props-supported-by-role/)
no longer reports false positives when the attribute that determines an
element's implicit ARIA role is written as a shorthand attribute, such
as `<a {href} aria-label="...">` in Astro and Svelte files.
Shorthand attributes are now taken into account when computing the
implicit role, so the anchor above correctly resolves to the `link` role
instead of `generic`.
- [#​10889](https://redirect.github.com/biomejs/biome/pull/10889)
[`89526e3`](https://redirect.github.com/biomejs/biome/commit/89526e3858c437408ec9ff192c35a866ad991d1b)
Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! -
Fixed CSS formatter casing for syntax-owned names while preserving
author-defined names, including scoped keyframes and container
scroll-state queries.
```diff
- A:HOVER { COLOR: INITIAL; }
+ A:hover { color: initial; }
- @​KEYFRAMES :GLOBAL KeepFrames { FROM { COLOR: RED; } }
+ @​keyframes :GLOBAL KeepFrames { from { color: RED; } }
- @​CONTAINER scroll-state((SCROLLED: TOP) AND (STUCK)) { A:HOVER
{ COLOR: RED; } }
+ @​container scroll-state((SCROLLED: TOP) AND (STUCK)) { A:hover
{ color: RED; } }
```
- [#​10964](https://redirect.github.com/biomejs/biome/pull/10964)
[`794ccd0`](https://redirect.github.com/biomejs/biome/commit/794ccd0528345c4eaa87af1d86f02475277a0a22)
Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! -
Fixed CSS formatting for comments between declaration values and
`!important`.
```diff
-a { color: /* before */ /* after */ red !important; }
+a { color: /* before */ red /* after */ !important; }
```
- [#​10993](https://redirect.github.com/biomejs/biome/pull/10993)
[`b7a9694`](https://redirect.github.com/biomejs/biome/commit/b7a969425d4292fc7c50440da7aea41ce5c9a9c2)
Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! -
Fixed the CSS formatter to preserve comments on the correct side of
selector combinators and before declaration blocks.
```diff
-.before > /* comment */ .after {}
+.before /* comment */ > .after {}
```
It now also keeps selectors with escaped newlines in attribute values
inline when they fit.
```diff
-div
- span[foo="bar\
+div span[foo="bar\
value"] {}
```
- [#​10978](https://redirect.github.com/biomejs/biome/pull/10978)
[`8ebafe1`](https://redirect.github.com/biomejs/biome/commit/8ebafe1c7489f1f7af379b8e52b8ad063c82d28a)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10870](https://redirect.github.com/biomejs/biome/issues/10870):
[`noUnresolvedImports`](https://biomejs.dev/linter/rules/no-unresolved-imports/)
no longer reports false positives such as `import type { NextRequest }
from "next/server"`.
- [#​10901](https://redirect.github.com/biomejs/biome/pull/10901)
[`68c10e6`](https://redirect.github.com/biomejs/biome/commit/68c10e672fc886b31423b18be01e873d3bf77f43)
Thanks
[@​Socialpranker](https://redirect.github.com/Socialpranker)! -
Fixed
[#​10622](https://redirect.github.com/biomejs/biome/issues/10622):
the HTML/Vue parser no longer panics on the argument-less `v-bind`
shorthand (`:="props"`).
This syntax is valid Vue and equivalent to `v-bind="props"`, so the
parser now accepts it (along with the longhand `v-bind:="props"`)
instead of crashing while building a diagnostic for a missing argument.
- [#​10936](https://redirect.github.com/biomejs/biome/pull/10936)
[`7df46f5`](https://redirect.github.com/biomejs/biome/commit/7df46f5be0880a02cb37453f01b83c1ba59b1e44)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Improved generic tuple inference for
[`useIncludes`](https://biomejs.dev/linter/rules/use-includes/). The
rule now recognizes specialised tuple element types returned through
generic aliases.
- [#​10941](https://redirect.github.com/biomejs/biome/pull/10941)
[`f787725`](https://redirect.github.com/biomejs/biome/commit/f7877258271e20523d5c673e62912fce1d85cd56)
Thanks [@​siketyan](https://redirect.github.com/siketyan)! - Fixed
[`#10855`](https://redirect.github.com/biomejs/biome/issues/10855):
Biome now supports parsing and formatting CSS custom media queries
declared with
[`@custom-media`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@​custom-media).
- [#​10969](https://redirect.github.com/biomejs/biome/pull/10969)
[`72d309b`](https://redirect.github.com/biomejs/biome/commit/72d309b655cee70473e20b061f5a45112139688c)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where Biome logs became too verbose, dumping information
not relevant to user's operations.
-
[`e62f6b6`](https://redirect.github.com/biomejs/biome/commit/e62f6b61461227bbfd57fdf1b50b2dc8c01ea5a0)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10963](https://redirect.github.com/biomejs/biome/issues/10963):
Biome no longer panics when a type-aware rule such as
[`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/)
checks a call to a function with multiple call signatures imported from
another module.
- [#​10931](https://redirect.github.com/biomejs/biome/pull/10931)
[`899c60d`](https://redirect.github.com/biomejs/biome/commit/899c60d506115b3f62030236cbd0901bf294e6ab)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed `check --write` command. Now the command reports code frame of the
formatted code, if the formatter is enabled.
- [#​10904](https://redirect.github.com/biomejs/biome/pull/10904)
[`ceee4f4`](https://redirect.github.com/biomejs/biome/commit/ceee4f43dabf88d86b87c9a4ce6051b6738869c2)
Thanks [@​qzwxsaedc](https://redirect.github.com/qzwxsaedc)! -
Fixed
[#​10892](https://redirect.github.com/biomejs/biome/issues/10892):
[`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/)
no longer reports a false positive when checking a member of a
discriminated union that is accessed through a default type-only
namespace import. The following code is no longer flagged:
```ts
import type Types from "./types";
declare function parse(): Types.Result<string>;
const result = parse();
if (!result.success) {
}
```
- [#​10962](https://redirect.github.com/biomejs/biome/pull/10962)
[`f0a67f2`](https://redirect.github.com/biomejs/biome/commit/f0a67f2e56c0785595c5cf14a93dba5bb32acf2d)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Biome no longer removes embedded styles and scripts in HTML files.
- [#​11000](https://redirect.github.com/biomejs/biome/pull/11000)
[`5039a1e`](https://redirect.github.com/biomejs/biome/commit/5039a1ee35771d0193de65a6326781313ab77afb)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed a bug where closing one editor stopped a shared Biome daemon used
by other editors. LSP proxy processes now exit when either the editor or
daemon disconnects.
- [#​10957](https://redirect.github.com/biomejs/biome/pull/10957)
[`cf263c4`](https://redirect.github.com/biomejs/biome/commit/cf263c4700e9f24115e541d1f142934a9b2d878f)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Improved the
performance of the
[`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/)
lint rule by about 50%.
- [#​10992](https://redirect.github.com/biomejs/biome/pull/10992)
[`4bf9b21`](https://redirect.github.com/biomejs/biome/commit/4bf9b21319df240e2c5ef2e5a9cb2e9582a0e1d1)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/):
The rule now reports Promise-returning callbacks where a synchronous
callback is expected when calls use tuple spreads or tuple rest
parameters, including generic and deeply nested tuples, and when
constructor signatures come from interface or object types. Recursive or
excessively nested tuple spreads use a conservative fallback so analysis
terminates.
For example, the following callback is now reported.
```ts
declare function consume(...args: [number, () => void]): void;
const prefix: [number] = [1];
consume(...prefix, async () => {});
```
- [#​10915](https://redirect.github.com/biomejs/biome/pull/10915)
[`b3b12b3`](https://redirect.github.com/biomejs/biome/commit/b3b12b3fe390feabbd9ba097922d6c7e56823406)
Thanks [@​Functionhx](https://redirect.github.com/Functionhx)! -
Added the rule
[`noNegationInEqualityCheck`](https://biomejs.dev/linter/rules/no-negation-in-equality-check/).
The rule flags negated expressions on the left side of strict equality
checks like `!foo === bar` β due to operator precedence this evaluates
as `(!foo) === bar` which is almost always a mistake for `foo !== bar`.
The rule provides an unsafe fix that flips the operator.
```js
// Invalid
!foo === bar;
!foo !== bar;
// Valid
foo !== bar;
foo === bar;
```
- [#​10970](https://redirect.github.com/biomejs/biome/pull/10970)
[`bd1038b`](https://redirect.github.com/biomejs/biome/commit/bd1038be1ad110aae60bcdbe9a154c6a2fc85c14)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Improved overload selection for
[`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/).
Biome now handles overloaded calls, overloaded constructors, rest
parameters, union arguments, and generic constraints without selecting
an incompatible signature. For example, `noMisusedPromises` now reports
the async callback passed to the synchronous overload:
```ts
declare function consume(kind: "async", callback: () => Promise<void>):
void;
declare function consume(kind: "sync", callback: () => void): void;
consume("sync", async () => {});
```
- [#​10933](https://redirect.github.com/biomejs/biome/pull/10933)
[`48a4abb`](https://redirect.github.com/biomejs/biome/commit/48a4abb99d41b1241b2a5812a12247b671d0dfed)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/)
to recognize bigint zero indexes.
- [#​10931](https://redirect.github.com/biomejs/biome/pull/10931)
[`899c60d`](https://redirect.github.com/biomejs/biome/commit/899c60d506115b3f62030236cbd0901bf294e6ab)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an orchestration issue that could lead to deadlocks when
type-aware rules are enabled.
- [#​10969](https://redirect.github.com/biomejs/biome/pull/10969)
[`72d309b`](https://redirect.github.com/biomejs/biome/commit/72d309b655cee70473e20b061f5a45112139688c)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Hardened the Biome Language Server by improving its synchronisation
logic.
- [#​10972](https://redirect.github.com/biomejs/biome/pull/10972)
[`ab8c21b`](https://redirect.github.com/biomejs/biome/commit/ab8c21b35e81708276e4283a4a0ff86ea815e345)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed false positives in
[`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/)
and
[`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/)
when Promise or thenable inference cannot complete. These rules now
suppress diagnostics instead of treating incomplete type information as
a definite result. For example, `useAwaitThenable` no longer reports
`await value` when the value's thenability is unknown:
```ts
declare const value: unknown;
async function consume() {
await value;
}
```
###
[`v2.5.4`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#254)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.3...@biomejs/biome@2.5.4)
##### Patch Changes
- [#​10665](https://redirect.github.com/biomejs/biome/pull/10665)
[`55ff995`](https://redirect.github.com/biomejs/biome/commit/55ff995098148446b7e7fdfc19053902bb987122)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Improved the
performance of the HTML parser slightly in our synthetic benchmarks.
- [#​10894](https://redirect.github.com/biomejs/biome/pull/10894)
[`f4fb10e`](https://redirect.github.com/biomejs/biome/commit/f4fb10e176e537e8ce2cac0c3fd4c38a77f91886)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​6392](https://redirect.github.com/biomejs/biome/issues/6392):
On-type formatting no longer moves comments before an `if` statement
into its body.
- [#​10939](https://redirect.github.com/biomejs/biome/pull/10939)
[`f2799db`](https://redirect.github.com/biomejs/biome/commit/f2799db38e3d8a644207d9b8f957abea6cb3d9fa)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10930](https://redirect.github.com/biomejs/biome/issues/10930):
[`noLabelWithoutControl`](https://biomejs.dev/linter/rules/no-label-without-control/)
now correctly detects text interpolation in Astro, Svelte & Vue as valid
accessible content.
- [#​10945](https://redirect.github.com/biomejs/biome/pull/10945)
[`ae15d98`](https://redirect.github.com/biomejs/biome/commit/ae15d98bbf2222fbb34e3e31832cba9676a6d01c)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10942](https://redirect.github.com/biomejs/biome/issues/10942):
Svelte directives don't throw an accidental debug log anymore.
- [#​10842](https://redirect.github.com/biomejs/biome/pull/10842)
[`5e1abfe`](https://redirect.github.com/biomejs/biome/commit/5e1abfee59155b5fdca8813314371ed54c06acfb)
Thanks
[@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! -
Fixed
[#​9196](https://redirect.github.com/biomejs/biome/issues/9196):
`biome check --write --unsafe` no longer hangs forever when applying the
[`noCommentText`](https://biomejs.dev/linter/rules/no-comment-text/)
code fix.
The rule's fix now wraps the comment in a real JSX expression container
(`{/* comment */}`) instead of re-inserting the braces as plain JSX
text, so the fixed code is no longer reported again by the same rule.
- [#​10891](https://redirect.github.com/biomejs/biome/pull/10891)
[`ecca79e`](https://redirect.github.com/biomejs/biome/commit/ecca79e8ff10f40aa676212c0db0a970c6091615)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[`#10885`](https://redirect.github.com/biomejs/biome/issues/10885):
prevented a module-inference regression introduced by a housekeeping
change.
- [#​10886](https://redirect.github.com/biomejs/biome/pull/10886)
[`60c8043`](https://redirect.github.com/biomejs/biome/commit/60c8043527f7ccc7b505471e1042f2a4324e4d31)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed
[#​10727](https://redirect.github.com/biomejs/biome/issues/10727):
Biome now breaks the arguments of curried `test.each`, `it.each`,
`describe.each`, and `test.for` calls when they exceed the configured
line width.
```diff
- test.each([[1, 2]])("a description that is long enough to push the
hugged opening line beyond the print width", (a, b) => {
- expect(a).toBe(b);
- });
+ test.each([[1, 2]])(
+ "a description that is long enough to push the hugged opening line
beyond the print width",
+ (a, b) => {
+ expect(a).toBe(b);
+ },
+ );
```
- [#​10895](https://redirect.github.com/biomejs/biome/pull/10895)
[`01a85f0`](https://redirect.github.com/biomejs/biome/commit/01a85f04b09f0af05b16a15c137421e312ceada5)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Biome will now remove stale Unix daemon sockets from older Biome
versions when starting a newer daemon.
###
[`v2.5.3`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#253)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.2...@biomejs/biome@2.5.3)
##### Patch Changes
- [#​10815](https://redirect.github.com/biomejs/biome/pull/10815)
[`86613d5`](https://redirect.github.com/biomejs/biome/commit/86613d5b01eb965b460ccefbf27f168d87774aaf)
Thanks
[@​WaterWhisperer](https://redirect.github.com/WaterWhisperer)! -
Fixed a parser panic reported in
[#​10708](https://redirect.github.com/biomejs/biome/issues/10708):
Biome now recovers when unsupported CSS Modules `@value` rules or scoped
`@keyframes` names end at EOF.
- [#​10534](https://redirect.github.com/biomejs/biome/pull/10534)
[`da9b403`](https://redirect.github.com/biomejs/biome/commit/da9b403b6bbacc8d75d56e327a46f4ed0285913e)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Fixed
[`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/)
false positives in Svelte files: Svelte store subscriptions (`$store`
references in templates now keep the underlying `store` binding from
being flagged), and `$bindable()` props that are only written to in the
script block (write-only is intentional for bindable props) are no
longer reported as unused.
- [#​10827](https://redirect.github.com/biomejs/biome/pull/10827)
[`098ba41`](https://redirect.github.com/biomejs/biome/commit/098ba41c99e6efaac8eb182eec258a567bb00123)
Thanks [@​Aqu1bp](https://redirect.github.com/Aqu1bp)! - Fixed
[#​10698](https://redirect.github.com/biomejs/biome/issues/10698):
The
[`noUnsafeOptionalChaining`](https://biomejs.dev/linter/rules/no-unsafe-optional-chaining/)
rule now reports unsafe optional chains wrapped in TypeScript `as`,
`satisfies`, type assertion, and instantiation expressions, such as `new
(value?.constructor as Constructor)()`.
- [#​10773](https://redirect.github.com/biomejs/biome/pull/10773)
[`3c6513d`](https://redirect.github.com/biomejs/biome/commit/3c6513d4e9a82a195785144caa9d96093c3861ff)
Thanks [@​otkrickey](https://redirect.github.com/otkrickey)! -
Fixed
[#​10772](https://redirect.github.com/biomejs/biome/issues/10772):
[`useVueValidVOn`](https://biomejs.dev/linter/rules/use-vue-valid-v-on/)
no longer reports a missing handler for v-on directives using a verb
modifier (`.stop` / `.prevent`) without an expression, e.g. `<div
@​click.stop></div>`. The rule also accepts the arg-less object
syntax `<div v-on="$listeners"></div>` instead of reporting a missing
event name.
- [#​10721](https://redirect.github.com/biomejs/biome/pull/10721)
[`d83c66b`](https://redirect.github.com/biomejs/biome/commit/d83c66b39a820703d94100f8a6502cc6dbad26a1)
Thanks [@​minseong0324](https://redirect.github.com/minseong0324)!
- Improved type-aware lint rule inference for built-in globals and
indexed function calls. Biome now resolves `Error(...)`, `new
Error(...)`, optional `Error#stack`, and calls through indexed function
values such as `handlers[0]()` more accurately.
- [#​10865](https://redirect.github.com/biomejs/biome/pull/10865)
[`6450276`](https://redirect.github.com/biomejs/biome/commit/6450276764ee4794a0fcb46c139f95b68d892427)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10845](https://redirect.github.com/biomejs/biome/issues/10845).
Biome Language Server no longer goes in deadlock when the scanner is
enabled.
- [#​10853](https://redirect.github.com/biomejs/biome/pull/10853)
[`93d8e53`](https://redirect.github.com/biomejs/biome/commit/93d8e5352454bccfbd179db03b3155776599c52c)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10840](https://redirect.github.com/biomejs/biome/issues/10840):
Astro shorthand attribute syntax is now correctly being parsed from
embedded nodes.
- [#​10820](https://redirect.github.com/biomejs/biome/pull/10820)
[`bba3092`](https://redirect.github.com/biomejs/biome/commit/bba30920715920142e933939f6270feedca933a5)
Thanks
[@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! -
Fixed
[#​10619](https://redirect.github.com/biomejs/biome/issues/10619):
[`noProcessEnv`](https://biomejs.dev/linter/rules/no-process-env/) now
also reports computed (bracket) member access. Previously only dot
access was checked, so `process["env"]` and `env["NODE_ENV"]` (where
`env` is imported from `node:process`) were missed. Both static and
computed accesses are now reported.
- [#​10835](https://redirect.github.com/biomejs/biome/pull/10835)
[`3447b2f`](https://redirect.github.com/biomejs/biome/commit/3447b2f5a3c430efc8e917514260af5341c5509d)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed
[#​10824](https://redirect.github.com/biomejs/biome/issues/10824):
[`useDomQuerySelector`](https://biomejs.dev/linter/rules/use-dom-query-selector/)
now supports an `ignore` option for receiver identifiers that should not
be reported.
- [#​10875](https://redirect.github.com/biomejs/biome/pull/10875)
[`b12e486`](https://redirect.github.com/biomejs/biome/commit/b12e486d0f0b80d02d2208e239190f8756d39d48)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed
[#​10795](https://redirect.github.com/biomejs/biome/issues/10795):
`--profile-rules` now reports timings for each plugin separately as
`plugin/<pluginName>`, matching the naming used by plugin suppressions,
instead of aggregating all plugins under a single `plugin/plugin` entry.
- [#​10877](https://redirect.github.com/biomejs/biome/pull/10877)
[`d6bc447`](https://redirect.github.com/biomejs/biome/commit/d6bc4473a210758ee49f6cad41bc69587a7cf125)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[biome-zed#164](https://redirect.github.com/biomejs/biome-zed/issues/164):
Biome no longer inserts stray whitespace when format-on-type runs after
closing delimiters such as `)`, `]`, and `}`.
- [#​10867](https://redirect.github.com/biomejs/biome/pull/10867)
[`a21463e`](https://redirect.github.com/biomejs/biome/commit/a21463e5f616a2db5035b470cd206ac9da4d9423)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Fixed
[#​10864](https://redirect.github.com/biomejs/biome/issues/10864):
Biome no longer crashes when checking or linting HTML files with
unquoted attribute values such as `<textarea rows=4></textarea>`.
###
[`v2.5.2`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#252)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.1...@biomejs/biome@2.5.2)
##### Patch Changes
- [#​10595](https://redirect.github.com/biomejs/biome/pull/10595)
[`f458028`](https://redirect.github.com/biomejs/biome/commit/f4580289094a8fe5c85252adc3399c060bab811e)
Thanks [@​pkallos](https://redirect.github.com/pkallos)! - Added
the option `ignoreBooleanCoercion` to
[useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/).
When enabled, Biome ignores `||` and `||=` used inside a `Boolean()`
call, where coalescing on falsy values is intentional.
- [#​10798](https://redirect.github.com/biomejs/biome/pull/10798)
[`4a32b63`](https://redirect.github.com/biomejs/biome/commit/4a32b63eb41f144dc8faf6b5cdb05e1de5dbcb63)
Thanks [@​pkallos](https://redirect.github.com/pkallos)! - Added
the option `ignorePrimitives` to
[useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/).
When enabled, Biome ignores `||`, `||=`, and ternary expressions whose
non-nullish operands are all primitives the option opts out of. Use
`true` to ignore all primitives, or an object selecting `string`,
`number`, `boolean`, or `bigint`.
- [#​10545](https://redirect.github.com/biomejs/biome/pull/10545)
[`f3d4c00`](https://redirect.github.com/biomejs/biome/commit/f3d4c0082676c5188e9a6aa516318c7e3d59bda6)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Added the
new nursery rule
[`noSvelteUnnecessaryStateWrap`](https://biomejs.dev/linter/rules/no-svelte-unnecessary-state-wrap/),
which reports unnecessary `$state()` wrapping of classes from
`svelte/reactivity` that are already reactive.
```svelte
<script>
import { SvelteMap } from "svelte/reactivity";
const map = $state(new SvelteMap()); // redundant
</script>
```
- [#​10752](https://redirect.github.com/biomejs/biome/pull/10752)
[`f62fb8b`](https://redirect.github.com/biomejs/biome/commit/f62fb8b53092fe85e16f9d4ea0e584fee7031ab5)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10739](https://redirect.github.com/biomejs/biome/issues/10739).
Now the rule
[`useValidAutocomplete`](https://biomejs.dev/linter/rules/use-valid-autocomplete/)
correctly flags the `autoComplete` attribute.
- [#​10796](https://redirect.github.com/biomejs/biome/pull/10796)
[`f1b3ab2`](https://redirect.github.com/biomejs/biome/commit/f1b3ab2c09522a52c93f669ce679675237b96813)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10768](https://redirect.github.com/biomejs/biome/issues/10768).
Improved the performance of the Biome Language Server by cancelling
certain in-flight operations when there are fast updates.
- [#​10719](https://redirect.github.com/biomejs/biome/pull/10719)
[`aa649b5`](https://redirect.github.com/biomejs/biome/commit/aa649b586a2221bf058af7ce80af6faa11faf846)
Thanks [@​minseong0324](https://redirect.github.com/minseong0324)!
- Fixed
[`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/)
false positive on returns that use a widening type assertion: `"a" as
string` is no longer reported as misleading. The rule now also reports a
literal-pinning assertion such as `false as false`, matching the
existing `as const` behavior.
```ts
// No longer flagged (returns are `string`):
function getValue(b: boolean): string {
if (b) return "a" as string;
return "b" as string;
}
// Now also reported, like `as const` (returns `false`):
function isReady(): boolean {
return false as false;
}
```
- [#​10678](https://redirect.github.com/biomejs/biome/pull/10678)
[`8f073a7`](https://redirect.github.com/biomejs/biome/commit/8f073a7cd72b4cf46c2ebf2bc08f4068fc4b5e34)
Thanks
[@​PranavAchar01](https://redirect.github.com/PranavAchar01)! -
Fixed
[#​7718](https://redirect.github.com/biomejs/biome/issues/7718):
Biome now correctly parses CSS nesting selectors when `&` appears as a
trailing sub-selector after a type selector, e.g. `h1& { color: red; }`.
- [#​10756](https://redirect.github.com/biomejs/biome/pull/10756)
[`5ec965a`](https://redirect.github.com/biomejs/biome/commit/5ec965a2620dec7cb40aa4946ba1d41408b11fd9)
Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! -
Fixed CSS formatter output for selector lists with
`allowWrongLineComments` and `//` comments after a selector comma. Biome
now keeps the selector before the line comment inline instead of
breaking it across descendant combinators.
```diff
-.powerPathNavigator
- .helm
- button.pressedButton, // pressed
+.powerPathNavigator .helm button.pressedButton, // pressed
.powerPathNavigator .helm button:active:not(.disabledButton) {
}
```
- [#​10757](https://redirect.github.com/biomejs/biome/pull/10757)
[`6232fcd`](https://redirect.github.com/biomejs/biome/commit/6232fcdef77471e6a6a74bcc33ff7b2b2a9f85a2)
Thanks
[@​PranavAchar01](https://redirect.github.com/PranavAchar01)! -
Fixed
[#​8269](https://redirect.github.com/biomejs/biome/issues/8269):
the CSS parser now accepts Tailwind `@variant` and `@utility` names that
start with a digit, such as the `2xl` breakpoint.
```css
@​utility container {
@​variant 2xl {
max-width: 1400px;
}
}
```
- [#​10777](https://redirect.github.com/biomejs/biome/pull/10777)
[`575ced6`](https://redirect.github.com/biomejs/biome/commit/575ced6fd7fe3597fdec36e572763e4a5d590244)
Thanks
[@​WaterWhisperer](https://redirect.github.com/WaterWhisperer)! -
Fixed an issue reported in
[#​10708](https://redirect.github.com/biomejs/biome/issues/10708):
the GitLab reporter now handles `--verbose` diagnostics filtering
correctly.
- [#​10281](https://redirect.github.com/biomejs/biome/pull/10281)
[`0efe244`](https://redirect.github.com/biomejs/biome/commit/0efe2442e9b81d83f7332fd792ad6096678f8b2c)
Thanks [@​Zelys-DFKH](https://redirect.github.com/Zelys-DFKH)! -
Fixed a bug where GritQL patterns rejected positional (unkeyed)
arguments.
- [#​10758](https://redirect.github.com/biomejs/biome/pull/10758)
[`e36fd8a`](https://redirect.github.com/biomejs/biome/commit/e36fd8a9f1314744276df515a1137f21802d3aa5)
Thanks
[@​henrybrewer00-dotcom](https://redirect.github.com/henrybrewer00-dotcom)!
- Fixed
[#​10697](https://redirect.github.com/biomejs/biome/issues/10697):
The formatter no longer removes the parentheses around an `await` or
`yield` expression used as the target of a TypeScript instantiation
expression. For example, `(await makeFactory)<Value>` is no longer
reformatted to `await makeFactory<Value>`, which would change the
meaning of the code.
- [#​10586](https://redirect.github.com/biomejs/biome/pull/10586)
[`3617094`](https://redirect.github.com/biomejs/biome/commit/3617094f00e90f7167ff20baf3c12b5014188b35)
Thanks [@​IxxyDev](https://redirect.github.com/IxxyDev)! - Fixed
[#​9568](https://redirect.github.com/biomejs/biome/issues/9568):
[`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/)
no longer reports a false positive when calling an overloaded function
and the selected overload does not return a promise.
```ts
function bestEffort(cb: () => Promise<number>): Promise<number>;
function bestEffort(cb: () => number): number;
function bestEffort(
cb: () => number | Promise<number>,
): Promise<number> | number {
return cb() as Promise<number> | number;
}
// This resolves to the second overload, which returns `number`, so it
is no
// longer flagged as a floating promise.
bestEffort(() => 42);
```
- [#​10766](https://redirect.github.com/biomejs/biome/pull/10766)
[`7aff4c1`](https://redirect.github.com/biomejs/biome/commit/7aff4c11900579a62dc27ef4e02a4c4760fbbff4)
Thanks
[@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! -
Fixed
[#​2862](https://redirect.github.com/biomejs/biome/issues/2862):
[`noInteractiveElementToNoninteractiveRole`](https://biomejs.dev/linter/rules/no-interactive-element-to-noninteractive-role/)
no longer reports custom elements (a tag name containing a dash, e.g.
`<my-button role="img" />`). Per the [W3C HTML-ARIA
specification](https://www.w3.org/TR/html-aria/#el-autonomous-custom-element),
a custom element may be given any role or none.
- [#​10680](https://redirect.github.com/biomejs/biome/pull/10680)
[`771daa4`](https://redirect.github.com/biomejs/biome/commit/771daa4f7d229a8754f47923f03b899dc0fc5630)
Thanks
[@​WaterWhisperer](https://redirect.github.com/WaterWhisperer)! -
Fixed
[#​10635](https://redirect.github.com/biomejs/biome/issues/10635):
Biome now recognizes chained
table tests such as `test.concurrent.each()` and `it.concurrent.each()`
as test calls, fixing
`noMisplacedAssertion` false positives and improving formatting for
those test declarations.
- [#​10759](https://redirect.github.com/biomejs/biome/pull/10759)
[`34570b5`](https://redirect.github.com/biomejs/biome/commit/34570b5b793c44e978b12589dafcfda22dba7df1)
Thanks
[@​henrybrewer00-dotcom](https://redirect.github.com/henrybrewer00-dotcom)!
- Fixed
[#​10636](https://redirect.github.com/biomejs/biome/issues/10636):
[noStaticElementInteractions](https://biomejs.dev/linter/rules/no-static-element-interactions/)
no longer reports a false positive for event handlers on Svelte special
elements such as `<svelte:window>`, `<svelte:document>`, and
`<svelte:body>`. These are not real DOM elements, so they are now
ignored by the rule.
- [#​10741](https://redirect.github.com/biomejs/biome/pull/10741)
[`bd2364e`](https://redirect.github.com/biomejs/biome/commit/bd2364e3d077e3a77addcab6dbe127db38654e4a)
Thanks
[@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! -
Fixed
[#​6686](https://redirect.github.com/biomejs/biome/issues/6686):
the `rage` command now respects the `--config-path` option and the
`BIOME_CONFIG_PATH` environment variable when loading the Biome
configuration. Previously it always used the default configuration
resolution and reported the configuration as `Not set` when no
`biome.json` existed in the working directory.
- [#​10763](https://redirect.github.com/biomejs/biome/pull/10763)
[`2c3e82d`](https://redirect.github.com/biomejs/biome/commit/2c3e82d0235ad2f8331744aefc708d1b71f7177c)
Thanks [@​Aqu1bp](https://redirect.github.com/Aqu1bp)! - Fixed
[#​10742](https://redirect.github.com/biomejs/biome/issues/10742):
[`noSolidDestructuredProps`](https://biomejs.dev/linter/rules/no-solid-destructured-props)
now reports destructured props in Solid function components and JSX
children.
- [#​10606](https://redirect.github.com/biomejs/biome/pull/10606)
[`a4cc4ab`](https://redirect.github.com/biomejs/biome/commit/a4cc4ab0b01a8ef1731d37cb44bccc5522876f2e)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Fixed false
positives in `noUnusedImports`, `noUnusedVariables`, and `useImportType`
for Svelte components that use both a `<script module>` and a `<script>`
block. The two blocks compile to a single module and share a top-level
scope, so a binding (import, function, or variable) declared in one
block and used only in the other is no longer reported as unused.
- [#​10767](https://redirect.github.com/biomejs/biome/pull/10767)
[`36d5aa7`](https://redirect.github.com/biomejs/biome/commit/36d5aa77d751bf33485cd2c92d89e4c5764e1e50)
Thanks [@​otkrickey](https://redirect.github.com/otkrickey)! -
Fixed
[#​10754](https://redirect.github.com/biomejs/biome/issues/10754):
[`useVueValidVBind`](https://biomejs.dev/linter/rules/use-vue-valid-v-bind/)
no longer reports the Vue 3.4+ same-name shorthand as missing a value.
`:foo` and `v-bind:foo` are now accepted as equivalent to `:foo="foo"`,
while `v-bind`, `v-bind:[dynamicArg]`, and `:[dynamicArg]` without a
value continue to be reported.
- [#​10775](https://redirect.github.com/biomejs/biome/pull/10775)
[`a918af0`](https://redirect.github.com/biomejs/biome/commit/a918af0ba827a7fd60a12c96b58daebc8af61db2)
Thanks
[@​WaterWhisperer](https://redirect.github.com/WaterWhisperer)! -
Fixed an issue reported in
[#​10708](https://redirect.github.com/biomejs/biome/issues/10708):
`biome rage` didn't detect running Biome daemon pipes on Windows.
- [#​10730](https://redirect.github.com/biomejs/biome/pull/10730)
[`5a2e65b`](https://redirect.github.com/biomejs/biome/commit/5a2e65b9929ef0f2294c20e028fd396d760d2b26)
Thanks [@​dinocosta](https://redirect.github.com/dinocosta)! -
Fixed an issue where Biome was resolving [the well-known Zed settings
file](https://biomejs.dev/guides/configure-biome/#well-known-files) from
the wrong location on macOS and Windows.
- [#​10807](https://redirect.github.com/biomejs/biome/pull/10807)
[`d97fffe`](https://redirect.github.com/biomejs/biome/commit/d97fffe0aba04cddec66943d6bff3e99d440b451)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where `.scss` files were incorrectly analyzed when
running `biome check`.
- [#​10672](https://redirect.github.com/biomejs/biome/pull/10672)
[`53c6efc`](https://redirect.github.com/biomejs/biome/commit/53c6efcd3e5e2769bf8edbe14b8c06ee9fda52d2)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed a bug where Biome incorrectly formatted snippets that have parsing
errors.
- [#​10719](https://redirect.github.com/biomejs/biome/pull/10719)
[`aa649b5`](https://redirect.github.com/biomejs/biome/commit/aa649b586a2221bf058af7ce80af6faa11faf846)
Thanks [@​minseong0324](https://redirect.github.com/minseong0324)!
- Fixed
[`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/)
false positive when awaiting a custom thenable that is not the global
`Promise`. A value with a callable `then` member is now recognized as
awaitable.
```ts
interface Thenable<T> {
then(onfulfilled: (value: T) => void): void;
}
declare const t: Thenable<number>;
async function f() {
await t;
}
```
- [#​10734](https://redirect.github.com/biomejs/biome/pull/10734)
[`4396496`](https://redirect.github.com/biomejs/biome/commit/43964961c88ca0f93ee83d10621844fa2dc7515c)
Thanks [@​BangDori](https://redirect.github.com/BangDori)! - Fixed
[#​10708](https://redirect.github.com/biomejs/biome/issues/10708):
`biome migrate` now preserves trivia when migrating the deprecated
`recommended` option to `preset`.
- [#​10683](https://redirect.github.com/biomejs/biome/pull/10683)
[`ae31a00`](https://redirect.github.com/biomejs/biome/commit/ae31a004a20ed33d6aa35d5ec8bb4c433273a517)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10657](https://redirect.github.com/biomejs/biome/issues/10657)
[#​10671](https://redirect.github.com/biomejs/biome/issues/10671)
[#​10661](https://redirect.github.com/biomejs/biome/issues/10661)
[#​10637](https://redirect.github.com/biomejs/biome/issues/10637)
[#​10718](https://redirect.github.com/biomejs/biome/issues/10718):
HTML rules now correctly handle dynamic attributes.
- [#​10746](https://redirect.github.com/biomejs/biome/pull/10746)
[`54e8239`](https://redirect.github.com/biomejs/biome/commit/54e8239bba3f598d7923ac1e446d658714ea7832)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where
[`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes)
didn't correctly detect styles defined inside the Astro directive
`is:global`.
- [#​10770](https://redirect.github.com/biomejs/biome/pull/10770)
[`dd1429c`](https://redirect.github.com/biomejs/biome/commit/dd1429c604f58b89524a3f5329e2920d198e8d9f)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Improved the Biome Language Server DX by orchestrating certain
operations, so that they won't block the editor during typing. This
improvement is more visible in large documents.
- [#​10473](https://redirect.github.com/biomejs/biome/pull/10473)
[`d9b5133`](https://redirect.github.com/biomejs/biome/commit/d9b5133de7e211b22f4531fe220070690a18c8d1)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Improved
[`noUnusedImports`](https://biomejs.dev/linter/rules/no-unused-imports/),
[`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/),
[`noUnusedFunctionParameters`](https://biomejs.dev/linter/rules/no-unused-function-parameters/),
and [`useImportType`](https://biomejs.dev/linter/rules/use-import-type/)
for Svelte, Vue, and Astro files (with
`html.experimentalFullSupportEnabled`). Bindings used only in the
template β including component tags, attribute interpolations,
directives, `bind:` shorthand, and snippet parameters β are no longer
reported as unused, while genuinely unused ones still are.
- [#​10796](https://redirect.github.com/biomejs/biome/pull/10796)
[`f1b3ab2`](https://redirect.github.com/biomejs/biome/commit/f1b3ab2c09522a52c93f669ce679675237b96813)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where the Biome Language Server didn't enable project or
type-aware lint rules, even when they were explicitly enabled.
- [#​10746](https://redirect.github.com/biomejs/biome/pull/10746)
[`54e8239`](https://redirect.github.com/biomejs/biome/commit/54e8239bba3f598d7923ac1e446d658714ea7832)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where
[`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes)
didn't detect styles declared inside HTML documents.
- [#​10774](https://redirect.github.com/biomejs/biome/pull/10774)
[`bde945b`](https://redirect.github.com/biomejs/biome/commit/bde945bee29cb566086828ad788153d9111a125a)
Thanks [@​pattrickrice](https://redirect.github.com/pattrickrice)!
- Fixed
[#​10268](https://redirect.github.com/biomejs/biome/issues/10268)
where a race condition resulted in internal errors such as: `The file
biome.json does not exist in the workspace`.
###
[`v2.5.1`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#251)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.0...@biomejs/biome@2.5.1)
##### Patch Changes
- [#​10722](https://redirect.github.com/biomejs/biome/pull/10722)
[`f8a303d`](https://redirect.github.com/biomejs/biome/commit/f8a303d08b6b22f56edb8ff5e7caa665532d613a)
Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! -
Fixed CSS formatter output for comments between import media queries.
```diff
-@​import url("print.css") print,
-/* comment */
-screen;
+@​import url("print.css") print, /* comment */ screen;
```
- [#​10738](https://redirect.github.com/biomejs/biome/pull/10738)
[`9fdc560`](https://redirect.github.com/biomejs/biome/commit/9fdc5600997ef59ca7ed55ac212473de9bdb0b2a)
Thanks
[@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! -
Fixed
[#​9899](https://redirect.github.com/biomejs/biome/issues/9899):
the `json` and `json-pretty` reporters now escape backslashes in a
diagnostic's `location.path`. Previously, paths containing backslashes
(such as Windows-style paths) were emitted unescaped, producing invalid
JSON.
```diff
- "path": "src\account\setup-passkey.tsx",
+ "path": "src\\account\\setup-passkey.tsx",
```
- [#​10626](https://redirect.github.com/biomejs/biome/pull/10626)
[`5f837df`](https://redirect.github.com/biomejs/biome/commit/5f837df033afc34d43b398aeddc06c1d4fa491d9)
Thanks [@​tom-groves](https://redirect.github.com/tom-groves)! -
Fixed
[#​10625](https://redirect.github.com/biomejs/biome/issues/10625):
`biome migrate` no longer emits an invalid trailing comma when a renamed
rule (such as `noConsoleLog` β `noConsole`) is the last member of its
rule group. Previously this produced malformed output that aborted the
migration of a strict-JSON `biome.json` with a parsing error.
- [#​10535](https://redirect.github.com/biomejs/biome/pull/10535)
[`c245f9d`](https://redirect.github.com/biomejs/biome/commit/c245f9d9e239471d5437cd08f9cfa4601a85abd5)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Fixed a
false positive in
[`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/)
for Svelte files where variables referenced inside `{@​html expr}`
blocks were incorrectly reported as unused.
- [#​10668](https://redirect.github.com/biomejs/biome/pull/10668)
[`a0f197e`](https://redirect.github.com/biomejs/biome/commit/a0f197eb1a6974539927f105ff1dde1f51d07d74)
Thanks [@​Netail](https://redirect.github.com/Netail)! - The
`biome init` command has been updated to include a more up-to-date URL
to [the first-party extensions
page](https://biomejs.dev/editors/first-party-extensions/).
- [#​10667](https://redirect.github.com/biomejs/biome/pull/10667)
[`d8c3e87`](https://redirect.github.com/biomejs/biome/commit/d8c3e878d53515c02bd6c5cb899b2eaec046c542)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10664](https://redirect.github.com/biomejs/biome/issues/10664):
[useErrorCause](https://biomejs.dev/linter/rules/use-error-cause/) now
correctly detects a shorthand property.
- [#​10696](https://redirect.github.com/biomejs/biome/pull/10696)
[`ef2373f`](https://redirect.github.com/biomejs/biome/commit/ef2373f29be15673705884d345c9af189e30b581)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​9566](https://redirect.github.com/biomejs/biome/issues/9566).
Improved how the Biome Language Server loads multiple configuration
files inside a workspace.
- [#​10705](https://redirect.github.com/biomejs/biome/pull/10705)
[`4ccb410`](https://redirect.github.com/biomejs/biome/commit/4ccb410dc00a6fb243934dad2e8681a9d5d9529e)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10652](https://redirect.github.com/biomejs/biome/issues/10652).
Biome plugins are now properly filtered when using `--only` and `--skip`
flags.
- [#​10669](https://redirect.github.com/biomejs/biome/pull/10669)
[`aa0a6eb`](https://redirect.github.com/biomejs/biome/commit/aa0a6eb8007493961cd578f04201248c15fd809a)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10651](https://redirect.github.com/biomejs/biome/issues/10651):
[useInlineScriptId](https://biomejs.dev/linter/rules/use-inline-script-id/)
now correctly trims trivia to detect if an id attribute has been set.
- [#​10689](https://redirect.github.com/biomejs/biome/pull/10689)
[`844b1be`](https://redirect.github.com/biomejs/biome/commit/844b1be60ded28bf4c650d85806919ceb57bc402)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10658](https://redirect.github.com/biomejs/biome/issues/10658).
The issue was caused by the "Go-to definition" editor feature, which was
enabled by default. The feature is now **disabled by default**. To work,
the feature triggers the scanner to build the module graph. This caused
memory leak issues in cases where Biome starts in the home directory to
modify files.
If you relied on this new feature, you must now turn on using the
\[editor settings] of the extension e.g.
[Zed](https://biomejs.dev/reference/zed/#goto_definition) and
[VSCode](https://biomejs.dev/reference/vscode/#biomegotodefinition).
- [#​10695](https://redirect.github.com/biomejs/biome/pull/10695)
[`043fbb5`](https://redirect.github.com/biomejs/biome/commit/043fbb514f1b96c5b723cd86c8db4b9bc9f03631)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10674](https://redirect.github.com/biomejs/biome/issues/10674).
Biome now throws an error when the field `level` is missing from a rule
option.
- [#​10712](https://redirect.github.com/biomejs/biome/pull/10712)
[`5941df2`](https://redirect.github.com/biomejs/biome/commit/5941df2a0d6904e487e73d4dc7231dcaf7b3a2f0)
Thanks [@​Conaclos](https://redirect.github.com/Conaclos)! -
Improved the diagnostic and the documentation of
[`useFlatMap`](https://biomejs.dev/linter/rules/use-flat-map/).
- [#​10615](https://redirect.github.com/biomejs/biome/pull/10615)
[`23814f1`](https://redirect.github.com/biomejs/biome/commit/23814f1ad8430df906a39323ee31d27d7b9ca17b)
Thanks [@​qwertycxz](https://redirect.github.com/qwertycxz)! -
Improved the DX the JSON schema when it's used by certain code editors
like VSCode.
- [#​10688](https://redirect.github.com/biomejs/biome/pull/10688)
[`ec69489`](https://redirect.github.com/biomejs/biome/commit/ec694896a0c75176aca040392e3309df1b2e963d)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed a bug where the Biome Daemon did not correctly shut down when the
editor was closed during an in-progress operation, especially while
scanning.
- [#​10701](https://redirect.github.com/biomejs/biome/pull/10701)
[`6c2e0d7`](https://redirect.github.com/biomejs/biome/commit/6c2e0d7bba1cbc457a42adf6c982a773bc7e4605)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10694](https://redirect.github.com/biomejs/biome/issues/10694).
The Biome Language Server no longer prints an error when the user hovers
a variable imported from node\_modules.
- [#​10681](https://redirect.github.com/biomejs/biome/pull/10681)
[`888515b`](https://redirect.github.com/biomejs/biome/commit/888515b088cde688a95680362a619221c023f9d0)
Thanks [@​Conaclos](https://redirect.github.com/Conaclos)! - Fixed
[`useExportType`](https://biomejs.dev/linter/rules/use-export-type/)
that reported useless details in some diagnostics.
- [#​10220](https://redirect.github.com/biomejs/biome/pull/10220)
[`3694a13`](https://redirect.github.com/biomejs/biome/commit/3694a135a9976915889988c36d9eb40d679f06e6)
Thanks [@​theBGuy](https://redirect.github.com/theBGuy)! - Fixed
[`useAnchorContent`](https://biomejs.dev/linter/rules/use-anchor-content/)
false positive for `<a>` elements used as render prop values (e.g.
`render={<a href="..." />}`), a pattern where the receiving component
renders its children inside the anchor element.
- [#​10702](https://redirect.github.com/biomejs/biome/pull/10702)
[`98823fb`](https://redirect.github.com/biomejs/biome/commit/98823fb2e70095b09e1ca4bb9733850bbe8ff33f)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10612](https://redirect.github.com/biomejs/biome/issues/10612).
The Biome parser now correctly parses processing instructions. The
following SVG doesn't throw errors anymore:
```svg
<?xml version="1.0" encoding="UTF-8" ?>
<svg></svg>
```
###
[`v2.5.0`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#250)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.4.16...@biomejs/biome@2.5.0)
##### Minor Changes
- [#​9539](https://redirect.github.com/biomejs/biome/pull/9539)
[`f0615fd`](https://redirect.github.com/biomejs/biome/commit/f0615fdae80fa7257fc1d0448d2027cb1acff46e)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Added a new reporter called `concise`. When `--reporter=concise` is
passed the commands `format`, `lint`, `check` and `ci`, the diagnostics
are printed in a compact manner:
```
! index.ts:2:10: lint/correctness/noUnusedImports: Several of these
imports are unused.
! main.ts:9:7: lint/correctness/noUnusedVariables: This variable f is
unused.
Γ
> β **Note**
>
> PR body was truncated to here.
</details>
---
### Configuration
π
**Schedule**: (in timezone America/New_York)
- Branch creation
- "before 6am on monday"
- Automerge
- At any time (no schedule defined)
π¦ **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
β» **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
π» **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/CodesWhat/drydock).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI3NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: scttbnsn <80784472+scttbnsn@users.noreply.github.com>
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@fontsource/comic-mono](https://fontsource.org/fonts/comic-mono) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/other/comic-mono)) | [`5.2.5` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fcomic-mono/5.2.5/5.3.0) |  |  | | [@fontsource/commit-mono](https://fontsource.org/fonts/commit-mono) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/other/commit-mono)) | [`5.2.5` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fcommit-mono/5.2.5/5.3.0) |  |  | | [@fontsource/ibm-plex-mono](https://fontsource.org/fonts/ibm-plex-mono) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/google/ibm-plex-mono)) | [`5.2.7` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fibm-plex-mono/5.2.7/5.3.0) |  |  | | [@fontsource/inconsolata](https://fontsource.org/fonts/inconsolata) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/google/inconsolata)) | [`5.2.8` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2finconsolata/5.2.8/5.3.0) |  |  | | [@fontsource/jetbrains-mono](https://fontsource.org/fonts/jetbrains-mono) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/google/jetbrains-mono)) | [`5.2.8` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fjetbrains-mono/5.2.8/5.3.0) |  |  | | [@fontsource/source-code-pro](https://fontsource.org/fonts/source-code-pro) ([source](https://redirect.github.com/fontsource/font-files/tree/HEAD/fonts/google/source-code-pro)) | [`5.2.7` β `5.3.0`](https://renovatebot.com/diffs/npm/@fontsource%2fsource-code-pro/5.2.7/5.3.0) |  |  | | [@iconify-json/lucide](https://icon-sets.iconify.design/lucide/) | [`1.2.116` β `1.2.118`](https://renovatebot.com/diffs/npm/@iconify-json%2flucide/1.2.116/1.2.118) |  |  | | [@iconify-json/tabler](https://icon-sets.iconify.design/tabler/) | [`1.2.35` β `1.2.37`](https://renovatebot.com/diffs/npm/@iconify-json%2ftabler/1.2.35/1.2.37) |  |  | | [@tailwindcss/vite](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)) | [`4.3.2` β `4.3.3`](https://renovatebot.com/diffs/npm/@tailwindcss%2fvite/4.3.2/4.3.3) |  |  | | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`25.9.4` β `25.9.5`](https://renovatebot.com/diffs/npm/@types%2fnode/25.9.4/25.9.5) |  |  | | [@vitejs/plugin-vue](https://redirect.github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#readme) ([source](https://redirect.github.com/vitejs/vite-plugin-vue/tree/HEAD/packages/plugin-vue)) | [`6.0.7` β `6.0.8`](https://renovatebot.com/diffs/npm/@vitejs%2fplugin-vue/6.0.7/6.0.8) |  |  | | [msw](https://mswjs.io) ([source](https://redirect.github.com/mswjs/msw)) | [`2.14.6` β `2.15.0`](https://renovatebot.com/diffs/npm/msw/2.14.6/2.15.0) |  |  | | [postcss](https://postcss.org/) ([source](https://redirect.github.com/postcss/postcss)) | [`8.5.16` β `8.5.21`](https://renovatebot.com/diffs/npm/postcss/8.5.16/8.5.21) |  |  | | [tailwindcss](https://tailwindcss.com) ([source](https://redirect.github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.3.2` β `4.3.3`](https://renovatebot.com/diffs/npm/tailwindcss/4.3.2/4.3.3) |  |  | | [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.9` β `4.1.10`](https://renovatebot.com/diffs/npm/vitest/4.1.9/4.1.10) |  |  | | [vue](https://vuejs.org/) ([source](https://redirect.github.com/vuejs/core)) | [`3.5.39` β `3.5.40`](https://renovatebot.com/diffs/npm/vue/3.5.39/3.5.40) |  |  | | [vue-router](https://router.vuejs.org) ([source](https://redirect.github.com/vuejs/router)) | [`5.1.0` β `5.2.0`](https://renovatebot.com/diffs/npm/vue-router/5.1.0/5.2.0) |  |  | --- ### Release Notes <details> <summary>fontsource/font-files (@​fontsource/comic-mono)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/90f4206a30838317875479a13ee5046613af42f7...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/90f4206a30838317875479a13ee5046613af42f7...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/commit-mono)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/90f4206a30838317875479a13ee5046613af42f7...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/90f4206a30838317875479a13ee5046613af42f7...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/ibm-plex-mono)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/inconsolata)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/jetbrains-mono)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/40ecb0c337fd649924783a87783dc2e6639bb6f2...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>fontsource/font-files (@​fontsource/source-code-pro)</summary> ### [`v5.3.0`](https://redirect.github.com/fontsource/font-files/compare/9c74cedc2a2c1989d2faf595c62c23f617144a30...02b28c06b126c852a5b966b44aef777ca923f6f6) [Compare Source](https://redirect.github.com/fontsource/font-files/compare/9c74cedc2a2c1989d2faf595c62c23f617144a30...02b28c06b126c852a5b966b44aef777ca923f6f6) </details> <details> <summary>tailwindlabs/tailwindcss (@​tailwindcss/vite)</summary> ### [`v4.3.3`](https://redirect.github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#433---2026-07-16) [Compare Source](https://redirect.github.com/tailwindlabs/tailwindcss/compare/v4.3.2...v4.3.3) ##### Fixed - Support `--watch --poll[=ms]` in `@tailwindcss/cli` when filesystem events are unreliable or unavailable ([#​20297](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20297)) - Canonicalization: match arbitrary hex colors against theme colors case-insensitively (e.g. `bg-[#fff]` and `bg-[#FFF]` β `bg-white`) ([#​20298](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20298)) - Prevent Preflight from overriding Firefox's native `iframe:focus-visible` outline styles ([#​20292](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20292)) - Ensure `theme('colors.foo')` in JS plugins resolves correctly when both `--color-foo` and `--color-foo-bar` exist ([#​20299](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20299)) - Ensure fractional opacity modifiers work with named shadow sizes like `shadow-sm/12.5`, `text-shadow-sm/12.5`, `drop-shadow-sm/12.5`, and `inset-shadow-sm/12.5` ([#​20302](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20302)) - Parse selectors like `[data-foo]div` as two selectors instead of one ([#​20303](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20303)) - Ensure `@tailwindcss/postcss` rebuilds when a preprocessor like Sass changes the input CSS without changing the input file on disk ([#​20310](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20310)) - Ensure CSS nesting is handled even when Lightning CSS isn't run, such as in `@tailwindcss/browser` and Tailwind Play ([#​20124](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20124)) - Prevent achromatic theme colors from shifting hue when mixed in polar color spaces like `oklch` ([#​20314](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20314)) - Ensure `--spacing(0)` is optimized to `0px` instead of `0` so it remains a `<length>` when used in `calc(β¦)` ([#​20319](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20319)) - Load `@parcel/watcher` only when needed in `@tailwindcss/cli --watch` mode, so one-off builds and `--watch --poll` work when `@parcel/watcher` can't be loaded ([#​20325](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20325)) - Use explicit platform fonts instead of `system-ui` and `ui-sans-serif` so CJK text respects the page's `lang` attribute on Windows ([#​20318](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20318)) - Prevent `@tailwindcss/upgrade` from rewriting ignored files when run from a subdirectory ([#​20329](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20329)) - Ensure earlier `@source` rules pointing to nested files are scanned when later `@source` rules point to files in parent folders ([#​20335](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20335)) - Prevent `@tailwindcss/vite` from triggering full page reloads when scanned files are processed by Vite but haven't been loaded as modules yet ([#​20336](https://redirect.github.com/tailwindlabs/tailwindcss/pull/20336)) </details> <details> <summary>vitejs/vite-plugin-vue (@​vitejs/plugin-vue)</summary> ### [`v6.0.8`](https://redirect.github.com/vitejs/vite-plugin-vue/blob/HEAD/packages/plugin-vue/CHANGELOG.md#small-608-2026-07-14-small) ##### Features - **plugin-vue:** add forced vapor mode option ([#​766](https://redirect.github.com/vitejs/vite-plugin-vue/issues/766)) ([d59c3c0](https://redirect.github.com/vitejs/vite-plugin-vue/commit/d59c3c04b0c5cd920bab5f0f6000bedfef901e1c)) ##### Bug Fixes - **deps:** update all non-major dependencies ([#​781](https://redirect.github.com/vitejs/vite-plugin-vue/issues/781)) ([d369e5a](https://redirect.github.com/vitejs/vite-plugin-vue/commit/d369e5a57592ed525c4da5ef0458cb89a6977ad2)) </details> <details> <summary>mswjs/msw (msw)</summary> ### [`v2.15.0`](https://redirect.github.com/mswjs/msw/releases/tag/v2.15.0) [Compare Source](https://redirect.github.com/mswjs/msw/compare/v2.14.7...v2.15.0) #### v2.15.0 (2026-07-08) ##### Features - **sse:** invoke `finalize` on response stream end ([#​2741](https://redirect.github.com/mswjs/msw/issues/2741)) ([`7fae0cc`](https://redirect.github.com/mswjs/msw/commit/7fae0cc0954b20c739ae8e95a24eefc8a78710e8)) [@​kettanaito](https://redirect.github.com/kettanaito) ### [`v2.14.7`](https://redirect.github.com/mswjs/msw/releases/tag/v2.14.7) [Compare Source](https://redirect.github.com/mswjs/msw/compare/v2.14.6...v2.14.7) #### v2.14.7 (2026-07-07) ##### Bug Fixes - **sse:** proper logging for concurrent requests ([#​2762](https://redirect.github.com/mswjs/msw/issues/2762)) ([`5c0ae1c`](https://redirect.github.com/mswjs/msw/commit/5c0ae1c334a0cbe52638bd2949540372be3d46ba)) [@​kettanaito](https://redirect.github.com/kettanaito) </details> <details> <summary>postcss/postcss (postcss)</summary> ### [`v8.5.21`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8521) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.20...8.5.21) - Fixed childless at-rule losing semicolon before comment (by [@​sarathfrancis90](https://redirect.github.com/sarathfrancis90)). - Fixed docs (by [@​isker](https://redirect.github.com/isker)). ### [`v8.5.20`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8520) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.19...8.5.20) - Fixed missing space if `AtRule#params` is set after (by [@​sarathfrancis90](https://redirect.github.com/sarathfrancis90)). - Fixed mixing AST error on warnings (by [@​MahinAnowar](https://redirect.github.com/MahinAnowar)). ### [`v8.5.19`](https://redirect.github.com/postcss/postcss/releases/tag/8.5.19) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.18...8.5.19) - Fixed cleaning `before` for new nodes inserted to `Root` (by [@​MahinAnowar](https://redirect.github.com/MahinAnowar)). ### [`v8.5.18`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8518) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.17...8.5.18) - Restricted loading previous source maps file to the `opts.from` folder for security reasons (use `unsafeMap: true` to disable the check). ### [`v8.5.17`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8517) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.16...8.5.17) - Fixed `Maximum call stack size exceeded` error. - Fixed Prototype hijacking for `postcss.fromJSON()`. - Fixed `Input#origin()` for unmapped end position (by [@​chatman-media](https://redirect.github.com/chatman-media)). </details> <details> <summary>vitest-dev/vitest (vitest)</summary> ### [`v4.1.10`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.10) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10) ##### Β Β Β π Bug Fixes - **browser**: Check fs access in builtin commands \[backport to v4] Β -Β by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (claude-opus-4-8)** in [#​10680](https://redirect.github.com/vitest-dev/vitest/issues/10680) [<samp>(5c18d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5c18dd267) - **vm**: Fix external module resolve error with deps optimizer query for encoded URI \[backport to v4] Β -Β by [@​SveLil](https://redirect.github.com/SveLil) and [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [#​10661](https://redirect.github.com/vitest-dev/vitest/issues/10661) [<samp>(bae52)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bae52b511) ##### Β Β Β Β [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10) </details> <details> <summary>vuejs/core (vue)</summary> ### [`v3.5.40`](https://redirect.github.com/vuejs/core/blob/HEAD/CHANGELOG.md#3540-2026-07-16) [Compare Source](https://redirect.github.com/vuejs/core/compare/v3.5.39...v3.5.40) ##### Bug Fixes - **compiler-core:** avoid leaking slot branch keys ([#​15051](https://redirect.github.com/vuejs/core/issues/15051)) ([20c9d26](https://redirect.github.com/vuejs/core/commit/20c9d263d3bfafdfbcc1921f259fd8f711e18659)), closes [#​15048](https://redirect.github.com/vuejs/core/issues/15048) - **hydration:** pass namespace when patching dynamic props ([#​15082](https://redirect.github.com/vuejs/core/issues/15082)) ([e0d2723](https://redirect.github.com/vuejs/core/commit/e0d27234ddd2061383cb5dcc475d6b9558ed8e4f)), closes [#​15081](https://redirect.github.com/vuejs/core/issues/15081) [#​15050](https://redirect.github.com/vuejs/core/issues/15050) - **reactivity:** handle effect removal during scope stop ([#​15084](https://redirect.github.com/vuejs/core/issues/15084)) ([378f978](https://redirect.github.com/vuejs/core/commit/378f9783248a4a4f20781d665d4f7089f39cae6e)), closes [#​15083](https://redirect.github.com/vuejs/core/issues/15083) - **runtime-core:** skip lazy hydration for detached roots ([#​15092](https://redirect.github.com/vuejs/core/issues/15092)) ([97f3525](https://redirect.github.com/vuejs/core/commit/97f3525551ad06103083eb2cbf9858c5e57cd58e)), closes [#​15091](https://redirect.github.com/vuejs/core/issues/15091) - **runtime-core:** unwind dangling blocks when slot content throws ([#​15071](https://redirect.github.com/vuejs/core/issues/15071)) ([ddc132d](https://redirect.github.com/vuejs/core/commit/ddc132d7c054ecd2029ddcc95bcba770cd44f022)), closes [#​15070](https://redirect.github.com/vuejs/core/issues/15070) - **runtime-dom:** respect current select model type ([#​15010](https://redirect.github.com/vuejs/core/issues/15010)) ([eb89e93](https://redirect.github.com/vuejs/core/commit/eb89e935a771ab7fc3f8e67a82bc8fc7ea28bdaa)), closes [#​15009](https://redirect.github.com/vuejs/core/issues/15009) - **server-renderer:** handle errors in optimized component renders ([#​12601](https://redirect.github.com/vuejs/core/issues/12601)) ([474907c](https://redirect.github.com/vuejs/core/commit/474907c0f01d021c564545137051a2b56eb4a769)), closes [#​12575](https://redirect.github.com/vuejs/core/issues/12575) - **server-renderer:** remove package dependency cycle ([#​15063](https://redirect.github.com/vuejs/core/issues/15063)) ([4d35eca](https://redirect.github.com/vuejs/core/commit/4d35ecadb6f625b0f7407ccee0e357c2dd8084c7)) - **shared:** prevent SSR comment escaping from creating closing delimiters ([#​15045](https://redirect.github.com/vuejs/core/issues/15045)) ([bd962bb](https://redirect.github.com/vuejs/core/commit/bd962bbaca746d8f65775a07723420406ebad0da)) - **types:** don't constrain component $el type to Element ([#​15040](https://redirect.github.com/vuejs/core/issues/15040)) ([164460a](https://redirect.github.com/vuejs/core/commit/164460a52988c44dc34a541219c88120078372a0)) </details> <details> <summary>vuejs/router (vue-router)</summary> ### [`v5.2.0`](https://redirect.github.com/vuejs/router/releases/tag/v5.2.0) [Compare Source](https://redirect.github.com/vuejs/router/compare/v5.1.0...v5.2.0) ##### Β Β Β π Features - Add helpful diagnostics Β -Β by [@​posva](https://redirect.github.com/posva) in [#​2737](https://redirect.github.com/vuejs/router/issues/2737) [<samp>(628fe)</samp>](https://redirect.github.com/vuejs/router/commit/628fe18a) ##### Β Β Β π Bug Fixes - Allow pinia 4 Β -Β by [@​posva](https://redirect.github.com/posva) [<samp>(16535)</samp>](https://redirect.github.com/vuejs/router/commit/16535337) - **scroll**: Ignore stale async scrollBehavior results Β -Β by [@​baozjj](https://redirect.github.com/baozjj) and [@​cursoragent](https://redirect.github.com/cursoragent) in [#​2730](https://redirect.github.com/vuejs/router/issues/2730) [<samp>(303df)</samp>](https://redirect.github.com/vuejs/router/commit/303dfe19) - **unplugin**: Reject invalid hex digits in \[x+hh] character codes Β -Β by [@​greymoth-jp](https://redirect.github.com/greymoth-jp) in [#​2744](https://redirect.github.com/vuejs/router/issues/2744) [<samp>(4d967)</samp>](https://redirect.github.com/vuejs/router/commit/4d967411) ##### Β Β Β Β [View changes on GitHub](https://redirect.github.com/vuejs/router/compare/v5.1.0...v5.2.0) </details> --- ### Configuration π **Schedule**: (in timezone America/New_York) - Branch creation - "before 6am on monday" - Automerge - At any time (no schedule defined) π¦ **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β» **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. π» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/CodesWhat/drydock). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDIuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI3NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
> βΉοΈ **Note** > > This PR body was truncated due to platform limits. This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@aws-sdk/client-ecr](https://redirect.github.com/aws/aws-sdk-js-v3/tree/main/clients/client-ecr) ([source](https://redirect.github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-ecr)) | [`3.1079.0` β `3.1091.0`](https://renovatebot.com/diffs/npm/@aws-sdk%2fclient-ecr/3.1079.0/3.1091.0) |  |  | | [@slack/web-api](https://docs.slack.dev/tools/node-slack-sdk/web-api/) ([source](https://redirect.github.com/slackapi/node-slack-sdk)) | [`7.18.0` β `7.19.0`](https://renovatebot.com/diffs/npm/@slack%2fweb-api/7.18.0/7.19.0) |  |  | | [@smithy/node-http-handler](https://redirect.github.com/smithy-lang/smithy-typescript/tree/main/packages/node-http-handler) ([source](https://redirect.github.com/smithy-lang/smithy-typescript/tree/HEAD/packages/node-http-handler)) | [`4.9.3` β `4.9.8`](https://renovatebot.com/diffs/npm/@smithy%2fnode-http-handler/4.9.3/4.9.8) |  |  | | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`25.9.4` β `25.9.5`](https://renovatebot.com/diffs/npm/@types%2fnode/25.9.4/25.9.5) |  |  | | [@vitest/coverage-v8](https://vitest.dev/guide/coverage) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8)) | [`4.1.9` β `4.1.10`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/4.1.9/4.1.10) |  |  | | [cron-parser](https://redirect.github.com/harrisiirak/cron-parser) | [`5.6.1` β `5.6.2`](https://renovatebot.com/diffs/npm/cron-parser/5.6.1/5.6.2) |  |  | | [express-rate-limit](https://redirect.github.com/express-rate-limit/express-rate-limit) | [`8.5.2` β `8.6.0`](https://renovatebot.com/diffs/npm/express-rate-limit/8.5.2/8.6.0) |  |  | | [fast-check](https://fast-check.dev/) ([source](https://redirect.github.com/dubzzz/fast-check/tree/HEAD/packages/fast-check)) | [`4.8.0` β `4.9.0`](https://renovatebot.com/diffs/npm/fast-check/4.8.0/4.9.0) |  |  | | [helmet](https://helmet.js.org/) ([source](https://redirect.github.com/helmetjs/helmet)) | [`8.2.0` β `8.3.0`](https://renovatebot.com/diffs/npm/helmet/8.2.0/8.3.0) |  |  | | [knip](https://knip.dev) ([source](https://redirect.github.com/webpro-nl/knip/tree/HEAD/packages/knip)) | [`6.24.0` β `6.27.0`](https://renovatebot.com/diffs/npm/knip/6.24.0/6.27.0) |  |  | | [mqtt](https://redirect.github.com/mqttjs/MQTT.js) | [`5.15.1` β `5.15.2`](https://renovatebot.com/diffs/npm/mqtt/5.15.1/5.15.2) |  |  | | [node-cron](https://nodecron.com) ([source](https://redirect.github.com/node-cron/node-cron)) | [`4.5.0` β `4.6.0`](https://renovatebot.com/diffs/npm/node-cron/4.5.0/4.6.0) |  |  | | [p-limit](https://redirect.github.com/sindresorhus/p-limit) | [`7.3.0` β `7.3.1`](https://renovatebot.com/diffs/npm/p-limit/7.3.0/7.3.1) |  |  | | [postcss](https://postcss.org/) ([source](https://redirect.github.com/postcss/postcss)) | [`8.5.16` β `8.5.21`](https://renovatebot.com/diffs/npm/postcss/8.5.16/8.5.21) |  |  | | [re2js](https://redirect.github.com/le0pard/re2js) | [`2.8.5` β `2.8.6`](https://renovatebot.com/diffs/npm/re2js/2.8.5/2.8.6) |  |  | | [undici](https://undici.nodejs.org) ([source](https://redirect.github.com/nodejs/undici)) | [`8.6.0` β `8.8.0`](https://renovatebot.com/diffs/npm/undici/8.6.0/8.8.0) |  |  | | [vite](https://vite.dev) ([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`8.1.3` β `8.1.5`](https://renovatebot.com/diffs/npm/vite/8.1.3/8.1.5) |  |  | | [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.9` β `4.1.10`](https://renovatebot.com/diffs/npm/vitest/4.1.9/4.1.10) |  |  | | [ws](https://redirect.github.com/websockets/ws) | [`8.21.0` β `8.21.1`](https://renovatebot.com/diffs/npm/ws/8.21.0/8.21.1) |  |  | --- ### Release Notes <details> <summary>aws/aws-sdk-js-v3 (@​aws-sdk/client-ecr)</summary> ### [`v3.1091.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310910-2026-07-20) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1090.0...v3.1091.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1090.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310900-2026-07-17) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1089.0...v3.1090.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1089.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310890-2026-07-16) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1088.0...v3.1089.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1088.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310880-2026-07-15) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1087.0...v3.1088.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1087.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310870-2026-07-14) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1086.0...v3.1087.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1086.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310860-2026-07-13) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1085.0...v3.1086.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1085.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310850-2026-07-10) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1084.0...v3.1085.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1084.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310840-2026-07-09) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1083.0...v3.1084.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1083.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310830-2026-07-08) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1082.0...v3.1083.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1082.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310820-2026-07-08) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1081.0...v3.1082.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1081.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310810-2026-07-07) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1080.0...v3.1081.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) ### [`v3.1080.0`](https://redirect.github.com/aws/aws-sdk-js-v3/blob/HEAD/clients/client-ecr/CHANGELOG.md#310800-2026-07-06) [Compare Source](https://redirect.github.com/aws/aws-sdk-js-v3/compare/v3.1079.0...v3.1080.0) **Note:** Version bump only for package [@​aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr) </details> <details> <summary>slackapi/node-slack-sdk (@​slack/web-api)</summary> ### [`v7.19.0`](https://redirect.github.com/slackapi/node-slack-sdk/releases/tag/%40slack/web-api%407.19.0) [Compare Source](https://redirect.github.com/slackapi/node-slack-sdk/compare/@slack/web-api@7.18.0...@slack/web-api@7.19.0) ##### Minor Changes - [`a795b86`](https://redirect.github.com/slackapi/node-slack-sdk/commit/a795b86): feat: expand app manifest types β add `agent_view` and `assistant_view` features, recent agent events (`app_context_changed`, `assistant_thread_started`, `assistant_thread_context_changed`), optional OAuth scopes (`bot_optional`/`user_optional`), and event `metadata_subscriptions` </details> <details> <summary>smithy-lang/smithy-typescript (@​smithy/node-http-handler)</summary> ### [`v4.9.8`](https://redirect.github.com/smithy-lang/smithy-typescript/blob/HEAD/packages/node-http-handler/CHANGELOG.md#498) [Compare Source](https://redirect.github.com/smithy-lang/smithy-typescript/compare/@smithy/node-http-handler@4.9.7...@smithy/node-http-handler@4.9.8) ##### Patch Changes - Updated dependencies \[[`3248fbd`](https://redirect.github.com/smithy-lang/smithy-typescript/commit/3248fbd)] - [@​smithy/core](https://redirect.github.com/smithy/core)@​3.29.6 ### [`v4.9.7`](https://redirect.github.com/smithy-lang/smithy-typescript/blob/HEAD/packages/node-http-handler/CHANGELOG.md#497) [Compare Source](https://redirect.github.com/smithy-lang/smithy-typescript/compare/@smithy/node-http-handler@4.9.6...@smithy/node-http-handler@4.9.7) ##### Patch Changes - Updated dependencies \[[`b44cb0a`](https://redirect.github.com/smithy-lang/smithy-typescript/commit/b44cb0a)] - [@​smithy/core](https://redirect.github.com/smithy/core)@​3.29.5 ### [`v4.9.6`](https://redirect.github.com/smithy-lang/smithy-typescript/blob/HEAD/packages/node-http-handler/CHANGELOG.md#496) [Compare Source](https://redirect.github.com/smithy-lang/smithy-typescript/compare/@smithy/node-http-handler@4.9.5...@smithy/node-http-handler@4.9.6) ##### Patch Changes - Updated dependencies \[[`5fca3a0`](https://redirect.github.com/smithy-lang/smithy-typescript/commit/5fca3a0)] - [@​smithy/core](https://redirect.github.com/smithy/core)@​3.29.4 ### [`v4.9.5`](https://redirect.github.com/smithy-lang/smithy-typescript/blob/HEAD/packages/node-http-handler/CHANGELOG.md#495) [Compare Source](https://redirect.github.com/smithy-lang/smithy-typescript/compare/@smithy/node-http-handler@4.9.4...@smithy/node-http-handler@4.9.5) ##### Patch Changes - Updated dependencies \[[`a97abc3`](https://redirect.github.com/smithy-lang/smithy-typescript/commit/a97abc3)] - [@​smithy/types](https://redirect.github.com/smithy/types)@​4.16.1 - [@​smithy/core](https://redirect.github.com/smithy/core)@​3.29.3 ### [`v4.9.4`](https://redirect.github.com/smithy-lang/smithy-typescript/blob/HEAD/packages/node-http-handler/CHANGELOG.md#494) [Compare Source](https://redirect.github.com/smithy-lang/smithy-typescript/compare/@smithy/node-http-handler@4.9.3...@smithy/node-http-handler@4.9.4) ##### Patch Changes - [`273e480`](https://redirect.github.com/smithy-lang/smithy-typescript/commit/273e480): types updates for isolatedModules=true - Updated dependencies \[[`273e480`](https://redirect.github.com/smithy-lang/smithy-typescript/commit/273e480)] - Updated dependencies \[[`74b3d45`](https://redirect.github.com/smithy-lang/smithy-typescript/commit/74b3d45)] - [@​smithy/types](https://redirect.github.com/smithy/types)@​4.16.0 - [@​smithy/core](https://redirect.github.com/smithy/core)@​3.29.2 </details> <details> <summary>vitest-dev/vitest (@​vitest/coverage-v8)</summary> ### [`v4.1.10`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.10) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10) ##### Β Β Β π Bug Fixes - **browser**: Check fs access in builtin commands \[backport to v4] Β -Β by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (claude-opus-4-8)** in [#​10680](https://redirect.github.com/vitest-dev/vitest/issues/10680) [<samp>(5c18d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5c18dd267) - **vm**: Fix external module resolve error with deps optimizer query for encoded URI \[backport to v4] Β -Β by [@​SveLil](https://redirect.github.com/SveLil) and [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [#​10661](https://redirect.github.com/vitest-dev/vitest/issues/10661) [<samp>(bae52)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bae52b511) ##### Β Β Β Β [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10) </details> <details> <summary>harrisiirak/cron-parser (cron-parser)</summary> ### [`v5.6.2`](https://redirect.github.com/harrisiirak/cron-parser/releases/tag/v5.6.2) [Compare Source](https://redirect.github.com/harrisiirak/cron-parser/compare/v5.6.1...v5.6.2) #### What's Changed - fix: enforce iteration loop limit so unsatisfiable expressions throw instead of returning a bogus date by [@​spokodev](https://redirect.github.com/spokodev) in [#​415](https://redirect.github.com/harrisiirak/cron-parser/pull/415) - fix: do not drop a matching day of month when the day of week uses an nth (#) occurrence by [@​spokodev](https://redirect.github.com/spokodev) in [#​414](https://redirect.github.com/harrisiirak/cron-parser/pull/414) **Full Changelog**: <https://github.com/harrisiirak/cron-parser/compare/v5.6.1...v5.6.2> </details> <details> <summary>express-rate-limit/express-rate-limit (express-rate-limit)</summary> ### [`v8.6.0`](https://redirect.github.com/express-rate-limit/express-rate-limit/releases/tag/v8.6.0) [Compare Source](https://redirect.github.com/express-rate-limit/express-rate-limit/compare/v8.5.2...v8.6.0) You can view the changelog [here](https://express-rate-limit.mintlify.app/reference/changelog). </details> <details> <summary>dubzzz/fast-check (fast-check)</summary> ### [`v4.9.0`](https://redirect.github.com/dubzzz/fast-check/blob/HEAD/packages/fast-check/CHANGELOG.md#490) [Compare Source](https://redirect.github.com/dubzzz/fast-check/compare/v4.8.0...v4.9.0) *Shrinkable `entityGraph` and few performance chips* \[[Code](https://redirect.github.com/dubzzz/fast-check/tree/v4.9.0)]\[[Diff](https://redirect.github.com/dubzzz/fast-check/compare/v4.8.0...v4.9.0)] #### Features - ([PR#7008](https://redirect.github.com/dubzzz/fast-check/pull/7008)) Towards shrinkable `entityGraph` thanks to `chainUntil` #### Fixes - ([PR#7010](https://redirect.github.com/dubzzz/fast-check/pull/7010)) Bug: Fix latent state-sharing bug in entityGraph - ([PR#7063](https://redirect.github.com/dubzzz/fast-check/pull/7063)) Bug: Equiprobable alternatives in `stringMatching` - ([PR#6973](https://redirect.github.com/dubzzz/fast-check/pull/6973)) CI: Drop caches on push for build package flow - ([PR#6971](https://redirect.github.com/dubzzz/fast-check/pull/6971)) CI: Only mark fast-check's releases as latest - ([PR#6974](https://redirect.github.com/dubzzz/fast-check/pull/6974)) CI: Drop pull\_request\_target flows - ([PR#6975](https://redirect.github.com/dubzzz/fast-check/pull/6975)) CI: Drop discussion creation on release publish - ([PR#6976](https://redirect.github.com/dubzzz/fast-check/pull/6976)) CI: Drop caches from publication steps - ([PR#6977](https://redirect.github.com/dubzzz/fast-check/pull/6977)) CI: Revert "Drop caches from publication steps" - ([PR#6978](https://redirect.github.com/dubzzz/fast-check/pull/6978)) CI: Make zizmor audit a required status check - ([PR#6991](https://redirect.github.com/dubzzz/fast-check/pull/6991)) CI: Remove Claude Code workflow - ([PR#6994](https://redirect.github.com/dubzzz/fast-check/pull/6994)) CI: Replace `pnpm dlx` with `pnpm exec` for `pkg-pr-new` - ([PR#6995](https://redirect.github.com/dubzzz/fast-check/pull/6995)) CI: Inline zizmor ignores in workflow - ([PR#6996](https://redirect.github.com/dubzzz/fast-check/pull/6996)) CI: Move to `devEngines.packageManager` - ([PR#7005](https://redirect.github.com/dubzzz/fast-check/pull/7005)) CI: Update PULL\_REQUEST\_TEMPLATE.md - ([PR#7011](https://redirect.github.com/dubzzz/fast-check/pull/7011)) CI: Drop OTP prompt from npm publish - ([PR#7013](https://redirect.github.com/dubzzz/fast-check/pull/7013)) CI: Switch release jobs to npm stage publish - ([PR#7027](https://redirect.github.com/dubzzz/fast-check/pull/7027)) CI: Run benchmarks against `main` - ([PR#7037](https://redirect.github.com/dubzzz/fast-check/pull/7037)) CI: Use comparison mode for `bench` - ([PR#7069](https://redirect.github.com/dubzzz/fast-check/pull/7069)) CI: Run pnpm dedupe to deduplicate lockfile - ([PR#6959](https://redirect.github.com/dubzzz/fast-check/pull/6959)) CI: Announce releases on Bluesky - ([PR#7105](https://redirect.github.com/dubzzz/fast-check/pull/7105)) CI: Switch to actions/attest for attestations - ([PR#7117](https://redirect.github.com/dubzzz/fast-check/pull/7117)) CI: Use pnpm version in changelog script - ([PR#7120](https://redirect.github.com/dubzzz/fast-check/pull/7120)) CI: Allow unclean tree in changelog generation - ([PR#7125](https://redirect.github.com/dubzzz/fast-check/pull/7125)) CI: Stage publish using `pnpm` in publish jobs - ([PR#7065](https://redirect.github.com/dubzzz/fast-check/pull/7065)) Clean: Delete skills directory - ([PR#6983](https://redirect.github.com/dubzzz/fast-check/pull/6983)) Doc: Tweak PR Template to hint AI agents into revealing themselves - ([PR#7092](https://redirect.github.com/dubzzz/fast-check/pull/7092)) Doc: Add back skills directory - ([PR#7095](https://redirect.github.com/dubzzz/fast-check/pull/7095)) Doc: Add release notes for fast-check 4.8.0 - ([PR#7104](https://redirect.github.com/dubzzz/fast-check/pull/7104)) Doc: Add makeeno as doc contributor - ([PR#7103](https://redirect.github.com/dubzzz/fast-check/pull/7103)) Doc: Fix info box in docs - ([PR#7108](https://redirect.github.com/dubzzz/fast-check/pull/7108)) Doc: Add jneidel as doc contributor - ([PR#7035](https://redirect.github.com/dubzzz/fast-check/pull/7035)) Performance: Faster `fc.integer` on `generate` - ([PR#7046](https://redirect.github.com/dubzzz/fast-check/pull/7046)) Performance: Faster fc.record on generate - ([PR#7047](https://redirect.github.com/dubzzz/fast-check/pull/7047)) Performance: Faster fc.dictionary on generate - ([PR#7048](https://redirect.github.com/dubzzz/fast-check/pull/7048)) Performance: Faster `fc.webPath`/`fc.webUrl` on `generate` - ([PR#7050](https://redirect.github.com/dubzzz/fast-check/pull/7050)) Performance: Faster `fc.stringMatching` for `\W` `\D` `\S` `.` - ([PR#7054](https://redirect.github.com/dubzzz/fast-check/pull/7054)) Performance: Faster `fc.stringMatching` on `generate` - ([PR#7049](https://redirect.github.com/dubzzz/fast-check/pull/7049)) Performance: Drop nested `tuple` on `generate` for `fc.record` - ([PR#7045](https://redirect.github.com/dubzzz/fast-check/pull/7045)) Performance: Faster `fc.entityGraph` on `generate` - ([PR#7071](https://redirect.github.com/dubzzz/fast-check/pull/7071)) Performance: Early exit on empty tuple in `fc.entityGraph` - ([PR#7004](https://redirect.github.com/dubzzz/fast-check/pull/7004)) Refactor: Extract code from `onTheFlyLinksForEntityGraph` - ([PR#7006](https://redirect.github.com/dubzzz/fast-check/pull/7006)) Refactor: Move `generate` logic to the `Arbitrary` for `entityGraph` - ([PR#7007](https://redirect.github.com/dubzzz/fast-check/pull/7007)) Refactor: Introduce `ProductionState` for `onTheFlyLinks...` - ([PR#6990](https://redirect.github.com/dubzzz/fast-check/pull/6990)) Script: Skip scripts during `pnpm i` in changelog generation - ([PR#7039](https://redirect.github.com/dubzzz/fast-check/pull/7039)) Script: More benchmark commands - ([PR#6972](https://redirect.github.com/dubzzz/fast-check/pull/6972)) Security: Pass `--ignore-scripts` to `pnpm i` calls - ([PR#7028](https://redirect.github.com/dubzzz/fast-check/pull/7028)) Test: Add benchmarks for key arbitraries - ([PR#7034](https://redirect.github.com/dubzzz/fast-check/pull/7034)) Test: Expand benchmark coverage across arbitrary families - ([PR#7041](https://redirect.github.com/dubzzz/fast-check/pull/7041)) Test: Add runners related benchs - ([PR#7064](https://redirect.github.com/dubzzz/fast-check/pull/7064)) Test: Clarify arbitrary benchmark names - ([PR#7068](https://redirect.github.com/dubzzz/fast-check/pull/7068)) Test: More reliable arbitraries.bench.ts - ([PR#7088](https://redirect.github.com/dubzzz/fast-check/pull/7088)) Typo: Typo in type `EntityGraphContraints` *** </details> <details> <summary>helmetjs/helmet (helmet)</summary> ### [`v8.3.0`](https://redirect.github.com/helmetjs/helmet/blob/HEAD/CHANGELOG.md#830---2026-07-11) [Compare Source](https://redirect.github.com/helmetjs/helmet/compare/v8.2.0...v8.3.0) ##### Changed - `Content-Security-Policy`: improved performance by \~7% when there are no dynamic directives - `Content-Security-Policy`: improved error handling for invalid directive names ##### Fixed - `Content-Security-Policy`: `useDefaults: false` with no directives is no longer valid, both at runtime and the type level - `Content-Security-Policy`: dynamically-computed directive values would `throw`, not call `next`, when invalid - `Content-Security-Policy`: dynamically-computed directive value entries would `throw`, not call `next`, when function threw </details> <details> <summary>webpro-nl/knip (knip)</summary> ### [`v6.27.0`](https://redirect.github.com/webpro-nl/knip/releases/tag/knip%406.27.0): Release 6.27.0 [Compare Source](https://redirect.github.com/webpro-nl/knip/compare/knip@6.26.0...knip@6.27.0) - Add Temporal plugin ([`98191a0`](https://redirect.github.com/webpro-nl/knip/commit/98191a04aad0572bead191b101bfecef75067b0c)) - Handle -d alias for react-email dir argument ([`53d1fec`](https://redirect.github.com/webpro-nl/knip/commit/53d1fec3213db8d6a84dfa7a82050b122782e065)) - Expand pnpm script references with forwarded arguments ([`33e9799`](https://redirect.github.com/webpro-nl/knip/commit/33e9799df39450033061b9c4c07daf22f5d15721)) - Treat path-shaped script tokens as file references, extend known global binaries ([`d9508c2`](https://redirect.github.com/webpro-nl/knip/commit/d9508c282ab81351beda4b2f859435b49f142c51)) - Mark tsdown neverBundle dependencies as referenced ([`5fd863b`](https://redirect.github.com/webpro-nl/knip/commit/5fd863ba12e68842f91ab1a94e7e30d1e571da92)) - Support TanStack Start in tanstack-router plugin ([`bd63cd8`](https://redirect.github.com/webpro-nl/knip/commit/bd63cd8af88dac03a98aa17f1add322f7bdf4a94)) - Mark vite ssr.external dependencies as referenced ([`91de938`](https://redirect.github.com/webpro-nl/knip/commit/91de938032062cb667bced0eadef9e67d1e20b1f)) - Expand bun, npm, and yarn script references with forwarded arguments ([`b5a3176`](https://redirect.github.com/webpro-nl/knip/commit/b5a31767a83e2cec3fb20c3b146d94c0412a4fd6)) - Add Latitude as sponsor ([`4267675`](https://redirect.github.com/webpro-nl/knip/commit/42676759cad5fb10ac96fd7c0457037e906f4b68)) - Regenerate plugin list in docs ([`1d2cdff`](https://redirect.github.com/webpro-nl/knip/commit/1d2cdffb4d4151f848c44e066eff43e9efbf44fe)) - Support Vue 2 template auto-imports (close [#​1881](https://redirect.github.com/webpro-nl/knip/issues/1881)) ([`2157f39`](https://redirect.github.com/webpro-nl/knip/commit/2157f3913f77216d268b2255899b6fc58609f9bb)) - Ignore block-commented stylesheet imports (resolve [#​1880](https://redirect.github.com/webpro-nl/knip/issues/1880), close [#​1882](https://redirect.github.com/webpro-nl/knip/issues/1882)) ([`a627f53`](https://redirect.github.com/webpro-nl/knip/commit/a627f53221547d5397d70722fcc2fd723889e579)) - Support TypeScript 5.0 narrowing for ssr.external ([`989292f`](https://redirect.github.com/webpro-nl/knip/commit/989292f79b9d19028bfc7ba988b74ba691041a45)) - Resolve local binaries from bun run ([`5e9a7f0`](https://redirect.github.com/webpro-nl/knip/commit/5e9a7f0286e2c2175bb299c514cc7b67a7cf24f1)) - Support Vitest inline project config extensions ([`f682327`](https://redirect.github.com/webpro-nl/knip/commit/f682327f6181f44e3924715efa7404aa39e532f0)) - Resolve package names from aliased node\_modules paths ([`c273d5f`](https://redirect.github.com/webpro-nl/knip/commit/c273d5fbc1b0d3eaf27b38c3f31d3a2a4b6b184a)) - Support Tailwind CSS URL imports ([`57a4770`](https://redirect.github.com/webpro-nl/knip/commit/57a4770447cc4c8f9ea4ffb9171c0c92eed4f255)) - Resolve unbuilt workspace package exports (close [#​1877](https://redirect.github.com/webpro-nl/knip/issues/1877)) ([`1b0a2c0`](https://redirect.github.com/webpro-nl/knip/commit/1b0a2c0ee784db165c7f92fe10397a6cb513c1cf)) - Skip unresolved imports of gitignored generated files ([`605c904`](https://redirect.github.com/webpro-nl/knip/commit/605c9049f73838beb1c6fee83c6a5421ae1a6d07)) - Attribute imports of aliased packages to the declared dependency ([`d05e775`](https://redirect.github.com/webpro-nl/knip/commit/d05e775c9a3a5676dc9eadcc1093f7d9983efd06)) - Flag unresolvable imports of transitive peer deps as unlisted (resolve [#​1883](https://redirect.github.com/webpro-nl/knip/issues/1883)) ([`18f0bff`](https://redirect.github.com/webpro-nl/knip/commit/18f0bff4ea683837f75ca744d3fbde52df49b297)) - Don't count ambient module declarations in script files as imports ([`e52aecf`](https://redirect.github.com/webpro-nl/knip/commit/e52aecfd7c022cbe72b1c11dde3f4968579ac409)) - Update rolldown snapshot ([`a63e927`](https://redirect.github.com/webpro-nl/knip/commit/a63e92788239062682603a5727ede371db7845c8)) - Remove obsolete workarounds from ecosystem tests ([`a521cf7`](https://redirect.github.com/webpro-nl/knip/commit/a521cf790d726c18e644e2e316cdc09eb654f607)) - Handle snapshotSerializers in Vitest plugin (resolve [#​1884](https://redirect.github.com/webpro-nl/knip/issues/1884)) ([`b597de9`](https://redirect.github.com/webpro-nl/knip/commit/b597de951f6f0e897afdbbbb8a7d0c06c8d2437d)) - Set the stage ([`c059c2b`](https://redirect.github.com/webpro-nl/knip/commit/c059c2be5803609924b852c2bf0cd90906a6a831)) ### [`v6.26.0`](https://redirect.github.com/webpro-nl/knip/releases/tag/knip%406.26.0): Release 6.26.0 [Compare Source](https://redirect.github.com/webpro-nl/knip/compare/knip@6.25.0...knip@6.26.0) - ci: add path filters ([#​1871](https://redirect.github.com/webpro-nl/knip/issues/1871)) ([`4249935`](https://redirect.github.com/webpro-nl/knip/commit/4249935adffe1b8eca9570fb325fa19cc8010584)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - Add CodeRabbit as gold sponsor ([`1da09fd`](https://redirect.github.com/webpro-nl/knip/commit/1da09fdc8f4d851f3cad30659200018bfb47a5e0)) - Fix up docs a bit more ([`39125a7`](https://redirect.github.com/webpro-nl/knip/commit/39125a7f473e006f61629781bff1ac4a050ca460)) - Don't report ambient declaration files as unused ([`aed361c`](https://redirect.github.com/webpro-nl/knip/commit/aed361c00a82829c2fc80a65a2f7af174316782e)) - Register oclif command files as entries ([`3b4d58c`](https://redirect.github.com/webpro-nl/knip/commit/3b4d58c9da83d93b6821a2b24f57b919ba886756)) - Add electron-vite plugin ([`d92107e`](https://redirect.github.com/webpro-nl/knip/commit/d92107ea504833b3ee7ad2b695e22d40528b24c3)) - Add esbuild plugin ([`ef3b601`](https://redirect.github.com/webpro-nl/knip/commit/ef3b601d957546554de2cb1fbff859f5bdafb741)) - Ignore more globally available binaries ([`8292981`](https://redirect.github.com/webpro-nl/knip/commit/829298129fdfd1b41a1f8dff5022b9fbbe25f454)) - Resolve `#`-imports to source when node condition is unbuilt (resolve [#​1873](https://redirect.github.com/webpro-nl/knip/issues/1873)) ([`f2713ed`](https://redirect.github.com/webpro-nl/knip/commit/f2713ed1e499ab286b86615d4b8ec34f711d1bd2)) - Ignore gh as a globally available binary ([`a6f0772`](https://redirect.github.com/webpro-nl/knip/commit/a6f0772e5db03a8412a3ac036756779f22d1a27d)) - Resolve Vitest benchmark files as entries ([`5742913`](https://redirect.github.com/webpro-nl/knip/commit/57429139f7e93f2a4bee35a53d450c4f45dea9ff)) - Extract shared Vue auto-import machinery into plugins/\_vue ([`7301075`](https://redirect.github.com/webpro-nl/knip/commit/73010753d432ae58eb12c7eec9c5723036009749)) - Scope compiler extensions per workspace ([`5e6f82b`](https://redirect.github.com/webpro-nl/knip/commit/5e6f82b963a83e5801484efbc01a4b6a9ce39ea3)) - Resolve auto-imported components in the Vue SFC compiler ([`009aad8`](https://redirect.github.com/webpro-nl/knip/commit/009aad8f9dab589898e5dba4c85fa41ea57c1a49)) - Add plugins for the Vue auto-import ecosystem ([`f638c83`](https://redirect.github.com/webpro-nl/knip/commit/f638c8302cdd26a63e477344a7cf44ef60af7788)) - Enable Vue SFC compiler on unplugin-vue and [@​vitejs/plugin-vue](https://redirect.github.com/vitejs/plugin-vue) ([`9396ab1`](https://redirect.github.com/webpro-nl/knip/commit/9396ab159919147ef81dad16e365e531b32b4b12)) - Recognize vite-plugin-vue-meta-layouts (same layouts convention) ([`3ceee89`](https://redirect.github.com/webpro-nl/knip/commit/3ceee89228b0173eddc0466bf50e8181286ffebc)) - Add vite-plugin-pages and unplugin-icons plugins ([`9bc1754`](https://redirect.github.com/webpro-nl/knip/commit/9bc17540bcf8eb142474ed84837c1e2cebb7fe73)) - Add vite-plugin-pwa and [@​intlify/unplugin-vue-i18n](https://redirect.github.com/intlify/unplugin-vue-i18n) plugins ([`45dea0a`](https://redirect.github.com/webpro-nl/knip/commit/45dea0a397ed754c34617ed18deef4dc6f0ec0d4)) - Dog, food. ([`e1249ad`](https://redirect.github.com/webpro-nl/knip/commit/e1249ade2558d3801d85e2dc63349d884f3443d4)) - Update query snapshot ([`a45941d`](https://redirect.github.com/webpro-nl/knip/commit/a45941d2db381c04f8a38416533217ee84f77ca7)) - Don't misread Nitro route types as Vue component auto-imports ([`43aecd5`](https://redirect.github.com/webpro-nl/knip/commit/43aecd5414eb63bec3637f37ffac0c62a71e7e74)) - Read oxlint jsPlugins from vite-plus vite.config and .oxlintrc.json ([`589ffda`](https://redirect.github.com/webpro-nl/knip/commit/589ffda4e3a7d0c0d772191ad6f8d6e60dd298cf)) - Add vite-plus plugin for run.tasks and staged scripts ([`f041c19`](https://redirect.github.com/webpro-nl/knip/commit/f041c191e4e10dd181ad212b71079e3e10bcf341)) - Support [@​vite-pwa/nuxt](https://redirect.github.com/vite-pwa/nuxt) PWA config in nuxt.config ([`8fa7b11`](https://redirect.github.com/webpro-nl/knip/commit/8fa7b116690e37484798ad98eca002d26c0c80fe)) - Add [@​vite-pwa/assets-generator](https://redirect.github.com/vite-pwa/assets-generator) plugin ([`4254f7d`](https://redirect.github.com/webpro-nl/knip/commit/4254f7d53a284a4ea4612f650ae03495bcb0d582)) - Add [@​nuxtjs/i18n](https://redirect.github.com/nuxtjs/i18n) plugin ([`dfb9acb`](https://redirect.github.com/webpro-nl/knip/commit/dfb9acbe5a08ebc85562f59a04e7f4bedb4925f1)) - Read plugin entries from vite.config options and index.html ([`d533da8`](https://redirect.github.com/webpro-nl/knip/commit/d533da8cc2b431d206eb7c55323ea51846eca0bb)) - Fix false positives in VitePress, next-mdx and unplugin-vue-i18n plugins ([`b99702a`](https://redirect.github.com/webpro-nl/knip/commit/b99702a76e26b1943a16517f1633de3a0713c196)) - Respect optional peers in pnpm and Yarn packageExtensions ([`aab080b`](https://redirect.github.com/webpro-nl/knip/commit/aab080bbd436494316df045011ab22cbebca06b4)) - Detect babel plugins in the Storybook config ([`5dea975`](https://redirect.github.com/webpro-nl/knip/commit/5dea975adf9b88971ad56434132282a099c7d58c)) - Add shared AST helpers for imported calls and first property values ([`c84bb7a`](https://redirect.github.com/webpro-nl/knip/commit/c84bb7a87a17f1921c12bb02bcfd43f905cae595)) - Inline trivial resolveFromAST wrappers and normalize orval and sst ([`620079d`](https://redirect.github.com/webpro-nl/knip/commit/620079d1d07b69a69bbb67b6a6e68963b6c2fc21)) - Extract inline resolveFromAST implementations to dedicated files ([`b5231c1`](https://redirect.github.com/webpro-nl/knip/commit/b5231c12f915428067d790187d2dd4c44e2559d4)) - Normalize resolveFromAST files to a uniform contract ([`fc1ba0f`](https://redirect.github.com/webpro-nl/knip/commit/fc1ba0fb45aaf623de678a57bea3b5567ea04750)) - chore: migrate to Astro 7 and SΓ€tteri ([#​1875](https://redirect.github.com/webpro-nl/knip/issues/1875)) ([`f256a5b`](https://redirect.github.com/webpro-nl/knip/commit/f256a5b276c3d69dd5081c591bbb183aacebf766)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - Show contributor count on docs homepage ([`6b8454a`](https://redirect.github.com/webpro-nl/knip/commit/6b8454a2841905ce7f08e1a23b54bc17a0854608)) - Exclude gitignored package entry points ([`606e5d0`](https://redirect.github.com/webpro-nl/knip/commit/606e5d051b4f0620c776aa23352153b8253bd75b)) - Add Tauri plugin ([`199180d`](https://redirect.github.com/webpro-nl/knip/commit/199180da79c71acc80865dc65ce89653a26d9579)) - Add Laravel plugin ([`1974533`](https://redirect.github.com/webpro-nl/knip/commit/197453378f2b60e5143a30ec78b438f02b37c53b)) - Add Quasar plugin ([`a220729`](https://redirect.github.com/webpro-nl/knip/commit/a220729074bfbb9e7d03ba329e89ad553c3a7799)) ### [`v6.25.0`](https://redirect.github.com/webpro-nl/knip/releases/tag/knip%406.25.0): Release 6.25.0 [Compare Source](https://redirect.github.com/webpro-nl/knip/compare/knip@6.24.0...knip@6.25.0) - fix: derive package name from package.json under Yarn `nodeLinker: pnpm` store ([#​1852](https://redirect.github.com/webpro-nl/knip/issues/1852)) ([`3764605`](https://redirect.github.com/webpro-nl/knip/commit/3764605ed150b975fb6c88c4c4aa47f5bf9ae149)) - thanks [@​blowery](https://redirect.github.com/blowery)! - Pick up types used in module augmentations via path aliases (resolve [#​1850](https://redirect.github.com/webpro-nl/knip/issues/1850)) ([`9cc5a41`](https://redirect.github.com/webpro-nl/knip/commit/9cc5a4132793990b5fcf9eae6f3db37426d979c0)) - feat: add support for `packageExtensions` in yarn and pnpm ([#​1847](https://redirect.github.com/webpro-nl/knip/issues/1847)) ([`61d3164`](https://redirect.github.com/webpro-nl/knip/commit/61d3164cdac6e9252b3c52ce3bb2909949b4690e)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - fix(ci): do not run integration on forks ([#​1855](https://redirect.github.com/webpro-nl/knip/issues/1855)) ([`d23c10d`](https://redirect.github.com/webpro-nl/knip/commit/d23c10d1ae764c0b70addaafc79f01c543cc5efa)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - chore(ci): improve security through specific permissions ([#​1856](https://redirect.github.com/webpro-nl/knip/issues/1856)) ([`1eb42e6`](https://redirect.github.com/webpro-nl/knip/commit/1eb42e639f9ec12d6d2ef88e1aaf07397b5bf226)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - chore(ci): add concurrency blocks ([#​1857](https://redirect.github.com/webpro-nl/knip/issues/1857)) ([`3bf3d11`](https://redirect.github.com/webpro-nl/knip/commit/3bf3d115cf677fadcfe8fa72ce0e68cfd435d399)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - fix(next): resolve src/ entry patterns like Next.js does ([#​1859](https://redirect.github.com/webpro-nl/knip/issues/1859)) ([`6e6a509`](https://redirect.github.com/webpro-nl/knip/commit/6e6a5094e924a5cd104867f3907dbbb378f871b3)) - thanks [@​dayongkr](https://redirect.github.com/dayongkr)! - Fix Bun test defaults ([#​1860](https://redirect.github.com/webpro-nl/knip/issues/1860)) ([`2ac4c04`](https://redirect.github.com/webpro-nl/knip/commit/2ac4c0427d2ac03939661f6dc236d15d11414fd5)) - thanks [@​jakeleventhal](https://redirect.github.com/jakeleventhal)! - Extend agentic guidelines re. plugins ([`da606eb`](https://redirect.github.com/webpro-nl/knip/commit/da606eb522f01187def8747d7ddb917c6735157d)) - Support rspack and path aliases in require.context ([`d231d67`](https://redirect.github.com/webpro-nl/knip/commit/d231d67a5e8713c2f48f9d695ae12a9dbfa0260e)) - Support path aliases in import.meta.glob (resolve [#​1821](https://redirect.github.com/webpro-nl/knip/issues/1821)) ([`fc7bb1e`](https://redirect.github.com/webpro-nl/knip/commit/fc7bb1ecc194e69f9f493bff5b33a4cc807fd788)) - Register MDX compiler in Storybook plugin ([`6f18138`](https://redirect.github.com/webpro-nl/knip/commit/6f1813809608cd36e44af22583805e686c51c5bd)) - Resolve TypeDoc customCss and customJs files ([`105687d`](https://redirect.github.com/webpro-nl/knip/commit/105687daf682884257a2d40f26967d80ea4abef8)) - Resolve inline Babel presets/plugins in Jest transform ([`38e4a4a`](https://redirect.github.com/webpro-nl/knip/commit/38e4a4a4a06d902cf55457155f666c3b91e05f28)) - Mark graphql-codegen generated outputs as entries ([`1255369`](https://redirect.github.com/webpro-nl/knip/commit/125536921f1845eeec1347091b238bb615f329e0)) - Add Fumadocs plugin ([`77c2142`](https://redirect.github.com/webpro-nl/knip/commit/77c2142fcc6ad6fdee651c5dc60a74c158cd8de3)) - Support next.config.mts in Next.js plugin ([`0f27e77`](https://redirect.github.com/webpro-nl/knip/commit/0f27e772935bba5eaeca73ee75ce028412c4a1cc)) - Add script command parser built on unbash ([`195510c`](https://redirect.github.com/webpro-nl/knip/commit/195510c6c912ade9cd7846302d2f9256ede9852c)) - Gate Bun test entries on an actual bun test invocation ([`92903ec`](https://redirect.github.com/webpro-nl/knip/commit/92903ec29bb8b86586e3d7e846236d8c38787ea9)) - Detect Node.js test runner via script command parser ([`a0bfe7b`](https://redirect.github.com/webpro-nl/knip/commit/a0bfe7ba2958a1270604764a9ebf09425ce857d4)) - Extract shared command walker for bash-parser and plugins ([`1301475`](https://redirect.github.com/webpro-nl/knip/commit/13014753d5031cf1de8081b3d148212a5894dde0)) - Normalize aliased glob patterns to posix for Win ([`23b4a74`](https://redirect.github.com/webpro-nl/knip/commit/23b4a744330d0dddd2b1517f2f2d72c9d373a0b9)) - Resolve inherited tsconfig paths from the extended config's directory (resolve [#​1866](https://redirect.github.com/webpro-nl/knip/issues/1866)) ([`e3f0e5c`](https://redirect.github.com/webpro-nl/knip/commit/e3f0e5c69641bb7dfab06585251c98e3b3def049)) - Handle var interpolations in shell cmd scripts (resolve [#​1867](https://redirect.github.com/webpro-nl/knip/issues/1867)) ([`9422d06`](https://redirect.github.com/webpro-nl/knip/commit/9422d06adb07fd29a3388ee6b037cda47fe28d1a)) - Update query snapshot ([`5e192e9`](https://redirect.github.com/webpro-nl/knip/commit/5e192e996fd680c41674c9503437ee148b0f1870)) - Add support for Prettier overrides ([#​1869](https://redirect.github.com/webpro-nl/knip/issues/1869)) ([`5dc7f12`](https://redirect.github.com/webpro-nl/knip/commit/5dc7f1235ff201c461a71f8a757c611441f1607a)) - thanks [@​remcohaszing](https://redirect.github.com/remcohaszing)! - Handle Serverless esbuild inject entries ([#​1865](https://redirect.github.com/webpro-nl/knip/issues/1865)) ([`46111ef`](https://redirect.github.com/webpro-nl/knip/commit/46111ef2f42c2ea89a43d8944b5efdcde7db2884)) - thanks [@​jakeleventhal](https://redirect.github.com/jakeleventhal)! - docs: add links to Discord and Contributing in issue templates ([#​1868](https://redirect.github.com/webpro-nl/knip/issues/1868)) ([`5ab3483`](https://redirect.github.com/webpro-nl/knip/commit/5ab3483e30733edc234e9913b3bf4bf05de45470)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - Add eve (Vercel framework) plugin ([#​1864](https://redirect.github.com/webpro-nl/knip/issues/1864)) ([`20cd970`](https://redirect.github.com/webpro-nl/knip/commit/20cd970d2039835dd9bad79ee2e7f3a82cef1b6e)) - thanks [@​jakeleventhal](https://redirect.github.com/jakeleventhal)! - Add circular dependencies as opt-in `cycles` issue type (resolve [#​1734](https://redirect.github.com/webpro-nl/knip/issues/1734)) ([#​1812](https://redirect.github.com/webpro-nl/knip/issues/1812)) ([`1b0ed6b`](https://redirect.github.com/webpro-nl/knip/commit/1b0ed6b3906d726b37a89b495fb22331ec2a0fbb)) - chore(ci): remove redundant tag triggers ([#​1863](https://redirect.github.com/webpro-nl/knip/issues/1863)) ([`c61d008`](https://redirect.github.com/webpro-nl/knip/commit/c61d0086e4e669a8aeee230dc5ac3606832ea893)) - thanks [@​trueberryless](https://redirect.github.com/trueberryless)! - Fix up docs a bit ([`89a2d8d`](https://redirect.github.com/webpro-nl/knip/commit/89a2d8d6ac27ee866a15a8bcf5a49da3cba91b08)) </details> <details> <summary>mqttjs/MQTT.js (mqtt)</summary> ### [`v5.15.2`](https://redirect.github.com/mqttjs/MQTT.js/blob/HEAD/CHANGELOG.md#5152-2026-07-06) [Compare Source](https://redirect.github.com/mqttjs/MQTT.js/compare/v5.15.1...v5.15.2) ##### Bug Fixes - **connect/tls:** don't overwrite an explicit servername (SNI) ([#​2051](https://redirect.github.com/mqttjs/MQTT.js/issues/2051)) ([cd1d780](https://redirect.github.com/mqttjs/MQTT.js/commit/cd1d780f5742852e9bcf46dbd9732e0c5e20823a)) - support relative WebSocket URLs ([#​2049](https://redirect.github.com/mqttjs/MQTT.js/issues/2049)) ([c4be563](https://redirect.github.com/mqttjs/MQTT.js/commit/c4be5633594b5b839862440aa78125f22021f8e6)), closes [#​2035](https://redirect.github.com/mqttjs/MQTT.js/issues/2035) </details> <details> <summary>node-cron/node-cron (node-cron)</summary> ### [`v4.6.0`](https://redirect.github.com/node-cron/node-cron/blob/HEAD/CHANGELOG.md#460-2026-07-04) [Compare Source](https://redirect.github.com/node-cron/node-cron/compare/v4.5.0...v4.6.0) ##### Added - add cron.shutdown(timeout?) for graceful process teardown ([#​589](https://redirect.github.com/node-cron/node-cron/issues/589)) ([35f1a61](https://redirect.github.com/node-cron/node-cron/commit/35f1a61ba7cef987f7ed342489d8d0f0220553b8)) - add unref option for heartbeat timers ([#​588](https://redirect.github.com/node-cron/node-cron/issues/588)) ([35cb140](https://redirect.github.com/node-cron/node-cron/commit/35cb140d9c2d790ff295d54fbe82f6eec9b27e33)) - **day-of-month:** Quartz-style W, L-n and ? modifiers ([#​570](https://redirect.github.com/node-cron/node-cron/issues/570)) ([cbe379b](https://redirect.github.com/node-cron/node-cron/commit/cbe379bce9d770c84328399dca514bd92a467c18)) - emit task:failed when a background daemon exits unexpectedly ([7bd91d6](https://redirect.github.com/node-cron/node-cron/commit/7bd91d62d1472d52f9adbddfddc0c47458623080)) - support cron expression nicknames ([@​yearly](https://redirect.github.com/yearly), [@​daily](https://redirect.github.com/daily), etc.) ([#​579](https://redirect.github.com/node-cron/node-cron/issues/579)) ([6a6e14e](https://redirect.github.com/node-cron/node-cron/commit/6a6e14e43ab4ce5c21b52414a17e3e20311bd7bf)) ##### Fixed - background task state transition on stop/destroy without fork ([#​584](https://redirect.github.com/node-cron/node-cron/issues/584)) ([9dbc6de](https://redirect.github.com/node-cron/node-cron/commit/9dbc6de269cf5855b0afc037fb4446ef9791d761)) - clear jitter timeout on runner stop ([#​583](https://redirect.github.com/node-cron/node-cron/issues/583)) ([28b8146](https://redirect.github.com/node-cron/node-cron/commit/28b8146dd164ea992e1d5a649756b2bba4e062c4)) - CommonJS type resolution ([#​608](https://redirect.github.com/node-cron/node-cron/issues/608)) ([ee9d294](https://redirect.github.com/node-cron/node-cron/commit/ee9d294e71e526edffa2a2f902cad71e1f570d44)) - correct falied->failed typo in daemon task error log ([#​594](https://redirect.github.com/node-cron/node-cron/issues/594)) ([66c6961](https://redirect.github.com/node-cron/node-cron/commit/66c6961f2140d84cb71b101013abc170977297eb)) - correct shutdown listener typing that broke the build ([#​595](https://redirect.github.com/node-cron/node-cron/issues/595)) ([7aac3ad](https://redirect.github.com/node-cron/node-cron/commit/7aac3adc22516faad054f2b3ef7362edf62e20f3)) - correlate execute() by id, isolate event hooks, and stop counting manual runs toward maxExecutions ([#​607](https://redirect.github.com/node-cron/node-cron/issues/607)) ([0f039a9](https://redirect.github.com/node-cron/node-cron/commit/0f039a94dcaf6221ea406221b1e7c5eb34a47c4b)) - daemon serialized task state with wrong field name ([#​587](https://redirect.github.com/node-cron/node-cron/issues/587)) ([688d465](https://redirect.github.com/node-cron/node-cron/commit/688d465b82889f07f39dfef9170d808c1f40330e)) - expand inverted ranges with wrap-around instead of silently swapping ([#​602](https://redirect.github.com/node-cron/node-cron/issues/602)) ([a10ae53](https://redirect.github.com/node-cron/node-cron/commit/a10ae53626f1cc6e426e23266423f5e334a6871e)) - harden cron.shutdown() teardown ([#​598](https://redirect.github.com/node-cron/node-cron/issues/598)) ([a0b0d1f](https://redirect.github.com/node-cron/node-cron/commit/a0b0d1ff9313d0f8532130e5fcb873f29f48fd1f)) - kill orphan child process on background task stop/destroy timeout ([#​582](https://redirect.github.com/node-cron/node-cron/issues/582)) ([8179e10](https://redirect.github.com/node-cron/node-cron/commit/8179e105a02b91035bce441309c1cda12aaf4c4a)) - make concurrent background start() await the daemon and time out coordinator lookups ([#​605](https://redirect.github.com/node-cron/node-cron/issues/605)) ([446f03a](https://redirect.github.com/node-cron/node-cron/commit/446f03ae8f366683c43b186b93bcba5091a00042)) - make lifecycle calls on a destroyed task safe no-ops ([#​600](https://redirect.github.com/node-cron/node-cron/issues/600)) ([7fa9795](https://redirect.github.com/node-cron/node-cron/commit/7fa979514f9181aa63b0363cddb2acbf045b1f8c)) - prevent double destroy on registry remove ([#​585](https://redirect.github.com/node-cron/node-cron/issues/585)) ([8ae9f06](https://redirect.github.com/node-cron/node-cron/commit/8ae9f06463954754d4958f9eb478aed73e8adc4d)) - **release-please:** match existing v-prefixed tags ([#​575](https://redirect.github.com/node-cron/node-cron/issues/575)) ([e43c152](https://redirect.github.com/node-cron/node-cron/commit/e43c152188d993f59a12e3e9e258a695b44ca579)) - runner promise bugs that could hang scheduling or crash process ([#​581](https://redirect.github.com/node-cron/node-cron/issues/581)) ([0ae62be](https://redirect.github.com/node-cron/node-cron/commit/0ae62be8b3639762f1b09569cbb66503c940d8e5)) - unref the IPC channel so background tasks let the process exit ([#​599](https://redirect.github.com/node-cron/node-cron/issues/599)) ([534e593](https://redirect.github.com/node-cron/node-cron/commit/534e59344c019bc69869bc33e5cdcf1ff8ae1f1e)) - validate the cron expression when scheduling a task ([#​603](https://redirect.github.com/node-cron/node-cron/issues/603)) ([196e6cd](https://redirect.github.com/node-cron/node-cron/commit/196e6cd41ac32ab9df56668ac70e1b5232384bb8)) - validate() consistency and multi-asterisk expansion ([#​606](https://redirect.github.com/node-cron/node-cron/issues/606)) ([8cf41c4](https://redirect.github.com/node-cron/node-cron/commit/8cf41c436f5b544e32908d6e73b2679e973074e3)) - weekday 7-to-0 conversion corrupting ranges ([#​580](https://redirect.github.com/node-cron/node-cron/issues/580)) ([c8a3943](https://redirect.github.com/node-cron/node-cron/commit/c8a3943817cc1338d4f03dbc7ad52fa34d449134)) ##### Changed - replace chai and sinon with native vitest assertions ([#​590](https://redirect.github.com/node-cron/node-cron/issues/590)) ([d29d07a](https://redirect.github.com/node-cron/node-cron/commit/d29d07a005911b4ae19ce5a6bb55571018972e1f)) </details> <details> <summary>sindresorhus/p-limit (p-limit)</summary> ### [`v7.3.1`](https://redirect.github.com/sindresorhus/p-limit/releases/tag/v7.3.1) [Compare Source](https://redirect.github.com/sindresorhus/p-limit/compare/v7.3.0...v7.3.1) - Fix detached limit.map calls ([#​108](https://redirect.github.com/sindresorhus/p-limit/issues/108)) [`ef37eb2`](https://redirect.github.com/sindresorhus/p-limit/commit/ef37eb2) *** </details> <details> <summary>postcss/postcss (postcss)</summary> ### [`v8.5.21`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8521) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.20...8.5.21) - Fixed childless at-rule losing semicolon before comment (by [@​sarathfrancis90](https://redirect.github.com/sarathfrancis90)). - Fixed docs (by [@​isker](https://redirect.github.com/isker)). ### [`v8.5.20`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8520) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.19...8.5.20) - Fixed missing space if `AtRule#params` is set after (by [@​sarathfrancis90](https://redirect.github.com/sarathfrancis90)). - Fixed mixing AST error on warnings (by [@​MahinAnowar](https://redirect.github.com/MahinAnowar)). ### [`v8.5.19`](https://redirect.github.com/postcss/postcss/releases/tag/8.5.19) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.18...8.5.19) - Fixed cleaning `before` for new nodes inserted to `Root` (by [@​MahinAnowar](https://redirect.github.com/MahinAnowar)). ### [`v8.5.18`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8518) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.17...8.5.18) - Restricted loading previous source maps file to the `opts.from` folder for security reasons (use `unsafeMap: true` to disable the check). ### [`v8.5.17`](https://redirect.github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8517) [Compare Source](https://redirect.github.com/postcss/postcss/compare/8.5.16...8.5.17) - Fixed `Maximum call stack size exceeded` error. - Fixed Prototype hijacking for `postcss.fromJSON()`. - Fixed `Input#origin()` for unmapped end position (by [@​chatman-media](https://redirect.github.com/chatman-media)). </details> <details> <summary>le0pard/re2js (re2js)</summary> ### [`v2.8.6`](https://redirect.github.com/le0pard/re2js/releases/tag/2.8.6) [Compare Source](https://redirect.github.com/le0pard/re2js/compare/2.8.5...2.8.6) #### What's Changed - Replace Thread Pool with a Sparse Array in js env by [@​le0pard](https://redirect.github.com/le0pard) in [#​48](https://redirect.github.com/le0pard/re2js/pull/48) - Bump js-yaml from 3.14.2 to 3.15.0 in the npm\_and\_yarn group across 1 directory by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​49](https://redirect.github.com/le0pard/re2js/pull/49) - [remove AtomicReference](https://redirect.github.com/le0pard/re2js/commit/1b08c6ef176c86f06bee07cdb856b381a0907ba6) - [remove O(n) for array copying in UTF-8 encoding](https://redirect.github.com/le0pard/re2js/commit/37951e5d0027ce2d812e991116703925bdece5c5) - [bugfixes for split and replace](https://redirect.github.com/le0pard/re2js/commit/b2d72010ff1382c2fcd0e9c45b957c9b5f3f95ae) **Full Changelog**: <https://github.com/le0pard/re2js/compare/2.8.5...2.8.6> </details> <details> <summary>nodejs/undici (undici)</summary> ### [`v8.8.0`](https://redirect.github.com/nodejs/undici/compare/v8.7.0...1760faa557f5f29c6dbd33fcbe6b0422cee16856) [Compare Source](https://redirect.github.com/nodejs/undici/compare/v8.7.0...v8.8.0) ### [`v8.7.0`](https://redirect.github.com/nodejs/undici/releases/tag/v8.7.0) [Compare Source](https://redirect.github.com/nodejs/undici/compare/v8.6.0...v8.7.0) ##### What's Changed - test: guard balanced-pool error port lookup by [@​mcollina](https://redirect.github.com/mcollina) in [#​5463](https://redirect.github.com/nodejs/undici/pull/5463) - perf: optimize http/2 request hot path by [@​mcollina](https://redirect.github.com/mcollina) in [#​5483](https://redirect.github.com/nodejs/undici/pull/5483) - fix: do not reject open-ended Range values in simpleRangeHeaderValue by [@​spokodev](https://redirect.github.com/spokodev) in [#​5490](https://redirect.github.com/nodejs/undici/pull/5490) - fix(eventsource): set use-URL-credentials flag by [@​Ram-blip](https://redirect.github.com/Ram-blip) in [#​5489](https://redirect.github.com/nodejs/undici/pull/5489) - test: deflake connect-timeout watchdog by [@​mcollina](https://redirect.github.com/mcollina) in [#​5197](https://redirect.github.com/nodejs/undici/pull/5197) - docs: correct npm script name and JSON syntax in examples by [@​lenoxfernando](https://redirect.github.com/lenoxfernando) in [#​5496](https://redirect.github.com/nodejs/undici/pull/5496) - fix: reject non-ascii octets in validateCookiePath by [@​spokodev](https://redirect.github.com/spokodev) in [#​5452](https://redirect.github.com/nodejs/undici/pu > β **Note** > > PR body was truncated to here. </details> --- ### Configuration π **Schedule**: (in timezone America/New_York) - Branch creation - "before 6am on monday" - Automerge - At any time (no schedule defined) π¦ **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β» **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. π» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/CodesWhat/drydock). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDIuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI3NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
> βΉοΈ **Note**
>
> This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev)
([source](https://redirect.github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome))
| [`2.4.16` β
`2.5.2`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.4.16/2.5.2)
|

|

|
|
[@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`25.7.0` β
`25.9.4`](https://renovatebot.com/diffs/npm/@types%2fnode/25.7.0/25.9.4)
|

|

|
| [lefthook](https://redirect.github.com/evilmartians/lefthook) |
[`2.1.6` β
`2.1.9`](https://renovatebot.com/diffs/npm/lefthook/2.1.6/2.1.9) |

|

|
| [vite](https://vite.dev)
([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite))
| [`8.0.16` β
`8.1.3`](https://renovatebot.com/diffs/npm/vite/8.0.16/8.1.3) |

|

|
| [vitest](https://vitest.dev)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`4.1.7` β
`4.1.9`](https://renovatebot.com/diffs/npm/vitest/4.1.7/4.1.9) |

|

|
---
### Release Notes
<details>
<summary>biomejs/biome (@​biomejs/biome)</summary>
###
[`v2.5.2`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#252)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.1...@biomejs/biome@2.5.2)
##### Patch Changes
- [#​10595](https://redirect.github.com/biomejs/biome/pull/10595)
[`f458028`](https://redirect.github.com/biomejs/biome/commit/f4580289094a8fe5c85252adc3399c060bab811e)
Thanks [@​pkallos](https://redirect.github.com/pkallos)! - Added
the option `ignoreBooleanCoercion` to
[useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/).
When enabled, Biome ignores `||` and `||=` used inside a `Boolean()`
call, where coalescing on falsy values is intentional.
- [#​10798](https://redirect.github.com/biomejs/biome/pull/10798)
[`4a32b63`](https://redirect.github.com/biomejs/biome/commit/4a32b63eb41f144dc8faf6b5cdb05e1de5dbcb63)
Thanks [@​pkallos](https://redirect.github.com/pkallos)! - Added
the option `ignorePrimitives` to
[useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/).
When enabled, Biome ignores `||`, `||=`, and ternary expressions whose
non-nullish operands are all primitives the option opts out of. Use
`true` to ignore all primitives, or an object selecting `string`,
`number`, `boolean`, or `bigint`.
- [#​10545](https://redirect.github.com/biomejs/biome/pull/10545)
[`f3d4c00`](https://redirect.github.com/biomejs/biome/commit/f3d4c0082676c5188e9a6aa516318c7e3d59bda6)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Added the
new nursery rule
[`noSvelteUnnecessaryStateWrap`](https://biomejs.dev/linter/rules/no-svelte-unnecessary-state-wrap/),
which reports unnecessary `$state()` wrapping of classes from
`svelte/reactivity` that are already reactive.
```svelte
<script>
import { SvelteMap } from "svelte/reactivity";
const map = $state(new SvelteMap()); // redundant
</script>
```
- [#​10752](https://redirect.github.com/biomejs/biome/pull/10752)
[`f62fb8b`](https://redirect.github.com/biomejs/biome/commit/f62fb8b53092fe85e16f9d4ea0e584fee7031ab5)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10739](https://redirect.github.com/biomejs/biome/issues/10739).
Now the rule
[`useValidAutocomplete`](https://biomejs.dev/linter/rules/use-valid-autocomplete/)
correctly flags the `autoComplete` attribute.
- [#​10796](https://redirect.github.com/biomejs/biome/pull/10796)
[`f1b3ab2`](https://redirect.github.com/biomejs/biome/commit/f1b3ab2c09522a52c93f669ce679675237b96813)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10768](https://redirect.github.com/biomejs/biome/issues/10768).
Improved the performance of the Biome Language Server by cancelling
certain in-flight operations when there are fast updates.
- [#​10719](https://redirect.github.com/biomejs/biome/pull/10719)
[`aa649b5`](https://redirect.github.com/biomejs/biome/commit/aa649b586a2221bf058af7ce80af6faa11faf846)
Thanks [@​minseong0324](https://redirect.github.com/minseong0324)!
- Fixed
[`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/)
false positive on returns that use a widening type assertion: `"a" as
string` is no longer reported as misleading. The rule now also reports a
literal-pinning assertion such as `false as false`, matching the
existing `as const` behavior.
```ts
// No longer flagged (returns are `string`):
function getValue(b: boolean): string {
if (b) return "a" as string;
return "b" as string;
}
// Now also reported, like `as const` (returns `false`):
function isReady(): boolean {
return false as false;
}
```
- [#​10678](https://redirect.github.com/biomejs/biome/pull/10678)
[`8f073a7`](https://redirect.github.com/biomejs/biome/commit/8f073a7cd72b4cf46c2ebf2bc08f4068fc4b5e34)
Thanks
[@​PranavAchar01](https://redirect.github.com/PranavAchar01)! -
Fixed
[#​7718](https://redirect.github.com/biomejs/biome/issues/7718):
Biome now correctly parses CSS nesting selectors when `&` appears as a
trailing sub-selector after a type selector, e.g. `h1& { color: red; }`.
- [#​10756](https://redirect.github.com/biomejs/biome/pull/10756)
[`5ec965a`](https://redirect.github.com/biomejs/biome/commit/5ec965a2620dec7cb40aa4946ba1d41408b11fd9)
Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! -
Fixed CSS formatter output for selector lists with
`allowWrongLineComments` and `//` comments after a selector comma. Biome
now keeps the selector before the line comment inline instead of
breaking it across descendant combinators.
```diff
-.powerPathNavigator
- .helm
- button.pressedButton, // pressed
+.powerPathNavigator .helm button.pressedButton, // pressed
.powerPathNavigator .helm button:active:not(.disabledButton) {
}
```
- [#​10757](https://redirect.github.com/biomejs/biome/pull/10757)
[`6232fcd`](https://redirect.github.com/biomejs/biome/commit/6232fcdef77471e6a6a74bcc33ff7b2b2a9f85a2)
Thanks
[@​PranavAchar01](https://redirect.github.com/PranavAchar01)! -
Fixed
[#​8269](https://redirect.github.com/biomejs/biome/issues/8269):
the CSS parser now accepts Tailwind `@variant` and `@utility` names that
start with a digit, such as the `2xl` breakpoint.
```css
@​utility container {
@​variant 2xl {
max-width: 1400px;
}
}
```
- [#​10777](https://redirect.github.com/biomejs/biome/pull/10777)
[`575ced6`](https://redirect.github.com/biomejs/biome/commit/575ced6fd7fe3597fdec36e572763e4a5d590244)
Thanks
[@​WaterWhisperer](https://redirect.github.com/WaterWhisperer)! -
Fixed an issue reported in
[#​10708](https://redirect.github.com/biomejs/biome/issues/10708):
the GitLab reporter now handles `--verbose` diagnostics filtering
correctly.
- [#​10281](https://redirect.github.com/biomejs/biome/pull/10281)
[`0efe244`](https://redirect.github.com/biomejs/biome/commit/0efe2442e9b81d83f7332fd792ad6096678f8b2c)
Thanks [@​Zelys-DFKH](https://redirect.github.com/Zelys-DFKH)! -
Fixed a bug where GritQL patterns rejected positional (unkeyed)
arguments.
- [#​10758](https://redirect.github.com/biomejs/biome/pull/10758)
[`e36fd8a`](https://redirect.github.com/biomejs/biome/commit/e36fd8a9f1314744276df515a1137f21802d3aa5)
Thanks
[@​henrybrewer00-dotcom](https://redirect.github.com/henrybrewer00-dotcom)!
- Fixed
[#​10697](https://redirect.github.com/biomejs/biome/issues/10697):
The formatter no longer removes the parentheses around an `await` or
`yield` expression used as the target of a TypeScript instantiation
expression. For example, `(await makeFactory)<Value>` is no longer
reformatted to `await makeFactory<Value>`, which would change the
meaning of the code.
- [#​10586](https://redirect.github.com/biomejs/biome/pull/10586)
[`3617094`](https://redirect.github.com/biomejs/biome/commit/3617094f00e90f7167ff20baf3c12b5014188b35)
Thanks [@​IxxyDev](https://redirect.github.com/IxxyDev)! - Fixed
[#​9568](https://redirect.github.com/biomejs/biome/issues/9568):
[`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/)
no longer reports a false positive when calling an overloaded function
and the selected overload does not return a promise.
```ts
function bestEffort(cb: () => Promise<number>): Promise<number>;
function bestEffort(cb: () => number): number;
function bestEffort(
cb: () => number | Promise<number>,
): Promise<number> | number {
return cb() as Promise<number> | number;
}
// This resolves to the second overload, which returns `number`, so it
is no
// longer flagged as a floating promise.
bestEffort(() => 42);
```
- [#​10766](https://redirect.github.com/biomejs/biome/pull/10766)
[`7aff4c1`](https://redirect.github.com/biomejs/biome/commit/7aff4c11900579a62dc27ef4e02a4c4760fbbff4)
Thanks
[@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! -
Fixed
[#​2862](https://redirect.github.com/biomejs/biome/issues/2862):
[`noInteractiveElementToNoninteractiveRole`](https://biomejs.dev/linter/rules/no-interactive-element-to-noninteractive-role/)
no longer reports custom elements (a tag name containing a dash, e.g.
`<my-button role="img" />`). Per the [W3C HTML-ARIA
specification](https://www.w3.org/TR/html-aria/#el-autonomous-custom-element),
a custom element may be given any role or none.
- [#​10680](https://redirect.github.com/biomejs/biome/pull/10680)
[`771daa4`](https://redirect.github.com/biomejs/biome/commit/771daa4f7d229a8754f47923f03b899dc0fc5630)
Thanks
[@​WaterWhisperer](https://redirect.github.com/WaterWhisperer)! -
Fixed
[#​10635](https://redirect.github.com/biomejs/biome/issues/10635):
Biome now recognizes chained
table tests such as `test.concurrent.each()` and `it.concurrent.each()`
as test calls, fixing
`noMisplacedAssertion` false positives and improving formatting for
those test declarations.
- [#​10759](https://redirect.github.com/biomejs/biome/pull/10759)
[`34570b5`](https://redirect.github.com/biomejs/biome/commit/34570b5b793c44e978b12589dafcfda22dba7df1)
Thanks
[@​henrybrewer00-dotcom](https://redirect.github.com/henrybrewer00-dotcom)!
- Fixed
[#​10636](https://redirect.github.com/biomejs/biome/issues/10636):
[noStaticElementInteractions](https://biomejs.dev/linter/rules/no-static-element-interactions/)
no longer reports a false positive for event handlers on Svelte special
elements such as `<svelte:window>`, `<svelte:document>`, and
`<svelte:body>`. These are not real DOM elements, so they are now
ignored by the rule.
- [#​10741](https://redirect.github.com/biomejs/biome/pull/10741)
[`bd2364e`](https://redirect.github.com/biomejs/biome/commit/bd2364e3d077e3a77addcab6dbe127db38654e4a)
Thanks
[@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! -
Fixed
[#​6686](https://redirect.github.com/biomejs/biome/issues/6686):
the `rage` command now respects the `--config-path` option and the
`BIOME_CONFIG_PATH` environment variable when loading the Biome
configuration. Previously it always used the default configuration
resolution and reported the configuration as `Not set` when no
`biome.json` existed in the working directory.
- [#​10763](https://redirect.github.com/biomejs/biome/pull/10763)
[`2c3e82d`](https://redirect.github.com/biomejs/biome/commit/2c3e82d0235ad2f8331744aefc708d1b71f7177c)
Thanks [@​Aqu1bp](https://redirect.github.com/Aqu1bp)! - Fixed
[#​10742](https://redirect.github.com/biomejs/biome/issues/10742):
[`noSolidDestructuredProps`](https://biomejs.dev/linter/rules/no-solid-destructured-props)
now reports destructured props in Solid function components and JSX
children.
- [#​10606](https://redirect.github.com/biomejs/biome/pull/10606)
[`a4cc4ab`](https://redirect.github.com/biomejs/biome/commit/a4cc4ab0b01a8ef1731d37cb44bccc5522876f2e)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Fixed false
positives in `noUnusedImports`, `noUnusedVariables`, and `useImportType`
for Svelte components that use both a `<script module>` and a `<script>`
block. The two blocks compile to a single module and share a top-level
scope, so a binding (import, function, or variable) declared in one
block and used only in the other is no longer reported as unused.
- [#​10767](https://redirect.github.com/biomejs/biome/pull/10767)
[`36d5aa7`](https://redirect.github.com/biomejs/biome/commit/36d5aa77d751bf33485cd2c92d89e4c5764e1e50)
Thanks [@​otkrickey](https://redirect.github.com/otkrickey)! -
Fixed
[#​10754](https://redirect.github.com/biomejs/biome/issues/10754):
[`useVueValidVBind`](https://biomejs.dev/linter/rules/use-vue-valid-v-bind/)
no longer reports the Vue 3.4+ same-name shorthand as missing a value.
`:foo` and `v-bind:foo` are now accepted as equivalent to `:foo="foo"`,
while `v-bind`, `v-bind:[dynamicArg]`, and `:[dynamicArg]` without a
value continue to be reported.
- [#​10775](https://redirect.github.com/biomejs/biome/pull/10775)
[`a918af0`](https://redirect.github.com/biomejs/biome/commit/a918af0ba827a7fd60a12c96b58daebc8af61db2)
Thanks
[@​WaterWhisperer](https://redirect.github.com/WaterWhisperer)! -
Fixed an issue reported in
[#​10708](https://redirect.github.com/biomejs/biome/issues/10708):
`biome rage` didn't detect running Biome daemon pipes on Windows.
- [#​10730](https://redirect.github.com/biomejs/biome/pull/10730)
[`5a2e65b`](https://redirect.github.com/biomejs/biome/commit/5a2e65b9929ef0f2294c20e028fd396d760d2b26)
Thanks [@​dinocosta](https://redirect.github.com/dinocosta)! -
Fixed an issue where Biome was resolving [the well-known Zed settings
file](https://biomejs.dev/guides/configure-biome/#well-known-files) from
the wrong location on macOS and Windows.
- [#​10807](https://redirect.github.com/biomejs/biome/pull/10807)
[`d97fffe`](https://redirect.github.com/biomejs/biome/commit/d97fffe0aba04cddec66943d6bff3e99d440b451)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where `.scss` files were incorrectly analyzed when
running `biome check`.
- [#​10672](https://redirect.github.com/biomejs/biome/pull/10672)
[`53c6efc`](https://redirect.github.com/biomejs/biome/commit/53c6efcd3e5e2769bf8edbe14b8c06ee9fda52d2)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed a bug where Biome incorrectly formatted snippets that have parsing
errors.
- [#​10719](https://redirect.github.com/biomejs/biome/pull/10719)
[`aa649b5`](https://redirect.github.com/biomejs/biome/commit/aa649b586a2221bf058af7ce80af6faa11faf846)
Thanks [@​minseong0324](https://redirect.github.com/minseong0324)!
- Fixed
[`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/)
false positive when awaiting a custom thenable that is not the global
`Promise`. A value with a callable `then` member is now recognized as
awaitable.
```ts
interface Thenable<T> {
then(onfulfilled: (value: T) => void): void;
}
declare const t: Thenable<number>;
async function f() {
await t;
}
```
- [#​10734](https://redirect.github.com/biomejs/biome/pull/10734)
[`4396496`](https://redirect.github.com/biomejs/biome/commit/43964961c88ca0f93ee83d10621844fa2dc7515c)
Thanks [@​BangDori](https://redirect.github.com/BangDori)! - Fixed
[#​10708](https://redirect.github.com/biomejs/biome/issues/10708):
`biome migrate` now preserves trivia when migrating the deprecated
`recommended` option to `preset`.
- [#​10683](https://redirect.github.com/biomejs/biome/pull/10683)
[`ae31a00`](https://redirect.github.com/biomejs/biome/commit/ae31a004a20ed33d6aa35d5ec8bb4c433273a517)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10657](https://redirect.github.com/biomejs/biome/issues/10657)
[#​10671](https://redirect.github.com/biomejs/biome/issues/10671)
[#​10661](https://redirect.github.com/biomejs/biome/issues/10661)
[#​10637](https://redirect.github.com/biomejs/biome/issues/10637)
[#​10718](https://redirect.github.com/biomejs/biome/issues/10718):
HTML rules now correctly handle dynamic attributes.
- [#​10746](https://redirect.github.com/biomejs/biome/pull/10746)
[`54e8239`](https://redirect.github.com/biomejs/biome/commit/54e8239bba3f598d7923ac1e446d658714ea7832)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where
[`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes)
didn't correctly detect styles defined inside the Astro directive
`is:global`.
- [#​10770](https://redirect.github.com/biomejs/biome/pull/10770)
[`dd1429c`](https://redirect.github.com/biomejs/biome/commit/dd1429c604f58b89524a3f5329e2920d198e8d9f)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Improved the Biome Language Server DX by orchestrating certain
operations, so that they won't block the editor during typing. This
improvement is more visible in large documents.
- [#​10473](https://redirect.github.com/biomejs/biome/pull/10473)
[`d9b5133`](https://redirect.github.com/biomejs/biome/commit/d9b5133de7e211b22f4531fe220070690a18c8d1)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Improved
[`noUnusedImports`](https://biomejs.dev/linter/rules/no-unused-imports/),
[`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/),
[`noUnusedFunctionParameters`](https://biomejs.dev/linter/rules/no-unused-function-parameters/),
and [`useImportType`](https://biomejs.dev/linter/rules/use-import-type/)
for Svelte, Vue, and Astro files (with
`html.experimentalFullSupportEnabled`). Bindings used only in the
template β including component tags, attribute interpolations,
directives, `bind:` shorthand, and snippet parameters β are no longer
reported as unused, while genuinely unused ones still are.
- [#​10796](https://redirect.github.com/biomejs/biome/pull/10796)
[`f1b3ab2`](https://redirect.github.com/biomejs/biome/commit/f1b3ab2c09522a52c93f669ce679675237b96813)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where the Biome Language Server didn't enable project or
type-aware lint rules, even when they were explicitly enabled.
- [#​10746](https://redirect.github.com/biomejs/biome/pull/10746)
[`54e8239`](https://redirect.github.com/biomejs/biome/commit/54e8239bba3f598d7923ac1e446d658714ea7832)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed an issue where
[`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes)
didn't detect styles declared inside HTML documents.
- [#​10774](https://redirect.github.com/biomejs/biome/pull/10774)
[`bde945b`](https://redirect.github.com/biomejs/biome/commit/bde945bee29cb566086828ad788153d9111a125a)
Thanks [@​pattrickrice](https://redirect.github.com/pattrickrice)!
- Fixed
[#​10268](https://redirect.github.com/biomejs/biome/issues/10268)
where a race condition resulted in internal errors such as: `The file
biome.json does not exist in the workspace`.
###
[`v2.5.1`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#251)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.5.0...@biomejs/biome@2.5.1)
##### Patch Changes
- [#​10722](https://redirect.github.com/biomejs/biome/pull/10722)
[`f8a303d`](https://redirect.github.com/biomejs/biome/commit/f8a303d08b6b22f56edb8ff5e7caa665532d613a)
Thanks [@​denbezrukov](https://redirect.github.com/denbezrukov)! -
Fixed CSS formatter output for comments between import media queries.
```diff
-@​import url("print.css") print,
-/* comment */
-screen;
+@​import url("print.css") print, /* comment */ screen;
```
- [#​10738](https://redirect.github.com/biomejs/biome/pull/10738)
[`9fdc560`](https://redirect.github.com/biomejs/biome/commit/9fdc5600997ef59ca7ed55ac212473de9bdb0b2a)
Thanks
[@​JamBalaya56562](https://redirect.github.com/JamBalaya56562)! -
Fixed
[#​9899](https://redirect.github.com/biomejs/biome/issues/9899):
the `json` and `json-pretty` reporters now escape backslashes in a
diagnostic's `location.path`. Previously, paths containing backslashes
(such as Windows-style paths) were emitted unescaped, producing invalid
JSON.
```diff
- "path": "src\account\setup-passkey.tsx",
+ "path": "src\\account\\setup-passkey.tsx",
```
- [#​10626](https://redirect.github.com/biomejs/biome/pull/10626)
[`5f837df`](https://redirect.github.com/biomejs/biome/commit/5f837df033afc34d43b398aeddc06c1d4fa491d9)
Thanks [@​tom-groves](https://redirect.github.com/tom-groves)! -
Fixed
[#​10625](https://redirect.github.com/biomejs/biome/issues/10625):
`biome migrate` no longer emits an invalid trailing comma when a renamed
rule (such as `noConsoleLog` β `noConsole`) is the last member of its
rule group. Previously this produced malformed output that aborted the
migration of a strict-JSON `biome.json` with a parsing error.
- [#​10535](https://redirect.github.com/biomejs/biome/pull/10535)
[`c245f9d`](https://redirect.github.com/biomejs/biome/commit/c245f9d9e239471d5437cd08f9cfa4601a85abd5)
Thanks [@​Mokto](https://redirect.github.com/Mokto)! - Fixed a
false positive in
[`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/)
for Svelte files where variables referenced inside `{@​html expr}`
blocks were incorrectly reported as unused.
- [#​10668](https://redirect.github.com/biomejs/biome/pull/10668)
[`a0f197e`](https://redirect.github.com/biomejs/biome/commit/a0f197eb1a6974539927f105ff1dde1f51d07d74)
Thanks [@​Netail](https://redirect.github.com/Netail)! - The
`biome init` command has been updated to include a more up-to-date URL
to [the first-party extensions
page](https://biomejs.dev/editors/first-party-extensions/).
- [#​10667](https://redirect.github.com/biomejs/biome/pull/10667)
[`d8c3e87`](https://redirect.github.com/biomejs/biome/commit/d8c3e878d53515c02bd6c5cb899b2eaec046c542)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10664](https://redirect.github.com/biomejs/biome/issues/10664):
[useErrorCause](https://biomejs.dev/linter/rules/use-error-cause/) now
correctly detects a shorthand property.
- [#​10696](https://redirect.github.com/biomejs/biome/pull/10696)
[`ef2373f`](https://redirect.github.com/biomejs/biome/commit/ef2373f29be15673705884d345c9af189e30b581)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​9566](https://redirect.github.com/biomejs/biome/issues/9566).
Improved how the Biome Language Server loads multiple configuration
files inside a workspace.
- [#​10705](https://redirect.github.com/biomejs/biome/pull/10705)
[`4ccb410`](https://redirect.github.com/biomejs/biome/commit/4ccb410dc00a6fb243934dad2e8681a9d5d9529e)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10652](https://redirect.github.com/biomejs/biome/issues/10652).
Biome plugins are now properly filtered when using `--only` and `--skip`
flags.
- [#​10669](https://redirect.github.com/biomejs/biome/pull/10669)
[`aa0a6eb`](https://redirect.github.com/biomejs/biome/commit/aa0a6eb8007493961cd578f04201248c15fd809a)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Fixed
[#​10651](https://redirect.github.com/biomejs/biome/issues/10651):
[useInlineScriptId](https://biomejs.dev/linter/rules/use-inline-script-id/)
now correctly trims trivia to detect if an id attribute has been set.
- [#​10689](https://redirect.github.com/biomejs/biome/pull/10689)
[`844b1be`](https://redirect.github.com/biomejs/biome/commit/844b1be60ded28bf4c650d85806919ceb57bc402)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10658](https://redirect.github.com/biomejs/biome/issues/10658).
The issue was caused by the "Go-to definition" editor feature, which was
enabled by default. The feature is now **disabled by default**. To work,
the feature triggers the scanner to build the module graph. This caused
memory leak issues in cases where Biome starts in the home directory to
modify files.
If you relied on this new feature, you must now turn on using the
\[editor settings] of the extension e.g.
[Zed](https://biomejs.dev/reference/zed/#goto_definition) and
[VSCode](https://biomejs.dev/reference/vscode/#biomegotodefinition).
- [#​10695](https://redirect.github.com/biomejs/biome/pull/10695)
[`043fbb5`](https://redirect.github.com/biomejs/biome/commit/043fbb514f1b96c5b723cd86c8db4b9bc9f03631)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10674](https://redirect.github.com/biomejs/biome/issues/10674).
Biome now throws an error when the field `level` is missing from a rule
option.
- [#​10712](https://redirect.github.com/biomejs/biome/pull/10712)
[`5941df2`](https://redirect.github.com/biomejs/biome/commit/5941df2a0d6904e487e73d4dc7231dcaf7b3a2f0)
Thanks [@​Conaclos](https://redirect.github.com/Conaclos)! -
Improved the diagnostic and the documentation of
[`useFlatMap`](https://biomejs.dev/linter/rules/use-flat-map/).
- [#​10615](https://redirect.github.com/biomejs/biome/pull/10615)
[`23814f1`](https://redirect.github.com/biomejs/biome/commit/23814f1ad8430df906a39323ee31d27d7b9ca17b)
Thanks [@​qwertycxz](https://redirect.github.com/qwertycxz)! -
Improved the DX the JSON schema when it's used by certain code editors
like VSCode.
- [#​10688](https://redirect.github.com/biomejs/biome/pull/10688)
[`ec69489`](https://redirect.github.com/biomejs/biome/commit/ec694896a0c75176aca040392e3309df1b2e963d)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed a bug where the Biome Daemon did not correctly shut down when the
editor was closed during an in-progress operation, especially while
scanning.
- [#​10701](https://redirect.github.com/biomejs/biome/pull/10701)
[`6c2e0d7`](https://redirect.github.com/biomejs/biome/commit/6c2e0d7bba1cbc457a42adf6c982a773bc7e4605)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10694](https://redirect.github.com/biomejs/biome/issues/10694).
The Biome Language Server no longer prints an error when the user hovers
a variable imported from node\_modules.
- [#​10681](https://redirect.github.com/biomejs/biome/pull/10681)
[`888515b`](https://redirect.github.com/biomejs/biome/commit/888515b088cde688a95680362a619221c023f9d0)
Thanks [@​Conaclos](https://redirect.github.com/Conaclos)! - Fixed
[`useExportType`](https://biomejs.dev/linter/rules/use-export-type/)
that reported useless details in some diagnostics.
- [#​10220](https://redirect.github.com/biomejs/biome/pull/10220)
[`3694a13`](https://redirect.github.com/biomejs/biome/commit/3694a135a9976915889988c36d9eb40d679f06e6)
Thanks [@​theBGuy](https://redirect.github.com/theBGuy)! - Fixed
[`useAnchorContent`](https://biomejs.dev/linter/rules/use-anchor-content/)
false positive for `<a>` elements used as render prop values (e.g.
`render={<a href="..." />}`), a pattern where the receiving component
renders its children inside the anchor element.
- [#​10702](https://redirect.github.com/biomejs/biome/pull/10702)
[`98823fb`](https://redirect.github.com/biomejs/biome/commit/98823fb2e70095b09e1ca4bb9733850bbe8ff33f)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Fixed
[#​10612](https://redirect.github.com/biomejs/biome/issues/10612).
The Biome parser now correctly parses processing instructions. The
following SVG doesn't throw errors anymore:
```svg
<?xml version="1.0" encoding="UTF-8" ?>
<svg></svg>
```
###
[`v2.5.0`](https://redirect.github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#250)
[Compare
Source](https://redirect.github.com/biomejs/biome/compare/@biomejs/biome@2.4.16...@biomejs/biome@2.5.0)
##### Minor Changes
- [#​9539](https://redirect.github.com/biomejs/biome/pull/9539)
[`f0615fd`](https://redirect.github.com/biomejs/biome/commit/f0615fdae80fa7257fc1d0448d2027cb1acff46e)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Added a new reporter called `concise`. When `--reporter=concise` is
passed the commands `format`, `lint`, `check` and `ci`, the diagnostics
are printed in a compact manner:
```
! index.ts:2:10: lint/correctness/noUnusedImports: Several of these
imports are unused.
! main.ts:9:7: lint/correctness/noUnusedVariables: This variable f is
unused.
Γ index.ts:8:5: lint/suspicious/noImplicitAnyLet: This variable
implicitly has the any type.
Γ main.ts:2:10: lint/suspicious/noRedeclare: Shouldn't redeclare 'z'.
Consider to delete it or rename it.
```
- [#​9495](https://redirect.github.com/biomejs/biome/pull/9495)
[`2056b23`](https://redirect.github.com/biomejs/biome/commit/2056b23812a17f9c9a9015e5b725faecb04647b5)
Thanks [@​aviraldua93](https://redirect.github.com/aviraldua93)! -
Added the
[`useKeyWithClickEvents`](https://biomejs.dev/linter/rules/use-key-with-click-events/)
a11y lint rule for HTML files (`.html`, `.vue`, `.svelte`, `.astro`).
This is a port of the existing JSX rule. The rule enforces that elements
with an `onclick` handler also have at least one keyboard event handler
(`onkeydown`, `onkeyup`, or `onkeypress`) to ensure keyboard
accessibility.
Inherently keyboard-accessible elements (`<a>`, `<button>`, `<input>`,
`<select>`, `<textarea>`, `<option>`) are excluded, as are elements
hidden from assistive technologies (`aria-hidden`) or with
`role="presentation"` / `role="none"`.
```html
<!-- Invalid: no keyboard handler -->
<div onclick="handleClick()">Click me</div>
<!-- Valid: has keyboard handler -->
<div onclick="handleClick()" onkeydown="handleKeyDown()">Click me</div>
<!-- Valid: inherently keyboard-accessible -->
<button onclick="handleClick()">Submit</button>
```
- [#​9152](https://redirect.github.com/biomejs/biome/pull/9152)
[`9ec8500`](https://redirect.github.com/biomejs/biome/commit/9ec8500dabc7305cbe04ecf27a84a1450f012c0b)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Added new nursery lint rule
[`noUndeclaredClasses`](https://biomejs.dev/linter/rules/no-undeclared-classes/)
for HTML, JSX, and SFC files (Vue, Astro, Svelte). The rule detects CSS
class names used in `class="..."` (or `className`) attributes that are
not defined in any `<style>` block or linked stylesheet reachable from
the file.
```html
<!-- .typo is used but never defined -->
<html>
<head>
<style>
.button {
color: blue;
}
</style>
</head>
<body>
<div class="button typo"></div>
</body>
</html>
```
- [#​9152](https://redirect.github.com/biomejs/biome/pull/9152)
[`9ec8500`](https://redirect.github.com/biomejs/biome/commit/9ec8500dabc7305cbe04ecf27a84a1450f012c0b)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Added new nursery lint rule
[`noUnusedClasses`](https://biomejs.dev/linter/rules/no-unused-classes/)
for CSS. The rule detects CSS class selectors that are never referenced
in any HTML or JSX file that imports the stylesheet. This is a
project-domain rule that requires the module graph.
```css
/* styles.css β .ghost is never used in any importing file */
.button {
color: blue;
}
.ghost {
color: red;
}
```
```jsx
/* App.jsx */
import "./styles.css";
export default () => <div className="button" />;
```
- [#​9546](https://redirect.github.com/biomejs/biome/pull/9546)
[`6567efa`](https://redirect.github.com/biomejs/biome/commit/6567efa51ba074436b017e49b1d2d369e7252e74)
Thanks [@​nhedger](https://redirect.github.com/nhedger)! - Added a
`biome upgrade` command for standalone installations. It upgrades
Homebrew installs with `brew upgrade biome`, updates manually installed
binaries from the latest GitHub release, and tells npm users to upgrade
with their package manager instead.
- [#​9716](https://redirect.github.com/biomejs/biome/pull/9716)
[`701767a`](https://redirect.github.com/biomejs/biome/commit/701767a3c4de8bce032933588ef2b6e5e252919f)
Thanks [@​faizkhairi](https://redirect.github.com/faizkhairi)! -
Added the HTML version of the
[`useHeadingContent`](https://biomejs.dev/linter/rules/use-heading-content/)
rule. The rule now enforces that heading elements (`h1`-`h6`) have
content accessible to screen readers in HTML, Vue, Svelte, and Astro
files.
```html
<!-- Invalid: empty heading -->
<h1></h1>
<!-- Invalid: heading hidden from screen readers -->
<h1 aria-hidden="true">invisible content</h1>
<!-- Valid: heading with text content -->
<h1>heading</h1>
<!-- Valid: heading with accessible name -->
<h1 aria-label="Screen reader content"></h1>
```
- [#​9582](https://redirect.github.com/biomejs/biome/pull/9582)
[`f437ef8`](https://redirect.github.com/biomejs/biome/commit/f437ef8b6b0eb8f909d523950cf2c543042083d5)
Thanks [@​rahuld109](https://redirect.github.com/rahuld109)! -
Added the HTML version of the
[`useKeyWithMouseEvents`](https://biomejs.dev/linter/rules/use-key-with-mouse-events/)
rule. The rule now enforces that `onmouseover` is accompanied by
`onfocus` and `onmouseout` is accompanied by `onblur` in HTML, Vue,
Svelte, and Astro files.
```html
<!-- Invalid: onmouseover without onfocus -->
<div onmouseover="handleMouseOver()"></div>
<!-- Valid: onmouseover paired with onfocus -->
<div onmouseover="handleMouseOver()" onfocus="handleFocus()"></div>
```
- [#​9275](https://redirect.github.com/biomejs/biome/pull/9275)
[`1fdbcee`](https://redirect.github.com/biomejs/biome/commit/1fdbceea62d373f24da9c1e5cc0cdd169b573e84)
Thanks [@​ff1451](https://redirect.github.com/ff1451)! - Added the
new assist action
[`useSortedTypeFields`](https://biomejs.dev/assist/actions/use-sorted-type-fields/),
which sorts the fields of GraphQL object types, interface types and
input object types alphabetically, e.g. `name, age, id` becomes `age,
id, name`.
- [#​10561](https://redirect.github.com/biomejs/biome/pull/10561)
[`78075b7`](https://redirect.github.com/biomejs/biome/commit/78075b7c7cb7490c730a96f4ee9776c9e77826e7)
Thanks [@​Conaclos](https://redirect.github.com/Conaclos)! - Added
a new `style` option to
[useExportType](https://biomejs.dev/linter/rules/use-export-type/),
which enforces a style for exporting types.
This is the same option as the one provided by `useImportType`.
- [#​8987](https://redirect.github.com/biomejs/biome/pull/8987)
[`d16e32b`](https://redirect.github.com/biomejs/biome/commit/d16e32b5b971a4ed9cd3bf5098782c8b752af69a)
Thanks [@​DerTimonius](https://redirect.github.com/DerTimonius)! -
Ported the
[`useValidAnchor`](https://biomejs.dev/linter/rules/use-valid-anchor/)
rule to HTML. This rule enforces that all anchors are valid and that
they are navigable elements.
- [#​9533](https://redirect.github.com/biomejs/biome/pull/9533)
[`4d251d4`](https://redirect.github.com/biomejs/biome/commit/4d251d489cfd33a83e42d425476f8d6c66b72d9b)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! - The
`init` command now prints the Biome logo.
- [#​10069](https://redirect.github.com/biomejs/biome/pull/10069)
[`0eb9310`](https://redirect.github.com/biomejs/biome/commit/0eb93109e1f9bfbb20744961681b4f0b9b781ad5)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Added the
HTML lint rule
[`noStaticElementInteractions`](https://biomejs.dev/linter/rules/no-static-element-interactions/),
which enforces that static, visible elements (such as `<div>`) that have
click handlers use the valid role attribute.
**Invalid**:
```html
<div onclick="myFunction()"></div>
```
- [#​9134](https://redirect.github.com/biomejs/biome/pull/9134)
[`2a43488`](https://redirect.github.com/biomejs/biome/commit/2a434882746d31e1bd3c8e0d711372a539ce88f8)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Added the assist action
[`useSortedPackageJson`](https://biomejs.dev/assist/actions/use-sorted-package-json).
This action organizes package.json fields according to the same
conventions as the popular
[sort-package-json](https://redirect.github.com/keithamus/sort-package-json)
tool.
- [#​9309](https://redirect.github.com/biomejs/biome/pull/9309)
[`7daa18b`](https://redirect.github.com/biomejs/biome/commit/7daa18b07f7ab348942f4cb83b475e6a4b3d1125)
Thanks [@​Bertie690](https://redirect.github.com/Bertie690)! - The
`allowDoubleNegation` option has been added to
[`noImplicitCoercions`](https://biomejs.dev/linter/rules/no-implicit-coercions)
to allow ignoring double negations inside code.
With the option enabled, the following example is considered valid and
is ignored by the rule:
```js
const truthy = !!value;
```
- [#​9700](https://redirect.github.com/biomejs/biome/pull/9700)
[`894f3fb`](https://redirect.github.com/biomejs/biome/commit/894f3fb4c664b12ff9abd1527b535621fe4e22f6)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! - The
Biome Language server now supports the "go-to definition" feature.
When the cursor of the mouse is hovering an entity (variable, CSS class,
type, etc.), and the command <kbd>CTRL</kbd> + click is triggered, the
editor jumps to where this entity is defined, if the language server can
find it.
Here's what Biome is able to resolve:
- Variables and types used in JavaScript modules, defined in the same
file or imported from another module.
- JSX Components used in JavaScript modules, defined in the same file or
imported from another module.
- CSS classes used in JSX and HTML-ish files (Vue, Svelte and Astro),
and defined in CSS files.
- Components used in HTML-ish files and defined in other HTML-ish.
- Variables used in HTML-ish files and defined in the same file or
imported from another module (JavaScript or HTML-ish).
- [#​10070](https://redirect.github.com/biomejs/biome/pull/10070)
[`bae0710`](https://redirect.github.com/biomejs/biome/commit/bae071050f5a9c335b4483ee384f21ac1e6f0b4d)
Thanks [@​Conaclos](https://redirect.github.com/Conaclos)! - Added
the `:STYLE:` group matcher for
[`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/)
that matches style imports.
For example, the following configuration...
```json
{
"assist": {
"actions": {
"source": {
"organizeImports": {
"level": "on",
"options": {
"groups": ["**", "!:STYLE:"],
"sortBareImports": true
}
}
}
}
}
}
```
...places style imports last:
```diff
- import "./style.css"
import A from "./a.js"
+ import "./style.css"
```
- [#​9170](https://redirect.github.com/biomejs/biome/pull/9170)
[`e3107de`](https://redirect.github.com/biomejs/biome/commit/e3107deedcff0f02b61702c6645d89e8d8635b49)
Thanks [@​mdrobny](https://redirect.github.com/mdrobny)! - Added
`bundleDependencies` option to
[NoUndeclaredDependencies](https://biomejs.dev/linter/rules/no-undeclared-dependencies)
rule.
This rule now supports imports of packages that are defined only in
`bundleDependencies` and `bundledDependencies` arrays.
- [#​9547](https://redirect.github.com/biomejs/biome/pull/9547)
[`01f8473`](https://redirect.github.com/biomejs/biome/commit/01f847317820f805698e1b8ba9eaa8fa6c26205c)
Thanks [@​mujpao](https://redirect.github.com/mujpao)! - Added new
assist rule
[`useSortedAttributes`](https://biomejs.dev/assist/actions/use-sorted-attributes/)
for HTML, porting the existing JSX rule. This rule enforces sorted HTML
attributes.
**Invalid**
```html
<input type="text" id="name" name="name" />
```
- [#​9366](https://redirect.github.com/biomejs/biome/pull/9366)
[`2ca1117`](https://redirect.github.com/biomejs/biome/commit/2ca1117f1e63f6cd99c0ce8d4b82475625838e2e)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Added the
`html.parser.vue` configuration option. When enabled, it adds support
for the parsing of Vue in `.html` files. Most Vue users don't need to
enable this option since Vue files typically use the `.vue` extension,
but it can be useful for projects that embed Vue syntax in regular HTML
files.
- [#​9073](https://redirect.github.com/biomejs/biome/pull/9073)
[`74b20ee`](https://redirect.github.com/biomejs/biome/commit/74b20eee556c9acc72ad5ea335b1bf0983d2eb2e)
Thanks [@​chocky335](https://redirect.github.com/chocky335)! -
Added support for applying GritQL plugin rewrites as code actions.
GritQL plugins that use the rewrite operator (`=>`) now produce fixable
diagnostics for JavaScript, CSS, and JSON files. By default, plugin
rewrites are treated as unsafe fixes and require `--write --unsafe` to
apply. Plugin authors can pass `fix_kind = "safe"` to
`register_diagnostic()` to mark a fix as safe, allowing it to be applied
with just `--write`.
**Example plugin** (`useConsoleInfo.grit`):
```grit
language js
`console.log($msg)` as $call where {
register_diagnostic(span = $call, message = "Use console.info instead of
console.log.", severity = "warn", fix_kind = "safe"),
$call => `console.info($msg)`
}
```
Running `biome check --write` applies safe rewrites. Unsafe rewrites
(the default, or `fix_kind = "unsafe"`) still require `--write
--unsafe`.
- [#​9384](https://redirect.github.com/biomejs/biome/pull/9384)
[`f4c9edc`](https://redirect.github.com/biomejs/biome/commit/f4c9edca8f8772a1e65d9e6701fdc3f604a9f3fe)
Thanks [@​Conaclos](https://redirect.github.com/Conaclos)! - Added
the `sortBareImports` option to
[`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/),
which allows bare imports to be sorted within other imports when set to
`false`.
```json
{
"assist": {
"actions": {
"source": {
"organizeImports": {
"level": "on",
"options": { "sortBareImports": true }
}
}
}
}
}
```
```diff
- import "b";
import "a";
+ import "b";
import { A } from "a";
+ import "./file";
import { Local } from "./file";
- import "./file";
```
- [#​8731](https://redirect.github.com/biomejs/biome/pull/8731)
[`e7872bf`](https://redirect.github.com/biomejs/biome/commit/e7872bffba88f60d6c3cb6d0c2dd7a25452a0205)
Thanks [@​siketyan](https://redirect.github.com/siketyan)! - Added
the watch mode (`--watch`) to the CLI for `check`/`format`/`lint`
commands. By enabling this option, Biome will re-run the check
automatically when any file in the workspace has changed after the first
run.
- [#​10106](https://redirect.github.com/biomejs/biome/pull/10106)
[`9b35f78`](https://redirect.github.com/biomejs/biome/commit/9b35f78e183edf44a3d8b7077ebb0c548a7e92f5)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Biome can now format and lint `.svg` files.
- [#​9967](https://redirect.github.com/biomejs/biome/pull/9967)
[`e9b6c17`](https://redirect.github.com/biomejs/biome/commit/e9b6c17cd6f7e870aea68da3b6c6474aa1a9b4f6)
Thanks [@​dyc3](https://redirect.github.com/dyc3)! - Added HTML
support for
[`noExcessiveLinesPerFile`](https://biomejs.dev/linter/rules/no-excessive-lines-per-file/).
Biome now reports HTML files that exceed the configured line limit,
including when `skipBlankLines` is enabled.
- [#​9491](https://redirect.github.com/biomejs/biome/pull/9491)
[`b3eb63c`](https://redirect.github.com/biomejs/biome/commit/b3eb63c7e19e6ebd41e463289de098bb003686e1)
Thanks [@​IxxyDev](https://redirect.github.com/IxxyDev)! - Added
the HTML lint rule
[`noAriaUnsupportedElements`](https://biomejs.dev/linter/rules/no-aria-unsupported-elements/).
This rule enforces that elements that do not support ARIA roles, states,
and properties (`meta`, `html`, `script`, `style`) do not have `role` or
`aria-*` attributes.
```html
<!-- Invalid: meta does not support aria attributes -->
<meta charset="UTF-8" role="meta" />
```
- [#​9306](https://redirect.github.com/biomejs/biome/pull/9306)
[`afd57a6`](https://redirect.github.com/biomejs/biome/commit/afd57a634bdb6b0b161dc8a2522ac460503569b1)
Thanks [@​viraxslot](https://redirect.github.com/viraxslot)! -
Added the
[`noNoninteractiveTabindex`](https://biomejs.dev/linter/rules/no-noninteractive-tabindex/)
lint rule for HTML. This rule enforces that `tabindex` is not used on
non-interactive elements, as it can cause usability issues for keyboard
users.
```html
<div tabindex="0">Invalid: non-interactive element</div>
`
```
- [#​9276](https://redirect.github.com/biomejs/biome/pull/9276)
[`6d041d9`](https://redirect.github.com/biomejs/biome/commit/6d041d919e06595553093e084e6aad0d39fb8109)
Thanks [@​IxxyDev](https://redirect.github.com/IxxyDev)! - Added
the HTML lint rule
[`noRedundantRoles`](https://biomejs.dev/linter/rules/no-redundant-roles/).
This rule enforces that explicit `role` attributes are not the same as
the implicit/default role of an HTML element. It supports HTML, Vue,
Svelte, and Astro files.
```html
<!-- Invalid: role="button" is redundant on <button> -->
<button role="button"></button>
```
- [#​9813](https://redirect.github.com/biomejs/biome/pull/9813)
[`69aadc2`](https://redirect.github.com/biomejs/biome/commit/69aadc27741bb8a74c926e14a2a9777064cb1e03)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Added a new linter configuration called `preset`. With the new option,
users can enable different kinds of rules at once.
The following presets are available:
- `"recommended"`: it enables all Biome-recommended rules, or
recommended rules of a group;
- `"all"`: it enables all Biome rules, or enables all rules of a group;
- `"none"`: it disables all Biome rules, or disable all rules of a
group.
You can enable recommended rules:
```json
{
"linter": {
"rules": {
"preset": "recommended"
}
}
}
```
You can enable **all rules** at once:
```json5
{
linter: {
rules: {
preset: "all", // enables all rules
},
},
}
```
Or enable all rules for a group:
```json5
{
linter: {
rules: {
style: {
preset: "all", // enables all rules in the style group
},
},
},
}
```
This new option, however, doesn't affect how nursery rules work. Nursery
rules must be enabled singularly, due to their nature.
This new option is meant to replace `recommended`, so make sure to run
the `migrate` command.
- [#​10022](https://redirect.github.com/biomejs/biome/pull/10022)
[`3422d71`](https://redirect.github.com/biomejs/biome/commit/3422d71bc5e9d7f07fd4e7509566427e1591d760)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Added the
HTML lint rule
[`noNoninteractiveElementToInteractiveRole`](https://biomejs.dev/linter/rules/no-noninteractive-element-to-interactive-role/),
which enforces that interactive ARIA roles are not assigned to
non-interactive HTML elements.
**Invalid**:
```html
<h1 role="checkbox"></h1>
```
- [#​8396](https://redirect.github.com/biomejs/biome/pull/8396)
[`13785fc`](https://redirect.github.com/biomejs/biome/commit/13785fc8f4be068eccff84a8ad90ac8530d5c992)
Thanks [@​apple-yagi](https://redirect.github.com/apple-yagi)! -
Biome now supports pnpm catalogs (default and named) when resolving
dependencies for linting. This behavior is opt-in and requires setting
`javascript.resolver.experimentalPnpmCatalogs` to `true`.
- [#​10028](https://redirect.github.com/biomejs/biome/pull/10028)
[`1009414`](https://redirect.github.com/biomejs/biome/commit/100941409f3ec5e6653e92b2cfbb4100df1becb0)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Added the
HTML lint rule
[`noInteractiveElementToNoninteractiveRole`](https://biomejs.dev/linter/rules/no-interactive-element-to-noninteractive-role/),
which enforces that non-interactive ARIA roles are not assigned to
interactive HTML elements.
**Invalid**:
```html
<input role="img" />
```
- [#​9853](https://redirect.github.com/biomejs/biome/pull/9853)
[`816302f`](https://redirect.github.com/biomejs/biome/commit/816302f8c8c9862585c283fce22ffd1817dedf9f)
Thanks [@​Netail](https://redirect.github.com/Netail)! - Added the
new assist action
[`useSortedSelectionSet`](https://biomejs.dev/assist/actions/use-sorted-selection-set/),
which sorts GraphQL selection sets alphabetically, e.g. `name, age, id`
becomes `age, id, name`.
**Invalid**:
```graphql
query {
name
age
id
}
```
- [#​10074](https://redirect.github.com/biomejs/biome/pull/10074)
[`9c7c6eb`](https://redirect.github.com/biomejs/biome/commit/9c7c6eb99f6880aa87ae0e7aff357e978361c4a3)
Thanks
[@​georgephillips](https://redirect.github.com/georgephillips)! -
Added a `kind` field to the `ImportMatcher` used by the
[`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/)
assist action. The new field selects imports by their syntactic kind and
currently supports `bare` (matching side-effect imports such as `import
"polyfill"`) with optional `!` negation (`!bare`). The matcher composes
with the existing `type` and `source` fields, so users can express
patterns such as "only bare imports that import a CSS file" (`{ "kind":
"bare", "source": "**/*.css" }`).
For example, with the following configuration:
```json
{
"assist": {
"actions": {
"source": {
"organizeImports": {
"level": "on",
"options": {
"sortBareImports": true,
"groups": [
{ "kind": "!bare" },
":BLANK_LINE:",
{ "kind": "bare" }
]
}
}
}
}
}
}
```
...the following code:
```ts
import "./register-my-component";
import { render } from "react-dom";
import "./polyfill";
import { Button } from "@​/components/Button";
```
...is organized as:
```ts
import { render } from "react-dom";
import { Button } from "@​/components/Button";
import "./polyfill";
import "./register-my-component";
```
- [#​9171](https://redirect.github.com/biomejs/biome/pull/9171)
[`ce65710`](https://redirect.github.com/biomejs/biome/commit/ce65710f591eb2676df6833e9cd00e310981692b)
Thanks [@​chocky335](https://redirect.github.com/chocky335)! -
Added `includes` option for plugin file scoping. Plugins can now be
configured with glob patterns to restrict which files they run on. Use
negated globs for exclusions.
```json
{
"plugins": [
"global-plugin.grit",
{
"path": "scoped-plugin.grit",
"includes": ["src/**/*.ts", "!**/*.test.ts"]
}
]
}
```
- [#​9617](https://redirect.github.com/biomejs/biome/pull/9617)
[`dcb99ef`](https://redirect.github.com/biomejs/biome/commit/dcb99ef0305d8431af40b526c449316bb8a70efa)
Thanks [@​faizkhairi](https://redirect.github.com/faizkhairi)! -
Ported
[`useAriaActivedescendantWithTabindex`](https://biomejs.dev/linter/rules/use-aria-activedescendant-with-tabindex/)
a11y rule to HTML.
- [#​9496](https://redirect.github.com/biomejs/biome/pull/9496)
[`1dfb829`](https://redirect.github.com/biomejs/biome/commit/1dfb8291a0a2340e7c9220f9126317a7490ec466)
Thanks [@​aviraldua93](https://redirect.github.com/aviraldua93)! -
Added HTML support for the
[`noAriaHiddenOnFocusable`](https://biomejs.dev/linter/rules/no-aria-hidden-on-focusable/)
accessibility lint rule, which enforces that `aria-hidden="true"` is not
set on focusable elements. Focusable elements include native interactive
elements (`<button>`, `<input>`, `<select>`, `<textarea>`), elements
with `href` (`<a>`, `<area>`), elements with `tabindex >= 0`, and
editing hosts (`contenteditable`). Includes an unsafe fix to remove the
`aria-hidden` attribute.
```html
<!-- Invalid: aria-hidden on a focusable element -->
<button aria-hidden="true">Submit</button>
<!-- Valid: aria-hidden on a non-focusable element -->
<div aria-hidden="true">decorative content</div>
```
- [#​9792](https://redirect.github.com/biomejs/biome/pull/9792)
[`f516854`](https://redirect.github.com/biomejs/biome/commit/f51685404f015a5c6f0fc87b9070ac5d9f0a7b6b)
Thanks
[@​Maximiliano-Zeballos](https://redirect.github.com/Maximiliano-Zeballos)!
- Added the
[`useSemanticElements`](https://biomejs.dev/linter/rules/use-semantic-elements/)
lint rule for HTML. The rule now detects the use of `role` attributes in
HTML elements and suggests using semantic elements instead.
For example, the following code is now flagged:
```html
<div role="navigation"></div>
```
The rule suggests using `<nav>` instead.
- [#​9761](https://redirect.github.com/biomejs/biome/pull/9761)
[`cbbb7d5`](https://redirect.github.com/biomejs/biome/commit/cbbb7d5bf21d8fb6db275da7adcc03c034538635)
Thanks
[@​Maximiliano-Zeballos](https://redirect.github.com/Maximiliano-Zeballos)!
- Ported the
[`useValidAriaProps`](https://biomejs.dev/linter/rules/use-valid-aria-props/)
lint rule to HTML. This rule checks that all `aria-*` attributes used in
HTML elements are valid ARIA attributes as defined by the WAI-ARIA
specification.
- [#​9928](https://redirect.github.com/biomejs/biome/pull/9928)
[`aa82576`](https://redirect.github.com/biomejs/biome/commit/aa82576ff66e03924e07729051ac9bfc59cd5aa1)
Thanks [@​aviraldua93](https://redirect.github.com/aviraldua93)! -
Ported
[`useValidAriaValues`](https://biomejs.dev/linter/rules/use-valid-aria-values/)
to HTML. Biome now validates static `aria-*` attribute values in HTML
elements against WAI-ARIA types, catching invalid values such as
`aria-hidden="yes"`.
- [#​10562](https://redirect.github.com/biomejs/biome/pull/10562)
[`6642895`](https://redirect.github.com/biomejs/biome/commit/66428957e6ca393a802f365b8e643438f19a3039)
Thanks [@​ematipico](https://redirect.github.com/ematipico)! -
Promoted 73 nursery rules to stable groups.
Four rules were renamed as part of the promotion:
- `noFloatingClasses` is now
[`noUnusedInstantiation`](https://biomejs.dev/linter/rules/no-unused-instantiation/),
because the rule checks any discarded `new` expression, not only
classes.
- `noMultiStr` is now
[`noMultilineString`](https://biomejs.dev/linter/rules/no-multiline-string/).
- `useFind` is now
[`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/).
- `useSpread` is now
[`useSpreadOverApply`](https://biomejs.dev/linter/rules/use-spread-over-apply/),
because the rule enforces spread call arguments over `Function.apply()`,
not array or object spread.
##### Correctness
Promoted the following rules to the `correctness` group:
-
[`noBeforeInteractiveScriptOutsideDocument`](https://biomejs.dev/linter/rules/no-before-interactive-script-outside-document/)
-
[`noUnusedInstantiation`](https://biomejs.dev/linter/rules/no-unused-instantiation/)
-
[`useInlineScriptId`](https://biomejs.dev/linter/rules/use-inline-script-id/)
(recommended, Next.js domain)
- [`noVueVIfWithVFor`](https://biomejs.
> β **Note**
>
> PR body was truncated to here.
</details>
---
### Configuration
π
**Schedule**: (in timezone America/New_York)
- Branch creation
- "before 6am on monday"
- Automerge
- At any time (no schedule defined)
π¦ **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
β» **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
π» **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/CodesWhat/drydock).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDIuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
π§ Changed
- Bumped `@biomejs/biome` from `2.4.16` to `2.5.2`
- Bumped `@types/node` from `25.7.0` to `25.9.4`
- Bumped `lefthook` from `2.1.6` to `2.1.9`
- Bumped `vitest` from `4.1.7` to `4.1.9`
- Updated `vite` override from `8.0.16` to `8.1.3`
- Updated `biome.json` `$schema` URL to `2.5.2`
- Expanded `biome.json` `files.includes` from a compact form into a
multi-line include list with additional explicit negated entries for
docs/public/logo-related assets
- Verify Biome 2.5.2 doesnβt cause unexpected formatter/linter churn in
CI
- Confirm the updated Biome `files.includes` exclusions still target
only the intended assets (avoids accidentally linting/formatting new
files)
- Validate the `vite` override bump to `8.1.3` remains compatible with
the repoβs build/test/dev scripts
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: scttbnsn <80784472+scttbnsn@users.noreply.github.com>
`.planning/` is in `.gitignore` and CLAUDE.md describes it as local-only canonical detail, but three files under it were force-added at some point and have been publishing on every push to both `main` and `dev/v1.6`: - `.planning/ROADMAP.md` (1825 lines) - `.planning/roadmap/current-tracker.md` - `.planning/v1.6.0-MILESTONE-AUDIT.md` The published copies were stale on top of that, so anyone reading the roadmap off GitHub got an out-of-date one. Nothing depends on them being committed. `release-precut-check.mjs` already treats the tracker as optional (ENOENT prints a warning and returns), and `release-cut.yml` documents it as "gitignored β invisible to this runner, which is why it is a local gate, not a job here". The tooling was written for the untracked state all along. `git rm --cached` leaves every local copy in place. ## The guard `git add -f` on an ignored path is silent after the fact β the file stops appearing as untracked, `git status` goes quiet, and it ships from then on. That's how this happened and there was nothing to catch it. `scripts/tracked-ignored-files.test.mjs` asserts the set of tracked-but-gitignored files equals a known allowlist. The eight self-signed test certificates are on it with a note on why they're committed; anything else that becomes tracked-and-ignored fails the `scripts-test` step with the command to fix it. Verified failing on a re-added `.planning/ROADMAP.md` and passing once removed. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog - ποΈ Removed three stale `.planning/` documents from Git tracking (`.planning/ROADMAP.md`, `.planning/roadmap/current-tracker.md`, `.planning/v1.6.0-MILESTONE-AUDIT.md`) while retaining them locally. - β¨ Added `scripts/tracked-ignored-files.test.mjs` to make `scripts-test` fail when the repo tracks any files that are gitignored. - π§ Refined the tracked-ignored guard to evaluate only repository-committed `.gitignore` rules (excluding clone-local and global Git exclude config) and allowlisted eight committed test certificates. - π Securityβ οΈ Updated `postcss` overrides to `8.5.22` across the root and four workspaces (`package.json`, `app/package.json`, `apps/demo/package.json`, `ui/package.json`) to address a reported path-traversal vulnerability and satisfy the `osv-scanner` check. ## Concerns - Ensure any newly introduced tracked-but-gitignored files are resolved via index removal and/or repo ignore/tracking updates (not by expanding the allowlist). <!-- end of auto-generated comment: release notes by coderabbit.ai -->
β¦ckfile (#594) ## What was happening Renovate bumped `ui/package.json` and `apps/web/package.json` and never wrote either lockfile, so `npm ci` rejected both branches: ``` npm error code EUSAGE `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. ``` Every workflow that installs those workspaces died at its own install step β Test & Coverage, Playwright, Cucumber, and the site build β so **one bad lockfile read as four unrelated CI failures**, each minutes into a job, with an error that never names Renovate. A census of the last 200 runs: 46 failures, **40 of them on `renovate/*` branches**, and 24 of the 46 were this single bug. `app/`, `e2e/` and `apps/demo/` were updated correctly in the same sweep, which is why it read as flake. ``` renovate/npm-minor-patch-ui ui/package.json β no lockfile renovate/npm-minor-patch-appsweb apps/web/package.json β no lockfile renovate/npm-minor-patch-e2e e2e/package.json e2e/package-lock.json β fine renovate/npm-minor-patch-app app/package.json app/package-lock.json β fine ``` ## `skipInstalls: false` `skipInstalls` is Renovate's fast path: patch the lockfile directly and skip the install when it believes it can. That is what silently no-opped. Turning it off costs a real npm install per update and is correct every time. **This diagnosis is inferred.** Renovate reported no artifact-update problem in either PR body or on the dependency dashboard, and its run logs are behind the Mend portal. Config validated against the live `renovate-schema.json` β `skipInstalls` accepts `boolean|null`, no unknown keys. ## The guard, which does not depend on that being right `scripts/lockfile-sync.test.mjs` reimplements the comparison `npm ci` makes β lockfile `packages[""]` against `package.json` β across every committed lockfile. It runs in the pre-push hook and as the first CI step after the root install, **before any workspace install**, and names the drifted packages: ``` npm ci will fail with EUSAGE in these workspaces: ui dependencies.vue: package.json=3.5.40 lockfile=3.5.39 Regenerate each one with `npm install --package-lock-only` in that directory and commit the result. ``` Roots come from `git ls-files -- '*package-lock.json'`, so a seventh workspace is covered the day its lockfile lands β no list to keep current. Verified in both directions, and all six current roots are checked. ## Already unblocked I regenerated both lockfiles and pushed them to the bot branches. #485 and #510 are green for the first time in days β `npm ci` in `apps/web` now succeeds and pulls `lefthook@2.1.10`, the bumped version. Those hand-fixes would be overwritten on Renovate's next run; this PR is what makes it stop happening. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog - β¨ Added `scripts/lockfile-sync.test.mjs` to detect dependency drift between tracked `package.json` and `package-lock.json` files. - π§ Changed Renovate to disable `skipInstalls`, ensuring dependency updates regenerate lockfiles. - π§ Changed pre-push and CI checks to run lockfile consistency validation. - π§ Regenerated the `ui` and `apps/web` lockfiles. ## Concerns - Verify all contributors have Node.js and Git available when running the new check. - Confirm lockfile discovery and dependency comparisons support every workspace layout. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Automated sync from Crowdin. Review wording, then merge.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
β¨ Added
- Added locale strings for **Global update mode**
(title/description/options + failure errors) in `configView` across
multiple languages.
- Added locale strings for **Sync Across Devices**
(title/label/description + failure errors) in `configView.appearance`.
- Added/expanded container update workflow i18n: preview-only/dry-run
labels/tooltips/conditions, overridden/revert/revert-all and
skipped-entry messaging, `noSkippedEntries`, `updateInsight`, and a full
structured `updateStatus` (title/buttons/summary/conditions/actions).
- Added new list-view UI strings for audit, notifications, security,
registries, servers, triggers, and watchers (including
`rules.container-unhealthy`, notification bell/template controls,
scanner runtime tool messaging, and various `card` label groups).
- Added `dashboardView.resizeWidget`.
- Added shared UI strings for column picker + data table sorting labels
(`sortBy`, ascending/descending).
- Added localized `appShell.banners.legacyApiPathTitle` banner text
variants using the `{total}` placeholder across supported locales.
π§ Changed
- Restructured locale JSON shapes where required (e.g., `registryLink`
moved to an object form; `containerComponents.updateStatus`
expanded/replaced from the prior smaller structure).
- Improved/standardized copy in shared components and several view
locales (e.g., sorting labels, βfailedβ/other remaining English ->
localized text in some languages).
ποΈ Removed
- Removed duplicated legacy `updateStatus.summary.pinned` entries after
migrating to the larger `updateStatus` structure in multiple locale
files.
β οΈ Concerns
- Many newly added strings are still in Englishβreview and ensure proper
translations per locale.
- Verify JSON key structure matches the consuming code (especially
`containerComponents.updateStatus`, `dashboardView.resizeWidget`, and
nested objects like `registryLink`).
- Confirm interpolation placeholders remain intact and consistent (e.g.,
`{total}`, `{count}`) after restructuring.
- Check for any accidental duplication/missing keys in large
`updateStatus`/`updateInsight` blocks after the pinned-entry removal.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: Scott Benson <80784472+scttbnsn@users.noreply.github.com>
) Implements [discussion #587](#587): fire a notification the moment an update previously withheld by the maturity gate (`maturityMode: mature`) becomes applicable. ## What was happening While an update soaks, `updateAvailable` is suppressed and every notification stays silent. When the window passes, the generic `update-available` notification fires β but only at the next watcher cron tick (default 6-hourly), indistinguishable from a fresh detection, and the whole transition had zero test coverage. ## What this adds - **`maturityGatePendingSince` marker** persisted while an update soaks: reset on candidate-identity change, survives container recreation via the update lifecycle cache, cleared exactly once when the gate opens. - **Detection helper** (`app/maturity/gate-watch.ts`) with clear-flag-first exactly-once semantics; emits for any reason the gate opens (clock elapsed, policy change, override, snooze expiry). - **Sweep scheduler** (`app/maturity/scheduler.ts`): store-only walk (no registry traffic) every 5 minutes by default, `DD_MATURITY_SWEEP_CRON` to tune, empty string disables. Same check also runs inline at every watch cycle and agent report, before report emission. - **`maturity-cleared` notification kind** with its own default templates. Dispatch mirrors `update-available` exactly: respects `THRESHOLD`, `AUTO`, include/exclude, agent scoping, and `once`. Symmetric dedup against `update-available` (both directions, recorded only on confirmed delivery) so one update is never announced twice. Action triggers are unaffected and keep applying updates on their normal scan cadence. - **Audit trail row** (dedupe-windowed) + in-app bell support + en locale labels (other locales via Crowdin). - **Docs** (triggers, update-eligibility, watchers, API) + CHANGELOG entry. ## Tests - App: 394 files / 12,371 tests, 100% coverage on all four metrics; UI: 213 files / 4,303 tests, 100%. - Includes a regression for the previously-untested suppressedβmatured transition (exactly one notification across the maturity-cleared event and the subsequent generic report cycle). Also carries `π security(deps)`: brace-expansion 5.0.7β5.0.8 (CVE-2026-14257) in app/ui/e2e lockfiles β surfaced by the osv-scanner pre-push gate on this branch. ## Follow-ups deliberately not in scope - No dedicated SSE broadcast for the bell (it refreshes on the existing debounced events); can be added later if near-instant bell updates matter. - `AuditView` filter dropdown doesn't list `container-unhealthy`/`agent-reconnect` today either β pre-existing gap, left consistent. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog - β¨ Added persisted `maturityGatePendingSince` container marker with lifecycle-aware stamping, carry-forward, and clearing - β¨ Added `maybeEmitMaturityGateCleared` exactly-once detection that clears the pending marker and emits `maturity-cleared` when the gate opens - β¨ Added cron-driven βmaturity gate sweepβ with configurable, validated `DD_MATURITY_SWEEP_CRON` (`getMaturitySweepConfiguration`) - β¨ Added `maturity-cleared` ordered event plumbing (`emitMaturityGateCleared` / `registerMaturityGateCleared`) - β¨ Added notification rule + templates + dispatch semantics for `maturity-cleared`, including updated delivery-success bookkeeping and once/dedup behavior against `update-available` - β¨ Added audit trail support for `maturity-cleared` with 5-minute deduplication keyed by container identity (fallback to container name) and incorporating `pendingSince` - β¨ Added in-app bell support, English labels, and UI/audit filtering updates for `maturity-cleared` - π§ Updated container/watch/agent processing to run maturity-cleared detection before container report emission (with regression coverage) - π§ Improved notification dispatch/error handling for maturity-cleared emission (isolation and test determinism tweaks) - π Security: Updated `brace-expansion` from 5.0.7 to 5.0.8 across app, UI, and E2E lockfiles (CVE-2026-14257) - π Added extensive regression + full-coverage tests for suppressed-to-matured transition, scheduler behavior, and audit/notification dedup edges ## Concerns - Validate production correctness of exactly-once behavior under concurrent watch cycles and scheduler sweeps (marker clearing vs emit failures) - Confirm dedup key strategy (identity vs container name) and `pendingSince` handling matches intended business semantics - Ensure scheduler enablement/cron validation and overlapping-sweep protection behave as expected in all runtime configurations - Verify `maturity-cleared` notification delivery interactions with existing `update-available` history, retries, and batch flush semantics - Double-check UI bell/audit filtering paths for consistent action-id usage (`maturity-cleared`) and audit query behavior - Confirm all workspace lockfiles for `brace-expansion` are updated consistently and installed dependencies resolve cleanly <!-- end of auto-generated comment: release notes by coderabbit.ai -->
) The Crowdin sync failed on main on 2026-07-24 with a bare `exit 1` and no message. Root cause turned out to be a bug class rather than a one-off, so this fixes both instances of it and adds coverage. ## The pattern Inside a `set -e`/`pipefail` region, a command that exits non-zero on an *empty* result aborts the step before an explicitly written fallback can run. The fallback is dead code. The tell: someone wrote handling for the empty case, and the empty case can't reach it. ## 1. Crowdin base-branch resolution `i18n-crowdin.yml` resolves the highest `dev/vX.Y` on origin and falls back to the default branch when there is none, so translations always have somewhere to land between a GA and the next dev branch being cut. Under `set -euo pipefail` a no-match `grep` exits 1, which fails the pipeline, which fails the assignment, which aborts the step. The `if [ -z ]` fallback below it could never run. It fired for real: merging sync PR #596 briefly deleted `dev/v1.6` via auto-delete-head-branches, the push-to-main sync run found no `dev/v*`, and the job died. Guards the grep only, so a failing `ls-remote` (network, auth) still propagates and fails loudly instead of silently retargeting translations at main. That distinction matters more than the fix itself. ## 2. Load-test report resolution Sweeping the other workflows for the same pattern turned up 8 more sites in `ci-verify.yml`: ``` report="$(find artifacts/load-test/<mode> ... | sort -rn | head -n1 | cut -d' ' -f2-)" ``` `find` exits 0 on a directory that exists but is empty β the case the downstream scripts handle. It exits 1 when the directory is *missing*, and GitHub runs these steps under the default `bash -eo pipefail`, so that aborts the step. `summarize-load-test-report.sh` and `check-load-test-correctness.sh` both open with an `if [ -z "${REPORT}" ]` block written for exactly this, and neither gets to run. Reachable, not theoretical: these steps are `if: always()`, and `run-load-test.sh` only does `mkdir -p` on the artifact dir at line 168 β after the docker build, compose up, and the health-check wait that exits 1 at line 136. A load test that fails the way load tests usually fail leaves the directory absent, and the step meant to explain that dies with a bare exit 1. ## Coverage `crowdin-base-branch-resolver.test.ts` executes the real `id: base` run block extracted from the workflow against a stubbed git, rather than asserting on workflow text, so it tracks the actual logic instead of a copy that can drift. Three cases: no dev branches falls back and exits 0; several picks `dev/v1.10` over `v1.9` (lexical sort gets this wrong); failing `ls-remote` still exits non-zero. That last one guards against "fixing" the bug by swallowing all errors, which would be worse than the bug. Verified it fails against the pre-fix snippet with `expected 1 to be +0`, and that the other two still pass β the bug only affects the one path. `ci-verify-find-pipefail-guard.test.ts` discovers the find sites by walking the parsed workflow rather than pinning line numbers, so it also catches a new unguarded `find` added later. Carries a sanity assertion so it can't pass vacuously if the shape stops matching. Verified it catches a revert by naming the exact offending step. Executing the load-test steps for real would need docker plus Artillery artifacts, so that one is a static assertion by design β noted in a comment in the file. ## Notes - Full pre-push gate green locally, including the 100% coverage gate and zizmor. - Related but separate: `main` is currently failing its scheduled CI Verify on `brace-expansion@5.0.7` (CVE-2026-14257). That is already fixed on `dev/v1.6` at 5.0.8 β it just needs the next dev β main sync, no code change. - Also closed #598 and deleted `l10n_crowdin`; it was cut before #545 landed and had gone conflicting. It regenerates from the dev tip on the next push here. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog - π Fixed Crowdin base-branch resolver so βno matching dev/vX.Yβ correctly falls back to `DEFAULT_BRANCH` under `set -euo pipefail`, while `git ls-remote` failures still propagate. - π Fixed CI load-test report discovery by guarding each `find artifacts/load-test/<site>/...*.json ...` command-substitution pipeline so missing artifact directories donβt abort later empty-report handling under `pipefail`. - π§ Changed `test/cpu-bench.sh` to guard the per-container `grep "^$c "` used to compute stats so missing samples donβt stop the script under `set -euo pipefail`. - β¨ Added Jest coverage for Crowdin fallback behavior, highest `dev/vX.Y` selection, and `ls-remote` error propagation. - β¨ Added static workflow analysis coverage to ensure every load-test report lookup assignment site uses a fully pipefail-safe `find` guard (including later pipeline stages). ## Concerns - Ensure the workflow-scan regex continues to correctly identify the intended `find`-into-variable command-substitution assignments and doesnβt miss new sites. - Verify the static βexpected eight-site countβ remains in sync with the number of load-test report lookup assignments across CI (ci/behavior/stress, summarize/correctness/regression). <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Prepares the release surfaces for cutting `v1.6.0-rc.6`. No runtime code changes. ## Why now rc.5 was cut on 2026-07-23. Since then `dev/v1.6` picked up **#587, the maturity-cleared notification** β a new feature, not a fix, with a new `maturity-policy` model, ~170 lines in `Trigger.ts`, ~100 in `store/container.ts`, and a new background sweep on a new `DD_MATURITY_SWEEP_CRON` default. On top of that the delta carries a full dependency bump wave across all six lockfiles plus a Crowdin translation resync. That's too much unsoaked change to take straight to GA, so it gets an RC first. ## What's here **Changelog.** Promotes `[Unreleased]` to `[1.6.0-rc.6] β 2026-07-26` so `release-cut.yml`'s CHANGELOG validation resolves an entry for the tag, and backfills the rest of the delta since rc.5: the dependency wave, the translation resync, and the three CI/repo fixes (#599, #594, #593) that landed without changelog entries of their own. **Release identity.** The usual 16-file bump: version badge, `site-config.ts`, the roadmap entry in `site-content.ts`, demo mock fixtures, the API doc response samples, the quickstart tag matrix, a new highlights section on the updates page, and the three pinned identity tests under `scripts/`. All eight version files that `release-cut.yml` checks already sit at the `1.6.0` base, so no `package.json` bump is needed for this RC. ## Verification - `node --test scripts/*.test.mjs` β 133 pass, 0 fail - Full pre-push gate green end to end: qlty, qlty-smells, scripts-test, workflow-tests, typecheck-ui, web-scripts-test, coverage (230s), build, zizmor - `main` and `dev/v1.6` trees were in sync before this branch, so the pre-cut drift guard only needs the one sync after merge <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog ### β¨ Added - Added `v1.6.0-rc.6` highlights (maturity-cleared notifications, dependency + translation resync, CI scripting robustness) for July 26, 2026. ### π§ Changed - Promoted the `v1.6.0-rc.6` release surface by updating version identity references from `v1.6.0-rc.5` β `v1.6.0-rc.6` across README, site config/content, roadmap/demo content, API documentation samples, quickstart tags, and the updates page. - Updated mock/demo data to report `1.6.0-rc.6` consistently (agent, audit, container, server, and API handler fixtures). - Refactored release identity assertions in release tests to derive current RC expectations from `RC_VERSION`, added `PREV_RC_VERSION` for changelog compare-chain links, and ensured archived release references remain literal. - Updated changelog compare link expectations for the RC series to use `v1.6.0-rc.6` as the chain head and added the `v1.6.0-rc.6` expected compare range (`v1.6.0-rc.5...v1.6.0-rc.6`). - Tightened quickstart/version negative-match logic via dynamically constructed regexes and validation that `RC_VERSION` matches `-rc.<number>` before deriving prefix/number. ## Concerns - Ensure changelog entry content/date (βUnreleasedβ β `v1.6.0-rc.6`, 2026-07-26) is correctly updated everywhere itβs generated/linked (docs + compare-link tests). - Verify archived `1.5.0` / `1.5.2` references remain literal in identity tests (to avoid unintended tautologies). - Confirm all release surface fixtures (including demo/portal API examples and Portwing message fields) use the same `rc.6` token with no remaining `rc.5` stragglers. - Confirm verification remains green for the full pre-push gate (133 passing script tests, zero failures). <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Takes dev/v1.6's tree wholesale. The conflict is an artifact of squash-merge-only ancestry: main acquired the same content through an earlier squash, so a three-way merge reads both sides as independently adding it. Verified main carries nothing dev lacks (no file exists only on main; the entire content delta is the 17-file rc.6 prep), so -s ours loses nothing.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
biggest-littlest
left a comment
There was a problem hiding this comment.
Sync only. Tree verified identical to dev/v1.6.
|
Warning Review limit reached
Next review available in: 9 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review detailsβοΈ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: β Files ignored due to path filters (1)
π Files selected for processing (16)
β¨ Finishing Touchesπ§ͺ Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ALARGECOMPANY
left a comment
There was a problem hiding this comment.
Approved. Content matches dev/v1.6 exactly.
Routine pre-cut sync: takes `dev/v1.6` (`391c1b7d`) wholesale onto `main` so the rc.7 tag cuts from a tree identical to the dev branch. Delta since the rc.6 sync (#603): - #607 β four identity-drift fixes (soak-clock recreate reset, notification dedup double-fire, scan write-back revert, update-age fallback leak) - #608 β icon-bundle regenerated against the locked iconify versions - #609 β rc.7 release-surface prep (CHANGELOG heading, 17-file identity bump) Head branch is a throwaway (`sync/main-20260726-rc7`), not `dev/v1.6`, so auto-delete-head-branches can't touch the dev branch (#596 lesson). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Changelog - π Fixed identity drift across maturity tracking, notification deduplication, and scan write-back. - π Prevented stale or removed containers from being overwritten or resurrected during scans. - β¨ Added shared candidate-identity extraction and raw-container access APIs. - π§ Updated maturity/age filtering and sorting behavior and expanded regression coverage. - π§ Regenerated the server icon bundle. - π§ Bumped release surfaces, documentation, mocks, and validation tests from `v1.6.0-rc.6` to `v1.6.0-rc.7`. - β¨ Added `v1.6.0-rc.7` release highlights and GA-compatible release-surface checks. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Routine dev β main sync ahead of cutting
v1.6.0-rc.6. Per the branch model,mainonly advances by merging fromdev/v1.6, never by taking independent commits, and the cut is dispatched frommain.Opened from a throwaway
sync/main-rc6branch rather than fromdev/v1.6directly. Auto-delete-head-branches deleteddev/v1.6when sync PR #596 used it as the head, which is what broke the Crowdin sync.Content
The entire delta is the rc.6 prep merged in #602: the dated
[1.6.0-rc.6]changelog entry and the 16-file release identity bump.Conflict resolution
The three-way merge conflicted on
CHANGELOG.md. That's an artifact of squash-merge-only ancestry βmainpicked up the same content through an earlier squash, so the merge reads both sides as independently adding it.Resolved with
git merge -s ours origin/main, which takesdev/v1.6's tree wholesale. Verified that loses nothing:mainmainanddev/v1.6is exactly the 17 rc.6 prep files, nothing elseAfter the merge,
git diff HEAD origin/dev/v1.6is empty, so this branch's tree is byte-identical todev/v1.6. That's the invariant the release-cut drift guard asserts.Verification
renovate.jsonalready targetsdev/v1.6, so the drift guard's bot-target assertion passes1.6.0base that the tag validation expectsNext after merge: dispatch
release-cut.yml --ref main -f release_tag=v1.6.0-rc.6.