Bugs affecting complex pnpm workspaces #174
Replies: 6 comments 1 reply
|
Thanks for the detailed repros — the CI matrix against pnpm was really helpful. Opened #175 with fixes for all three:
Manually verified each fix against your repro dirs; all three install correctly now. Should land on the next beta. Written with Claude. |
|
Nice! Maybe a wider pnpm-workspace.yaml compatibility pass would be good if you haven't done one already. There's more stuff in there that might be missed. I'll do another pass when the next release is out and get back to you. |
|
I found one more thing I'd consider a bug, and a blocker from migrating from pnpm to aube. Documented at the same URL, with a new set of CI checks. https://github.com/stevelandeydescript/aube-bug-repros In a multi-package monorepo with a root package.json file, pnpm will hoist dependencies from root package.json regardless of the other hoisting settings. There are other resolution differences from pnpm, but nothing I'd consider a "bug" per se. |
btw, was very happy to see this! seems like we're getting there and this is a great stress test for parity also, once we get it working we should look at perf—we've been identifying perf issues with certain projects for sure. If nothing else I'll be curious how it compares. |
|
One more bug:
Repro in the usual place. With a workaround for that (just don't use |
|
Got this one too — #249. Actually two bugs stacked behind your symptom:
Verified against your On the 30% perf gap — yes, please do send a profile when you can. The cleanest thing would be a samply profile of cargo install samply
samply record -- aube install --frozen-lockfileand attach the Written with Claude. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
I work in a monorepo that uses nearly every feature of pnpm and has a transitive dependency graph of 4,000+ packages. I kicked the tires on aube using coding agents because hey 3x would be a nice speedup. I made a lot of progress, but found some issues.
On the UX side: aube doesn't read things like patches and overrides from pnpm-workspace.yaml. I prefer to put them there rather than package.json so I can write long comments about why patches and overrides are needed. I can copy these things to package.json as a workaround, but I'd prefer not to.
On the correctness side, I have two apparent bugs which I will say up front I verified using agents and not my own brain. Caveat lector, slop ahead. Despite the LLM-generated nature of the bug reports, I did my best to create minimal repros here (using agents), visible in CI results: https://github.com/stevelandeydescript/aube-bug-repros
This is all on beta 9. Maybe that's out of date by now, with the pace you work at!
🤖 begin slop 🤖
npm: alias + override conflict. When a dependency uses an
npm:alias (e.g."immer": "npm:@descript/immer@6.0.9-patched.1"), aube incorrectly applies a version-range override meant for the unaliased package. The overrideimmer@>=7.0.0 <9.0.6should not match@descript/immer@6.0.9-patched.1(different package, version outside range), but aube replaces the alias target withimmer@11.1.4. pnpm handles this correctly. (CI run — aube jobs fail, pnpm jobs pass)pnpm-lock.yaml only records host-platform optional deps. When aube generates or updates
pnpm-lock.yaml, it only includes optional dependency entries for the current platform. pnpm includes all platforms. A lockfile generated on Linux is missing@esbuild/darwin-arm64,@oxlint/binding-darwin-arm64, etc., so macOS developers get "Cannot find native binding" errors. (CI run — aube's lockfile fails the darwin-arm64 assertion; the macOS install-from-Linux job fails atnpx esbuild --version; pnpm comparison passes)Repro repo with self-contained test cases for all three bugs: https://github.com/stevelandeydescript/aube-bug-repros
Bug 1 is the harder blocker — we use
npm:aliases for patched forks of several packages. Bug 2 can be worked around by using pnpm to generate the lockfile and aube to install from it, but only if bug 1 is fixed (since the linker also ignores the alias).🤖 end slop 🤖
All reactions