chore(deps): bump the all-dependencies group across 1 directory with 6 updates - #369
Conversation
clestons
left a comment
There was a problem hiding this comment.
❌ REQUEST_CHANGES — AAStarCommunity/SuperPaymaster#369 [2-round(依赖 bump)]
锁文件本身是干净的:全部 resolution 都是 sha512 integrity,没有任何 registry 切换或明文 http://(registry.npmmirror / registry.npm.taobao / http:// 全仓 diff 计数 = 0),viem / abitype / ox 都按新 TS 版本重解析了 peer,前后一致。
但这一组 6 个更新里,有一个是大版本:
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",而它同时踩中了两件本该拦住它的机制,两件都没响。
🔴 ① 六个绿勾没有一个覆盖被改的这个包
PR 上的 checks:Scan for Private Keys / Stage 1 — solhint + build (EIP-170) / Stage 2 — forge test + fuzz / auto-merge / cla-check / test —— 全是 Foundry/Solidity + 密钥扫描 + CLA。
我把 head 上全部 7 个 workflow 逐个拉下来数过:
abi-docs / check-secrets / ci-required-shim / security / test / dependabot-auto-merge / cla
→ 提到 "x402" 的:0 个
→ 跑 tsc / typecheck / vitest / pnpm test 的:0 个
abi-docs.yml 确实用 pnpm,但它跑的是 forge build + pnpm gen:abi-docs:check(仓库根),和这个包无关。
而这个包自己是有那些脚本的:
"build": "tsc", "typecheck": "tsc --noEmit", "test": "vitest run"三条都在,只是从来没有人在 CI 里跑。 于是一次 TypeScript 大版本升级(strict: true、moduleResolution: bundler、declaration: true 的一个包)在零验证的情况下走向 main —— 而这个包是 x402-facilitator:settle.ts / quote.ts / verify-sig.ts / hmac-challenge.ts,签名校验和结算。
最低限度的要求:在这个 PR 上跑一次
pnpm -F x402-facilitator-node install && pnpm -F x402-facilitator-node typecheck && pnpm -F x402-facilitator-node test把输出贴上来。更好的做法是顺手给它加一个 Node job —— 否则下一个依赖 PR 还是这样。
🔴 ② 仓库自己那道「major 必须人工过目」的闸,对分组 PR 不响
dependabot-auto-merge.yml 写得很清楚:
# major version bump: label for manual review, never auto-merge.
- name: Label major update for manual review
if: steps.meta.outputs.update-type == 'version-update:semver-major'
run: gh pr edit "$PR_URL" --add-label "dependencies,major-update"而这个 PR 的实际状态:
labels: ["dependencies", "javascript"] ← 没有 major-update
autoMergeRequest: null ← 也没排上 auto-merge
reviews: [] ← 也没有自动 approve
三个条件步骤一个都没执行 —— 也就是说 steps.meta.outputs.update-type 既不是 major 也不是 patch/minor。分组更新(the all-dependencies group … with 6 updates)落在了这三条判据的缝里。
今天这个缝是朝安全那边掉的(什么都没自动合),这点要说清楚,不是在报一个正在冒烟的洞。但净效果是:那道专门为「major 要人工看」而设的闸,对 dependabot 现在默认使用的分组模式是瞎的 —— 而这个 PR 就是证据:它带着一个 TS 大版本,标签上却只有 dependencies / javascript,任何按 major-update 标签筛 PR 的人都看不到它。
改法:给那个 workflow 补一条兜底 —— update-type 为空(分组 PR)时,一律走「打标签 + 不自动合」;或者用 steps.meta.outputs.dependency-names 里逐个包的版本变化自己判一次。
一条建议
如果只是想让这 5 个 minor/patch 尽快进去,最省事的是让 dependabot 把 typescript 从分组里摘出去(groups.*.exclude-patterns 或给它单独一个 group)—— 大版本单独一个 PR,上面那道闸就能正常认出它,人也知道该盯哪一个。
本轮实际跑了什么(不虚标)
- R1a/R1b(DeepSeek-v4-flash):各 0 条,双双判
trivial/clean。这次是漏,不是对 —— 我按依赖 PR 的规矩把package.json和锁文件里被 bump 的那几个包的行一起喂进去了,"typescript": "^6.0.3" → "^7.0.2"就在它眼前,它没识别出这是大版本。(它还把锁文件说成package-lock.json,而这个仓库用的是pnpm-lock.yaml。) - 我自己(工具实证):
gh pr checks列出 6 个绿勾并逐个看清是哪些 job ·gh api .../git/trees?recursive=1+ 逐文件 base64 解码,统计 7 个 workflow 里x402/tsc|typecheck|vitest|pnpm test的出现次数(0 / 0)· 读该包package.json确认build/typecheck/test三个脚本都在 · 读tsconfig.json(strict/bundler/declaration)·gh pr view --json labels,autoMergeRequest,reviews拿到实际标签与自动合并状态,据此判定三个条件步骤都没执行 · 读dependabot-auto-merge.yml全文核对三条判据 · 全 diff grepregistry.npmmirror|registry.npm.taobao|http://= 0。 - R2/R3/R4 未跑 —— 依赖 bump,按既定规则不跑 Codex PK;两条 finding 都是
gh api+ grep 直接可判的事实,没有需要对抗验证的推断。
PR-Daemon v4 · R1a/R1b=deepseek-v4-flash · R2/R3/R4 未跑(依赖 bump)
…6 updates Bumps the all-dependencies group with 6 updates in the /packages/x402-facilitator-node directory: | Package | From | To | | --- | --- | --- | | [@hono/node-server](https://github.com/honojs/node-server) | `2.0.8` | `2.1.1` | | [hono](https://github.com/honojs/hono) | `4.12.34` | `4.13.2` | | [viem](https://github.com/wevm/viem) | `2.54.6` | `2.55.16` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.1.0` | `26.2.0` | | [tsx](https://github.com/privatenumber/tsx) | `4.23.0` | `4.23.12` | | [typescript](https://github.com/microsoft/TypeScript) | `6.0.3` | `7.0.2` | Updates `@hono/node-server` from 2.0.8 to 2.1.1 - [Commits](honojs/node-server@v2.0.8...v2.1.1) Updates `hono` from 4.12.34 to 4.13.2 - [Commits](honojs/hono@v4.12.34...v4.13.2) Updates `viem` from 2.54.6 to 2.55.16 - [Commits](https://github.com/wevm/viem/compare/viem@2.54.6...viem@2.55.16) Updates `@types/node` from 26.1.0 to 26.2.0 - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `tsx` from 4.23.0 to 4.23.12 - [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs) - [Commits](privatenumber/tsx@v4.23.0...v4.23.12) Updates `typescript` from 6.0.3 to 7.0.2 - [Commits](https://github.com/microsoft/TypeScript/commits) --- updated-dependencies: - dependency-name: "@hono/node-server" dependency-version: 2.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all-dependencies - dependency-name: "@types/node" dependency-version: 26.1.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: all-dependencies - dependency-name: hono dependency-version: 4.13.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all-dependencies - dependency-name: tsx dependency-version: 4.23.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: all-dependencies - dependency-name: typescript dependency-version: 7.0.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: all-dependencies - dependency-name: viem dependency-version: 2.55.11 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
662b16a to
2b4bbd9
Compare
clestons
left a comment
There was a problem hiding this comment.
✅ APPROVE — 2b4bbd95 [2-round]
6 个依赖里有一个是 major(typescript ^6.0.3 → ^7.0.2),而仓库里没有任何 CI 会 typecheck 这个包。所以我自己装依赖跑了一遍 —— 干净。
✅ 实证(CI 没跑的那部分,我跑了)
pnpm install --prefer-offline → installed tsc = 7.0.2
./node_modules/.bin/tsc --noEmit → rc=0 ← TS 7 下类型检查全过
./node_modules/.bin/vitest run → 21 passed (1 file)
viem 2.55.16(typescript@7.0.2) 的 peer 也在 lockfile 里正常解析了。这个 major 是安全的,我不是从版本号推的。
lockfile 也核过(Cos72#27 那次 npmmirror→npmjs 的教训):
git diff 里【没有任何】 registry / tarball / URL 行变化 —— 只有 version + integrity
六项版本变化与 lockfile 解析结果逐条对得上(@hono/node-server 2.0.8→2.1.1、hono 4.12.34→4.13.2、viem 2.54.6→2.55.16、@types/node 26.1.0→26.2.0、tsx 4.23.0→4.23.12、typescript 6.0.3→7.0.2)。
⚠️ 两条流程缺口(不阻塞这个 PR,但值得单独修)
1. 这个 workspace 在 CI 里是完全裸奔的。 test.yml 的 paths 过滤器是:
paths: ['contracts/**', 'singleton-paymaster/**', 'foundry.toml', 'remappings.txt', '.github/workflows/test.yml']本 PR 只动 packages/x402-facilitator-node/** ⇒ test.yml 根本不会触发。全仓 7 个 workflow 里 grep x402-facilitator 零命中。这个包自己定义了 typecheck: tsc --noEmit 和 test: vitest run,但没有任何地方调用它们。
PR 页面上那个绿色的 test check 是 ci-required-shim.yml 提供的占位(真 job 被 path 过滤跳过时让必需检查通过),不是真的跑过 —— 别把它读成"测过了"。
建议:给 packages/** 加一个 node job(pnpm -C packages/x402-facilitator-node typecheck && test),或者把 packages/** 加进 test.yml 的 paths 并加对应步骤。没有它,下一次 TS major 就没人替你跑我刚才那两条命令了。
2. dependabot-auto-merge.yml 的三个分支对「分组更新」全部落空 —— 我在这个 PR 上实测到的。
它按 steps.meta.outputs.update-type 三分支:patch/minor → 自动 approve + auto-merge;major → 打 major-update 标签供人工复核。而这个 PR 是分组 PR(the all-dependencies group,含一个 major):
labels : ['dependencies', 'javascript'] ← 【没有】 major-update
auto_merge : None ← 没开自动合并
bot 的 review : 无
auto-merge job: completed | success ← 它跑了,而且"成功"了
也就是说 update-type 对分组 PR 既不是 patch/minor 也不是 major(大概率是空),三个 step 全被跳过,job 却报绿。
好消息是它没有自动合并一个含 major 的 PR;但坏消息是那句注释承诺的「major version bump: label for manual review」也没有生效 —— 而分组已经是这个仓库 dependabot PR 的主要形态,所以这条人工复核信号在最常见的路径上是静默失效的。
建议:加一个兜底分支(update-type 为空/未知时也打标签 + 不 auto-merge),或改用 steps.meta.outputs.updated-dependencies-json 自己判定组内最高 semver 变化。判据应该是「我确认它是 patch/minor」才放行,而不是「它不是 major」就跳过。
没跑 Codex PK —— 依赖 bump,无可挑战的 finding;判断力都花在实证上了。
PR-Daemon v4 · 轮数如实标注(依赖 bump,2-round)
Bumps the all-dependencies group with 6 updates in the /packages/x402-facilitator-node directory:
2.0.82.1.14.12.344.13.22.54.62.55.1626.1.026.2.04.23.04.23.126.0.37.0.2Updates
@hono/node-serverfrom 2.0.8 to 2.1.1Commits
73c03ad2.1.15515aa0perf: lazily materialize request headers (#389)82ba34e2.1.01f2909afix(listener): avoid uncaught error when force-closing a non-standard socket ...977a242feat: add Early Hints (HTTP 103) middleware (#378)a813b6c2.0.12caf48bafix(response): copy headers when init is a foreign Response (#382)3b1dd68test: replace supertest (#379)834e54f2.0.11ba72bcdperf(request): fast-path PATCH method (#380)Updates
honofrom 4.12.34 to 4.13.2Commits
41bdc424.13.26ea514dfeat(secure-headers): add missing W3C Permissions-Policy directives (#5214)329b6f4fix(client): send falsy JSON bodies (#5215)a1e4ac7perf(cors): pre-join static array header options during initialization (#5210)d982f63fix(url): strip trailing question mark correctly for optional params with reg...26de731fix(etag): stabilize digest across stream chunks (#5205)7075369Revert " fix(etag): resolve incorrect incremental hashing for chunked respons...f2a72d3fix(client): serialize multiple cookies correctly (#5202)8a5852dfix(etag): resolve incorrect incremental hashing for chunked responses (#5199)765d13bfix(jsx): render async children of document metadata tags instead of [object ...Updates
viemfrom 2.54.6 to 2.55.16Commits
7fd7f72chore: version package (#5005)c79c7d4ci: remove docs deployment1c25056fix: increase package size limits3144e10fix: update nanoid security override0c4f19afix: asset discovery insimulateCalls(#4997)cd1d2d5fix(siwe): reject unparseable expirationTime and notBefore (#4990)4523665chore: version package (#5003)8f7ef04fix(tempo): bind encrypted deposits to sender (#5002)cb95a8bchore: version package (#5000)cf1febcfix: complete block header watcher integration (#5001)Updates
@types/nodefrom 26.1.0 to 26.2.0Commits
Updates
tsxfrom 4.23.0 to 4.23.12Commits
ed9d330fix: shimimport.metawhen tokens are split by comments or newlines (#829)651f5betest: cover CommonJS TypeScript import.meta pathsbd3bc64test: cover CommonJS loader source fallback55cbecefix: preserve async ESM require fallback6c5ba85docs: document CommonJS default interopec1bcd5fix: support nyc coverage discovery (#710)b6e5b48docs: clarify CommonJS default imports2f55884fix: map Node test locationsde935d5docs: document Node source-map stack formattingb94f46ffix: support data URLs in tsImportUpdates
typescriptfrom 6.0.3 to 7.0.2Commits
Maintainer changes
This version was pushed to npm by microsoft1es, a new releaser for typescript since your current version.