chore(deps): 7-day install quarantine, dependency updates, 46 → 2 advisories (1.1.3) - #6
Merged
Merged
Conversation
…visories Set `minimumReleaseAge: 10080` in pnpm-workspace.yaml so pnpm refuses any version published less than 7 days ago. Compromised releases are typically pulled from npm within hours; this keeps them out of the lockfile entirely. Enabling it required moving pnpm 11.1.1 -> 11.18.0. Earlier versions abort with ERR_PNPM_MISSING_TIME on packages with large metadata documents (es-toolkit, @solana/*, vitest): they fetch the registry's abbreviated metadata, which omits the `time` field the age filter reads. Bumped both `packageManager` and the pnpm/action-setup pin in CI so they stay in sync. The Dockerfile already goes through corepack and picks it up on its own. Ran `pnpm update` on top, then patched what was left with two overrides: - ws@>=8.0.0 <8.21.0 -> ^8.21.1. Memory-exhaustion DoS from tiny fragments and uninitialized memory disclosure; arrives via viem/walletconnect at 8.18.0. Scoped to the 8.x line so 7.5.13 (already patched, and required by @walletconnect/jsonrpc-ws-connection) stays put. - axios -> ^1.18.1. Nine advisories against <1.18.0, via @coinbase/cdp-sdk. Also moved @testing-library/jest-dom to 7.0.0. The update had landed on 6.10.0, which npm deprecates as a minor carrying breaking changes. 7.0.0 needs Node >=22 and @testing-library/dom >=10 <11; we have Node 24 in CI and Docker, and dom 10.4.1. Two advisories remain open, both inapplicable here: - react-router RSC-mode CSRF bypass. The fix is react-router 8, a major. This app is a plain SPA (BrowserRouter/Routes/Route, no RSC, no data router), so the vector doesn't exist. - uuid bounds check in v3/v5/v6 when a caller supplies `buf`. Transitive through @metamask/utils; forcing uuid 11 breaks that chain, and nothing in the tree calls v3/v5/v6 with its own buffer. wagmi stays on 2.19.5, which is the last release of the 2.x line (254 days old). RainbowKit 2.2.11 still peers on wagmi ^2.9.0 and has no 3.x branch or prerelease, so moving up means replacing RainbowKit outright. Verified: typecheck clean, 64 tests pass, build OK, --frozen-lockfile stable. `pnpm lint` still reports its 18 pre-existing errors; the CI note was updated from the stale count of 12. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Patch release: no behaviour change, only the dependency and supply-chain work in the previous commit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Correct the previous bump. package.json had drifted behind the tags: it still read 1.1.1 on main while v1.1.2 was already tagged and released, so this release lands on 1.1.3. No behaviour change — the version string is consumed by vite.config.ts, which injects it as __APP_VERSION__ for the release link in the footer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This branch was cut from a stale local main and missed 12 commits (analytics, Stakely footer, page title/favicon, app version fixes). Only conflict was the version line in package.json: main had moved to 1.1.2 to match the v1.1.2 tag, so the merge keeps 1.1.3. Dependency ranges were byte-identical on both sides, so the lockfile merged clean and none of the audit work needed redoing. Re-verified on the merged tree: typecheck clean, 64 tests pass, build OK, pnpm audit still 2 advisories. The lint count in the CI note goes 18 -> 21; the three new errors come from the code merged in from main, not from this branch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Member
Author
|
To use Kilo from GitHub you first need to link your GitHub account to Kilo. Link your Kilo account to continue. After linking, mention me again in this issue or pull request. |
No code change. Kilo deduplicates reviews per commit SHA and its previous two runs on this branch failed on its own provider rate limit, so a fresh SHA is the documented way to ask for another pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Files Reviewed (4 files)
Reviewed by gpt-5.6-terra · Input: 190.8K · Output: 6.7K · Cached: 996.6K |
iicc1
approved these changes
Jul 31, 2026
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.
What this does
Three things, in order: turns on a 7-day install quarantine, updates dependencies, and patches what was left over with overrides.
pnpm auditgoes from 46 advisories (14 high / 29 moderate / 3 low) down to 2 (1 high / 1 moderate), both inapplicable to this app. Dependabot currently reports 43 onmain.7-day quarantine
minimumReleaseAge: 10080inpnpm-workspace.yaml: pnpm refuses any version published less than a week ago. Compromised releases are usually pulled from npm within hours, so this keeps them out of the lockfile entirely.Verified in practice: viem 2.55.10 (4.1 days old) is held back and 2.55.8 (8.3 days) is installed instead; axios 1.19.0 (1 day) is held back, 1.18.1 goes in.
Expected side effect:
pnpm outdatedwill list packages that are merely in quarantine, not unmaintained. That's documented next to the setting.Requires pnpm >= 11.18.0
Enabling this forced a bump from pnpm 11.1.1. Earlier versions abort with
ERR_PNPM_MISSING_TIMEwhen resolving packages with large metadata documents (es-toolkit,@solana/*,vitest): they fetch the registry's abbreviated metadata, which omits thetimefield the age filter reads.Both
packageManagerand thepnpm/action-setuppin in CI were bumped together so they can't drift apart. The Dockerfile already goes through corepack and picks it up on its own.Overrides added
ws@>=8.0.0 <8.21.0→^8.21.1@walletconnect/jsonrpc-ws-connectiondepends on it.axios→^1.18.1<1.18.0(inherited proxy in the Node adapter, prototype pollution, runaway recursion informDataToJSON). Reaches us through@coinbase/cdp-sdk.@testing-library/jest-dom→ 7.0.0pnpm updatehad landed on 6.10.0, which npm deprecates as a minor carrying breaking changes. 7.0.0 needs Node >=22 and@testing-library/dom >=10 <11; we satisfy both (Node 24 in CI and Docker, dom 10.4.1).What stays open, and why
react-router— RSC-mode CSRF bypass. The fix is react-router 8, a major. This app is a plain SPA (BrowserRouter/Routes/Route, no RSC, no data router), so the vector doesn't exist here.uuid— missing bounds check in v3/v5/v6 when the caller supplies its ownbuf. Transitive through@metamask/utils; forcing uuid 11 breaks that chain, and nothing in the tree calls v3/v5/v6 with its own buffer.wagmi stays on 2.19.5
Not by choice — it's the last release of the entire 2.x line (254 days old, published the same day as wagmi 3.0.0). RainbowKit 2.2.11 still peers on
wagmi: ^2.9.0, has no 3.x branch or prerelease, and the upstream discussion has had no official answer since November 2025.Worth keeping in mind: until RainbowKit migrates, every new advisory in that subtree will need a manual override — which is exactly what happened here with
wsandaxios. Getting out means replacing RainbowKit, not bumping a dependency.Version
Bumps to 1.1.3. Patch release: no behaviour change, only the dependency and supply-chain work described above.
Note that
package.jsonhad drifted behind the tags — it still read1.1.1onmainwhilev1.1.2was already tagged and released back in June, hence 1.1.3. The string is consumed byvite.config.ts, which injects it as__APP_VERSION__for the release link in the footer, sopackage.jsonis the only place it needs setting. That footer link will 404 until av1.1.3release is cut.Verification
pnpm typecheck— cleanpnpm test— 64 tests across 6 files, all passpnpm build— OKpnpm install --frozen-lockfile— stablepnpm lintstill reports its 18 pre-existing errors (10no-explicit-any, the restset-state-in-effect), non-blocking in CI. The workflow comment was updated from its stale count of 12.🤖 Generated with Claude Code