fix(ci): align non-Linux Vitest unhandled-error handling across unit suites - #10443
Conversation
E2E Report — Issue #10438: Main CI failed (Qwen Code CI nightly, Windows lane)SummaryThe scheduled Diagnosis evidence
FixMirrors the house mitigation in every remaining unit-suite vitest project the platform lanes run: 19 Verification
Notes / out of scope
中文说明E2E 报告 — Issue #10438:主分支 CI 失败(Qwen Code CI 夜间运行,Windows 通道)摘要
诊断证据
修复把仓库既有的缓解措施镜像到平台通道运行的每一个剩余单测 vitest 项目:19 个 验证
说明 / 超出范围
🧠 Handled by Qwen Code · model/模型 |
|
|
|
Thanks for the PR! Template looks good ✓ Problem: observed, not theoretical. I verified run 33214395104 via the API — the scheduled Direction: aligned. This extends an explicit tradeoff the repository has already accepted three times — real test failures stay fatal everywhere, only unhandled infrastructure errors stop being fatal off Linux. No product surface or user behavior changes; CHANGELOG has no direct reference, but that's expected for internal CI plumbing. Size: no core production paths touched ( Approach: scope feels right — closing the exposure class for every remaining unit suite at once is the honest response to "we cannot name which suite stalled without authenticated logs", and the witness test pins the flag so the next round isn't needed. One thing I'll look at in code review: the witness test imports an explicit list of configs, so a brand-new package added later isn't automatically covered — worth checking how that's handled. Risk: no elevated risk signals — no files match the revert-correlated path list. Moving on to code review. 🔍 中文说明感谢贡献! 模板完整 ✓ 问题:是已观测到的问题,不是理论问题。我通过 API 核实了 run 33214395104 —— 方向:对齐。本 PR 扩展的是仓库已经三次明确接受的取舍 —— 真实测试失败在任何地方都仍然致命,只有未处理的基础设施错误在非 Linux 上不再致命。不涉及任何产品面或用户行为变化;CHANGELOG 无直接引用,但内部 CI 改动本就如此。 规模:未触及核心生产路径( 方案:范围合理 —— 在"没有鉴权日志无法点名具体停顿套件"的前提下,一次性关闭所有剩余单测套件的暴露类别是诚实的做法;见证测试把标志钉住,使下一轮不再必要。代码审查时我会看一点:见证测试导入的是显式配置列表,未来新增的包不会自动被覆盖 —— 值得确认如何处理。 风险:无升级风险信号 —— 没有文件命中与回退相关的路径列表。 进入代码审查 🔍 — Qwen Code · qwen3.8-max Reviewed at |
Code reviewI formed my baseline before reading the diff: mirror the exact block the core/cli/scripts/integration configs already carry into every remaining vitest project the lanes run, and pin it with a guard test. The PR does exactly that, and I verified the completeness claim rather than taking it on faith:
No blockers, no convention violations. Two non-blocking observations: the witness holds a static config list, so a future package adding a vitest suite must also add itself to the witness — fine in practice since adding a suite is a deliberate act, but worth knowing; and the author's local verification numbers (focused runs per workspace, mutation probes) are their own report, not something I re-ran — CI below is the evidence this review carries. TestingFinal CI results for
One row per check name (latest run); skipped checks omitted; failures sort first. / 每个检查名一行(取最新一次运行),省略 skipped,失败项排在最前。 The note on the two skipped lanes matters, because they are the lanes this PR exists for: Not verified: the specific suite that stalled in run 33214395104 (no authenticated log access — acknowledged in the PR itself); real-scenario tmux testing is N/A, this is test-runner configuration with no user-visible surface. 中文说明代码审查我在看 diff 之前先给出了自己的方案:把 core/cli/scripts/integration 配置已有的同款块镜像到通道运行的每一个剩余 vitest 项目,并用守护测试钉住。PR 正是这么做的,并且我核实了完整性声明而不是照单全收:
无阻塞项,无规范违规。两点非阻塞观察:见证测试持有静态配置列表,未来新增带 vitest 套件的包需要同时把自己加入见证 —— 实践上没问题(新增套件本就是有意识的行为),但值得知晓;作者本地验证的数字(各工作区聚焦运行、变异探针)是其自述,我未重跑 —— 本审查携带的证据是下面的 CI。 测试(CI 表格见上方英文区域标记内。) 关于两条被跳过通道的说明很重要,因为它们正是本 PR 服务的对象: 未验证:run 33214395104 中具体停顿的套件(无鉴权日志访问 —— PR 本身已说明);真实场景 tmux 测试不适用(N/A),这是测试运行器配置,没有用户可见面。 — Qwen Code · qwen3.8-max Reviewed at |
|
Confidence: 4/5 — clean review across every stage; the one point I'm holding back is that no PR-level signal can prove the nightly actually stops failing — that is inherent to this failure class, not a defect of the PR. Stepping back: this is the fourth round of the same repair, and what sells it to me is that this round stops being round N+1 bait. The previous three rounds each extended the exemption to whichever suite had just been caught, guaranteeing a next time; the witness test here pins the flag in all 23 configs — including the previously patched ones — so removing it from anywhere fails the scripts suite on every platform, Linux included. I verified the motivating failure myself via the API (run 33214395104: scheduled My independent proposal before reading the diff was exactly what the PR does — mirror the established block uniformly and pin it with a guard test — and I came up with no simpler path that stays within the repo's conventions. Completeness was the one claim that could quietly be wrong, and it checks out against the workspace list: every Reservations, all non-blocking: the witness keeps a static config list, so a future vitest workspace must add itself (deliberate act, low risk); and the exemption with the flag Approval is deferred until the PR's own CI lands green on the reviewed commit — the ubuntu test lane and SDK Java were still in flight when this pass ran. 中文说明回顾整体:这是同一修复的第四轮,而让我信服的是这一轮让"第 N+1 轮"不再发生。前三轮每次都是把豁免扩展到刚被击中的套件,保证了下一次还会中招;这里的见证测试把标志钉在全部 23 个配置上 —— 包括此前已打补丁的 —— 因此从任何一处删除该标志都会让 scripts 套件在所有平台(包括 Linux)上失败。我通过 API 亲自核实了触发本次修复的失败(run 33214395104: 我在看 diff 之前的独立方案与 PR 的做法完全一致 —— 均匀镜像既有块并用守护测试钉住 —— 且我没有找到既符合仓库惯例又更简单的路径。完整性是唯一可能悄悄出错的声明,对照工作区列表核实无误:每个运行 保留意见均为非阻塞:见证测试持有静态配置列表,未来新增的 vitest 工作区需要自行加入(有意识的行为,风险低);标志为 审批推迟到该 PR 自身的 CI 在被审提交上变绿之后 —— 本次审查时 ubuntu 测试通道与 SDK Java 仍在运行。 — Qwen Code · qwen3.8-max Reviewed at |
Code Coverage Summary
CLI Package - Full Text ReportCore Package - Full Text ReportFor detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run. |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Reviewed. Suggestions are inline.
Not explored to full depth (tool budget reached): "agent 1d": none — nothing was cut short..
中文说明
已审查。 建议见行内评论。
未探索到全部深度(达到工具调用预算):"agent 1d":none — nothing was cut short.。
— qwen3.8-max via Qwen Code /review (v0.22.3)
| // errors stop being fatal, and only off Linux — the ubuntu lane and | ||
| // Linux local runs keep the unhandled-error signal. | ||
| dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux', |
There was a problem hiding this comment.
[Suggestion] R1-1: This PR pastes one verbatim 8-line block — a 7-line rationale comment plus dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux' — into 20 config files, with no shared module owning it, and the three pre-existing copies it joins have already drifted into three different wordings. Any future change to the exemption — vitest altering the 60s onTaskUpdate RPC budget, re-gating on RUNNER_ENVIRONMENT the way integration-tests/vitest.config.ts:46 already does, or removing the exemption — now requires hand-editing 23 independent sites, and a partial update leaves per-suite predicates silently disagreeing. The witness test pins only the flag value, so a stale or diverging rationale in the 20 new copies produces no red signal.
Witness:
repo-wide sweep at the reviewed commit: dangerouslyIgnoreUnhandledErrors appears in 24 config files —
20 added by this diff plus packages/core/vitest.config.ts:45, packages/cli/vitest.config.ts:185,
scripts/tests/vitest.config.ts:52 (three differently-worded narratives) and the predicate-divergent
integration-tests/vitest.config.ts:46-48 (… !== 'linux' || process.env['RUNNER_ENVIRONMENT'] === 'self-hosted');
zero matches for any shared module exporting the flag or predicate;
the new witness asserts only the flag value (unit-vitest-configs.test.ts:74).
Suggested fix: extract the exemption into one shared module and have each config import it — the same mechanism the configs already use for scripts/vitest-global-setup.js:
// scripts/vitest-unhandled-errors-exemption.js
export const ignoreUnhandledErrorsOffLinux = process.platform !== 'linux';Keep the 7-line rationale in the shared module once. The existing witness already pins the flag in every config, so the refactor loses no guard. One fact the fix must not violate: the witness asserts a strict boolean evaluated at config import time — expect(config.test?.dangerouslyIgnoreUnhandledErrors).toBe(process.platform !== 'linux') (scripts/tests/unit-vitest-configs.test.ts:74-76, toBe not toBeFalsy) — and it consumes packages/webui through the function-form vite.config.ts (unit-vitest-configs.test.ts:80-86), so a shared helper must yield a plain boolean inside the resolved test object for both object-form and function-form configs, including the two integrations/* configs.
中文说明
本 PR 把一个逐字相同的 8 行块(7 行理由注释加 dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux')粘贴进 20 个配置文件,没有任何共享模块拥有它;而它加入的三个既有副本已经漂移成三种不同的措辞。未来对该豁免的任何修改 —— vitest 调整 60 秒的 onTaskUpdate RPC 预算、像 integration-tests/vitest.config.ts:46 那样改为按 RUNNER_ENVIRONMENT 门控、或移除豁免 —— 都需要手工编辑 23 个独立位置,部分更新会让各套件的谓词悄悄不一致。见证测试只钉住标志的值,因此 20 个新副本中理由注释过时或漂移不会产生任何红色信号。
建议修复:把豁免提取到一个共享模块并让各配置导入 —— 与各配置已经在用的 scripts/vitest-global-setup.js 机制相同。理由注释只在共享模块中保留一份。既有见证测试已钉住每个配置中的标志,因此该重构不会失去任何保护。修复必须不违反一个既有事实:见证测试断言的是配置导入时求值的严格布尔值 —— expect(config.test?.dangerouslyIgnoreUnhandledErrors).toBe(process.platform !== 'linux')(scripts/tests/unit-vitest-configs.test.ts:74-76,用 toBe 而非 toBeFalsy),且它通过函数式 vite.config.ts 消费 packages/webui(unit-vitest-configs.test.ts:80-86),因此共享辅助模块必须在对象式与函数式配置(包括两个 integrations/* 配置)解析后的 test 对象中都产出普通布尔值。
— qwen3.8-max via Qwen Code /review (v0.22.3)
|
🔀 Base updated: red check(s) [web-shell E2E Smoke (ubuntu-latest, Node 22.x)] pass on current main — merged current main via update-branch; CI will re-run. 中文说明🔀 已更新 base:红色检查 [web-shell E2E Smoke (ubuntu-latest, Node 22.x)] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Reviewed. Suggestions are inline.
Deferred under the convergence posture (round 2, not a blocker) — recorded, not requested in this round:
scripts/tests/unit-vitest-configs.test.ts:44 — [probe] Witness enumerates guarded configs by hand; new suites escape the pinscripts/tests/unit-vitest-configs.test.ts:79 — [probe] A future packages/webui/vitest.config.ts would shadow the pinned flag
中文说明
已审查。 建议见行内评论。
收敛姿态下延后(第 2 轮,非阻断)——已记录,本轮不要求修改:共 2 条(原文未翻译,列表见上方英文部分)。
— qwen3.8-max via Qwen Code /review (v0.22.3)
| // these lanes). Test failures still fail the run; only unhandled | ||
| // errors stop being fatal, and only off Linux — the ubuntu lane and | ||
| // Linux local runs keep the unhandled-error signal. | ||
| dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux', |
There was a problem hiding this comment.
[Suggestion] R1-1: This PR pastes one verbatim 8-line block — a 7-line rationale comment plus dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux' — into 20 config files, joining the 4 pre-existing copies in packages/core, packages/cli, scripts/tests and integration-tests: 24 copies of one rationale with no shared module owning it. The copies had already started drifting before this PR — the integration-tests exemption also reads RUNNER_ENVIRONMENT, and the four pre-existing sites tell the story differently — and the new witness pins only the flag's boolean value, not the comment text or the expression form. When the exemption's rationale or condition next changes, a maintainer must locate and hand-edit all 24 sites in lockstep, and divergence between copies accumulates silently until then.
Cheapest fix that keeps each config self-contained: collapse the 7-line comment in every config to a one-line pointer at the full rationale (the witness test's header comment owns it), keeping the flag line itself per-config. A shared preset/constant is the deeper variant; it must allow the integration-tests override.
Witness:
sweep dangerouslyIgnoreUnhandledErrors over the tree at HEAD -> 24 config files
(20 added by this diff + 4 pre-existing)
drift: integration-tests/vitest.config.ts:46-48 carries
process.platform !== 'linux' || process.env['RUNNER_ENVIRONMENT'] === 'self-hosted'
all 20 pasted copies carry
process.platform !== 'linux'
Any shared-module variant must stay loadable from npm run test:ci --workspaces --if-present --parallel (root package.json:48) and respect AGENTS.md's no-relative-imports-between-packages rule; integration-tests/vitest.config.ts:47 legitimately uses a different expression, so a shared constant must allow that override.
中文说明
本 PR 把一个逐字相同的 8 行块 —— 7 行理由注释加上 dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux' —— 粘贴进 20 个配置文件,加上 packages/core、packages/cli、scripts/tests 和 integration-tests 中已有的 4 份副本:同一段理由共 24 份副本,没有任何共享模块拥有它。这些副本在本 PR 之前就已开始漂移 —— integration-tests 的豁免还会读取 RUNNER_ENVIRONMENT,四处既有站点的叙述各不相同 —— 而新的见证测试只钉住该标志的布尔值,不钉注释文本或表达式形式。当该豁免的理由或条件下次变更时,维护者必须同步手工编辑全部 24 处,副本间的分歧在此之前会悄悄累积。
保持各配置自包含的最便宜修法:把每个配置中的 7 行注释折叠成指向完整理由的单行指引(完整理由由见证测试的头部注释拥有),标志行本身保留在各配置中。共享预设/常量是更深层的方案;它必须允许 integration-tests 的覆盖。
任何共享模块方案必须能从 npm run test:ci --workspaces --if-present --parallel(根 package.json:48)加载,并遵守 AGENTS.md 的“包之间不得相对导入”规则;integration-tests/vitest.config.ts:47 合理地使用了不同的表达式,因此共享常量必须允许该覆盖。
— qwen3.8-max via Qwen Code /review (v0.22.3)
|
🤖 Addressed the latest review feedback (round 1/10). What changed, and what I pushed back on: · 已处理最新评审反馈(第 1/10 轮)。改动内容与我反驳保留之处如下: Round summary — PR #10443 (issue #10438)Feedback triageR1-1 — duplicated exemption rationale across 20 configs ( The deeper shared-module variant from the round-1 comment is deliberately not implemented: the witness test already pins the flag value in every guarded config (so predicate divergence is caught, not silent), Round-2 deferred probe findings (witness enumerates configs by hand; a future Failed check —
This PR's diff is comment-only in vitest config files and touches no source file in ChangesOne commit ( Conflict notesNone ( Verification
中文说明轮次总结 — PR #10443(issue #10438)反馈分类处理R1-1 — 豁免理由注释在 20 个配置中重复( 第 1 条评论中更深层的共享模块方案有意不实施:见证测试已钉住每个受保护配置中的标志值(因此谓词分歧会被发现,而非悄无声息), 第 2 轮延后的探针发现(见证测试手工枚举配置;未来的 失败检查 —
本 PR 的 diff 仅修改 vitest 配置文件中的注释,完全未触碰 变更一个提交( 冲突说明无( 验证
Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。 Re-review when you have a moment. After round 10 this bot stops and leaves the PR for a human. · 有空请复审;第 10 轮后本 bot 停止并将 PR 交给人工。 🧠 Handled by Qwen Code · model/模型 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed. Suggestions are inline.
Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not explored to full depth (tool budget reached): "agent 2": none — no check was cut short..
Not reviewed: reverse audit — stopped before round 5 by the review time budget.
中文说明
仅完成部分审查,审查缺口已披露。 建议见行内评论。
未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未探索到全部深度(达到工具调用预算):"agent 2":none — no check was cut short.。
未审查:反向审计——评审时间预算不足,未能开始第 5 轮。
— qwen3.8-max via Qwen Code /review (v0.22.3)
…ing unit configs (#10438)
|
🤖 Addressed the latest review feedback (round 2/10). What changed, and what I pushed back on: · 已处理最新评审反馈(第 2/10 轮)。改动内容与我反驳保留之处如下: Address-review summary — PR #10443 (issue #10438)Feedback triage
No failed checks or still-red checks were reported. rc:3885777188 — R3-1: rationale consolidation stopped three configs short — ImplementedClaim verified before acting. The finding is accurate:
Change (net −18 lines). Replaced the three inline 7-line blocks with the identical one-line pointer already used by the other 20 configs: // RPC-timeout exemption; see scripts/tests/unit-vitest-configs.test.ts.
dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux',
Footprint note. The round touches Conflict handling
Verification
Commit: 中文说明评审处理摘要 — PR #10443(issue #10438)反馈分类
本轮未报告失败检查,也没有持续未通过的检查。 rc:3885777188 —— R3-1:依据整合在三个配置处停下 —— 已实现动手前先核实了该说法。 该发现属实:
改动(净 −18 行)。 把三处内联的 7 行注释块替换为与其余 20 个配置完全相同的一行指针: // RPC-timeout exemption; see scripts/tests/unit-vitest-configs.test.ts.
dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux',
足迹说明。 本轮触及了 冲突处理
验证
提交: 🧭 Gate advisory — this round modified areas outside the PR footprint (machine-measured, not agent-authored):
Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。 🧵 Resolved all 1 selected review thread(s). · 已关闭全部选中的 1 条评审线程。 Re-review when you have a moment. After round 10 this bot stops and leaves the PR for a human. · 有空请复审;第 10 轮后本 bot 停止并将 PR 交给人工。 🧠 Handled by Qwen Code · model/模型 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally.
中文说明
未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally。
— qwen3.8-max via Qwen Code /review (v0.22.3)
|
🤖 Addressed the latest review feedback (round 3/10). What changed, and what I pushed back on: · 已处理最新评审反馈(第 3/10 轮)。改动内容与我反驳保留之处如下: Autofix round summary — PR #10443 (issue #10438)Feedback triage[Failed check] [rv:5057387304] Automated reviewer downgrade (Approve → Comment) caused by that red check — Addressed by the same merge; the review body raises no code defect against this PR, and its remaining notes (Windows/macOS Node lanes skipped in CI) are coverage disclosures about lanes the CI design itself skips, not actionable items for this PR. No inline comments and no issue-level comments were in this round's feedback; there are no declined, deferred, or escalated findings. Diagnosis: the red check is a known Java-11-only fixture flake, already fixed on mainThe failing lane is the only red check in the batch (run 33240622616): The lane pattern matches, exactly, a known failure class documented in commit Confirmed the branch carried the pre-fix code: its merged main ( Change madeOne additive merge commit ( No new guards or behaviors were added this round, so no mutation probe applies. Environment-specific check noteThe Java/Maven lane cannot run on this runner (no JDK or Maven installed), so the lane itself was not executed locally; the fix is maintainer-authored code already on main with its own before/after evidence, and the workflow's independent CI remains the final verification gate. The first full Verification
中文说明Autofix 轮次总结 — PR #10443(issue #10438)反馈分类[失败检查] [rv:5057387304] 自动审查者因该红色检查而降级(Approve → Comment) — 通过同一次合并解决;该审查正文并未指出本 PR 的任何代码缺陷,其余说明(Windows/macOS Node 通道在 CI 中被跳过)属于 CI 设计本身就会跳过的通道的覆盖率披露,不是本 PR 需要处理的事项。 本轮反馈中没有行内评论,也没有 issue 级评论;没有拒绝、推迟或升级处理的发现。 诊断:红色检查是已知的仅 Java 11 的 fixture 偶发失败,main 上已有修复失败通道是这一批运行(run 33240622616)中唯一的红色检查: 该通道的失败模式与提交 已确认本分支携带的是修复前的代码:分支合并的 main( 所做变更一个追加式合并提交( 本轮没有新增任何守卫或行为,因此不适用变异探针。 环境特定检查说明本 runner 上无法运行 Java/Maven 通道(未安装 JDK 与 Maven),因此该通道未在本地实际执行;该修复是维护者编写、已在 main 上并带有自身前后对比证据的代码,工作流的独立 CI 仍是最终验证关卡。首次完整 验证
Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。 Re-review when you have a moment. After round 10 this bot stops and leaves the PR for a human. · 有空请复审;第 10 轮后本 bot 停止并将 PR 交给人工。 🧠 Handled by Qwen Code · model/模型 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
2 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:
- R5-2 exemption block duplicated across 21 configs — already reported as R1-1 (comment 3885290072 at integrations/external-context/vitest.config.ts:13)
- R5-3 witness hand-enumerates guarded configs — already recorded in the round-2 deferral list (review 5056522201)
Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: reverse audit — stopped before round 1 by the review time budget.
中文说明
仅完成部分审查,审查缺口已披露。
本轮确认的 2 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。
未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:反向审计——评审时间预算不足,未能开始第 1 轮。
— qwen3.8-max via Qwen Code /review (v0.22.3)
|
🔀 Base updated: red check(s) [Post Coverage Comment (ubuntu-latest, 22.x)] pass on current main — merged current main via update-branch; CI will re-run. 中文说明🔀 已更新 base:红色检查 [Post Coverage Comment (ubuntu-latest, 22.x)] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
2 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:
- R13-1 witness hand-enumerates guarded configs (new test:ci suites escape the pin) — already recorded in the round-2 deferral list (review 5056522201) and re-confirmed by rounds 5, 6, 7, 8, 9, 10, 11 and 12
- R13-2 exemption policy duplicated across 24 sites with no shared module — already reported as R1-1 (comment 3885290072 at integrations/external-context/vitest.config.ts:13) and re-confirmed by rounds 5, 11 and 12
Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally.
中文说明
仅完成部分审查,审查缺口已披露。
本轮确认的 2 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。
未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally。
— qwen3.8-max via Qwen Code /review (v0.22.3)
|
🔀 Base updated: red check(s) [Test (ubuntu-latest, Node 22.x)] pass on current main — merged current main via update-branch; CI will re-run. 中文说明🔀 已更新 base:红色检查 [Test (ubuntu-latest, Node 22.x)] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
2 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:
- exemption predicate duplicated across 23 configs with no shared module — already reported as R1-1 (comment 3885290072 at integrations/external-context/vitest.config.ts:13) and re-confirmed by rounds 5, 11, 12 and 13
- witness hand-enumerates guarded configs, new test:ci suites escape the pin — already recorded in the round-2 deferral list (review 5056522201) and re-confirmed by rounds 5, 6, 7, 8, 9, 10, 11, 12 and 13 (R13-1)
Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally.
中文说明
仅完成部分审查,审查缺口已披露。
本轮确认的 2 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。
未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally。
— qwen3.8-max via Qwen Code /review (v0.22.3)
|
🤖 Reviewed the latest feedback — no changes needed. Why, point by point: · 已审阅最新反馈——无需改动。逐点说明原因如下: Autofix round summary — no changes needed🤖 Reviewed the latest feedback — no changes needed. Why, point by point: This round (Critical-only mode) carries no actionable review findings: the Reviews, Inline comments, and Issue-level comments sections are empty — the remaining non-Critical bot suggestions are deferred for human follow-up by the workflow's brake. The only actionable items are the Failed checks from CI run(s) started 2026-08-30 ~19:15 UTC on head Failed checks, one by one
All five lanes failed in the same window on the same shared self-hosted ECS pool, during the contention episode the repository is actively fighting (#10552, "ci: stabilize tests under shared ECS host contention", merged hours before this run). The base-update bot recorded the same pattern earlier on this PR ("red check(s) … pass on current main"), which is consistent with run-to-run timing on a shared pool rather than a deterministic regression in the branch. Why this PR cannot be the cause on those lanes
Why no code change this round
A CI re-run is the expected remedy; the workflow's independent CI remains the final verification gate. VerificationCommands actually run this round, on head
中文说明Autofix 轮次总结 — 无需改动🤖 已审阅最新反馈——无需改动。逐点说明如下: 本轮(仅处理 Critical 模式)没有任何可处理的评审发现:Reviews、Inline comments、Issue-level comments 三个区域均为空——其余非 Critical 的机器人建议已由工作流的刹车机制延后,留待人工跟进。唯一可处理的是 Failed checks(失败检查):来自 2026-08-30 约 19:15 UTC、在 head 逐一分析失败的检查
五个 lane 全部在同一时间窗口、同一共享自托管 ECS 池上失败,正值仓库正在对抗的争用时段(#10552,"ci: stabilize tests under shared ECS host contention",在本次运行前数小时合入)。base 更新机器人在本 PR 更早的阶段也记录过同样的模式("red check(s) … pass on current main",即红色检查在 main 上通过),这与共享池上逐次运行的时机差异相符,而不是分支中的确定性回归。 为什么这些 lane 上不可能是本 PR 导致
为什么本轮不做代码改动
预期的补救方式是重跑 CI;工作流的独立 CI 仍是最终验证关口。 Verification(验证)本轮在 head
Deferred non-Critical feedbackCritical-only mode is active: 5 change-producing rounds are complete. The workflow excluded the non-Critical feedback below from this round's actionable sections; the items remain open for human follow-up. Maintainer feedback is deferred only after its author has used 2 regular feedback batches in this window's Critical-only tail; authors at that budget, if any, are named below. (
中文说明已进入仅处理 Critical 的模式:已完成 5 个产生改动的轮次。本轮可执行区域已排除下方非 Critical 反馈;这些条目保持开放,留待人工跟进。维护者反馈仅在其本人于本窗口 Critical-only 阶段已使用 2 批常规反馈预算后才会延后;达到预算的作者(如有)在下方点名。(评论 Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。 🧠 Handled by Qwen Code · model/模型 |
|
🔀 Base updated: red check(s) [Integration Tests (no-AK, No Sandbox), Post Coverage Comment (ubuntu-latest, 22.x)] pass on current main — merged current main via update-branch; CI will re-run. 中文说明🔀 已更新 base:红色检查 [Integration Tests (no-AK, No Sandbox), Post Coverage Comment (ubuntu-latest, 22.x)] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
3 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:
- R15-1 witness hand-enumerates guarded configs (new test:ci suites escape the pin) — already recorded in the round-2 deferral list (review 5056522201) and re-confirmed by rounds 5-13 (R9-1, R11-2, R12-2, R13-1)
- R15-2 exemption comment+flag block duplicated across 23 configs with no shared module — already reported as R1-1 (comment 3885290072 at integrations/external-context/vitest.config.ts:13) and re-confirmed by rounds 5, 11, 12 and 13
- R15-3 a future packages/webui/vitest.config.ts would shadow the pinned flag — already recorded in the round-2 deferral list (review 5056522201) and re-confirmed by round 8 (review 5059324311)
Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally.
中文说明
仅完成部分审查,审查缺口已披露。
本轮确认的 3 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。
未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally。
— qwen3.8-max via Qwen Code /review (v0.22.3)
|
🤖 Reviewed the latest feedback — no changes needed. Why, point by point: · 已审阅最新反馈——无需改动。逐点说明原因如下: Autofix round summary — no action takenFeedback triage. Critical-only mode is active for this window (5 change-producing rounds complete), and this round's actionable sections (reviews, inline comments, issue-level comments) are empty. The only newer feedback — the automated reviewer's non-Critical review — was excluded by the workflow and remains open for human follow-up. There was nothing to address in code. Failed checks — diagnosed as shared-host contention timeouts, not a defect in this PR. All three failures come from CI run 33346647402, triggered by the current head commit (
Why this PR cannot have caused the timeout. On the Linux lane the PR's only runtime change is Verification (actually run this round on head
Conclusion. No code changes this round. The three failed checks are environment/timing artifacts (job timeouts under shared-ECS contention, plus the resulting missing-artifact cascade); they should clear on the next CI run for the branch, and there is no source-level fix within this PR's scope. Deferred non-Critical findings remain open for human follow-up. 中文说明Autofix 轮次总结 — 本轮未采取任何改动反馈分类。 本窗口已进入仅处理 Critical 的模式(已完成 5 个产生改动的轮次),本轮的可执行区域(reviews、inline comments、issue-level comments)均为空。唯一更新的反馈——自动审查机器人的非 Critical review——已被工作流排除在本轮之外,保持开放状态留待人工跟进。代码层面没有任何需要处理的内容。 失败检查项 —— 诊断为共享宿主机资源争用导致的超时,并非本 PR 的缺陷。 三项失败均来自 CI run 33346647402,由当前 head 提交(
为什么本 PR 不可能导致该超时。 在 Linux lane 上,本 PR 唯一的运行时改动是各 vitest 配置中的 验证(本轮在 head
结论。 本轮不做任何代码改动。三项失败检查均为环境/时序问题(共享 ECS 资源争用下的 job 超时,以及由此引发的产物缺失级联);在该分支的下一次 CI 运行中应能恢复,且在本 PR 的范围内不存在任何源码层面的修复可做。被延后的非 Critical 发现保持开放,留待人工跟进。 Deferred non-Critical feedbackCritical-only mode is active: 5 change-producing rounds are complete. The workflow excluded the non-Critical feedback below from this round's actionable sections; the items remain open for human follow-up. Maintainer feedback is deferred only after its author has used 2 regular feedback batches in this window's Critical-only tail; authors at that budget, if any, are named below. (
中文说明已进入仅处理 Critical 的模式:已完成 5 个产生改动的轮次。本轮可执行区域已排除下方非 Critical 反馈;这些条目保持开放,留待人工跟进。维护者反馈仅在其本人于本窗口 Critical-only 阶段已使用 2 批常规反馈预算后才会延后;达到预算的作者(如有)在下方点名。(评论 Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。 🧠 Handled by Qwen Code · model/模型 |
|
🔀 Base updated: red check(s) [Post Coverage Comment (ubuntu-latest, 22.x)] pass on current main — merged current main via update-branch; CI will re-run. 中文说明🔀 已更新 base:红色检查 [Post Coverage Comment (ubuntu-latest, 22.x)] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
2 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:
- R16-1 exemption policy duplicated verbatim across 24 sites with no shared module — already reported as R1-1 (comment 3885290072 at integrations/external-context/vitest.config.ts:13) and re-confirmed by rounds 5, 11, 12, 13 and 15
- R16-2 witness hand-enumerates guarded configs (new test:ci suites escape the pin) — already recorded in the round-2 deferral list (review 5056522201) and re-confirmed by rounds 5-13 and 15
Unresolved, please confirm:
- [Critical] Issue comment 5466581788 (autofix bot, round 4): 'the fix did not pass verification ... Qwen failed during address-review: signal SIGTERM' — an autofix-run lifecycle failure whose verification outcome cannot be ruled from the code at the re…
- [Critical] Issue comment 5467293096 (autofix bot, round 5): 'Autofix agent finished without required output file(s): address-summary.md, no-action.md' — autofix-run artifacts, not repo code; cannot be ruled from the code at the reviewed commit
Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally.
Not reviewed: reverse audit — stopped before round 1 by the review time budget.
中文说明
仅完成部分审查,审查缺口已披露。
本轮确认的 2 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。
未决,请确认:共 2 条(原文未翻译,列表见上方英文部分)。
未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and its suite did not run locally。
未审查:反向审计——评审时间预算不足,未能开始第 1 轮。
— qwen3.8-max via Qwen Code /review (v0.22.3)
|
🔀 Base updated: red check(s) [Test (ubuntu-latest, Node 22.x), Post Coverage Comment (ubuntu-latest, 22.x)] pass on current main — merged current main via update-branch; CI will re-run. 中文说明🔀 已更新 base:红色检查 [Test (ubuntu-latest, Node 22.x), Post Coverage Comment (ubuntu-latest, 22.x)] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。 |
yiliang114
left a comment
There was a problem hiding this comment.
LGTM at b15a89e. Verified the full diff: every touched config gets exactly the one-line pointer comment plus dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux' (or, for cli/core/scripts-tests, just collapses the old 7-line rationale into the pointer — the flag already existed there), and webui's switch from vite to vitest/config defineConfig is the correct way to type its new test block without changing the build branch. The witness pins bi-directionally (toBe against the resolved boolean, so a deleted flag fails on every platform including Linux, and removing the exemption from any single project fails the scripts suite).
Semantics check: vitest's flag only exempts unhandled errors outside test contexts — reported test failures and timeouts stay fatal — and the exemption is off-Linux only, so the ubuntu lane (CI's authoritative coverage) keeps the unhandled-error signal; the PR is also upfront that this does not fix #10438/#10581, which failed on reported test failures this flag cannot suppress. The policy being aligned already ships in the three largest suites with the documented RPC-stall rationale, so this is consistency, not a new speculative guard. CI so far: 14 checks pass, none failing; ubuntu Test / Integration / daemon-E2E still running and will gate the merge.
|
Released in v0.23.0. |
What this PR does
This PR aligns the repository's current unit-test Vitest projects on the existing non-Linux unhandled-error policy. On macOS and Windows, reported test failures remain fatal, while Vitest unhandled errors do not independently turn an otherwise passing suite red. A focused witness test pins the resolved boolean value in every currently covered unit-suite configuration.
Why it's needed
Several unit suites already used this policy while the remaining suites did not, leaving platform-lane behavior dependent on which workspace emitted an unhandled error. This change removes that inconsistency as a preventive measure. It is intentionally not presented as a fix for #10438 or #10581: both retained job logs contain reported test failures, and
dangerouslyIgnoreUnhandledErrorsdoes not suppress those failures or make those runs pass.Reviewer Test Plan
How to verify
dangerouslyIgnoreUnhandledErrorsresolves tofalse; on macOS or Windows it should resolve totrue.Evidence (Before & After)
N/A — test-runner configuration only; there is no user-visible behavior change.
Tested on
Environment (optional)
Repository Vitest configuration and scripts test suite.
Risk & Scope
Linked Issues
None. This PR is preventive configuration alignment and deliberately carries no closing issue linkage.
中文说明
本 PR 做了什么
本 PR 让仓库当前的各个单元测试 Vitest 项目统一采用既有的非 Linux 未处理错误策略。在 macOS 和 Windows 上,已报告的测试失败仍然会使任务失败,但 Vitest 的未处理错误不会再单独把一次原本通过的测试变红。新增的聚焦见证测试会固定当前所有覆盖到的单元测试配置最终解析出的布尔值。
为什么需要
此前部分单元测试套件已经采用该策略,其余套件没有,因此平台通道是否会因未处理错误而失败,取决于错误来自哪个 workspace。本改动作为预防措施消除这项不一致。它不会再被描述为 #10438 或 #10581 的修复:这两个任务保留的日志都包含已报告的测试失败,而
dangerouslyIgnoreUnhandledErrors不会忽略这些失败,也无法让对应任务通过。Reviewer 测试计划
如何验证
dangerouslyIgnoreUnhandledErrors解析为false;在 macOS 或 Windows 上应解析为true。证据(修改前后)
N/A——仅修改测试运行器配置,没有用户可见行为变化。
测试平台
环境(可选)
仓库 Vitest 配置与 scripts 测试套件。
风险与范围
关联 Issue
无。本 PR 仅做预防性的配置对齐,刻意不携带任何自动关闭 issue 的关联语句。