Conversation
Yarn 1 matches resolution paths from the root of the dependency tree, so `@rollup/pluginutils/picomatch` and `micromatch/picomatch` never matched anything: the real chains are `@rollup/plugin-replace -> @rollup/pluginutils -> picomatch` and `@semantic-release/git -> micromatch -> picomatch`. They are not worth repairing with a `**/` prefix. @rollup/pluginutils is in the tree twice — 5.0.3 wants picomatch ^2.3.1, while 5.4.0 (via @rollup/plugin-typescript) wants ^4.0.2 — so a working `**/@rollup/pluginutils/picomatch` would force both down to 2.3.2 and break plugin-typescript. Pinning the full path instead would plant the same mine for whenever plugin-replace moves to a newer pluginutils. Nothing is lost by removing them: the only consumers of the 2.x line ask for ^2.3.1, and 2.3.2 is the latest 2.x release, so the patched version is what yarn picks anyway. Removing them and reinstalling leaves yarn.lock unchanged byte for byte.
CLAUDE.md claimed no test runner was configured. Vitest is set up and runs 55 tests across 12 files, both locally and in CI, on every push and PR. Also documents the two conventions a contributor can get wrong: randomised algorithms are only tested on one- or two-element inputs (a larger input can hang CI forever), and the assertions target each joke's documented contract rather than sortedness.
Dependabot closed #14 itself with "these dependencies are updatable in another way", triggered by the rescan right after #15 landed. That was wrong: none of the six bumps had actually been applied, so the work was simply lost. Redoing it by hand. - @semantic-release/changelog 6.0.3 -> 7.0.0 (major, native ESM) - @semantic-release/git 10.0.1 -> 11.0.1 (major, native ESM) - @types/node 26.1.1 -> 26.2.0 - rollup 4.62.2 -> 4.62.4 - semantic-release 25.0.7 -> 25.0.9 - typescript 5.1.6 -> 5.9.3 Both majors declare `engines: node ^22.22.2 || >=24.15`, and @semantic-release/git genuinely needs Node 22 — it uses `Set.prototype.union`, absent before then. That is satisfied where it matters: the plugins only ever execute in release.yml, which runs Node 22. ci.yml stays on Node 20 deliberately, since it tests the package near the lower bound of the supported range and never runs semantic-release; yarn does not enforce engines without --engine-strict, so installation there is unaffected. TypeScript 5.9.3 rebuilds types/index.d.ts byte for byte identically. The dependabot config already holds TypeScript at 5.x, so this stays within it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three unrelated cleanups that came out of the Dependabot sweep.
1. Apply the dev-dependency bumps from the closed #14
Dependabot closed #14 on its own with "Looks like these dependencies are
updatable in another way, so this is no longer needed", at the exact minute it
rescanned the repo after #15 merged. That was a misfire — none of the six bumps
had been applied, so the update was silently dropped. Redone by hand:
@semantic-release/changelog@semantic-release/git@types/noderollupsemantic-releasetypescriptBoth majors declare
engines: node ^22.22.2 || >=24.15, and@semantic-release/gitreally does need Node 22 — it uses
Set.prototype.union, which does not existearlier. Verified directly: the plugin fails to import on Node 20 with
TEXT_ENCODINGS.union is not a functionand imports cleanly on 22 and 24.That requirement is met where it matters. The plugins only ever execute in
release.yml, which runs Node 22.ci.ymlstays on Node 20 on purpose — itexercises the package near the lower bound of the supported range and never
runs semantic-release. Yarn does not enforce
engineswithout--engine-strict, so installing on Node 20 is unaffected, andyarn install --frozen-lockfilepasses there.TypeScript 5.9.3 regenerates
types/index.d.tsbyte for byte identically. Thedependabot config already pins TypeScript to 5.x, so this stays inside it.
2. Drop two resolutions that never applied
@rollup/pluginutils/picomatchandmicromatch/picomatchnever matchedanything — Yarn 1 resolves resolution paths from the root of the tree, and the
real chains are
@rollup/plugin-replace -> @rollup/pluginutils -> picomatchand
@semantic-release/git -> micromatch -> picomatch.They are deliberately removed rather than repaired.
@rollup/pluginutilsappears twice in the tree: 5.0.3 wants
picomatch@^2.3.1while 5.4.0 (via@rollup/plugin-typescript) wants^4.0.2, so a working**/@rollup/pluginutils/picomatchwould drag both down to 2.3.2 and breakplugin-typescript. Pinning the full path merely delays the same trap until
plugin-replace moves to a newer pluginutils.
Nothing is lost: the only consumers of the 2.x line ask for
^2.3.1, and 2.3.2is the newest 2.x release, so yarn already picks the patched version. Removing
both and reinstalling leaves
yarn.lockunchanged byte for byte.3. Fix the testing section of CLAUDE.md
It claimed no test runner was configured. Vitest runs 55 tests across 12 files,
locally and in CI. Also documents two things easy to get wrong: the randomised
algorithms are only tested on one- or two-element inputs (anything larger can
hang CI forever), and assertions target each joke's documented contract rather
than sortedness. Adds the Node 20 vs 22 split between the workflows, since the
failure mode is otherwise cryptic.
Verification
yarn buildpasses,types/index.d.tsunchanged.yarn test— 55 tests across 12 files, all passing.yarn install --frozen-lockfileclean on Node 20.