Bump pnpm to v11 and ignore unfixable quick-xml advisories#72
Conversation
Greptile SummaryThis PR migrates the JavaScript toolchain from pnpm 9 to pnpm 11 across all three package roots (
Confidence Score: 5/5Safe to merge — the pnpm 11 migration is complete and consistent across all three package roots, CI, and the Dockerfile, with no configuration left in the deprecated package.json pnpm field. Every changed file is mechanical tooling configuration (action version bumps, pnpm workspace settings, advisory ignores with documented rationale). The overrides and auditConfig settings are faithfully preserved in their new locations, allowBuilds covers the same native deps pnpm 9 built by default, and the quick-xml advisory ignores are temporary and well-commented. The drive-by Dropdown and gitignore fixes are small and correct. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[pnpm 11 reads\npnpm-workspace.yaml] --> B{Per-root\npnpm-workspace.yaml}
B --> C[ui/pnpm-workspace.yaml\noverrides + auditConfig.ignoreGhsas\n+ allowBuilds: ext-apps, esbuild, msw]
B --> D[docs/pnpm-workspace.yaml\nallowBuilds: esbuild, sharp, unrs-resolver]
B --> E[deploy/tests/pnpm-workspace.yaml\nallowBuilds: cpu-features, esbuild,\nprotobufjs, ssh2]
F[pnpm 11 ignores\npackage.json pnpm field] --> G[ui/package.json\nremoved: overrides + auditConfig.ignoreCves]
G --> C
H[Dockerfile] --> I[COPY pnpm-workspace.yaml\nalongside package.json\nfor ui/ and docs/]
J[cargo audit / cargo deny] --> K[.cargo/audit.toml + deny.toml\nignore RUSTSEC-2026-0194\nignore RUSTSEC-2026-0195]
K --> L[quick-xml DoS\nDoS-only, no fix path yet\nsamael + calamine + xberg]
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[pnpm 11 reads\npnpm-workspace.yaml] --> B{Per-root\npnpm-workspace.yaml}
B --> C[ui/pnpm-workspace.yaml\noverrides + auditConfig.ignoreGhsas\n+ allowBuilds: ext-apps, esbuild, msw]
B --> D[docs/pnpm-workspace.yaml\nallowBuilds: esbuild, sharp, unrs-resolver]
B --> E[deploy/tests/pnpm-workspace.yaml\nallowBuilds: cpu-features, esbuild,\nprotobufjs, ssh2]
F[pnpm 11 ignores\npackage.json pnpm field] --> G[ui/package.json\nremoved: overrides + auditConfig.ignoreCves]
G --> C
H[Dockerfile] --> I[COPY pnpm-workspace.yaml\nalongside package.json\nfor ui/ and docs/]
J[cargo audit / cargo deny] --> K[.cargo/audit.toml + deny.toml\nignore RUSTSEC-2026-0194\nignore RUSTSEC-2026-0195]
K --> L[quick-xml DoS\nDoS-only, no fix path yet\nsamael + calamine + xberg]
Reviews (5): Last reviewed commit: "Fix dropdown" | Re-trigger Greptile |
- pnpm 9 -> 11 in all workflows; pin packageManager pnpm@11.9.0 in ui/, docs/, and deploy/tests package.json - Migrate ui settings (overrides, auditConfig) from the package.json "pnpm" field, which pnpm 11 no longer reads, to ui/pnpm-workspace.yaml - Add allowBuilds to each package root: pnpm 11 blocks dependency build scripts by default (sharp, esbuild, ssh2, msw, ...) - Ignore RUSTSEC-2026-0194/0195 (quick-xml < 0.41 DoS) in audit.toml and deny.toml: samael, calamine, and the xberg tree all pin pre-0.41 quick-xml and none has a fixed release yet; drop when upstream bumps land - Add the ui/public/wasm/.gitignore that vendor-wasm.mjs says should exist; without it the vendored pyodide/duckdb artifacts get committed
8cb2e17 to
d22f8f4
Compare
- pnpm 11 uses the node:sqlite built-in, which Node 20 lacks; bump node-version to 24 everywhere (Frontend, Security Audit, Documentation, and WASM Build jobs all crashed with ERR_UNKNOWN_BUILTIN_MODULE) - Docker Build failed with ERR_PNPM_LOCKFILE_CONFIG_MISMATCH because the dependency-caching COPY layer lacked the new pnpm-workspace.yaml files (where the overrides now live); also corepack-prepare pnpm@11 instead of 9 - Bump every action pinned to a node20 runtime to its current node24 major: checkout v7, setup-node v6, cache v6, pnpm/action-setup v6, upload-artifact v7, download-artifact v8, buildx v4, build-push v7, metadata v6, login v4, setup-helm v5, wrangler v4, gh-release v3, setup-uv v7, deploy-pages v5, upload-pages-artifact v5
pnpm 9 → 11
pnpm/action-setupsteps in CI now useversion: 11, andui/,docs/, anddeploy/testspin"packageManager": "pnpm@11.9.0"so local pnpm (10+) self-switches to the same version."pnpm"field in package.json, so the ui securityoverridesandauditConfig.ignoreCvesmoved toui/pnpm-workspace.yaml. Without this migration the overrides would silently stop applying and the CIpnpm auditjob would fail on the two ignored CVEs.allowBuildslist preserving pnpm 9 behavior:@modelcontextprotocol/ext-apps/esbuild/msw(ui),esbuild/sharp/unrs-resolver(docs),cpu-features/esbuild/protobufjs/ssh2(e2e tests).lockfileVersion: 9.0files in frozen mode.Verified locally with pnpm 11.9.0:
CI=true pnpm install(frozen) in all three roots,pnpm audit --audit-level=highexits 0 in ui (migrated ignoreCves honored), andpnpm buildin ui succeeds.cargo audit blockers
cargo audit(andcargo deny check advisories) fail on RUSTSEC-2026-0194 and RUSTSEC-2026-0195: quick-xml < 0.41 DoS advisories (quadratic duplicate-attribute check, unbounded namespace-declaration allocation), published 2026-06-29 and fixed only in quick-xml 0.41.0.There is no upgrade path yet — every dependent pins an older series and is already at its latest release:
^0.37.2(SAML SSO; latest is 0.0.21 and git master still pins 0.37)^0.39(latest is 0.35.0)^0.40(all latest)Both advisories are ignored in
.cargo/audit.tomlanddeny.tomlwith comments noting they are DoS-only (no memory unsafety) and should be dropped as soon as upstream releases pick up quick-xml 0.41. Verifiedcargo auditandcargo deny check advisoriesboth pass.Drive-by fix
scripts/vendor-wasm.mjsclaims its outputs are "gitignored via ui/public/wasm/.gitignore", but that file didn't exist, so running a ui build left ~30 vendored pyodide/duckdb artifacts ready to be swept into a commit. Added the missing.gitignore.🤖 Generated with Claude Code