I'm always amazed at how the Node ecosystem manages to overcomplicate simple things that used to work perfectly. package.json was one stable, proven system that worked, while Python had half a dozen semi-compatible approaches to package management (until uv solved it).
Enter node/corepack's introduction of adding packageManager in each package.json. The idea is that to enforce reproducibility, you have to pin not just your packages, but also your package manager - and not just to a major version, but right down to the patch version.
In a kind of micro-management style, node/corepack now takes control from the package managers. Instead of trusting them not to break reproducibility, they introduce "phantom" package managers based on which directory you're in.
it reports "9.10.0" when I'm in one folder and "9.15.2" when I'm in another directory. This totally breaks how "bin" files are supposed to work on UNIX/Linux/macOS. One "bin" file should equal one version. So what’s in the file? It seems to be a wrapper calling corepack.cjs: