Skip to content

fix(release): stop hiding sandbox build failures and check the prepared package early - #10784

Merged
yiliang114 merged 4 commits into
mainfrom
fix/release-package-size-budget
Sep 2, 2026
Merged

fix(release): stop hiding sandbox build failures and check the prepared package early#10784
yiliang114 merged 4 commits into
mainfrom
fix/release-package-size-budget

Conversation

@yiliang114

@yiliang114 yiliang114 commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Two changes to how the release pipeline reports packaging failures, both of them lessons from the release that #10781 just unblocked:

  • build_sandbox.js no longer discards the container build's output. CI streams it; a quiet local build keeps it and prints the tail when the build fails.
  • quality_build runs npm run bundle && npm run prepare:package after uploading its build artifact, so prepare:package's guards are exercised by a fast job instead of first firing inside the Dockerfile.

This branch originally also raised the unpacked size budget to 112 MiB. #10781 landed that on main first, with the same constant and the same test values, so main is merged in here and its version of scripts/prepare-package.js taken wholesale. What is left is only the part about how long the failure took to identify.

Why it's needed

The 96 MiB budget tripping was a one-line error. Reading that line cost a twenty-minute release run, twice, because of two things this PR fixes.

build_sandbox.js sent the image build's output to /dev/null unless VERBOSE was set, so the failure surfaced as an execSync stack trace with stdout: null — no indication of which Dockerfile line failed, and no way to find out except rebuilding by hand. e2e.yml had already worked around this by setting VERBOSE: 'true' on its build step; release.yml had not. That is why the actual message (Prepared package unpacked size 101897869 bytes exceeds 100663296 bytes) appears in the E2E logs and is absent from the release logs for the same commit — the release run reported only that docker build exited 1. Keying the default on CI rather than on each workflow remembering to set VERBOSE means the next failure inside that image is legible wherever it happens, including on a developer's machine.

The ordering is the other half. Nothing ran prepare:package between Build Bundle and the publish job, so its guards — the size budget, the forbidden-literal scan, the missing-bundle-artifact checks — were first exercised by the slowest consumer in the pipeline, and a packaging problem could only be discovered by building a container image. quality_build already installs and builds; adding bundle + prepare there reports the same failure in minutes. It runs after Upload Build Outputs on purpose, so the artifact downstream jobs consume stays byte-for-byte what the earlier steps produced.

The size budget will be reached again — the package has grown from 96,802,417 bytes at 0.22.1 to 101,897,869 now, and the OpenTUI migration carries the ink and OpenTUI stacks in the same bundle until it finishes. When it does, this is the difference between a five-minute red job that names the number and a twenty-minute one that prints nothing. (If we would rather bring the package down than keep raising the ceiling, the two places worth trimming are vendor/ripgrep, 24 MiB across five platform binaries, and web-shell/assets, 18 MiB of mostly shiki grammars, mermaid and cytoscape. Separate change, and a product decision.)

Reviewer Test Plan

How to verify

  1. npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/build-sandbox-output.test.js — new; puts a fake docker on PATH that fails the build subcommand, and asserts the output reaches the operator on both paths: captured and printed on failure in the quiet path, streamed under CI. Under a second, no container runtime needed.
  2. On a machine with docker, to see it against a real build without waiting for a real failure: BUILD_SANDBOX_FLAGS='--target nosuchstage' QWEN_SANDBOX=docker npm run build:sandbox -- -s --no-prune — docker's own error text is now in front of you instead of stdout: null.
  3. npm run bundle && npm run prepare:package — what the new quality_build step runs. Completes on main today; on e28f17de7a~1 it reproduces the release failure in about two minutes rather than twenty.

Evidence (Before & After)

Before — the entire failure as the release log recorded it (run 33594509319, integration_docker):

building ghcr.io/qwenlm/qwen-code:0.22.3-release-7df5ac6898a476f6a7a35b5271e8648c532bbec6 ... (can be slow first time)
Error: Command failed: docker build  --label org.qwen-code.ci.sandbox=true ... -f "Dockerfile" -t "..." .
  status: 1,
  output: [ null, null, null ],
  stdout: null,
  stderr: null

After — same failure, quiet (non-CI) path:

building ghcr.io/qwenlm/qwen-code:0.22.3 ... (can be slow first time)

--- last 200 lines of docker build output ---
#10 299.8 Error: Prepared package unpacked size 101897869 bytes exceeds 100663296 bytes
ERROR: failed to solve: process did not complete successfully: exit code: 1
--- end of build output (set VERBOSE=true to stream it) ---

Under CI the output streams as the build runs, so a hung or slow layer is visible while it happens rather than only after the failure.

Tested on

OS Status
🍏 macOS ⚠️ not tested
🪟 Windows ⚠️ not tested
🐧 Linux ✅ tested

Environment (optional)

Linux, no container runtime available. After merging main: package-assets.test.js, build-sandbox-output.test.js, release-workflow.test.js and package-scripts.test.js — 99 passed, 2 skipped. Prettier, eslint and yamllint clean on every touched file. The full test:scripts suite is 70 passed / 5 failed here, and the same five files fail identically on the parent commit (install-script, qwen-pr-review-workflow, serve-ab-workflow, qwen-autofix-workflow, unit-vitest-configs) — they need a real build output, network access, a non-root user, or workspace node_modules this environment does not have. The container build itself is left to CI.

