chore(deps): land the Renovate backlog as one validated sweep#353
Conversation
…ckfile sharp 0.35.3 ships per-condition `types` entries in its own exports map (`./dist/index.d.mts` / `./dist/index.d.cts`), which is exactly what the local patch bolted onto 0.35.0. Keeping it would only strand `patchedDependencies` on a version no longer in the tree — pnpm fails that outright with ERR_PNPM_UNUSED_PATCH. The lockfile is regenerated here rather than carried from the bot branches: the patch-updates change moved the `overrides` block without a matching lockfile, so every frozen install died on ERR_PNPM_LOCKFILE_CONFIG_MISMATCH.
`check-site.mjs` pins the astro version it has audited, so the bump and the
guard have to move together — otherwise the guard rejects the very release it is
meant to certify ("Astro must stay on the audited release").
Note this does not clear the website's three high-severity advisories. Those sit
in transitive `sharp` (<0.35.0, libvips CVEs) and `svgo` (4.0.0-4.0.1), not in
astro itself, and need their own resolution pass.
…geManager The root manifest declares the authoritative pnpm via `packageManager`, and each Dockerfile re-pins it with `corepack prepare`. Nothing moved those together, so a dependency bump left the images building `--frozen-lockfile` under a pnpm that did not write the lockfile. No deterministic gate could see it: `pnpm validate` runs the local pnpm and never reads a Dockerfile, so the drift only surfaces once the Docker Release workflow builds an image. Also widens the sharp declarations guard to assert its own stated intent. Declarations must be REACHABLE through the exports map; the assertion had pinned the flat `exports["."].types` literal that the now-deleted local patch produced. sharp 0.35.3 exposes them per condition instead, giving ESM and CJS separate declaration files, and the guard now accepts either shape and checks the files actually exist. `build:clean` passing without the patch is the ground truth that NodeNext resolution still works. The typebox snapshot is version-keyed by design and never cross-compared, so the 1.3.6 file is committed and the unreachable 1.2.8 one retired. Its bytes are identical to 1.2.8's — the parity the test exists to prove.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
Description
Consolidates the six Renovate PRs that carried real value into one validated change, so the backlog lands as a single reviewable diff and a single CI run instead of six stale ones. Every commit is scoped to one concern, so a revert stays surgical.
Supersedes #286, #287, #336, #337, #338, #340.
chore(deps): update github actionsactions/checkout,actions/setup-node,github/codeql-action,docker/*SHA pinschore(deps): update docker imagesnode:22-bookworm-slim+nginx:alpinebase digestsfix(deps): update patch updates@clack/core1.4.3, iconv-lite 0.7.3, impit 0.14.3, linkedom 0.18.13, lru-cache 11.5.2, p-queue 9.3.3, vite 8.1.5, pnpm 10.34.5chore(deps): update pnpm override typebox to 1.3.6pnpm.overrides.typeboxchore(deps): drop the obsolete sharp exports patch…chore(deps): move the website to astro 7.1.0 and tailwind 4.3.3test(architecture): pin the Dockerfile corepack pnpm version…Three things the bot branches could not do on their own
#336 shipped no lockfile. Renovate's artifact step failed, so the
overridesblock moved withoutpnpm-lock.yamland every frozen install died onERR_PNPM_LOCKFILE_CONFIG_MISMATCH. The lockfile is regenerated here.The sharp patch had to go. Bumping sharp to 0.35.3 orphaned
patches/sharp@0.35.0.patch, which pnpm rejects outright withERR_PNPM_UNUSED_PATCH. The patch existed only to add atypescondition to sharp'sexportsmap, and 0.35.3 ships that natively, so it is deleted rather than rebased. One less local patch to carry.Deleting it surfaced a guard asserting the patch's exact output:
packages/agent's architecture test requiredexports["."].types === "./lib/index.d.ts". Its own stated intent is that declarations be reachable through the exports map so TypeScript NodeNext does not scan ancestornode_modules— and 0.35.3 satisfies that better, publishingtypesinside each condition so ESM and CJS get separate declaration files. The guard now accepts either shape and additionally checks the declaration files exist, rather than pinning a literal that turns any upstream restructuring into a false failure.build:cleanpassing with the patch gone is the ground truth that resolution still works.The astro guard blocks its own bump.
website/scripts/check-site.mjsasserts the exact astro version it has audited, so the version and the guard must move together or the guard rejects the release it is meant to certify.New guard: Dockerfile pnpm pin
#336 moved root
packageManagertopnpm@10.34.5, but the fourcorepack prepare pnpm@…pins inDockerfile,Dockerfile.install, andDockerfile.webstayed at10.34.4— an image would then run--frozen-lockfileunder a pnpm that did not write the lockfile.pnpm validatenever reads a Dockerfile, so this drift is invisible to every deterministic gate and surfaces only in the Docker Release workflow, the same blind spot as the@comis/observability-otelCOPY-list drift.test/architecture/dockerfile-pnpm-version.test.tsmakes it a static, cross-platform invariant caught undertest:coverage.typebox snapshot
tool-registry-parity.test.tskeys its snapshot by TypeBox version and never cross-compares, so the bump writestool-registry.typebox-1.3.6.snap. Its bytes are identical to the 1.2.8 snapshot — exactly the parity the test exists to prove, i.e. 1.3.6 alters not a single generated tool schema. The 1.2.8 file is unreachable once the override moves, so it is retired rather than left to accumulate per bump.Deliberately not included
#343 (
@hono/node-server2.0.12) is closed, not merged.@hono/node-wshas published no 2.x — latest is 1.3.1, still declaringpeerDependencies: { "@hono/node-server": "^1.19.11" }. Both are pinned together inpackages/comisandpackages/gateway, so the bump puts an unsatisfiable peer in the published manifest: pnpm warns,npm installfails withERESOLVE, and the installer's bundled-dependency repair pass dies — the regression #350 just fixed. The advisory stays open until upstream ships a compatible@hono/node-ws.The website's three high-severity advisories remain open. They are transitive —
sharp(<0.35.0, libvips CVEs) andsvgo(4.0.0–4.0.1) under the astro tree — so astro 7.1.0 does not clear them despite the[security]label on #340. They need their own resolution pass, kept out of a dependency-cleanup PR.#311 and #312 (lock-file maintenance) are closed as stale churn. No security content, and both were cut against lockfiles main has moved past twice. Renovate will regenerate them against this tip.
Related Issue
N/A: dependency-manifest, lockfile, CI-pin and Dockerfile-pin maintenance consolidating existing bot PRs. The one behavior-adjacent edit is the new architecture guard plus widening a stale assertion in an existing guard; no runtime source changes.
Type of Change
ERR_PNPM_LOCKFILE_CONFIG_MISMATCH) and the astro bump (self-blocking version guard)Checklist
pnpm validate)docs/**for every version moved; no doc pins these (release versions were de-pinned repo-wide), so no doc change is dueN/AreasonRED Test Proof
test/architecture/dockerfile-pnpm-version.test.tsagainst the unfixed Dockerfiles, before moving the pins:The sharp guard's RED state, from the first full
pnpm validateafter the patch was deleted:Both green after the fixes, in a full run:
Evidence and Residual Risk
pnpm validate(docs:check,build:clean,cycles,cycles:refs,lint:security,test:coverage) pluswebsite && npm run validate; both architecture guards shown RED then GREENbuild:cleanpnpm validateis the cross-platform floor, not the full surface. The Docker image builds, the*.linux.test.tstier (real-bwrap, skipped on macOS) and the integration/e2e/tarball tiers are covered by this PR's CI jobs, not locally. The Docker jobs matter here because both the base-image digests and the corepack pnpm pins changed.sharplibvips CVEs,svgoremoveScripts) are untouched by this PR and remain open.@hono/node-serverstays on 1.19.15 with its advisory unresolved, because no@hono/node-wsaccepts 2.x. Revisit when upstream publishes one.^/~was introduced, so the supply-chain invariants inCLAUDE.mdare preserved and their guard tests pass.