chore(deps): consolidate all dependency updates and fix OSV-Scanner CI failure - #42
Conversation
Merges the three open Dependabot PRs into one verified update: - @types/node ^25.9.1 -> ^26.0.1 (major, #36) - actions/setup-node v6 -> v7 (#40) - Lockfile-only refresh of @commitlint/cli 21.2.1, @commitlint/config-conventional 21.2.0, @vitest/coverage-v8 3.2.7, eslint 10.8.0, lefthook 2.1.10, prettier 3.9.6, typescript-eslint 8.65.0, vitest 3.2.7 (#41) typescript stays pinned at 6.0.3: tsup's rollup-plugin-dts and typescript-eslint both hard-block TypeScript 7 today. Reformatted tests/selector.test.ts to match prettier 3.9.6's updated union-type line-wrapping. Closes #36, #40, #41 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #42 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 61 61
Lines 1801 1801
Branches 268 268
=========================================
Hits 1801 1801 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Re-resolved pnpm-lock.yaml against the existing package.json specifiers (pnpm update --depth Infinity, then package.json reverted, then pnpm install --lockfile-only) so already-patched transitive versions that satisfy parent packages' semver ranges get picked up. pnpm normally preserves existing lockfile resolutions on install, so these patched versions were available but never selected. No manifest changes, no pnpm.overrides added, no scanner suppressions. pnpm audit --audit-level=high: before: 13 vulnerabilities (8 high, 2 moderate, 3 low) after: 2 vulnerabilities (1 high, 1 low) Cleared: - 7x undici advisories (release-it@20.2.0 -> undici 8.3.0 -> 8.9.0, now >=8.5.0): GHSA-vmh5-mc38-953g, GHSA-38rv-x7px-6hhq, GHSA-vxpw-j846-p89q, GHSA-p88m-4jfj-68fv, GHSA-pr7r-676h-xcf6, GHSA-35p6-xmwp-9g52, GHSA-g8m3-5g58-fq7m - brace-expansion GHSA-3jxr-9vmj-r5cp (both eslint and vitest coverage paths, resolved to 2.1.4 / 5.0.9) - postcss GHSA-r28c-9q8g-f849 (vitest -> vite -> postcss 8.5.15 -> 8.5.25) Remain (semver ceilings a lockfile refresh cannot cross; verified via node_modules package.json dependency ranges): - brace-expansion GHSA-mh99-v99m-4gvg (high): needs >=5.0.8, but @vitest/coverage-v8 -> test-exclude -> glob@10.5.0 pins minimatch@^9.0.4, which pins brace-expansion@^2.0.2 (max 2.x). - esbuild GHSA-g7r4-m6w7-qqqr (low): needs >=0.28.1, but tsup@8.5.1 pins esbuild@^0.27.0 directly and via bundle-require. typescript confirmed to stay at 6.0.3. Verified: pnpm install --frozen-lockfile succeeds, build/lint pass, and all 369 tests (46 files) still pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Transitive dependency refresh (lockfile-only)Unparked this PR by re-resolving pnpm update --depth Infinity # refreshes transitives, also rewrites package.json specifiers
git checkout -- package.json # revert manifest rewrites — lockfile-only
pnpm install --lockfile-only # re-resolve lockfile against original specifiersMost transitive advisories were already patched upstream and satisfied the parent packages' existing semver ranges — they just hadn't been picked up because No
|
| Total | High | Moderate | Low | |
|---|---|---|---|---|
| Before | 13 | 8 | 2 | 3 |
| After | 2 | 1 | 0 | 1 |
Cleared (11 advisories)
- 7x
undici(viarelease-it@20.2.0→undici@8.3.0→ now8.9.0, ≥8.5.0 required):GHSA-vmh5-mc38-953g,GHSA-38rv-x7px-6hhq,GHSA-vxpw-j846-p89q,GHSA-p88m-4jfj-68fv,GHSA-pr7r-676h-xcf6,GHSA-35p6-xmwp-9g52,GHSA-g8m3-5g58-fq7m brace-expansionGHSA-3jxr-9vmj-r5cp— both instances (via@eslint/js→eslint→config-array→minimatch and via@vitest/coverage-v8→test-exclude), now resolving to2.1.4/5.0.9postcssGHSA-r28c-9q8g-f849(via vitest→vite), now8.5.25(≥8.5.18 required)
Remain (2 advisories — genuine semver ceilings, not fixable by lockfile refresh)
brace-expansionGHSA-mh99-v99m-4gvg(high) — fix requires ≥5.0.8. Path:@vitest/coverage-v8→test-exclude→glob@10.5.0→minimatch@^9.0.4→brace-expansion@^2.0.2.glob@10.5.0's own manifest capsminimatchat^9.0.4, andminimatch@9.0.9capsbrace-expansionat^2.0.2— the fix landed in the5.xmajor line, unreachable withoutglob/minimatchthemselves bumping majors.esbuildGHSA-g7r4-m6w7-qqqr(low) — fix requires ≥0.28.1. Path:tsup@8.5.1→esbuild@^0.27.0(direct, and also viabundle-require).tsup@8.5.1's manifest capsesbuildat^0.27.0, so0.28.1is unreachable without atsupbump.
Both would need a direct-dependency bump (vitest's coverage chain / tsup) to clear — out of scope for this lockfile-only refresh.
Also checked per the parking note, not resolvable here
release-itstays at20.2.0as required (not bumped to 21.x). All 7 undici advisories tied to it are already clear via the transitive resolution above, so no major bump was needed for those.- Looked for the
taradvisories viarelease-it-pnpm→changelogithub→changelogen→c12→giget→tarmentioned when this was parked: in the current tree,release-it@20.2.0's only relevant chain isrelease-it→c12@3.3.3→giget@2.0.0, andgiget@2.0.0does not depend ontarat all (notarpackage appears anywhere inpnpm-lock.yamlornode_modules). Norelease-it-pnpm,changelogithub, orchangelogenpackages are present either.pnpm auditshows no tar-related findings before or after. Flagging the discrepancy in case that context was from a different snapshot — happy to double check if there's a reason to expecttarin the tree.
Verification
typescriptconfirmed to stay at 6.0.3 (pnpm ls typescript)pnpm install --frozen-lockfile— succeedspnpm run build— succeeds (ESM/CJS/DTS all build cleanly)pnpm run lint— clean (tsc + eslint)pnpm test— 369/369 tests passing (46 files), same count as before
Commit: 49e33ba — lockfile-only change (package.json untouched, verified via diff and checksum).
Not merging — leaving this for review/merge as usual.
Consolidates the last three open Dependabot PRs into this branch and fixes the OSV-Scanner failure that was blocking CI on every branch, including scheduled runs on main. GitHub Actions bumps: - pnpm/action-setup v6 -> v6.0.9 (#43) - github/codeql-action v4 -> v4.37.4 (#44) - google/osv-scanner-action v2.3.8 -> v2.5.0 (#45) Security: - nanoid 3.3.16 -> 3.3.18, resolving GHSA-2v37-7h3g-55p8. The advisory is fixed in 3.3.18; the scanner's reported "fixed version" of 3.3.17 is inaccurate, confirmed against the OSV API affected ranges. nanoid is a transitive dev-only dep (postcss > nanoid) and is not shipped in the published package, which contains dist/ only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018S1GGSmwCaX4Nvg9WgUC4a
Consolidates all six open Dependabot PRs into a single change, and fixes the OSV-Scanner failure that was blocking CI on every branch.
Why CI was red
OSV-Scannerwas failing identically on every branch and on scheduled runs ofmain— 16 advisories across 6 dev-only transitive packages pinned inpnpm-lock.yaml. It was never caused by any individual PR; every branch simply inherited the lockfile frommain.Five of the six were already cleared on this branch. The last one was
nanoid.Dependency updates folded in
@types/node25.9.1 → 26.xactions/setup-nodev6 → v7pnpm/action-setupv6 → v6.0.9github/codeql-actionv4 → v4.37.4google/osv-scanner-actionv2.3.8 → v2.5.0Security
nanoid3.3.16 → 3.3.18 — GHSA-2v37-7h3g-55p8nanoidis a dev-only transitive dep (postcss→nanoid). finita ships zero runtime dependencies; the published package containsdist/only.Verification
Run locally against the full CI command set:
pnpm run format:check— passpnpm run lint— pass (tsc --noEmit, test tsconfig, eslint)pnpm test— 369 passed / 46 filespnpm run build && npm pack --dry-run— passpnpm-lock.yamlre-queried against the OSV API, honouringosv-scanner.tomlignores — clean, no unfiltered advisoriesCloses #36, closes #40, closes #41, closes #43, closes #44, closes #45