Risk & Scope

  • Main risk or tradeoff: the quiet path now buffers the build output instead of dropping it, so maxBuffer is raised to 128 MiB — well clear of a real build's output, since exceeding it would kill an otherwise healthy build. CI takes the streaming path and buffers nothing. The new quality_build step adds a bundle to a job that already installs and builds.
  • Not validated / out of scope: the docker image build end to end (no container runtime in the environment this was written in); the size budget itself, which fix(release): raise prepared package size budget to 112 MiB (#10774) #10781 already raised; the package composition, which this PR does not change.
  • Breaking changes / migration notes: none.

Linked Issues

Context, not fixes: #10779 and #10775 (the release failures this came out of) were caused by the size budget, which #10781 raised.

中文说明

此 PR 的作用

两项改动,针对发布流水线如何报告打包失败,都来自 #10781 刚刚解封的那次发布:

  • build_sandbox.js 不再丢弃容器构建的输出。CI 下直接 stream;本地安静模式会保留输出,并在构建失败时打印末尾部分。
  • quality_build 在上传构建产物之后执行 npm run bundle && npm run prepare:package,让 prepare:package 的各项校验由一个快速 job 触发,而不是第一次在 Dockerfile 里被触发。

本分支原本还包含把体积上限提到 112 MiB 的改动。#10781 先一步把它合进了 main,常量与测试数值完全相同,因此这里已合入 main 并整份采用其 scripts/prepare-package.js。剩下的只有「这个失败花了多久才被定位」这一部分。

为什么需要

96 MiB 上限被触发本身只是一行报错。但读到这一行的代价是两次二十分钟的发布运行,原因就是本 PR 修复的这两点。

除非设置 VERBOSE,否则 build_sandbox.js 会把镜像构建的输出送进 /dev/null,失败时只剩一个 stdout: nullexecSync 堆栈 —— 看不出 Dockerfile 哪一行失败,除了手动重跑一遍别无他法。e2e.yml 早已通过在构建步骤上设置 VERBOSE: 'true' 绕开这一点,release.yml 没有。这就是为什么同一个 commit 的真实报错(Prepared package unpacked size 101897869 bytes exceeds 100663296 bytes)出现在 E2E 日志里,却在发布日志里完全缺席 —— 发布运行只报告了 docker build 退出码为 1。把默认行为绑定在 CI 上,而不是指望每个 workflow 都记得设置 VERBOSE,意味着下一次镜像内部的失败无论发生在哪里都可读,包括开发者本机。

顺序问题是另一半。Build Bundle 与 publish job 之间没有任何地方跑 prepare:package,于是它的各项校验 —— 体积闸门、禁用字符串扫描、缺失产物检查 —— 第一次被触发是在整条流水线最慢的消费者里,打包问题只能靠构建一个容器镜像才能发现。quality_build 本来就要安装依赖并构建,在那里加上 bundle + prepare,几分钟内就能报出同样的失败。它特意放在 Upload Build Outputs 之后,以保证下游 job 拿到的 artifact 与前面步骤产出的完全一致。

体积上限还会再次被触碰 —— 这个包已经从 0.22.1 的 96,802,417 字节长到现在的 101,897,869,而在 OpenTUI 迁移完成前,ink 与 OpenTUI 两套栈会同时留在同一个 bundle 里。到那时,本 PR 的差别就是:一个五分钟、直接给出数字的红色 job,还是一个二十分钟、什么都不打印的。(如果我们更希望把包瘦下来而不是继续抬高上限,值得下手的两处是 vendor/ripgrep(五个平台二进制共 24 MiB)和 web-shell/assets(18 MiB,主要是 shiki 语法、mermaid 和 cytoscape)。那是单独的改动,也是产品决策。)

审阅者测试计划

如何验证

  1. npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/build-sandbox-output.test.js —— 新增;在 PATH 上放一个让 build 子命令失败的假 docker,断言两条路径上输出都会送到使用者面前:安静模式下捕获并在失败时打印,CI 下直接 stream。1 秒内完成,不需要容器运行时。
  2. 在有 docker 的机器上,想在真实构建里看效果又不必等一次真失败:BUILD_SANDBOX_FLAGS='--target nosuchstage' QWEN_SANDBOX=docker npm run build:sandbox -- -s --no-prune —— 现在你看到的是 docker 自己的错误文本,而不是 stdout: null
  3. npm run bundle && npm run prepare:package —— 即新增的 quality_build 步骤所跑的内容。在今天的 main 上正常结束;在 e28f17de7a~1 上则用约两分钟(而非二十分钟)复现那次发布失败。

证据(前后对比)

修复前 —— 发布日志记录到的全部内容(run 33594509319,integration_docker):

building ghcr.io/qwenlm/qwen-code:0.22.3-release-7df5ac6898a476f6a7a35b5271e8648c532bbec6 ... (can be slow first time)
Error: Command failed: docker build  --label org.qwen-code.ci.sandbox=true ... -f "Dockerfile" -t "..." .
  status: 1,
  output: [ null, null, null ],
  stdout: null,
  stderr: null

修复后 —— 同一个失败,安静(非 CI)路径:

building ghcr.io/qwenlm/qwen-code:0.22.3 ... (can be slow first time)

--- last 200 lines of docker build output ---
#10 299.8 Error: Prepared package unpacked size 101897869 bytes exceeds 100663296 bytes
ERROR: failed to solve: process did not complete successfully: exit code: 1
--- end of build output (set VERBOSE=true to stream it) ---

CI 下输出随构建实时 stream,因此某一层卡住或变慢时能当场看到,而不是只能等失败之后。

测试平台

系统 状态
🍏 macOS ⚠️ 未测试
🪟 Windows ⚠️ 未测试
🐧 Linux ✅ 已测试

环境(可选)

Linux,无可用容器运行时。合入 main 之后:package-assets.test.jsbuild-sandbox-output.test.jsrelease-workflow.test.jspackage-scripts.test.js —— 99 passed,2 skipped。所有改动文件的 prettier、eslint、yamllint 均干净。完整的 test:scripts 套件在此环境下为 70 passed / 5 failed,且同样的五个文件在父提交上以完全相同的方式失败(install-scriptqwen-pr-review-workflowserve-ab-workflowqwen-autofix-workflowunit-vitest-configs)—— 它们需要真实构建产物、网络访问、非 root 用户,或此环境不具备的 workspace node_modules。容器构建本身交给 CI 验证。

风险与范围

  • 主要风险 / 取舍:安静路径现在会缓冲构建输出而不是丢弃,因此 maxBuffer 提高到 128 MiB —— 远高于真实构建的输出量,因为一旦超限会杀掉一个本来健康的构建。CI 走 stream 路径,不做任何缓冲。新增的 quality_build 步骤给一个本就要安装并构建的 job 增加了一次 bundle。
  • 未验证 / 不在范围内:docker 镜像的端到端构建(撰写本 PR 的环境没有容器运行时);体积上限本身,fix(release): raise prepared package size budget to 112 MiB (#10774) #10781 已经调过;包的构成,本 PR 不改变。
  • 破坏性变更 / 迁移说明:无。

关联 Issue

仅作背景,非修复:#10779#10775(本 PR 起因的那两次发布失败)由体积上限导致,该上限已由 #10781 提高。

…uild failures

The docker sandbox build in `integration_docker` has been failing every
release since 0.22.3-release-7df5ac68. The build itself is fine; what fails is
`npm run prepare:package` inside the Dockerfile's builder stage:

    Error: Prepared package unpacked size 101897869 bytes exceeds 100663296 bytes

`assertPreparedPackageSize`'s 96 MiB budget was set in #6691 when the prepared
package was ~80.6 MiB. It has grown with ordinary feature work since —
96,802,417 bytes at 0.22.1, 98,582,313 at the 08-31 nightly, 101,897,869 now,
with the OpenTUI migration batches carrying two UI stacks at once — and it
crossed the ceiling. Raise the budget to 112 MiB, the same "headroom, not
target" call #6688 and #6691 made before it. vendor/ripgrep (24 MiB, five
platform binaries) and web-shell/assets (18 MiB, mostly shiki grammars,
mermaid and cytoscape) are the two places worth trimming if we would rather
bring the package down than keep raising the ceiling; that is a separate
change.

The reason a one-line size error cost a 20-minute release run to diagnose is
the other half of this commit:

- `build_sandbox.js` sent the image build's output to /dev/null unless VERBOSE
  was set, so the failure surfaced as an execSync stack trace with
  `stdout: null` and no way to tell what broke without rebuilding by hand.
  `e2e.yml` had already worked around this by setting VERBOSE; the release
  workflow had not. Now CI streams the output, and a quiet local build keeps
  it and prints the tail when the build fails.

- Nothing ran `prepare:package` before the publish job, so its guards were
  first exercised by the Dockerfile — the slowest consumer in the pipeline.
  `quality_build` now runs bundle + prepare:package after uploading its build
  artifact, which reports the same failure in minutes without touching what
  downstream jobs consume.
@qwen-code-ci-bot

qwen-code-ci-bot commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Qwen Triage finishedview run. See the stage comments in this thread for the result.

Qwen Triage 已完成 —— 查看运行。结果见本线程中的各阶段评论。

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Thanks for the PR!

Template looks good ✓ — all sections filled in, including before/after logs and the Chinese translation.

Problem: observed, not theoretical. Every release since 0.22.3-release-7df5ac68 has failed in integration_docker with Prepared package unpacked size 101897869 bytes exceeds 100663296 bytes — the two linked release-failure issues (#10775, #10779) are open, and the PR body carries the exact failure log. The diagnosability half (build output discarded unless VERBOSE, which e2e.yml already worked around) is just as well evidenced.

Direction: aligned — a blocked release pipeline is a concrete problem, and raising the budget follows the same call #6688 (80 → 85 MiB) and #6691 (85 → 96 MiB) made when ordinary growth reached the ceiling. One note: this lands in release infrastructure and the sandbox build script, which the gate treats as a maintainer sign-off area — so I'll review it fully but hand the final call to a maintainer rather than approving it through automatically.

Size: no core package paths touched. 65 production lines (release workflow + build_sandbox.js + prepare-package.js), 123 test lines.

Approach: the scope feels right. Three changes, each pulling its weight: the budget raise unblocks releases, the output-capture fix turns the next failure from a twenty-minute mystery into a one-line error, and the early prepare:package gate in quality_build catches the guard class before the slowest consumer. The trim-the-package alternative is correctly deferred as a separate product decision. Nothing here reads as drive-by.

Risk: no elevated risk signals — no high-risk paths matched.

Moving on to code review. 🔍

中文说明

感谢贡献!

模板完整 ✓ —— 各部分均已填写,包括前后对比日志和中文翻译。

问题:已观测到的实际问题,不是理论假设。自 0.22.3-release-7df5ac68 起,每次发布都在 integration_docker 失败(Prepared package unpacked size 101897869 bytes exceeds 100663296 bytes)——关联的两个发布失败 issue(#10775#10779)均未关闭,PR 正文附有确切的失败日志。可诊断性那一半(构建输出除非 VERBOSE 否则被丢弃,e2e.yml 早已为此打过补丁)同样证据充分。

方向:对齐 —— 发布流水线被阻塞是具体的问题;提高预算与 #6688(80 → 85 MiB)、#6691(85 → 96 MiB)在正常增长触顶时的做法一致。一点说明:本 PR 落在发布基础设施和 sandbox 构建脚本上,属于 gate 规则中需要维护者拍板的领域——因此会完整评审,但最终决定交给维护者,不会自动批准。

规模:未触及核心包路径。生产代码 65 行(发布工作流 + build_sandbox.js + prepare-package.js),测试 123 行。

方案:范围合理。三处改动各司其职:提高预算解除发布阻塞;输出捕获让下一次失败从二十分钟的谜团变成一行错误;quality_build 中提前的 prepare:package 关卡让这一类守卫在最慢的消费者之前触发。裁剪包体积的替代方案被正确地推迟为另一个产品决策。没有顺手改动。

风险:无升级风险信号——未命中高风险路径。

进入代码审查 🔍

Qwen Code · qwen3.8-max

Reviewed at e28f17de7aa5926303c2225a40f38f1812e90c43 · re-run with @qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Code review

I wrote my baseline proposal before reading the diff: raise the budget constant with headroom (precedent of #6688/#6691), capture the docker build output and print it on failure instead of discarding it, and add an early prepare:package step to the release workflow. The PR matches that almost exactly, and it covers the details I would have wanted:

  • build_sandbox.js — streams under VERBOSE or CI (previously only VERBOSE, which is precisely why the release logs were empty while the E2E logs were not), captures stdout+stderr otherwise, and on failure prints the last 200 lines in a labeled frame before rethrowing. The new catch composes correctly with the existing finally that removes the temp podman auth file, and the 128 MiB maxBuffer avoids the trap where capturing multi-megabyte build output would itself kill the child. The post-success "output file already exists" throw is also handled cleanly — no captured output, nothing printed.
  • prepare-package.js — 96 → 112 MiB (117,440,512 bytes), ~15% headroom over the measured 101,897,869 bytes, and the comment correctly documents the constant as a runaway-growth guard and records the raise history.
  • release.ymlVerify Prepared Package runs after the artifact upload in quality_build, so the packed artifact stays byte-for-byte what the build steps produced; the downstream jobs already needs: quality_build, so the gate rides the existing dependency graph with no new wiring.
  • Tests — build-sandbox-output.test.js puts a fake docker on PATH that fails only the build subcommand, and pins both halves of the fix (quiet path prints the capture, CI path streams and does not reprint). The budget test pins the exact new boundary (111 MiB passes, 112 MiB throws, error-message bytes updated). Both pin the change — the suite fails with the fix removed.

No correctness, security, or convention issues found. Nothing blocking.

Test evidence

From the PR's own CI at the reviewed commit — no failures so far, with the main suite still running; 31 skipped checks are conditional bot lanes. The author's local results (35 script tests + 64 workflow/script tests passing, five environment-dependent failures identical on the parent commit) are their claim, not independently re-run here.

Final CI results for e28f17d (auto-updated by the triage finalize job after CI completed):

Check Conclusion
Post Coverage Comment 🚫 cancelled
Test (ubuntu-latest, Node 22.x) 🚫 cancelled
web-shell E2E Smoke (ubuntu-latest, Node 22.x) 🚫 cancelled
Classify PR ✅ success
Dependency CVE audit ✅ success
Desktop Shell (ubuntu-22.04) ✅ success
Desktop Shell (windows-2022) ✅ success
Integration Tests (no-AK, No Sandbox) ✅ success
Secret scan (TruffleHog) ✅ success

One row per check name (latest run); skipped checks omitted; failures sort first. / 每个检查名一行(取最新一次运行),省略 skipped,失败项排在最前。

The pending Test job is where the new script tests run; the finalize job rewrites the table region once CI settles.

Not verified: a real container image build on the raised budget — the author had no container runtime locally, and PR CI has no docker image build leg (that is release-only). Sandboxed verification would settle the load-bearing half of the claim: @qwen-code /verify — that npm run bundle && npm run prepare:package completes on this branch while the base build fails with the size error.

中文说明

代码审查:读 diff 前先独立写了方案(按先例提高预算常数并留余量、失败时捕获并打印 docker 构建输出、在发布工作流提前加 prepare:package 步骤),PR 与之几乎完全一致,且细节到位:build_sandbox.jsVERBOSE CI 下流式输出(此前仅 VERBOSE,这正是发布日志为空而 E2E 日志有内容的原因),否则捕获并在失败时打印带标记框的最后 200 行再抛出;新 catch 与清理临时 podman auth 文件的既有 finally 正确组合,128 MiB maxBuffer 避免捕获海量输出本身杀死子进程。预算 96 → 112 MiB(117,440,512 字节),相对实测 101,897,869 字节约 15% 余量,注释正确记录了该常数作为失控增长守卫的定位与历次提升。release.ymlVerify Prepared Package 在工件上传之后运行,打包工件保持构建步骤的原样;下游作业本就 needs: quality_build,无需新接线。新测试钉住了修复——假 docker 仅在 build 子命令上失败,分别断言安静路径打印捕获、CI 路径直接流式;预算测试钉住精确新边界。移除修复测试即失败。未发现正确性、安全性或规范问题,无阻塞项。

测试证据:来自被审提交上 PR 自身的 CI——目前无失败,主套件仍在运行(新脚本测试跑在 Test 作业里);31 个 skipped 为条件性 bot 通道。作者本地测试结果为其自述,未在此独立复跑。作者本地无容器运行时,且 PR CI 没有 docker 镜像构建通道(仅在发布流程中),因此"真实镜像构建在新预算下通过"这一端到端断言尚无任何证据支撑。沙箱验证可以钉住其中承重的部分:@qwen-code /verify —— 本分支上 npm run bundle && npm run prepare:package 完成,而 base 构建上同一步骤因体积错误失败。

Qwen Code · qwen3.8-max

Reviewed at e28f17de7aa5926303c2225a40f38f1812e90c43 · re-run with @qwen-code /triage

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Confidence: 3/5 — clean review of a real, well-evidenced problem; the cap is policy, not doubt. This changes the release pipeline and the sandbox build script, an area the gate hands to a maintainer, and CI had not fully settled at review time.

Stepping back: the problem is unambiguous — releases have been failing on a known byte count for days, with two open release-failure issues as evidence. The implementation is what I would have proposed: the budget raise follows the #6688/#6691 precedent, the output fix turns the next such failure from an opaque stack trace into a one-line error, and the early gate in quality_build reports it in minutes instead of twenty. Every changed line serves the stated goal; the tests pin the change (remove the fix and they fail); the comments explain why the budget is what it is, which is what I'd want to find when maintaining this in six months.

Two gaps remain, and neither is something I can close from the diff: the main Test suite was still running at review time, and the end-to-end claim — a real docker image build passing on the raised budget — has no PR CI leg and is normally proven only at release time (a @qwen-code /verify run can settle the prepare:package half beforehand; named in the Stage 2 comment).

Verdict: not approving — nothing is wrong in the diff, but a release-infrastructure change is exactly the class of PR where the gate's job ends at "reviewed, looks right" and a maintainer makes the call.

中文说明

回顾整体:问题毫无疑问——发布已连续多天因一个已知的字节数失败,且有两个未关闭的发布失败 issue 为证。实现与我独立提出的方案一致:预算提升沿用 #6688/#6691 的先例;输出修复让下一次同类失败从看不懂的堆栈变成一行错误;quality_build 中的提前关卡把报告时间从二十分钟缩到几分钟。每一行改动都服务于既定目标;测试钉住了修复(移除修复即失败);注释解释了预算为何是这个值——这正是六个月后维护时我想看到的东西。

仍有两个我无法仅凭 diff 关闭的缺口:审查时主 Test 套件仍在运行;端到端断言——真实 docker 镜像构建在新预算下通过——没有 PR CI 通道,通常只能在发布时证明(可先用 @qwen-code /verify 钉住 prepare:package 那一半,见 Stage 2 评论)。

结论:不批准——diff 本身没有问题,但发布基础设施改动正是 gate 的职责止步于"已审查、看起来正确"、由维护者拍板的那一类。置信度 3/5 是政策上限,不是真实疑虑。

Qwen Code · qwen3.8-max

Reviewed at e28f17de7aa5926303c2225a40f38f1812e90c43 · re-run with @qwen-code /triage

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

⏸️ Deferring to maintainer — the review is clean and the problem is real, but this PR changes the release pipeline and the sandbox build script, which the triage gate does not auto-approve. Two items for the human call: (1) the main Test suite was still running at review time, and (2) the end-to-end docker build on the raised budget has no PR CI leg — a @qwen-code /verify run can settle the prepare:package half beforehand. Needs a human call on this one.

中文说明

⏸️ 转交维护者——评审干净、问题真实,但本 PR 改动了发布流水线与 sandbox 构建脚本,triage gate 不会自动批准此类改动。需要人工判断的两点:(1)审查时主 Test 套件仍在运行;(2)新预算下的 docker 镜像端到端构建没有 PR CI 通道——可先用 @qwen-code /verify 钉住 prepare:package 那一半。

Qwen Code · qwen3.8-max

#10781 raised the budget to 112 MiB on main while this branch was open, with
the same constant and the same test values this branch carried. Take main's
version of prepare-package.js wholesale — the budget half of this branch is
now upstream, and what remains is the diagnosability half: build_sandbox.js
surfacing the container build's output, and quality_build running
prepare:package before the Dockerfile does.
@yiliang114 yiliang114 changed the title fix(release): raise the package size budget and stop hiding sandbox build failures fix(release): stop hiding sandbox build failures and check the prepared package early Sep 2, 2026
@yiliang114
yiliang114 enabled auto-merge September 2, 2026 07:51
@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Qwen Code review did not complete successfully. The review pipeline failed before a review could be posted. A transient error is retried automatically; if you are seeing this, retry with @qwen-code /review. See workflow logs.

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI N/A% N/A% N/A% N/A%
Core 89.04% 89.04% 90.7% 87.49%
CLI Package - Full Text Report
CLI full-text-summary.txt not found at: coverage_artifact/cli/coverage/full-text-summary.txt
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   89.04 |    87.49 |    90.7 |   89.04 |                   
 src               |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/agents        |    90.4 |    84.86 |   94.02 |    90.4 |                   
  ...transcript.ts |   88.86 |    81.05 |     100 |   88.86 | ...93,701,707-711 
  ...ent-resume.ts |   85.43 |    78.13 |    85.1 |   85.43 | ...1845-1849,1852 
  ...ound-tasks.ts |   95.19 |    90.75 |   96.42 |   95.19 | ...1889,1897-1898 
  forkedAgent.ts   |   95.91 |    87.12 |   94.44 |   95.91 | ...76-478,601,728 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   94.64 |    88.67 |   95.71 |   94.64 | ...1676,1690-1692 
  ...w-snapshot.ts |   75.58 |    72.47 |    87.5 |   75.58 | ...24,448,455-457 
  worktree-pin.ts  |     100 |    88.23 |     100 |     100 | 78,99             
 src/agents/arena  |   76.87 |    68.43 |   78.94 |   76.87 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |    75.8 |    65.46 |   78.57 |    75.8 | ...1879,1885-1886 
  arena-events.ts  |   64.44 |      100 |      50 |   64.44 | ...71-175,178-183 
  diff-summary.ts  |    87.5 |    72.34 |     100 |    87.5 | ...32-133,137-138 
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...gents/backends |   77.78 |    86.68 |   75.86 |   77.78 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   92.14 |    90.74 |   97.05 |   92.14 | ...38-539,673-679 
  TmuxBackend.ts   |    90.7 |    76.55 |   97.36 |    90.7 | ...87,697,743-747 
  detect.ts        |   31.25 |      100 |       0 |   31.25 | 34-88             
  index.ts         |     100 |      100 |     100 |     100 |                   
  iterm-it2.ts     |     100 |     92.1 |     100 |     100 | 37-38,106         
  tmux-commands.ts |    6.64 |      100 |    3.03 |    6.64 | ...93-363,386-503 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...agents/runtime |   93.49 |    87.53 |   91.66 |   93.49 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  ...-test-mock.ts |   98.82 |    66.66 |   58.33 |   98.82 | 85                
  agent-core.ts    |   90.33 |    80.45 |   81.25 |   90.33 | ...2628,2674-2676 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   93.67 |       90 |   83.33 |   93.67 | ...13-514,517-518 
  ...nteractive.ts |   83.48 |    85.13 |      80 |   83.48 | ...35,537,544,549 
  ...statistics.ts |   98.29 |    82.55 |     100 |   98.29 | 141,165,206,239   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ool-policy.ts |   98.38 |      100 |    92.3 |   98.38 | 85-86             
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...-scheduler.ts |   97.43 |    96.36 |     100 |   97.43 | 128-130           
  ...ow-journal.ts |   92.78 |    78.12 |     100 |   92.78 | ...49-150,192-194 
  ...ta-literal.ts |   95.96 |    92.68 |     100 |   95.96 | ...78-379,395-396 
  ...chestrator.ts |   93.87 |     90.5 |     100 |   93.87 | ...2225,2318-2321 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...low-runner.ts |   94.08 |     85.4 |   95.65 |   94.08 | ...68,435,455-458 
  ...ow-sandbox.ts |    97.4 |    89.37 |     100 |    97.4 | ...1846,1852-1853 
  ...flow-saved.ts |    96.7 |     93.9 |     100 |    96.7 | 153-154,261-264   
  ...flow-stall.ts |    97.9 |    83.33 |     100 |    97.9 | 170-171,270       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   86.08 |    86.84 |   91.21 |   86.08 |                   
  TeamManager.ts   |   80.54 |    85.41 |   84.37 |   80.54 | ...2123,2146-2147 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   96.02 |     87.5 |     100 |   96.02 | 352-358           
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   89.84 |    84.23 |     100 |   89.84 | ...1013,1057-1058 
  team-events.ts   |   73.68 |      100 |   66.66 |   73.68 | 140-144,151-155   
  teamHelpers.ts   |   92.99 |    94.52 |      95 |   92.99 | ...29-330,415-425 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   95.28 |    95.34 |   98.24 |   95.28 |                   
  ...on-harness.ts |   96.49 |    85.71 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |     100 |    96.96 |     100 |     100 | 189,198           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |   86.63 |    88.95 |   79.11 |   86.63 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   85.28 |     88.3 |    77.2 |   85.28 | ...9865,9869-9871 
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...ver-config.ts |   97.29 |      100 |   83.33 |   97.29 | 48-49             
  models.ts        |     100 |      100 |     100 |     100 |                   
  ...sDiscovery.ts |   97.46 |    93.05 |     100 |   97.46 | ...04,182-183,202 
  storage.ts       |   96.05 |    93.43 |   89.47 |   96.05 | ...34-735,738-739 
 ...nfirmation-bus |   98.27 |    97.22 |     100 |   98.27 |                   
  message-bus.ts   |   98.14 |    97.14 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   92.79 |    88.67 |   94.05 |   92.79 |                   
  ...on-restore.ts |   88.23 |    85.41 |     100 |   88.23 | ...60,63-64,67-68 
  baseLlmClient.ts |    88.4 |    83.33 |   81.81 |    88.4 | ...59,672,678-680 
  client.ts        |    92.1 |    88.04 |   92.23 |    92.1 | ...4966,5064-5065 
  ...tGenerator.ts |   87.45 |    88.09 |   88.88 |   87.45 | ...09-510,555-561 
  ...lScheduler.ts |   90.22 |    84.87 |   94.78 |   90.22 | ...6545,6573-6589 
  ...entContext.ts |   96.67 |    90.25 |   96.77 |   96.67 | ...48,450-451,518 
  geminiChat.ts    |     100 |      100 |     100 |     100 |                   
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  genai-compat.ts  |     100 |      100 |     100 |     100 |                   
  ...MediaLimit.ts |     100 |       96 |     100 |     100 | 96                
  ...htProtocol.ts |    9.09 |      100 |       0 |    9.09 | ...9,62-66,69-110 
  ...ream-error.ts |     100 |      100 |     100 |     100 |                   
  llm-chat.ts      |   95.32 |    90.98 |   96.66 |   95.32 | ...5891,5936-5937 
  llm-request.ts   |     100 |      100 |     100 |     100 |                   
  logger.ts        |   87.41 |    87.02 |     100 |   87.41 | ...64-568,614-628 
  ...lay-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...dispatcher.ts |     100 |      100 |     100 |     100 |                   
  ...tyDefaults.ts |     100 |      100 |     100 |     100 |                   
  ...olExecutor.ts |   93.54 |    83.33 |      50 |   93.54 | 46-47             
  output-styles.ts |     100 |      100 |     100 |     100 |                   
  ...on-helpers.ts |   95.38 |    84.31 |     100 |   95.38 | ...87,215,217-218 
  ...issionFlow.ts |   98.98 |    96.96 |     100 |   98.98 | 109               
  ...try-policy.ts |     100 |      100 |     100 |     100 |                   
  ...ell-policy.ts |   94.89 |    88.54 |     100 |   94.89 | ...51-252,297-298 
  prompts.ts       |   94.11 |    91.47 |   86.36 |   94.11 | ...1311,1514-1515 
  ...ing-effort.ts |     100 |      100 |     100 |     100 |                   
  ...n-recovery.ts |   95.13 |       80 |     100 |   95.13 | ...06-107,142-144 
  ...t-profiler.ts |    97.9 |    81.15 |   88.23 |    97.9 | 117,124-125,130   
  stream-guards.ts |   91.16 |    93.18 |     100 |   91.16 | ...89,218-229,294 
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |     92.1 |     100 |     100 | 87,122-139        
  ...-arguments.ts |     100 |      100 |     100 |     100 |                   
  ...reparation.ts |     100 |      100 |     100 |     100 |                   
  ...tion-guard.ts |   90.38 |    94.73 |     100 |   90.38 | 83-87             
  ...allIdUtils.ts |   98.81 |    91.22 |     100 |   98.81 | 43,52             
  ...okTriggers.ts |   99.45 |     92.5 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   99.21 |    94.69 |     100 |   99.21 | 787-788,857       
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   96.62 |    89.21 |   97.43 |   96.62 |                   
  ...tGenerator.ts |   97.71 |    89.13 |   97.43 |   97.71 | ...1539,1568,1579 
  converter.ts     |   96.19 |    89.25 |     100 |   96.19 | ...1334,1555-1557 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 ...tent-generator |   89.24 |    72.72 |   94.11 |   89.24 |                   
  index.ts         |     100 |    85.71 |     100 |     100 | 51                
  ...-generator.ts |   87.54 |    71.42 |   93.75 |   87.54 | ...93-294,356-362 
 ...ntentGenerator |   95.78 |    90.51 |   96.22 |   95.78 |                   
  ...e-snapshot.ts |   97.39 |    89.65 |     100 |   97.39 | ...,49-50,151-152 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   95.38 |    90.14 |   95.12 |   95.38 | ...1345-1346,1374 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   92.52 |    91.14 |   96.36 |   92.52 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   91.54 |    90.36 |   96.87 |   91.54 | ...1994,2163-2178 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   76.19 |    88.88 |      50 |   76.19 | 44-53,90-94       
  ...tGenerator.ts |      70 |    73.33 |     100 |      70 | ...07-112,121-127 
  pipeline.ts      |   96.21 |    91.11 |     100 |   96.21 | ...1208-1209,1316 
  ...ix-caching.ts |   95.23 |    92.85 |     100 |   95.23 | 45-46,69-70       
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |   92.11 |    92.25 |     100 |   92.11 | ...21-522,542-545 
  ...kingParser.ts |     100 |    96.96 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   97.25 |    92.07 |   98.64 |   97.25 |                   
  dashscope.ts     |   98.42 |    95.27 |   96.55 |   98.42 | ...51-752,894-895 
  deepseek.ts      |   95.27 |    90.56 |     100 |   95.27 | ...52-153,166-167 
  default.ts       |    98.9 |    96.29 |     100 |    98.9 | 178,307           
  index.ts         |     100 |      100 |     100 |     100 |                   
  mimo.ts          |   94.11 |    66.66 |     100 |   94.11 | 29,52-53          
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  mistral.ts       |   96.07 |    73.33 |     100 |   96.07 | 32-33             
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
  zai.ts           |      90 |    76.31 |     100 |      90 | ...,72-73,173-175 
 src/extension     |   89.29 |    86.66 |   93.68 |   89.29 |                   
  ...ive-safety.ts |    97.9 |     92.8 |     100 |    97.9 | 235-236,313-316   
  ...-converter.ts |   80.55 |    73.66 |     100 |   80.55 | ...1133,1179-1180 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |     100 |      100 |     100 |     100 |                   
  ...git-client.ts |     100 |      100 |     100 |     100 |                   
  ...redentials.ts |   95.33 |    89.47 |     100 |   95.33 | ...21-122,173-175 
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   93.05 |    89.59 |   98.36 |   93.05 | ...1694-1700,1744 
  ...ionManager.ts |   85.41 |    84.48 |   83.49 |   85.41 | ...3261,3299-3300 
  ...references.ts |     100 |     90.9 |     100 |     100 | ...05,129,197,200 
  ...onSettings.ts |    92.3 |     94.4 |     100 |    92.3 | ...98-501,570-571 
  ...-converter.ts |   78.91 |    86.04 |   85.71 |   78.91 | ...95,202,214-248 
  github.ts        |   92.61 |    87.44 |     100 |   92.61 | ...1310-1311,1321 
  http-client.ts   |   84.61 |       80 |     100 |   84.61 | 20-21             
  i18n.ts          |   78.26 |       96 |      50 |   78.26 | 104-110,116-123   
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   88.39 |    83.11 |     100 |   88.39 | ...08,494,507-508 
  ...ork-policy.ts |   89.72 |    90.16 |     100 |   89.72 | ...36,148-154,156 
  npm.ts           |   89.02 |    81.81 |     100 |   89.02 | ...86-688,695-700 
  override.ts      |   94.11 |    93.54 |     100 |   94.11 | 63-64,81-82       
  ...-converter.ts |   94.89 |    90.41 |     100 |   94.89 | ...50-151,222-224 
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-107,141-146    
  ...ceRegistry.ts |   94.01 |    83.33 |     100 |   94.01 | ...38-344,365-366 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.95 |    84.21 |     100 |   88.95 | ...32-235,238-241 
  ...extraction.ts |   85.77 |       81 |   89.47 |   85.77 | ...02-205,260-261 
 ...ent-plugins-v1 |   84.94 |    79.51 |     100 |   84.94 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  manifest.ts      |   81.87 |    84.48 |     100 |   81.87 | ...55-156,161-174 
  mcp.ts           |   84.98 |    79.56 |     100 |   84.98 | ...88-389,419-420 
  paths.ts         |     100 |    94.44 |     100 |     100 | 59                
  skills.ts        |   82.31 |    63.88 |     100 |   82.31 | ...38-141,150-151 
 src/followup      |   84.78 |    82.27 |   86.84 |   84.78 |                   
  followupState.ts |   98.44 |    95.74 |     100 |   98.44 | 236-237           
  index.ts         |     100 |      100 |     100 |     100 |                   
  overlayFs.ts     |   96.29 |    88.88 |     100 |   96.29 | 78,108,122        
  speculation.ts   |   76.53 |    71.96 |   58.33 |   76.53 | ...48-749,756-757 
  ...onToolGate.ts |   97.97 |     87.5 |     100 |   97.97 | 105,110           
  ...nGenerator.ts |   86.11 |    87.17 |     100 |   86.11 | ...39-244,356-358 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |    93.7 |    90.48 |   95.32 |    93.7 |                   
  ...eGoalStore.ts |   87.61 |    89.28 |   86.66 |   87.61 | ...85-188,196-204 
  ...t-verifier.ts |   99.45 |    97.05 |     100 |   99.45 | 155               
  ...checkpoint.ts |   86.08 |    85.18 |     100 |   86.08 | ...29-132,142-145 
  ...ion-prompt.ts |     100 |      100 |     100 |     100 |                   
  goal-evidence.ts |    88.7 |     88.2 |   97.67 |    88.7 | ...1219,1242-1245 
  ...projection.ts |   66.66 |    72.97 |   33.33 |   66.66 | ...87,190,194-196 
  ...ersistence.ts |   87.36 |    85.96 |    87.5 |   87.36 | ...53-154,185-190 
  goal-protocol.ts |   97.56 |    96.42 |     100 |   97.56 | 322-323           
  goal-reducer.ts  |   95.75 |    93.79 |   97.36 |   95.75 | ...76,666,684-685 
  goal-runtime.ts  |   96.54 |    90.73 |   96.49 |   96.54 | ...1649-1650,1794 
  ...provenance.ts |     100 |      100 |     100 |     100 |                   
  goal-tools.ts    |   97.58 |    94.27 |   97.72 |   97.58 | ...96-697,915-916 
  ...rn-context.ts |     100 |      100 |     100 |     100 |                   
  goal-verifier.ts |   92.46 |    93.02 |     100 |   92.46 | ...69-172,185-187 
  goal-wire.ts     |       0 |        0 |       0 |       0 | 1-28              
  goalHook.ts      |   96.91 |    92.53 |     100 |   96.91 | 115-120,221-222   
  goalJudge.ts     |   95.84 |    87.09 |     100 |   95.84 | ...55-356,448-449 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/hooks         |   90.62 |    87.01 |   90.32 |   90.62 |                   
  ...okRegistry.ts |   86.48 |    77.08 |     100 |   86.48 | ...41-344,362-369 
  ...bortSignal.ts |     100 |      100 |     100 |     100 |                   
  context-usage.ts |     100 |      100 |     100 |     100 |                   
  ...terpolator.ts |   96.87 |    94.11 |     100 |   96.87 | 68-69             
  ...HookRunner.ts |   96.68 |    87.23 |     100 |   96.68 | 110-112,231-233   
  ...Aggregator.ts |   96.57 |    91.48 |     100 |   96.57 | ...20-321,402,404 
  ...entHandler.ts |   95.64 |    85.71 |   94.73 |   95.64 | ...1059-1060,1070 
  hookPlanner.ts   |   87.55 |    85.54 |   86.66 |   87.55 | ...22-226,233-244 
  hookRegistry.ts  |   92.53 |    85.43 |     100 |   92.53 | ...39,458,462,466 
  hookRunner.ts    |   85.68 |    82.96 |    92.3 |   85.68 | ...1289,1299-1302 
  hookSystem.ts    |   87.64 |     98.5 |   70.83 |   87.64 | ...62-763,769-770 
  ...HookRunner.ts |   79.12 |    66.66 |      80 |   79.12 | ...38-439,457-461 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...edCallback.ts |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   94.19 |    84.37 |   81.81 |   94.19 | ...76-384,458-459 
  ...SkillHooks.ts |   82.47 |    84.21 |      75 |   82.47 | 63-67,174-189     
  ...oksManager.ts |   94.89 |    90.47 |     100 |   94.89 | ...97,338,340-342 
  ssrfGuard.ts     |   86.45 |    89.13 |     100 |   86.45 | ...85,289-295,301 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   94.25 |    96.09 |   88.88 |   94.25 | ...46-547,632-636 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
  ...it-context.ts |     100 |      100 |     100 |     100 |                   
 src/ide           |   76.98 |    85.03 |   79.03 |   76.98 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   69.16 |    84.65 |   68.29 |   69.16 | ...1068,1097-1105 
  ide-installer.ts |   89.06 |    79.31 |     100 |   89.06 | ...36,143-147,160 
  ideContext.ts    |     100 |      100 |     100 |     100 |                   
  process-utils.ts |   84.84 |    71.79 |     100 |   84.84 | ...37,151,193-194 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ipc           |   94.83 |     94.5 |   96.96 |   94.83 |                   
  inbound-gate.ts  |   99.05 |    90.43 |     100 |   99.05 | 604-606           
  ...-directory.ts |     100 |      100 |     100 |     100 |                   
  peer-envelope.ts |     100 |      100 |     100 |     100 |                   
  peer-frames.ts   |   97.97 |    96.62 |     100 |   97.97 | 277-279           
  peer-routing.ts  |     100 |      100 |     100 |     100 |                   
  peer-send.ts     |   97.22 |    98.41 |   88.88 |   97.22 | 183-187           
  socket-path.ts   |   85.71 |    93.33 |     100 |   85.71 | 83-88             
  uds-client.ts    |   86.92 |    93.33 |   85.71 |   86.92 | 193-209           
  uds-inbox.ts     |   85.85 |    88.13 |     100 |   85.85 | ...90,297-307,371 
 src/lsp           |   58.96 |    70.67 |   66.49 |   58.96 |                   
  ...nfigLoader.ts |   80.55 |    72.22 |   95.65 |   80.55 | ...02-504,508-514 
  ...ionFactory.ts |   42.81 |    73.07 |      50 |   42.81 | ...76-427,433-450 
  ...Normalizer.ts |   23.09 |    13.72 |   30.43 |   23.09 | ...04-905,909-924 
  ...verManager.ts |   75.73 |     80.1 |   79.66 |   75.73 | ...1346,1352-1382 
  ...eLspClient.ts |   32.78 |    81.81 |   21.05 |   32.78 | ...89-293,299-300 
  ...LspService.ts |      60 |    73.36 |   78.26 |      60 | ...1575,1635-1645 
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |    82.3 |    77.81 |   78.33 |    82.3 |                   
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   79.31 |    58.06 |     100 |   79.31 | ...26-933,940-942 
  ...en-storage.ts |   98.78 |    97.95 |     100 |   98.78 | 106-107           
  oauth-utils.ts   |   73.61 |    85.48 |    92.3 |   73.61 | ...46-366,392-421 
  ...n-provider.ts |   89.83 |       96 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   82.12 |    88.48 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.71 |   95.23 |   87.08 | ...00-201,214-215 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/memory        |   89.47 |    85.73 |    92.1 |   89.47 |                   
  ...y-document.ts |   89.52 |    84.61 |     100 |   89.52 | ...24-325,329-330 
  ...nel-memory.ts |   97.36 |    96.63 |   96.42 |   97.36 | ...91-293,367-368 
  dream.ts         |    64.6 |    72.22 |      50 |    64.6 | ...04-109,124-165 
  ...entPlanner.ts |     100 |    83.33 |     100 |     100 | 135,145           
  entries.ts       |   75.59 |    84.84 |   83.33 |   75.59 | ...56-157,172-180 
  extract.ts       |   93.82 |    84.09 |     100 |   93.82 | 78-83,122,154-157 
  ...entPlanner.ts |   91.55 |    76.74 |     100 |   91.55 | ...05,118-121,296 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   90.71 |    81.14 |   94.44 |   90.71 | ...17,640,657-663 
  indexer.ts       |   94.14 |       84 |     100 |   94.14 | ...32-233,334,337 
  ...kill-agent.ts |   97.94 |    89.36 |     100 |   97.94 | 82-83,179-180     
  manager.ts       |   78.43 |    83.16 |   77.77 |   78.43 | ...1493,1506-1508 
  ...ent-config.ts |   92.22 |    84.78 |      92 |   92.22 | ...64,473-474,478 
  memoryAge.ts     |   90.47 |    84.61 |     100 |   90.47 | 50-51             
  ...yDiscovery.ts |   93.48 |    90.09 |     100 |   93.48 | ...42,401,629-632 
  paths.ts         |     100 |      100 |     100 |     100 |                   
  ...ing-skills.ts |     100 |       72 |     100 |     100 | 31-35,73-78,97    
  prompt.ts        |   97.26 |    86.79 |     100 |   97.26 | ...10-218,222,225 
  recall.ts        |   86.86 |    86.23 |   92.85 |   86.86 | ...33-538,571-582 
  refresh.ts       |   93.58 |    89.58 |     100 |   93.58 | ...75-176,183-184 
  ...ceSelector.ts |    93.2 |    85.71 |     100 |    93.2 | ...45-146,148-149 
  remember.ts      |   97.21 |    95.29 |     100 |   97.21 | ...29,341,345-347 
  scan.ts          |   93.75 |       80 |     100 |   93.75 | ...08-109,154,157 
  scopes.ts        |     100 |      100 |     100 |     100 |                   
  ...et-scanner.ts |     100 |      100 |     100 |     100 |                   
  ...entPlanner.ts |   79.76 |    76.84 |      80 |   79.76 | ...69-473,476,482 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   92.92 |    81.81 |     100 |   92.92 | ...16-117,147-148 
  ...git-status.ts |     100 |    85.71 |     100 |     100 | 27                
  ...cret-guard.ts |     100 |      100 |     100 |     100 |                   
  ...emory-sync.ts |   94.24 |    82.85 |     100 |   94.24 | ...34-236,246-247 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   81.21 |     79.1 |   81.81 |   81.21 | ...66-280,294-299 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   91.82 |    89.35 |   89.15 |   91.82 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   91.11 |    93.02 |     100 |   91.11 | 155,161,164-173   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   79.43 |    64.51 |   85.71 |   79.43 | ...,89-96,131-142 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.03 |     100 |     100 | 181,266           
  modelsConfig.ts  |   88.45 |    86.88 |   83.72 |   88.45 | ...1437,1460-1461 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/output        |     100 |      100 |     100 |     100 |                   
  ...-formatter.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/permissions   |   84.54 |    91.72 |   71.88 |   84.54 |                   
  autoMode.ts      |   97.75 |    93.42 |     100 |   97.75 | ...91-598,644,721 
  ...transcript.ts |   98.51 |    86.11 |     100 |   98.51 | 264-265           
  classifier.ts    |      94 |    94.44 |     100 |      94 | 158-165,389-393   
  ...erousRules.ts |     100 |    90.19 |     100 |     100 | 110,133,147,175   
  ...alTracking.ts |     100 |      100 |     100 |     100 |                   
  ...e-commands.ts |   86.77 |     73.8 |     100 |   86.77 | 131-141,210-214   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...on-manager.ts |    88.4 |    92.27 |   82.85 |    88.4 | ...1408,1514-1518 
  rule-parser.ts   |   94.92 |    92.81 |     100 |   94.92 | ...1555,1589-1591 
  ...-semantics.ts |   70.44 |    91.09 |   46.66 |   70.44 | ...2237,2311-2314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   99.06 |    95.23 |     100 |   99.06 |                   
  system-prompt.ts |   99.06 |    95.23 |     100 |   99.06 | 235               
 src/prompts       |   83.63 |      100 |    87.5 |   83.63 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |     100 |      100 |     100 |     100 |                   
 src/providers     |   85.14 |    80.63 |   82.85 |   85.14 |                   
  all-providers.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  install.ts       |   93.11 |     84.5 |     100 |   93.11 | ...56-257,330-331 
  ...-discovery.ts |    95.4 |    94.44 |     100 |    95.4 | 31-32,42-43       
  ...der-config.ts |   75.91 |    73.48 |   78.26 |   75.91 | ...74-475,503-504 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   98.04 |    91.66 |   63.63 |   98.04 |                   
  ...oding-plan.ts |    87.5 |      100 |       0 |    87.5 | 82-84,87-89,91-94 
  ...a-standard.ts |     100 |      100 |     100 |     100 |                   
  ...token-plan.ts |     100 |      100 |     100 |     100 |                   
  ...m-provider.ts |   97.05 |    81.25 |      75 |   97.05 | 118-119           
  deepseek.ts      |     100 |      100 |     100 |     100 |                   
  grok.ts          |     100 |      100 |     100 |     100 |                   
  idealab.ts       |     100 |      100 |     100 |     100 |                   
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  moonshot.ts      |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |   85.36 |    78.59 |   95.94 |   85.36 |                   
  ...tGenerator.ts |    98.6 |    98.14 |     100 |    98.6 | 103-104           
  qwenOAuth2.ts    |   82.79 |    73.45 |    90.9 |   82.79 | ...1205-1221,1251 
  ...kenManager.ts |   85.36 |     76.8 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |   90.85 |    86.63 |   96.52 |   90.85 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   98.47 |    88.69 |     100 |   98.47 | 85-86,109,473-474 
  branch-points.ts |     100 |    95.23 |     100 |     100 | ...20,211,224,327 
  ...ionService.ts |   97.82 |    96.77 |     100 |   97.82 | ...1150,1294-1302 
  ...ingService.ts |   92.25 |    87.59 |   94.79 |   92.25 | ...2924,2939-2940 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |   97.85 |    95.23 |     100 |   97.85 | ...64-365,485-488 
  cronScheduler.ts |   94.11 |    89.74 |   98.03 |   94.11 | ...1366,1775-1776 
  cronTasksFile.ts |   95.88 |       92 |     100 |   95.88 | ...72,381-382,520 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   96.22 |    93.54 |      90 |   96.22 | 121,155-156,161   
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |    97.5 |    96.07 |     100 |    97.5 | 349-350,363-364   
  ...temService.ts |    92.8 |    84.68 |   94.11 |    92.8 | ...53,479-486,531 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |      75 |       71 |   96.07 |      75 | ...2318,2347-2348 
  ...on-service.ts |   86.58 |    74.39 |     100 |   86.58 | ...56-460,498-499 
  ...references.ts |   98.57 |    91.42 |     100 |   98.57 | 156-157,217-218   
  ...ionService.ts |   97.85 |    94.07 |     100 |   97.85 | ...1217,1240-1241 
  ...ticsDumper.ts |   98.37 |    95.23 |     100 |   98.37 | 185-186           
  ...ureMonitor.ts |   95.82 |    90.52 |   97.05 |   95.82 | ...60,861,875-877 
  ...orRegistry.ts |   97.22 |    90.99 |     100 |   97.22 | ...55-456,609-610 
  ...ttachments.ts |   97.74 |     90.9 |     100 |   97.74 | 298-308,646       
  ...pi-history.ts |   98.94 |    89.13 |     100 |   98.94 | 43                
  ...ersistence.ts |   91.88 |    81.19 |     100 |   91.88 | ...1073-1074,1119 
  ...tory-state.ts |     100 |       95 |     100 |     100 | 31                
  ...on-service.ts |   94.61 |    92.44 |   97.22 |   94.61 | ...11-613,669-677 
  ...pr-service.ts |   94.28 |     91.8 |   92.59 |   94.28 | ...31-733,864-866 
  ...ce-service.ts |    98.5 |    94.11 |    90.9 |    98.5 | 64-65             
  ...n-registry.ts |   98.82 |    96.81 |     100 |   98.82 | 642,696-697,759   
  ...ken-counts.ts |     100 |       96 |     100 |     100 | 58                
  ...ipt-reader.ts |    93.7 |    91.22 |    97.8 |    93.7 | ...2791-2792,2869 
  ...turn-state.ts |   94.11 |     90.9 |   91.66 |   94.11 | 108-112,129-130   
  ...est-helper.ts |       0 |        0 |       0 |       0 | 1-65              
  ...iter-lease.ts |   84.56 |       75 |    97.8 |   84.56 | ...2666,2688,2702 
  sessionRecap.ts  |   67.56 |    43.47 |     100 |   67.56 | ...60,178,180-183 
  ...ionService.ts |   89.79 |       88 |   92.46 |   89.79 | ...4589-4590,4631 
  sessionTitle.ts  |   96.35 |    79.71 |     100 |   96.35 | ...08-311,342-343 
  ...ContextEnv.ts |     100 |    94.73 |     100 |     100 | 76,111            
  ...ionService.ts |   84.43 |    78.45 |   97.18 |   84.43 | ...2496,2502-2507 
  ...pInhibitor.ts |   97.42 |    92.77 |     100 |   97.42 | ...30,169,369-370 
  ...e-encoding.ts |   85.96 |    76.47 |     100 |   85.96 | 58-61,64-65,78-79 
  ...Estimation.ts |     100 |    95.83 |     100 |     100 | 139               
  ...ageService.ts |   97.76 |    91.59 |   93.75 |   97.76 | ...61-262,366,567 
  ...ite-origin.ts |     100 |    93.33 |     100 |     100 | 32                
  ...UseSummary.ts |   94.63 |    88.46 |     100 |   94.63 | ...62-164,214-215 
  ...rd-service.ts |     100 |    88.37 |     100 |     100 | ...29,145-146,241 
  ...oryService.ts |   91.89 |    86.15 |     100 |   91.89 | ...52-555,607-608 
  ...l-registry.ts |   92.99 |    83.19 |     100 |   92.99 | ...66-367,377-378 
  ...reeCleanup.ts |   14.42 |      100 |   33.33 |   14.42 | 58-186            
  ...ionService.ts |   88.36 |     87.7 |     100 |   88.36 | ...48-449,465-466 
 ...icrocompaction |   98.91 |    95.06 |     100 |   98.91 |                   
  microcompact.ts  |   98.91 |    95.06 |     100 |   98.91 | ...60,769,778-779 
 ...s/visionBridge |    98.8 |    92.12 |     100 |    98.8 |                   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |   98.72 |    82.35 |     100 |   98.72 | 65,71             
  ...ge-service.ts |   98.61 |     94.7 |     100 |   98.61 | ...06,666,679-680 
 src/skills        |   89.95 |     86.4 |   94.73 |   89.95 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |    93.33 |     100 |     100 | 93,112            
  skill-curator.ts |   89.71 |    81.54 |     100 |   89.71 | ...01-902,904-907 
  skill-load.ts    |   95.02 |    87.87 |     100 |   95.02 | ...19,239,251-253 
  skill-manager.ts |    86.6 |     86.6 |   86.11 |    86.6 | ...1286,1293-1297 
  skill-paths.ts   |   90.42 |     87.5 |     100 |   90.42 | ...19-120,125-126 
  symlinkScope.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |   97.91 |    98.07 |     100 |   97.91 | 289-290           
 ...ataviz/scripts |   80.06 |    95.23 |   88.23 |   80.06 |                   
  ...te_palette.js |   80.06 |    95.23 |   88.23 |   80.06 | 261-296,306-328   
 ...s/bundled/loop |   97.48 |    95.77 |     100 |   97.48 |                   
  ...omous-loop.ts |     100 |      100 |     100 |     100 |                   
  ...-task-file.ts |   94.85 |     92.4 |     100 |   94.85 | ...56,367,375-376 
  ...k-resolver.ts |     100 |      100 |     100 |     100 |                   
 src/subagents     |   89.01 |    89.44 |   98.41 |   89.01 |                   
  ...ter-schema.ts |     100 |    98.18 |     100 |     100 | 99                
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |    85.9 |    86.56 |   97.67 |    85.9 | ...1682,1759-1760 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   94.14 |    95.23 |     100 |   94.14 | 47-52,65-66,71-76 
 src/telemetry     |   83.24 |    84.96 |   86.51 |   83.24 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  context-usage.ts |   96.85 |    91.07 |     100 |   96.85 | ...26-127,199-200 
  ...on-metrics.ts |   99.08 |    80.95 |     100 |   99.08 | 185,199           
  ...on-tracing.ts |   80.71 |    81.91 |   79.16 |   80.71 | ...92,499-501,517 
  ...attributes.ts |   96.98 |    91.37 |     100 |   96.98 | ...47-348,366-367 
  ...ag-metrics.ts |     100 |    77.77 |     100 |     100 | 21,40             
  ...t-loop-lag.ts |   96.85 |    85.71 |     100 |   96.85 | 170-173           
  ...-exporters.ts |   65.38 |    83.33 |      50 |   65.38 | ...08-109,112-113 
  ...ai-content.ts |    74.5 |    66.41 |   91.66 |    74.5 | ...1480,1493-1502 
  ...i-provider.ts |     100 |    99.02 |     100 |     100 | 106               
  ...ai-request.ts |   87.88 |    92.85 |   83.78 |   87.88 | ...55-561,564-568 
  gen-ai-usage.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...-processor.ts |   99.12 |    96.03 |      95 |   99.12 | 150,379-380       
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |   60.83 |    77.24 |   66.66 |   60.83 | ...1523,1540-1560 
  metrics.ts       |   80.37 |    82.35 |   80.95 |   80.37 | ...1150,1153-1164 
  otlp-urls.ts     |     100 |      100 |     100 |     100 |                   
  ...attributes.ts |     100 |      100 |     100 |     100 |                   
  ...ime-config.ts |       0 |        0 |       0 |       0 | 1                 
  sanitize.ts      |      80 |    83.33 |     100 |      80 | 35-36,41-42       
  ...rters-grpc.ts |     100 |      100 |     100 |     100 |                   
  ...rters-http.ts |     100 |      100 |     100 |     100 |                   
  sdk-impl.ts      |   94.13 |    86.66 |      75 |   94.13 | ...45,496-497,513 
  sdk.ts           |    82.7 |     90.9 |   66.66 |    82.7 | ...00-204,242-264 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...ion-events.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   91.29 |    88.88 |    97.5 |   91.29 | ...1946,1975-1978 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  trace-context.ts |     100 |      100 |     100 |     100 |                   
  ...e-id-utils.ts |     100 |      100 |     100 |     100 |                   
  tracer.ts        |   98.56 |    88.63 |     100 |   98.56 | 52,101            
  types.ts         |   83.29 |    88.88 |   86.36 |   83.29 | ...1470,1474-1481 
  uiTelemetry.ts   |   98.87 |     95.1 |   97.05 |   98.87 | ...59,696,786-787 
 ...ry/qwen-logger |   74.14 |    80.17 |      70 |   74.14 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   74.14 |       80 |   69.49 |   74.14 | ...1123,1161-1162 
 src/test-utils    |   97.69 |    98.66 |   86.36 |   97.69 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   94.11 |       90 |     100 |   94.11 | 69-70             
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...mised-lock.ts |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |   97.14 |      100 |   82.85 |   97.14 | 85-86,227-228,241 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   87.92 |    86.54 |   90.47 |   87.92 |                   
  ...erQuestion.ts |      90 |    82.75 |   92.85 |      90 | ...01-402,409-410 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  ...ub-session.ts |   89.72 |    91.48 |   83.33 |   89.72 | ...06-307,318-325 
  cron-create.ts   |   92.26 |    97.72 |      75 |   92.26 | ...,76-77,272-281 
  cron-delete.ts   |   97.56 |      100 |   85.71 |   97.56 | 31-32             
  cron-list.ts     |   98.23 |    95.45 |   88.88 |   98.23 | 57-58             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  display-image.ts |   87.42 |    85.71 |    90.9 |   87.42 | ...29-134,194-195 
  edit.ts          |   82.76 |    86.88 |   82.35 |   82.76 | ...45-746,865-915 
  ...r-worktree.ts |   83.14 |    68.42 |   88.88 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |      85 |       84 |      90 |      85 | ...28-133,161-175 
  exit-worktree.ts |   83.37 |     83.8 |   94.73 |   83.37 | ...14-515,537-538 
  exitPlanMode.ts  |      95 |    85.29 |     100 |      95 | ...21-325,344,378 
  ...permission.ts |     100 |      100 |     100 |     100 |                   
  glob.ts          |   96.33 |     88.5 |     100 |   96.33 | ...24-225,373,376 
  grep.ts          |   90.73 |    86.71 |   86.36 |   90.73 | ...76-677,727-728 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  image-gen.ts     |   91.66 |    78.12 |   91.66 |   91.66 | ...13-214,221-222 
  list-agents.ts   |   96.52 |    95.55 |    87.5 |   96.52 | 37-38,53-54       
  loop-wakeup.ts   |   99.27 |     93.1 |     100 |   99.27 | 45                
  ls.ts            |   96.74 |    90.54 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.71 |     59.9 |    90.9 |   72.71 | ...1212,1214-1215 
  ...fier-input.ts |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   82.07 |    80.15 |   85.71 |   82.07 | ...3243,3245-3246 
  mcp-client.ts    |   86.55 |    88.01 |   94.02 |   86.55 | ...2581,2585-2588 
  ...ry-timeout.ts |     100 |      100 |     100 |     100 |                   
  mcp-errors.ts    |     100 |      100 |     100 |     100 |                   
  ...pool-entry.ts |   79.21 |    85.71 |   81.57 |   79.21 | ...1342,1350-1351 
  ...ool-events.ts |       8 |        0 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |    97.5 |    93.93 |     100 |    97.5 | 178-179           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-retry.ts     |   97.67 |    95.65 |     100 |   97.67 | 131-132           
  ...ion-config.ts |     100 |      100 |     100 |     100 |                   
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |   98.14 |     93.2 |     100 |   98.14 | ...1269,1324-1325 
  ...sport-pool.ts |   83.98 |     80.3 |   88.46 |   83.98 | ...1411,1418-1422 
  ...ace-budget.ts |   87.27 |     82.6 |     100 |   87.27 | ...00-305,340-345 
  memory-config.ts |     100 |      100 |     100 |     100 |                   
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 101,108           
  monitor.ts       |   91.82 |    83.09 |   88.46 |   91.82 | ...99,612,810-815 
  notebook-edit.ts |   85.71 |    77.39 |   82.35 |   85.71 | ...96-912,958-959 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   83.21 |    90.69 |     100 |   83.21 | 147-158,207-220   
  read-file.ts     |   95.49 |    88.61 |    87.5 |   95.49 | ...49,464,536-537 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  readManyFiles.ts |      96 |       85 |     100 |      96 | ...42,595,605-609 
  ...d-artifact.ts |   85.68 |    81.59 |   94.73 |   85.68 | ...1071,1095-1096 
  ...t-findings.ts |   99.13 |    93.93 |    92.3 |   99.13 | 255-257           
  ...t-shutdown.ts |    87.2 |    86.66 |   77.77 |    87.2 | ...,75-79,162-165 
  ripGrep.ts       |    94.6 |    87.34 |   95.45 |    94.6 | ...33-734,740-741 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |   86.86 |    93.18 |      75 |   86.86 | ...20-426,568-575 
  ...n-mcp-view.ts |   94.07 |    91.89 |    90.9 |   94.07 | 131-139           
  shell.ts         |   79.61 |    85.04 |   93.06 |   79.61 | ...5228,5303-5304 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   97.15 |    90.79 |   92.59 |   97.15 | ...43,737-740,744 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |    94.4 |    93.75 |   83.33 |    94.4 | 45-49,63-64,95    
  task-list.ts     |   87.57 |    78.94 |     100 |   87.57 | ...71,157,161-168 
  task-stop.ts     |   93.14 |    96.29 |    87.5 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.87 |     86.5 |   92.85 |   82.87 | ...54-564,588-599 
  team-create.ts   |   97.24 |     87.5 |   85.71 |   97.24 | 48-49,129-130     
  team-delete.ts   |   88.67 |     87.5 |   85.71 |   88.67 | ...2-48,72-73,129 
  ...n-approval.ts |   92.14 |    96.96 |   81.81 |   92.14 | 38-39,42-43,93-99 
  todoWrite.ts     |   95.99 |    91.84 |   93.75 |   95.99 | ...21-625,638-643 
  ...repeat-key.ts |     100 |      100 |     100 |     100 |                   
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   80.72 |    82.95 |   86.53 |   80.72 | ...1106,1114-1115 
  ...-finalizer.ts |    98.1 |    92.36 |   93.33 |    98.1 | ...34-235,237-241 
  ...iagnostics.ts |   99.06 |    97.69 |   91.66 |   99.06 | 133-134,205       
  ...-retention.ts |     100 |    95.83 |     100 |     100 | 116               
  tool-search.ts   |    96.2 |    89.79 |   93.75 |    96.2 | ...10,260-265,428 
  tool-utils.ts    |   97.46 |    96.55 |     100 |   97.46 | 26-27             
  tools.ts         |   92.93 |    92.18 |      92 |   92.93 | ...67-568,584-590 
  truncation.ts    |   90.72 |    90.51 |     100 |   90.72 | ...65-473,510-516 
  ...reapproved.ts |   99.27 |    94.11 |     100 |   99.27 | 170               
  web-fetch.ts     |   96.05 |    90.54 |   96.77 |   96.05 | ...85-786,800-801 
  web-search.ts    |   90.58 |    83.57 |      80 |   90.58 | ...1025,1083-1086 
  write-file.ts    |   87.29 |    86.15 |   89.47 |   87.29 | ...53-856,893-928 
  zoom-image.ts    |   95.76 |    93.93 |    90.9 |   95.76 | 54-59,203-204     
 src/tools/agent   |   86.69 |    88.65 |   89.71 |   86.69 |                   
  agent.ts         |   85.26 |    87.84 |   87.35 |   85.26 | ...4379,4413-4423 
  fork-profile.ts  |   93.65 |       90 |     100 |   93.65 | ...33-134,171-174 
  fork-subagent.ts |   98.73 |       95 |     100 |   98.73 | 101-102,173       
 ...tools/artifact |   95.83 |    92.51 |   88.63 |   95.83 |                   
  artifact-tool.ts |   91.69 |    88.46 |   71.42 |   91.69 | ...20-321,329-332 
  ...-publisher.ts |     100 |    85.71 |     100 |     100 | 32                
  ...-publisher.ts |   96.74 |    97.72 |    87.5 |   96.74 | 29-30,156-157     
  html.ts          |     100 |    96.77 |     100 |     100 | 122               
  ...-publisher.ts |     100 |       80 |     100 |     100 | 30                
  oss-publisher.ts |    98.1 |    91.48 |     100 |    98.1 | 43-45             
  publisher.ts     |     100 |      100 |     100 |     100 |                   
 ...tools/workflow |   89.29 |    86.71 |   83.33 |   89.29 |                   
  workflow.ts      |   89.29 |    86.71 |   83.33 |   89.29 | ...91-892,991-992 
 src/utils         |      93 |    89.92 |   97.03 |      93 |                   
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |      95 |    92.76 |     100 |      95 | ...49-550,657-661 
  auth-type.ts     |     100 |      100 |     100 |     100 |                   
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  ...ry-content.ts |   98.45 |    95.79 |     100 |   98.45 | 132-133,159-160   
  browser.ts       |   86.84 |    78.94 |     100 |   86.84 | 34,36-37,65-66    
  btwUtils.ts      |   13.95 |      100 |       0 |   13.95 | 17-31,34-55       
  bundlePaths.ts   |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.06 |       90 |     100 |   91.06 | ...46-147,154-155 
  ...n-branches.ts |   95.89 |    94.11 |      95 |   95.89 | ...99-500,512-525 
  ...tion-chain.ts |     100 |      100 |     100 |     100 |                   
  cronDisplay.ts   |     100 |    97.61 |     100 |     100 | 46                
  cronParser.ts    |   95.34 |    93.33 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   99.49 |    96.25 |     100 |   99.49 | 224               
  ...qwen-model.ts |     100 |      100 |     100 |     100 |                   
  editHelper.ts    |   93.63 |     83.9 |     100 |   93.63 | ...27-428,462-463 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  encoding.ts      |     100 |      100 |     100 |     100 |                   
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.59 |    90.32 |     100 |   94.59 | 40-41,137-138     
  errorParsing.ts  |     100 |      100 |     100 |     100 |                   
  ...rReporting.ts |   95.65 |    93.33 |     100 |   95.65 | 37-38             
  errors.ts        |   88.92 |    92.99 |      68 |   88.92 | ...92,394,410-411 
  fetch.ts         |   90.68 |    82.63 |     100 |   90.68 | ...72,483-484,503 
  ...ng-options.ts |     100 |      100 |     100 |     100 |                   
  file-identity.ts |     100 |      100 |     100 |     100 |                   
  fileUtils.ts     |   94.79 |    92.16 |   96.29 |   94.79 | ...2076,2084-2085 
  formatters.ts    |     100 |      100 |     100 |     100 |                   
  ...eUtilities.ts |    92.4 |    86.95 |     100 |    92.4 | ...52-158,168-169 
  ...rStructure.ts |   94.39 |    94.28 |     100 |   94.39 | ...29-132,343-348 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  git-branches.ts  |   94.04 |    87.79 |   96.87 |   94.04 | ...1040-1041,1155 
  ...fig-safety.ts |   97.01 |       80 |     100 |   97.01 | 53-54             
  git-ignore.ts    |     100 |      100 |     100 |     100 |                   
  gitDiff.ts       |   95.39 |    81.95 |     100 |   95.39 | ...1075,1421-1422 
  gitDirect.ts     |   98.84 |    94.28 |     100 |   98.84 | 234,318           
  ...noreParser.ts |   94.48 |    93.22 |     100 |   94.48 | ...23-124,158-159 
  gitUtils.ts      |   78.83 |    82.35 |    87.5 |   78.83 | ...22-123,164-215 
  ...-pr-issues.ts |   99.45 |    97.14 |     100 |   99.45 | 182               
  github-prs.ts    |   96.34 |    87.87 |     100 |   96.34 | ...81,586-587,674 
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  image-view.ts    |   95.36 |    91.07 |     100 |   95.36 | ...99-203,275-279 
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  is-tool.ts       |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   96.15 |    93.63 |     100 |   96.15 | ...86-387,429-432 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iconv-lite.ts |     100 |      100 |     100 |     100 |                   
  ...simple-git.ts |   96.77 |    91.66 |     100 |   96.77 | 38                
  ...m-headless.ts |      96 |    88.88 |     100 |      96 | 34                
  ...-constants.ts |   94.73 |     92.3 |     100 |   94.73 | 66-67             
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...tProcessor.ts |   94.01 |     90.1 |     100 |   94.01 | ...47-353,445-446 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.24 |     100 |   98.96 | 154               
  ...kerChecker.ts |    90.9 |    91.66 |     100 |    90.9 | 73-79             
  ...ollow-open.ts |     100 |    93.33 |     100 |     100 | 134,177           
  notebook.ts      |   94.57 |    89.91 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   91.66 |    89.74 |     100 |   91.66 | ...26-228,251-256 
  osc8.ts          |   54.26 |    64.86 |   83.33 |   54.26 | ...72-195,197-257 
  partUtils.ts     |     100 |    98.64 |     100 |     100 | 211               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   90.88 |     90.6 |     100 |   90.88 | ...28-629,631-633 
  pdf.ts           |   92.17 |    85.81 |     100 |   92.17 | ...64-565,606-611 
  ...s-liveness.ts |     100 |    93.47 |     100 |     100 | 62,72,108         
  projectPath.ts   |     100 |      100 |     100 |     100 |                   
  projectRoot.ts   |   71.73 |    78.57 |     100 |   71.73 | 54-66             
  ...ectSummary.ts |   89.62 |    72.41 |     100 |   89.62 | ...40-145,196-199 
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  proxyUtils.ts    |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   71.15 |       86 |     100 |   71.15 | ...-90,96-101,147 
  ...noreParser.ts |   92.63 |    91.66 |     100 |   92.63 | ...77-178,197-198 
  rateLimit.ts     |   93.75 |    89.42 |     100 |   93.75 | ...13,218-219,262 
  ...text-range.ts |   96.98 |    87.36 |     100 |   96.98 | ...87-688,763-764 
  ...load-error.ts |   93.47 |    88.23 |     100 |   93.47 | 64-65,80          
  retry.ts         |   96.09 |    92.23 |     100 |   96.09 | ...72,563-564,582 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.63 |    97.05 |     100 |   97.63 | ...17,251-252,278 
  retryPolicy.ts   |   97.72 |    90.56 |     100 |   97.72 | 130-131           
  ripgrepUtils.ts  |   90.04 |    93.43 |   95.45 |   90.04 | ...55-565,598-599 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   84.87 |    86.71 |   96.29 |   84.87 | ...71,696,725-734 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |   97.77 |    91.48 |     100 |   97.77 | 172-173           
  safe-mode.ts     |     100 |      100 |     100 |     100 |                   
  safeJsonParse.ts |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...-child-env.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   98.22 |    98.01 |     100 |   98.22 | 100,102-103       
  ...aValidator.ts |   92.09 |    83.65 |   90.47 |   92.09 | ...60,882-883,896 
  ...r-launcher.ts |   96.35 |    93.97 |   85.71 |   96.35 | ...35-336,347-348 
  sedEditParser.ts |   91.78 |    92.18 |     100 |   91.78 | ...66-569,645-646 
  ...nIdContext.ts |     100 |       90 |     100 |     100 | 95                
  ...orageUtils.ts |   96.55 |    90.54 |     100 |   96.55 | ...34,650,734,753 
  ...-pager-env.ts |     100 |      100 |     100 |     100 |                   
  ...fety-rules.ts |     100 |     89.7 |     100 |     100 | ...01,304,309-311 
  shell-utils.ts   |   86.37 |    88.59 |     100 |   86.37 | ...2361,2368-2372 
  ...lAstParser.ts |    98.3 |    91.57 |     100 |    98.3 | ...1340-1342,1352 
  ...nlyChecker.ts |   96.33 |    96.57 |     100 |   96.33 | ...83-284,292-293 
  sideQuery.ts     |   86.82 |     86.2 |     100 |   86.82 | ...79-185,187-193 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   77.77 |    57.14 |     100 |   77.77 | 44,54-59          
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminal-env.ts  |      50 |      100 |       0 |      50 | 18-19             
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    95.65 |     100 |     100 | 99                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  ...error-type.ts |     100 |      100 |     100 |     100 |                   
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ultCleanup.ts |   54.62 |    35.71 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.83 |     92.7 |     100 |   96.83 | ...37-342,344-349 
  ...pt-records.ts |   87.61 |    86.23 |     100 |   87.61 | ...80-484,514-529 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...-directory.ts |    83.7 |    80.95 |    87.5 |    83.7 | ...37-238,252-253 
  ...ifact-path.ts |   94.11 |    92.85 |     100 |   94.11 | 32-33             
  ...aceContext.ts |   95.39 |    89.61 |     100 |   95.39 | ...16-317,321-322 
  xml.ts           |    97.8 |    87.69 |     100 |    97.8 | 98-99             
  yaml-parser.ts   |   83.87 |    77.27 |     100 |   83.87 | ...31-234,239-240 
 ...ils/filesearch |   83.94 |    80.75 |   94.78 |   83.94 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |    82.9 |    76.81 |   95.08 |    82.9 | ...1563,1597-1598 
  fileSearch.ts    |   93.78 |    87.67 |     100 |   93.78 | ...71-272,274-275 
  fzfWorker.ts     |       0 |        0 |       0 |       0 | 1-109             
  ...rkerHandle.ts |   84.05 |    75.86 |      90 |   84.05 | ...30-334,340-341 
  ignore.ts        |     100 |    97.36 |     100 |     100 | 187               
  result-cache.ts  |     100 |    93.75 |     100 |     100 | 49                
 ...uest-tokenizer |    92.3 |      100 |   88.88 |    92.3 |                   
  ...ageFormats.ts |   81.81 |      100 |   66.66 |   81.81 | 56-61             
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
-------------------|---------|----------|---------|---------|-------------------

For detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run.

@qqqys

qqqys commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

E2E review report — head 9a603a5b37 (no Critical found)

An independent review of this PR at head 9a603a5b37 found no merge-blocking issue. I am not approving: there is no gate review at this head, and Test (ubuntu-latest, Node 22.x) — the lane where the new script test runs — was still in progress when I posted (at head: 11 checks green, 8 skipped, 0 failed, 2 in progress).

The review already on record is against an earlier head. The stage-2 triage comment (07:35Z) carries sha=e28f17de7a, from when this branch still raised the unpacked-size budget. The current head drops that part (main's #10781 version of scripts/prepare-package.js taken wholesale) and keeps only the two diagnosability changes, so its prepare-package.js / budget-test paragraphs no longer describe this diff. Everything below was re-verified at 9a603a5b37. The 08:14Z qwen-review-fallback means the review pipeline did not complete at this head either.

I ran the changed script end-to-end — both outcomes, all three stdio modes

Not only the shipped test: I executed node scripts/build_sandbox.js -s --no-prune from a scratch checkout of head with a fake docker first on PATH, so no container runtime was touched and nothing on this host was built.

Run Result
fake docker fails build, quiet (VERBOSE='', CI='') exit ≠ 0; the fake's stdout marker and its stderr line both reach the operator, inside the labeled 200-line frame
fake docker fails build, CI='true' exit ≠ 0; marker streamed; the frame is not reprinted (end of build output absent)
fake docker succeeds, quiet rc=0, built ghcr.io/qwenlm/qwen-code:0.22.3, child output captured and not echoed
fake docker succeeds, CI='true' and VERBOSE='true' rc=0, child output streamed (Successfully tagged final-image:probe visible)

The two success rows are what the shipped test does not cover, and they are the ones that matter for a mutable release script: capturing instead of discarding changes neither the exit status nor the log shape of a healthy build.

Both halves of the fix are pinned by the new test

scripts/tests/build-sandbox-output.test.js at head: 2/2 pass. Two mutations, each reverting one line to its pre-PR form, each turning the suite red, with the file restored sha256-identical after both:

  • quiet branch of buildStdio back to 'ignore' → red (the capture is what the first test asserts on);
  • if (!streamBuildOutput) { printCapturedBuildOutput(error); } deleted → red (the tail print is what surfaces it).

Static checks around the change

  • No dangling reference to the old buildStdout anywhere in the file; sandboxCommand is module-scoped (:64) and therefore in scope for the frame header at :136; the new catch sits before the pre-existing finally that removes the temporary podman auth file and rethrows, so the podman/Windows cleanup path is unchanged. The post-success CI artifact file … already exists throw also lands in the new catch, but with no stdout/stderr the helper returns early and prints no misleading frame.
  • The CI-streaming premise checks out against the workflows: only e2e.yml sets VERBOSE: 'true' (three steps); release.yml's npm run build:sandbox -- -s --no-prune -i "$sandbox_image" (:732) does not, and Actions always sets CI — so that lane goes from discarded output to streamed, which is exactly the asymmetry the description describes.
  • Verify Prepared Package is the last step of quality_build, after Upload Build Outputs, and release jobs do not share a workspace: Restore workspace ownership wipes $RUNNER_WORKSPACE at the start of every job on the self-hosted pool (behind its symlink / .. / denylist guards), so the step's dist/ rewrite and packaging side effects cannot reach quality_typecheck, integration_docker or publish.
  • prepare:package's guards are satisfiable at that point in the job: npm run build (all workspaces) has already run, and the step's own npm run bundle re-runs generate + esbuild + copy_bundle_assets.js without DEV=true (the earlier check:serve-fast-path-bundle bundled with DEV=true), producing every path verifyBundleArtifacts requires — dist/cli.js, dist/vendor, dist/bundled/qc-helper/docs, dist/web-shell/index.html, dist/web-shell/assets. The budget it enforces is main's 112 MiB against the ~101.9 MB the description measures.
  • The claim about where the guard used to fire first is accurate: Dockerfile:33 runs npm run prepare:package in the builder stage.

Non-blocking notes

  1. integration_docker does not wait for this gate. It declares needs: 'prepare' only (as does integration_none), so it runs in parallel with quality_build. The new step makes the cause legible in minutes but does not stop the ~20-minute image build from also failing. The stage-2 comment's "the downstream jobs already needs: quality_build" holds for quality_typecheck / workspace_tests / quality_scripts, not for the job that actually builds the image. Adding that dependency is a pipeline-policy call rather than a defect — the description only claims faster diagnosis, and it delivers that.
  2. The 128 MiB maxBuffer trades one failure mode for another: a build that would have succeeded but emits more than that gets its child killed by execSync. The comment states the trade-off; I did not exercise it (it would need a >128 MiB fake build log).
  3. e2e.yml's three VERBOSE: 'true' settings are now redundant with the CI default. Harmless, and droppable in a follow-up.

About my own environment, so the numbers are not misread

Running the whole scripts/tests suite in my scratch checkout gives 2061 passed / 8 failed, and all 8 are artifacts of how I ran it rather than of this PR: 4 in cross-package-contracts.test.js shell out to git grep --untracked and my scratch tree is a git archive extraction, not a git checkout; 1 in install-script.test.js dies on ENOENT … packages/audio-capture/dist (a symlinked dist in my tree); 3 in qwen-autofix-workflow.test.js / qwen-pr-review-workflow.test.js assert chmod/sudo write-protection semantics that do not hold when the process is root (env forge landed: backing file writable instead of env forge blocked: backing file locked). None of those files is touched here — quality_scripts in CI is the authority for them.


复查结论(head 9a603a5b37,未发现阻塞问题):我在 head 的临时检出里真实执行了 node scripts/build_sandbox.js -s --no-prune(PATH 前置假 docker,不触碰容器运行时),覆盖失败与成功两条路径、安静/CI/VERBOSE 三种模式:失败时安静路径把子进程 stdout+stderr 打进带标记的 200 行框、CI 路径直接流式且不重复打印;成功时安静路径 rc=0 且输出被捕获不回显、CI/VERBOSE 路径正常流式——成功路径是新测试没覆盖的部分,证明"改为捕获"不会改变健康构建的退出码与日志形态。新测试 head 下 2/2 通过;两处变异(buildStdio 安静分支改回 'ignore'、删掉失败时打印 tail 的 catch 分支)分别让套件变红,之后文件 sha256 均复原一致,说明修复的两半都被钉住。静态核对:旧变量 buildStdout 无残留引用;sandboxCommand 为模块级、在 :136 的框标题里可用;新 catch 位于清理 podman 临时 auth 文件的既有 finally 之前并原样 rethrow;成功后 "artifact 文件已存在" 的抛出也会进入该 catch,但因无 stdout/stderr 而不会打印误导性框。工作流侧:只有 e2e.yml 设了 VERBOSErelease.yml:732build:sandbox 没设,而 Actions 必然带 CI,所以该车道由"丢弃输出"变为"流式输出"。Verify Prepared Package 位于 Upload Build Outputs 之后、是 quality_build 最后一步,且发布作业之间不共享工作区(每个作业开头 Restore workspace ownership 会带符号链接/../denylist 守卫清空 $RUNNER_WORKSPACE),副作用不会传到下游;该步的 npm run bundle 不带 DEV=true,能产出 verifyBundleArtifacts 要求的全部路径,预算为 main 的 112 MiB。Dockerfile:33 确实运行 npm run prepare:package,描述中"守卫最早在镜像构建里触发"的说法成立。非阻塞提示:integration_docker 只声明 needs: 'prepare',与 quality_build 并行,因此新步骤能几分钟内说明原因,但不能阻止那次约 20 分钟的镜像构建同样失败(stage-2 评论中"下游作业已 needs: quality_build"对 typecheck/workspace_tests/quality_scripts 成立,对真正建镜像的作业不成立);128 MiB maxBuffer 是明确的取舍,未实测;e2e.yml 里三处 VERBOSE 现已冗余。另需说明:我在临时检出里跑完整 scripts/tests 得到 2061 通过 / 8 失败,8 项全部源于我的运行环境(git grep 需要 git 检出、dist 为符号链接、以 root 运行时 chmod/sudo 写保护语义不成立),与本 PR 无关,以 CI 的 quality_scripts 为准。未 approve:该 head 尚无 gate review,且新脚本测试所在的 Test 车道发帖时仍在运行。

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed. Suggestions are inline.

Not explored to full depth (tool budget reached): "agent 3b": none — but note I could not execute the new test or measure a real docker build's output volume: this review worktree has no node_modules ( ls node_modules →…; "agent 2": none — but note the one check I could not run end-to-end: executing scripts/build_sandbox.js and the new vitest file in this worktree, because node_modules ….

Not linted (tool limitation, not a blocker): the executable-script lint — .github/workflows/release.yml: actionlint embedded-shell source mapping is not yet supported — not linted.

中文说明

已审查。 建议见行内评论。

未探索到全部深度(达到工具调用预算):"agent 3b"none — but note I could not execute the new test or measure a real docker build's output volume: this review worktree has no node_modules ( ls node_modules →…"agent 2"none — but note the one check I could not run end-to-end: executing scripts/build_sandbox.js and the new vitest file in this worktree, because node_modules …

未检查(工具限制,非阻断):the executable-script lint — .github/workflows/release.yml: actionlint embedded-shell source mapping is not yet supported — not linted。

— qwen3.8-max-2026-09-02 via Qwen Code /review (v0.22.3)

Comment thread .github/workflows/release.yml
Comment thread .github/workflows/release.yml
Comment thread scripts/build_sandbox.js
Comment thread scripts/tests/build-sandbox-output.test.js Outdated
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

@DennisYu07 DennisYu07 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@yiliang114
yiliang114 added this pull request to the merge queue Sep 2, 2026
Merged via the queue into main with commit 3e8d92a Sep 2, 2026
174 of 179 checks passed
@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Released in v0.23.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release Failed for v0.22.3-nightly.20260902.7df5ac6898 on 2026-09-02

5 participants