Repository navigation
build: pnpm 12.14.0 - #1442
Merged
Merged
build: pnpm 12.14.0#1442
Conversation
…document pnpm 11+ leads pnpm-lock.yaml with a YAML document recording the resolved package manager (packageManagerDependencies) and leaves that document out of node_modules/.pnpm/lock.yaml. Byte-comparing the two read every pnpm 12 checkout as a mismatch, so the SessionStart hook would reinstall and rebuild the agent packages at every session start. The comparison now drops a leading `---` document first; a lockfile without one (pnpm 10) compares as before. The advice for a lockfile no install can match was to copy the record over it, which would now delete that document. `pnpm install --lockfile-only --force` rewrites it in pnpm's own form instead (checked under 12.14.0; a plain install leaves it as committed). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- packageManager 10.34.5 -> 12.14.0, in the root and (new) in the standalone social-media-publisher, which had no pin and ran whatever pnpm was global. - onlyBuiltDependencies (removed in pnpm 11) -> allowBuilds. Builds are strict now: an unlisted install script fails the install. The publisher denies core-js's (a funding banner). - verifyDepsBeforeRun: warn. The pnpm 11+ default, `install`, runs a non-frozen install before any `pnpm run`/`exec` that rewrites pnpm-lock.yaml from package.json; node_modules already has two frozen owners (the SessionStart hook and the gate's first task). - lockfiles: only the new leading package-manager document is added; no dependency version changes. - pnpm/action-setup v4 -> v6.1.0, the first release supporting pnpm 12 (the floating v6 tag predates it). - The pr:reply fixture uses pnpm 12's `$ command` script header. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
- FROZEN_INSTALL_ARGS loses --config.confirmModulesPurge=false. Under pnpm 12.14.0 an install that has to recreate node_modules (a pnpm-10 layout, a hoist or virtualStoreDir change) no longer prompts or aborts without a TTY, frozen or plain. Branches before the pnpm 12 move keep their own copy of the hook with the flag. - AGENTS.md: the out-of-sync warning means reinstall frozen, except when its reason is a changed manifest (the frozen install fails there; `pnpm install` updates the lockfile) and in a worktree whose node_modules is a symlink, which always warns and must never install. - pnpm-workspace.yaml: the default `install` mode is non-frozen only outside CI; the removed onlyBuiltDependencies key is silently ignored. - readDepsState: note that pnpm writes the install record even when the install fails on an unlisted build script, so the hook reports that failure once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stvad
added a commit
that referenced
this pull request
Oct 25, 2026
#1444 replaced the esm.sh importmap with same-origin facades in `src/vendor/`, so the "hold React while reactImportMapMode.ts exists" step is gone. A React bump is now taken like any other. If it changes React's exports or browser subpaths, `src/vendor/vendorEntries.test.ts` fails, and the step points at updating the facades to the set it names. Also from master: @journeyapps/wa-sqlite is no longer a direct dependency (PowerSync 2), so it leaves the hold list. The standalone extension pins its own pnpm (#1442), so a pnpm bump updates both pins. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Moves the repo from pnpm 10.34.5 to pnpm 12.14.0. 12.14.0 is 8 days old, so it has cleared the repo's 7-day cooldown; 12.15.0 clears it on 2026-10-28. This is dev tooling only: no dependency changes, and nothing in the app or user data is affected.
What changed
package.json:packageManager: pnpm@12.14.0.pnpm-workspace.yaml:onlyBuiltDependencies(removed in pnpm 11) becomesallowBuilds: {better-sqlite3: true, '@journeyapps/wa-sqlite': true}.strictDepBuildsdefaults to true): a dependency with an install script that isn't listed fails the install. These two are the only ones in the tree, and the pnpm 12 install raised nothing else.onlyBuiltDependencieskey: it gives no error or warning, and its list isn't applied. The comment says so, so it doesn't creep back in.verifyDepsBeforeRun: warn. See below.linkWorkspacePackages,minimumReleaseAge,overrides. When the pinned version is the one running, pnpm 12 fails the command on an unknown key (ERR_PNPM_UNRECOGNIZED_WORKSPACE_SETTINGS); I checked that with a misspelt key.agent-extensions/social-media-publisher(installed on its own, outside the workspace):allowBuilds: {core-js: false}. core-js's postinstall only prints a funding banner, and the global pnpm 11 already failed the install without this entry.packageManager: pnpm@12.14.0. Before, it had no pin, so it ran whatever pnpm was global: 11.17.0 here, the root's pin in CI. Itspnpm-workspace.yamlsays to bump the two pins together.pnpm-lock.yaml(both):packageManagerDependencies, withpnpmand@pnpm/exe12.14.0 and per-platform integrity..github/workflows/*:pnpm/action-setup@v4→@v6.1.0in all 9 places.v6tag still points at 6.0.10.using pnpm v12.14.0.scripts/ensure-deps.mjs: fixes a real break, and drops a flag pnpm 12 no longer needs. Both are described below.The SessionStart hook would have reinstalled at every session start
ensure-deps.mjstreatsnode_modules/.pnpm/lock.yamlas the install record and compares it byte for byte withpnpm-lock.yaml. Under pnpm 12, the record is the lockfile minus its new leading package-manager document;tail -n +184 pnpm-lock.yamlis byte-identical to it.mismatch. Every session would then reinstall and rebuild the agent packages.The fix:
---…---document before comparing. Two newreadDepsStatecases cover it.pnpm install --lockfile-only --force. Tested on three kinds of malformed lockfile: it rewrites each one to the exact bytes pnpm writes, without re-resolving. A plain install, or--lockfile-onlywithout--force, says "Already up to date" and leaves the file alone.--config.confirmModulesPurge=falseis gone from the shared install (FROZEN_INSTALL_ARGS) and from AGENTS.md:node_modulesaborted without a TTY.node_modules(store v10, layout from 10.34.5), apublicHoistPatternchange and avirtualStoreDirchange.verifyDepsBeforeRun: warn, not the new defaultinstallIn pnpm 11+,
pnpm run,pnpm execand implicit bins (pnpm vitest) first check whethernode_modulesmatches the lockfile. By default, when it doesn't, they install. Outside CI, that install is not frozen.package.json, then ranpnpm run dev:who. pnpm first rewrotepnpm-lock.yaml, prunednode_modulesand took about 4s. Its output went to stderr.CI=truethe same install is frozen: it fails on the outdated lockfile and leaves it untouched.That clashes with how the repo reconciles
node_modules:pnpm run checkwould run that install before the gate's own frozen install. A branch whose lockfile was never updated would get it rewritten silently. Today, the gate's frozen install fails on it.warnkeeps pnpm 10's rule of never installing implicitly. It adds one stderr line whennode_modulesreally is out of sync:[WARN] Your node_modules are out of sync with your lockfile. <reason>.touchofpackage.jsonand the lockfile produced no warning, and the lockfile stayed untouched.falsewas lost in measurement noise on a loaded machine, so treat it as unmeasured.pnpm vitest runquietly uses the stale install. With vitest 4.1.12 installed and 5.0.5 locked,pnpm vitest,pnpm exec vitestandpnpm run testeach warned (pnpm vitestwarns twice), then ran 4.1.12. The hook then reinstalled, and the checkout readfresh. Calling the binary directly (npx vitest,node_modules/.bin/vitest) still gives no warning.pnpm install --frozen-lockfile, with two exceptions:pnpm install, because the frozen install fails on it.node_modulesis a symlink to another checkout's always warns: itspackages/*/node_modulesare missing. Installing there writes through the symlink, so never do it.Behaviour changes agents will notice
pnpm run xprints$ <command>on stderr, not> pkg@version x /pathplus> <command>. Stdout carries only the script's output. Nothing inscripts/parses that header. The publish read-back verifier matches URLs, and itspr:replyfixture now uses the new form.node_modules: the hook still reads it as fresh, because the dependency document is unchanged. Until something reinstalls it, everypnpm runwarnsThe value of the allowBuilds setting has changed. The firstpnpm run check, orpnpm install --frozen-lockfile, fixes that.~/Library/pnpm/store/v11. It downloads whatever the new store lacks: 647 of 713 packages, about 16s, the first time here. The oldstore/v10can be pruned by hand later.pnpm installuntil it is listed underallowBuilds, as true or false.ERR_PNPM_IGNORED_BUILDS. An interactive install also writes a placeholder entry intopnpm-workspace.yaml, and so does the global pnpm 11 even without a terminal (seen in the publisher before it had a pin). Replace the placeholder; don't commit it.freshafterwards, while the gate's install keeps failing. That's noted atreadDepsState. CI's frozen install fails on such a commit too.pnpmcommand run in a checkout makes the global pnpm (11.17.0 here) switch to the pinned 12.14.0. It records that switch in the lockfile's package-manager document. A branch pinned to 10 gets no such document.--frozen-lockfile falseis rejected in pnpm 12; use--no-frozen-lockfile. Nothing in the repo uses it.ajv-formatsin the lockfile.pnpm install --fix-lockfilechanges theajv-formats@3.0.1entry, and probably so will the first install that really re-resolves, such as apnpm add(not tested). No version changes:ajvpeer (peerDependencies/peerDependenciesMeta) disappears;(ajv@8.20.0)suffix;ajvmoves fromoptionalDependenciestodependencies.If an unrelated
ajv-formatshunk shows up in a later dependency PR, this is where it comes from.Verified
pnpm installregenerated both with no dependency changes (diffs above). The root lockfile has 0 git or tarball resolutions, so the newblockExoticSubdepsdefault has nothing to block.pnpm packstill rewritesworkspace:^to^0.8.0inagent-dispatch's tarball. For both packages, the file lists and manifests match pnpm 10.34.5's, apart from key order. So the publish job's pinned npm 11.18.0, whose comment says to re-check it when pnpm changes, is unaffected.minimumReleaseAge: 10080stays strict.minimumReleaseAgeStrictdefaults to true when the age is set explicitly; tested with no global config, an immature version fails the install.npm_config_*reads, a tracked.npmrc, apnpmfield inpackage.json, script names that collide with pnpm's new built-ins, hidden scripts.INIT_CWDandnpm_lifecycle_event, whichscripts/pr-reply.mjsreads, are still set inside scripts.pnpm run check:check: PASS, 834 files and 12,293 tests (master's 12,291 plus the 2 new hook cases). Run on the final head.pnpm run buildpasses, includingcheck-dist-exports.pnpm agent types --force), both pass:pnpm -C agent-extensions/social-media-publisher run check: 6 tests.pnpm -C agent-extensions/strength-tracker run check: 264 + 150 tests.Not covered
install --frozen-lockfile,run …,pack).node_modules/.pnpm-storewhen no parent directory accepts hard links (a sandbox case).🤖 Generated with Claude Code