Skip to content

fix(ci): retry transient sandbox:none E2E shard failures once (#10566) - #10572

Merged
wenshao merged 9 commits into
mainfrom
autofix/issue-10566
Sep 2, 2026
Merged

fix(ci): retry transient sandbox:none E2E shard failures once (#10566)#10572
wenshao merged 9 commits into
mainfrom
autofix/issue-10566

Conversation

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

What this PR does

Gives the sandbox:none leg of the post-merge Linux E2E lane one bounded retry at its test step. The shard command is wrapped in a small shell function and, if the first attempt exits non-zero, the step emits a ::warning:: naming the runner and re-runs the same shard once; the second attempt's exit status is the step's, so a deterministic test failure fails both attempts and keeps the job red. The retry is deliberately scoped to the sandbox:none leg — two ~30-minute sandbox:docker attempts would outrun the job's timeout-minutes — and is pinned by new witness tests next to the existing sandbox-image-build-retry block, including one asserting the docker leg is not retried.

Why it's needed

Run 33317457036 failed E2E Test (Linux) - sandbox:none - shard 2/3 at the Run E2E tests step with exit code 1 and zero vitest FAIL lines in the log, which is the class this repo documents in the integration test config: under shared self-hosted pool pressure, vitest's fixed 60-second worker→main RPC budget turns a stalled-but-otherwise-green run red via unhandled-error paths, and the deaths that survive the lane's existing self-hosted exemption sit inside vitest itself, unreachable from repository code. The two previous main E2E runs failed the identical leg and step on two different hosts and commits, while the run between them was fully green and a local reproduction of the exact shard passes — the same transient, pressure-correlated shape the sandbox-image build retry in this same workflow was added for (#10355). Without a retry, one host under pressure exits a whole shard red and files a per-commit "Main CI failed" issue (this one is the twentieth such open issue in ~36 hours); with it, a transient death costs one extra shard attempt and a deterministic failure still reports red.

Reviewer Test Plan

How to verify

This is CI-harness behavior plus its witness tests; the retry logic is fully inspectable from the workflow file and was verified three ways. First, the witness block in the scripts suite: npx vitest run --config ./scripts/tests/vitest.config.ts e2e-workflow passes 12/12, and removing the retry block from the workflow (or duplicating the docker leg's command) makes the corresponding witness test fail. Second, the bash semantics were simulated under bash -eo pipefail (the Actions default shell) with a stubbed shard command: one failure retries and exits 0, two failures exit 1, and a passing first attempt never retries. Third, the real gate is the lane itself: the next main push should either pass both attempts or, if a genuine test failure exists, report its FAIL lines on the second attempt instead of dying silently.

Evidence (Before & After)

N/A — CI-harness change, not user-visible. Before: run 33317457036 (and runs 33302550436, 33293739505) red at Run E2E tests with zero FAIL lines. After: one bounded retry absorbs a single transient death; deterministic failures stay red on both attempts.

Tested on

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

Environment (optional)

Self-hosted pool machine (the same pool the failing lane runs on): witness suite with mutation probes, functional retry simulation under bash -eo pipefail, bash -n on the generated step script for both matrix legs, npm run build, npm run typecheck, npm run lint, npm run test:scripts, and a full surrogate of the failing shard (test:integration:sandbox:none, shard 2/3, real model credentials) which passes at the failing commit.

Risk & Scope

  • Main risk or tradeoff: a genuinely red sandbox:none shard now takes up to one extra shard attempt (~15–20 minutes, still inside the job's 60-minute timeout) before reporting red; transient pressure deaths report green with a ::warning:: in the log instead of filing another per-commit issue. No test assertion, timeout, or exclusion is weakened anywhere.
  • Not validated / out of scope: the exact vitest-internal path of each CI death cannot be named without authenticated log access; the sandbox:docker leg keeps no retry because two attempts would not fit the job timeout; the poisoned-host and disk-pressure classes tracked by other issues/PRs (ci: gate heavy jobs on a disk floor and persist pressure samples #10394's disk floor, fix(cli): don't crash startup when the output-language file is unwritable (#10453) #10455's unwritable-home crash sites) are separate and untouched.
  • Breaking changes / migration notes: none — workflow step behavior and test witnesses only.

Linked Issues

Fixes #10566

中文说明

本 PR 做了什么

为合并后 Linux E2E 通道的 sandbox:none 支路在其测试步骤上增加一次有界重试。分片命令被包进一个小的 shell 函数,首次尝试非零退出时,步骤输出一条点名运行器的 ::warning:: 并将同一分片重跑一次;第二次尝试的退出状态即步骤的状态,因此确定性测试失败会在两次尝试中都失败、保持任务红色。重试刻意限定在 sandbox:none 支路——两次约 30 分钟的 sandbox:docker 尝试会超出任务的 timeout-minutes——并由紧邻既有"沙箱镜像构建重试"块的新见证测试固定,其中包括一条断言 docker 支路不被重试。

为什么需要

运行 33317457036 在 Run E2E tests 步骤以退出码 1 失败,且日志中没有任何一条 vitest FAIL 行,这正是本仓库在集成测试配置中记录过的类别:在共享自托管池压力下,vitest 固定的 60 秒 worker→main RPC 预算会把一个停滞但本来全绿的运行经由未处理错误路径变红;而在该通道已有的自托管豁免之后仍会发生的那些死亡,位于 vitest 内部,仓库代码无法触及。此前两次 main E2E 运行在不同的主机、不同的提交上以完全相同的支路与步骤失败,夹在中间的一次运行完全绿色,且对同一分片的本地复现通过——与同一 workflow 中沙箱镜像构建重试(#10355)所针对的瞬时、压力相关形态完全一致。没有重试时,一台承压主机就会让整个分片变红并归档一个按提交的 "Main CI failed" issue(本 issue 是约 36 小时内的第 20 个同类开放 issue);有了重试,一次瞬时死亡只多花一次分片尝试,而确定性失败依旧报红。

审阅者测试计划

如何验证

这是 CI 基础设施行为及其见证测试;重试逻辑可以直接从 workflow 文件中审阅,并已用三种方式验证。第一,scripts 套件中的见证块:npx vitest run --config ./scripts/tests/vitest.config.ts e2e-workflow 12/12 通过;从 workflow 中移除重试块(或复制 docker 支路的命令)会使对应的见证测试失败。第二,在 bash -eo pipefail(Actions 默认 shell)下用桩分片命令模拟了 bash 语义:失败一次会重试并以 0 退出,失败两次以 1 退出,首次通过则绝不重试。第三,真正的门槛是通道本身:下一次 main 推送要么两次尝试都通过,要么在存在真实测试失败时于第二次尝试上报出 FAIL 行,而不是无声死亡。

证据(前后对比)

N/A — CI 基础设施变更,无用户可见行为。之前:运行 33317457036(以及 33302550436、33293739505)在 Run E2E tests 变红且零条 FAIL 行。之后:一次有界重试吸收单次瞬时死亡;确定性失败在两次尝试中保持红色。

测试环境

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

环境(可选)

自托管池机器(与失败通道相同的池):带变异探测的见证套件、bash -eo pipefail 下的重试功能模拟、对两个矩阵支路生成步骤脚本的 bash -nnpm run buildnpm run typechecknpm run lintnpm run test:scripts,以及对失败分片的完整替代复现(test:integration:sandbox:none,shard 2/3,真实模型凭证),在失败提交上通过。

风险与范围

  • 主要风险或权衡:真正变红的 sandbox:none 分片现在最多多花一次分片尝试(约 15–20 分钟,仍在任务 60 分钟超时之内)才报红;瞬时压力死亡会在日志中留下一条 ::warning:: 并报绿,而不是再归档一个按提交的 issue。任何测试断言、超时或排除都未被削弱。
  • 未验证 / 超出范围:没有认证日志访问时无法点名每次 CI 死亡所处的 vitest 内部具体路径;sandbox:docker 支路不加重试,因为两次尝试放不下任务超时;由其他 issue/PR 跟踪的宿主机污染与磁盘压力类别(ci: gate heavy jobs on a disk floor and persist pressure samples #10394 的磁盘下限、fix(cli): don't crash startup when the output-language file is unwritable (#10453) #10455 的不可写主目录崩溃点)是独立问题,未被触及。
  • 破坏性变更 / 迁移说明:无——仅 workflow 步骤行为与测试见证。

关联 Issue

Fixes #10566

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

E2E report — issue #10566 (Main CI failed: E2E Tests on 3aa1b14)

Background

Workflow run 33317457036 failed on main at commit 3aa1b14624 "before any test result was reported" — the per-commit fallback the issue-filing analyzer uses when the failed jobs' logs contain no identifiable vitest FAIL lines. This environment has no GitHub credentials for log downloads (the job-log endpoint answers 403 without admin rights), so the investigation below combines the run's public job metadata with a local reproduction of the exact failing lane on the same self-hosted pool infrastructure.

Investigation

Which job failed. The public jobs API shows exactly one failing job: E2E Test (Linux) - sandbox:none - shard 2/3 on pool runner ecs-qwen-runner-hk-j6c03lyei7s809zq1s6t-22, failing step Run E2E tests, conclusion failure, annotation Process completed with exit code 1. All five sibling legs of the same run passed — including sandbox:docker - shard 2/3 (identical shard and file set) and sandbox:none - shard 1/3 on a neighbouring HK pool host.

The failure is a recurring class, not this commit. The two previous main E2E runs failed the exact same leg at the exact same step on two other hosts and two other commits (33302550436 on e40040cd26, 33293739505 on bf054479b1fc), while the run between them (33309279860, commit c7c47deb94) was fully green. Every open "Main CI failed: E2E Tests" issue of the last ~36 hours (20 issues) carries the same per-commit "no test results reported" shape, and the post-merge unit lane shows the same shape in the same window — consistent with shared-pool pressure, not a code regression in any one merge. The failing commit itself (ci: stabilize tests under shared ECS host contention (#10552)) only touches unit-test timeout budgets plus one optional-timeout plumb; nothing in it reaches the integration lane.

Local reproduction. A full surrogate of the failing leg at 3aa1b14624 — the exact Run E2E tests command (npm run test:integration:sandbox:none -- --exclude '**/interactive/cron-interactive.test.ts' --exclude '**/channel-plugin.test.ts' --shard=2/3 with RUNNER_ENVIRONMENT=self-hosted, KEEP_OUTPUT=true, VERBOSE=true, a fresh /var/tmp TMPDIR, and real model credentials) — passes on this pool host: 21 files (20 passed, 1 statically skipped), 91 tests passed, 3 skipped, exit 0. The shard's test files are therefore not deterministically broken; the CI deaths are transient and environment-correlated.

Root-cause analysis of the signature. "Exit 1 with zero vitest FAIL lines" is the class this repo already documents in integration-tests/vitest.config.ts: vitest's worker→main onTaskUpdate RPC runs on a fixed 60-second budget, and under shared-host resource pressure a stall longer than that surfaces as an unhandled error that exits an all-green run red with no failing test. The E2E lane already carries the self-hosted half of that exemption (dangerouslyIgnoreUnhandledErrors when RUNNER_ENVIRONMENT=self-hosted, from #10325/#10329), and the sibling autofix PR #10498 extends the same flag to the unit lanes — yet the E2E deaths continue, which places them on paths the flag does not cover (vitest-internal process-level unhandled-rejection handling and worker-death plumbing inside node_modules, which repository code cannot patch). The failure is thus a transient pool-pressure death of the test process itself, with every test green.

Change made

One bounded retry for the sandbox:none leg inside the Run E2E tests step, mirroring the existing sandbox-image build retry in the same file (#10355) and its "transient environment failure on a pool runner, genuine failures still fail the job" rationale. The shard command is wrapped in a run_shard function and retried exactly once with a ::warning:: marker between attempts; a deterministic test failure fails both attempts and keeps the shard red, so no real signal is weakened. The retry is scoped to the sandbox:none leg because two ~30-minute sandbox:docker attempts would outrun the job's timeout-minutes: 60, and the three consecutive failures tracked here are all sandbox:none. A witness block in scripts/tests/e2e-workflow.test.js pins the retry shape, and both guards were mutation-probed (removing the retry, or giving the docker leg a second invocation, fails the witness; restoring goes green). The retry's bash semantics were functionally verified under bash -eo pipefail with a stubbed shard command: fail-once → retry → exit 0; fail-twice → exit 1; pass-first → no retry.

Honest limits: without authenticated log access the exact internal vitest path of each death cannot be named, and the retry is a mitigation for a transient environment class, not a patch of vitest internals — the same shape of mitigation this file already carries for the image build. The final gate is the E2E lane itself turning green on main.

Verification

  • npm run build — passed (exit 0)
  • npm run typecheck — passed
  • npm run lint — passed
  • npx prettier --check .github/workflows/e2e.yml scripts/tests/e2e-workflow.test.js — passed
  • npx vitest run --config ./scripts/tests/vitest.config.ts e2e-workflow — 12/12 passed (9 pre-existing + 3 new witness tests)
  • npm run test:scripts — 1966 passed, 16 skipped, 1 failed: verify-capture.test.js > keeps black-foreground text readable instead of black-on-black; re-run on the pristine base tree (both changed files restored to HEAD) where it fails identically — pre-existing environmental failure (PNG font rendering in this container), unrelated to this change
  • Mutation probe 1: retry block removed from e2e.ymlretries the sandbox:none shard exactly once FAILED; restored → green
  • Mutation probe 2: docker leg command duplicated → does not retry the docker leg FAILED; restored → green
  • Functional retry simulation under bash -eo pipefail with a stubbed failing shard command: fail-once → exit 0 after retry; fail-twice → exit 1; pass-first → exit 0 with no retry
  • bash -n on the step's generated script for both matrix legs (sandbox:none and sandbox:docker) — no syntax errors
  • Failing-lane surrogate at 3aa1b14624 (test:integration:sandbox:none, shard 2/3, real model credentials, RUNNER_ENVIRONMENT=self-hosted) — 20 files / 91 tests passed, exit 0
  • Workflow size ratchet: e2e.yml grew 2468 bytes, within its .size-baseline + 4096-byte allowance (no baseline bump needed; workflow-size.test.js green in the scripts suite)
中文说明

E2E 报告 — issue #10566(Main CI failed: E2E Tests on 3aa1b14

背景

Workflow 运行 33317457036main 的提交 3aa1b14624 上"在任何测试结果上报之前"失败——这是 issue 归档分析器在失败任务的日志中找不到可识别的 vitest FAIL 行时使用的按提交回退格式。本环境没有 GitHub 凭证用于下载日志(job 日志接口在无 admin 权限时返回 403),因此下面的调查结合了该运行的公开 job 元数据,以及在同一自托管池基础设施上对失败通道的本地复现。

调查

哪个任务失败。 公开的 jobs API 显示恰好一个失败任务:池运行器 ecs-qwen-runner-hk-j6c03lyei7s809zq1s6t-22 上的 E2E Test (Linux) - sandbox:none - shard 2/3,失败步骤为 Run E2E tests,结论 failure,注解为 Process completed with exit code 1。同一运行的其余五条通道全部通过——包括 sandbox:docker - shard 2/3(相同的分片与文件集)以及相邻 HK 池主机上的 sandbox:none - shard 1/3

失败是复发的失败类别,而非本提交引入。 此前两次 main E2E 运行在另外两台主机、另外两个提交上以完全相同的通道、完全相同的步骤失败(e40040cd2633302550436bf054479b1fc33293739505),而夹在中间的运行(c7c47deb9433309279860)完全绿色。最近约 36 小时内所有开放的 "Main CI failed: E2E Tests" issue(20 个)都带有同样的按提交"无测试结果上报"形态,同一窗口内合并后单元通道也呈现同样形态——与共享池资源压力一致,而非任何一次合并引入的代码回归。失败提交本身(ci: stabilize tests under shared ECS host contention (#10552))只改动了单元测试超时预算和一个可选超时透传,完全不触及集成通道。

本地复现。3aa1b14624 上对失败通道做完整替代复现——与 Run E2E tests 完全相同的命令(npm run test:integration:sandbox:none -- --exclude '**/interactive/cron-interactive.test.ts' --exclude '**/channel-plugin.test.ts' --shard=2/3,配 RUNNER_ENVIRONMENT=self-hostedKEEP_OUTPUT=trueVERBOSE=true、全新的 /var/tmp TMPDIR 和真实模型凭证)——在本池主机上通过:21 个文件(20 通过,1 个静态跳过),91 个测试通过,3 个跳过,退出码 0。该分片的测试文件并非确定性损坏;CI 上的死亡是瞬时的、与环境相关的。

签名层面的根因分析。 "退出码 1 且零条 vitest FAIL 行"正是本仓库已在 integration-tests/vitest.config.ts 中记录过的类别:vitest 的 worker→main onTaskUpdate RPC 有固定的 60 秒预算,在共享主机资源压力下,超过该预算的停滞会以未处理错误的形式出现,使一个全绿的运行以红色退出且没有任何失败测试。E2E 通道已带有该豁免的自托管部分(#10325/#10329 引入的 RUNNER_ENVIRONMENT=self-hosted 时的 dangerouslyIgnoreUnhandledErrors),姊妹 autofix PR #10498 又把同样的标志扩展到单元通道——但 E2E 的死亡仍在继续,说明它们走的是该标志覆盖不到的路径(vitest 内部的进程级未处理 rejection 处理与 worker 死亡管道,位于 node_modules 内,仓库代码无法修补)。因此该失败是测试进程本身在池资源压力下的瞬时死亡,所有测试都是绿的。

所做变更

Run E2E tests 步骤内为 sandbox:none 通道加一次有界重试,与同一文件中已有的沙箱镜像构建重试(#10355)及其"池运行器上的瞬时环境失败、真实失败仍会让任务失败"的理由保持一致。分片命令被包在 run_shard 函数中,恰好重试一次,两次尝试之间输出 ::warning:: 标记;确定性测试失败会在两次尝试中都失败、保持分片红色,因此不会削弱任何真实信号。重试限定在 sandbox:none 通道,因为两次约 30 分钟的 sandbox:docker 尝试会超出任务的 timeout-minutes: 60,且本次跟踪到的三连败全部是 sandbox:nonescripts/tests/e2e-workflow.test.js 中新增见证块固定该重试形态,两个守卫都做了变异探测(移除重试、或给 docker 通道加第二次调用,都会令见证失败;恢复后变绿)。重试的 bash 语义已在 bash -eo pipefail 下用桩命令功能验证:失败一次 → 重试 → 退出码 0;失败两次 → 退出码 1;首次即通过 → 不触发重试。

诚实的边界:在没有认证日志访问的情况下,无法点名每次死亡所处的 vitest 内部具体路径;该重试是对瞬时环境类别的缓解,而非对 vitest 内部的修补——这与该文件中镜像构建重试的缓解形态相同。最终门槛是 main 上的 E2E 通道本身变绿。

验证

  • npm run build — 通过(退出码 0)
  • npm run typecheck — 通过
  • npm run lint — 通过
  • npx prettier --check .github/workflows/e2e.yml scripts/tests/e2e-workflow.test.js — 通过
  • npx vitest run --config ./scripts/tests/vitest.config.ts e2e-workflow — 12/12 通过(9 个既有 + 3 个新见证测试)
  • npm run test:scripts — 1966 通过,16 跳过,1 失败:verify-capture.test.js > keeps black-foreground text readable instead of black-on-black;在干净的基线树(两个改动文件恢复到 HEAD)上重跑同样失败——属于预先存在的环境性失败(本容器中的 PNG 字体渲染),与本变更无关
  • 变异探测 1:从 e2e.yml 移除重试块 → retries the sandbox:none shard exactly once 失败;恢复后变绿
  • 变异探测 2:复制 docker 通道命令 → does not retry the docker leg 失败;恢复后变绿
  • bash -eo pipefail 下用桩失败命令做重试功能模拟:失败一次 → 重试后退出码 0;失败两次 → 退出码 1;首次通过 → 退出码 0 且不触发重试
  • 对两个矩阵通道(sandbox:nonesandbox:docker)生成的步骤脚本做 bash -n — 无语法错误
  • 3aa1b14624 上复现失败通道(test:integration:sandbox:none,shard 2/3,真实模型凭证,RUNNER_ENVIRONMENT=self-hosted)— 20 个文件 / 91 个测试通过,退出码 0
  • Workflow 尺寸棘轮:e2e.yml 增长 2468 字节,在其 .size-baseline + 4096 字节余量之内(无需上调基线;scripts 套件中 workflow-size.test.js 为绿)

🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 30, 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 ✓

Problem: observed, with evidence — workflow run 33317457036 died at the Run E2E tests step with exit 1 and zero vitest FAIL lines; the two previous main E2E runs failed the same sandbox:none leg and step on different hosts and commits, with a fully green run between them, and a local reproduction of the exact failing shard passes. That is the shared-pool-pressure class already documented in integration-tests/vitest.config.ts.

Direction: aligned — this is the same shape of mitigation the workflow already carries for the sandbox image build (#10355), and consistent with the just-merged #10552. CI stability is squarely in-repo remit; no product-surface concerns.

Size: not applicable — no core paths touched. The whole diff is 17 production lines in the workflow file plus 32 lines of witness tests.

Approach: the scope feels right. One bounded retry, scoped to the leg that has actually been failing; a deterministic failure still fails both attempts and keeps the job red; the docker leg is left alone because two ~30-minute attempts would outrun the job timeout. Witness tests pin both the retry and the docker-no-retry invariants.

Risk: no elevated risk signals (no high-risk paths matched).

Moving on to code review. 🔍

中文说明

感谢贡献!

模板完整 ✓

问题:已观测到,且有证据——运行 33317457036 在 Run E2E tests 步骤以退出码 1 失败且日志中零条 vitest FAIL 行;此前两次 main E2E 运行在不同主机、不同提交上以相同的 sandbox:none 支路与步骤失败,中间夹着一次完全绿色的运行,而对失败分片的本地复现通过。这正是 integration-tests/vitest.config.ts 中已记录的共享池压力类别。

方向:对齐——与本 workflow 中沙箱镜像构建已有的重试(#10355)是同一形态的缓解,也与刚合并的 #10552 一致。CI 稳定性完全属于仓库职责范围,无产品面顾虑。

规模:不适用——未触及核心路径。整个 diff 是 workflow 文件 17 行生产改动加 32 行见证测试。

方案:范围合理。一次有界重试,且限定在实际失败的支路;确定性失败在两次尝试中都会失败、任务保持红色;docker 支路不动,因为两次约 30 分钟的尝试会超出任务超时。见证测试同时固定了"重试"与"docker 不重试"两个不变量。

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

进入代码审查 🔍

Qwen Code · qwen3.8-max

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

@github-actions github-actions Bot added the review/self-reported The linked issue was opened by the PR author (self-reported) label Aug 30, 2026
@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Code review

Reviewed the diff at the commit below. No blockers.

  • Retry semantics are correct under the Actions default shell (bash -eo pipefail). The first run_shard sits on the left of ||, so a first-attempt failure does not trip set -e; the block's last command is the second attempt, whose exit status becomes the step's — a deterministic failure fails both attempts and keeps the job red, exactly as intended. Both attempts share the step's TMPDIR setup and cleanup trap.
  • Scope is right. The retry wraps the exact shard command that has been dying (runs 33293739505, 33302550436, 33317457036 — same leg, same step, three different hosts); the docker leg is untouched, and the witness test counts QWEN_SANDBOX=docker vitest run occurrences to pin that. One retry, not an open loop: worst case adds one ~15–20 min attempt inside the job's 60-minute budget.
  • House style followed. The inline function retry is a slimmer variant of the sandbox-image build retry precedent (Main CI failed: E2E Tests on bc6f1a015cfb #10355) already in this same file; reusing that pattern via a duplicated second step would have copied the whole env block and TMPDIR setup for more YAML, and a third-party retry action would add an external dependency to privileged CI. The witness block matches the existing e2e-workflow.test.js conventions (same step lookup, same run-ID comment style, mutation-resistant assertions), and I verified the pinned counts against the diff: run_shard appears exactly 3 times.
  • No unrelated changes in the diff; the added comment documents the rationale with the run IDs, which is what will save the next maintainer.

CI test evidence

From the PR's own CI on the reviewed commit (fetched via API; nothing PR-derived was executed here):

Check Conclusion
Test (ubuntu-latest, Node 22.x) ⏳ in progress
Integration Tests (no-AK, No Sandbox) ✅ success
Desktop Shell (ubuntu-22.04) ✅ success
Desktop Shell (windows-2022) ✅ success
Security Checks ✅ success
Dependency CVE audit ✅ success
Secret scan (TruffleHog) ✅ success
Test (macos-latest, Node 22.x) ⏭ skipped
Test (windows-latest, Node 22.x) ⏭ skipped
Integration Tests (CLI, No Sandbox) ⏭ skipped

The three skips are by design, not caused by this PR: ci.yml runs the macOS/Windows legs only on merge_group/schedule/workflow_dispatch, and the Integration Tests (CLI, No Sandbox) check is merge-group-only (it shows as skipped on every PR). The in-progress Test (ubuntu-latest) job is the load-bearing one here — the root test:ci it runs includes test:scripts, which executes the new e2e-workflow.test.js witness block.

One honest limit: the retry shape is pinned by the witness tests and the exit-status semantics are statically verifiable, but the live absorption effect only manifests the next time a real transient shard death hits the post-merge lane. That is environmental by definition for any retry mitigation — same profile as the already-merged #10355 build retry — and no sandboxed lane (/verify, /tmux) can exercise an Actions workflow, so there is nothing further to trigger here.

Real-scenario testing: N/A — CI-harness change with nothing user-visible, and this is an unattended CI run.

中文说明

代码审查

在上文记录的提交上审阅了 diff,无阻塞问题。

  • 重试语义在 Actions 默认 shell(bash -eo pipefail)下正确。 首个 run_shard 位于 || 左侧,首次失败不会触发 set -e;代码块的最后一条命令是第二次尝试,其退出状态即步骤的状态——确定性失败会在两次尝试中都失败、任务保持红色,与意图完全一致。两次尝试共享步骤的 TMPDIR 设置与清理 trap。
  • 范围正确。 重试管住的是实际一直在死亡的命令(运行 33293739505、33302550436、33317457036——三台不同主机上相同的支路与步骤);docker 支路未动,见证测试通过计数 QWEN_SANDBOX=docker vitest run 出现次数来固定这一点。只重试一次、不是开放循环:最坏情况是在任务 60 分钟预算内多一次约 15–20 分钟的尝试。
  • 遵循仓库惯例。 内联函数重试是同一文件中沙箱镜像构建重试先例(Main CI failed: E2E Tests on bc6f1a015cfb #10355)的更精简变体;用复制第二个步骤的方式复用该模式会连带复制整个 env 块与 TMPDIR 设置、产生更多 YAML,而第三方重试 action 会给特权 CI 引入外部依赖。见证块符合 e2e-workflow.test.js 的既有惯例(相同的步骤查找方式、相同的运行 ID 注释风格、抗变异断言),并已对照 diff 核实固定计数:run_shard 恰好出现 3 次。
  • diff 无无关改动;新增注释用运行 ID 记录了理由,这正是能为后续维护者省力的部分。

CI 测试证据

来自该提交上 PR 自身的 CI(经 API 获取;此处未执行任何 PR 派生代码)。表中三个跳过项均为设计使然、与本 PR 无关:ci.yml 仅在 merge_group/schedule/workflow_dispatch 上运行 macOS/Windows 支路,Integration Tests (CLI, No Sandbox) 仅限合并队列(在每个 PR 上都显示跳过)。进行中的 Test (ubuntu-latest) 任务是此处的关键——它运行的根级 test:ci 包含 test:scripts,会执行新增的 e2e-workflow.test.js 见证块。

诚实的边界:重试形态由见证测试固定、退出状态语义可静态验证,但实际吸收效果要等下一次真实的瞬时死亡发生在合并后通道上才会显现。对任何重试缓解而言这都是环境使然——与已合并的 #10355 构建重试同一形态——且没有任何沙箱通道(/verify/tmux)能执行 Actions workflow,因此此处无可触发的进一步验证。

真实场景测试:N/A——CI 基础设施变更、无用户可见行为,且本次为无人值守 CI 运行。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Confidence: 5/5 — minimal, well-evidenced mitigation that matches the repo's existing retry precedent; the only open item is the CI run still in flight.

My independent proposal for this problem — wrap the failing shard command and retry it once, warn between attempts, let the final attempt's exit status decide, pin the shape with witness tests, leave the docker leg alone — is essentially what this PR does, and I did not find a simpler path it missed. A step-level retry in the #10355 style would have duplicated the whole env/TMPDIR block for more YAML, and a marketplace retry action would trade an in-file pattern for an external dependency in privileged CI.

On the bigger picture: this is the twentieth "Main CI failed" open issue of this shape in ~36 hours, three consecutive main runs died at the same leg and step on three different hosts, and the shard passes on re-run — the problem is real and bleeding maintainer attention, and a bounded retry is the same mitigation already accepted for the sandbox build in this exact file. Nothing in the diff weakens a real failure signal: two attempts both fail → the job stays red. Every line in the diff serves the stated goal; the comments carry the run IDs a future maintainer will want.

Approval is deferred only because Test (ubuntu-latest, Node 22.x) is still running on the reviewed commit — that job executes the new witness tests, so it is the remaining evidence. Approval deferred until CI lands green on d8e833b1aa45281dae14193cb1f0304f9ecec15a.

中文说明

我针对此问题的独立方案——包住失败的分片命令并重试一次、两次尝试之间告警、以最后一次尝试的退出状态为准、用见证测试固定形态、不动 docker 支路——与本 PR 基本一致,且我没有找到它遗漏的更简路径。采用 #10355 的步骤级重试会把整个 env/TMPDIR 块复制一遍、产生更多 YAML;用市场重试 action 则是以特权 CI 中的外部依赖换掉文件内模式。

全局来看:约 36 小时内已有第 20 个同形态的 "Main CI failed" 开放 issue,连续三次 main 运行在三台不同主机上死于同一支路与步骤,而该分片重跑即通过——问题真实存在且持续消耗维护者精力,有界重试正是同一文件中沙箱构建已被接受的缓解形态。diff 没有削弱任何真实失败信号:两次尝试都失败时任务依旧红色。每一行改动都服务于既定目标;注释中保留了未来维护者需要的运行 ID。

暂缓批准仅因 Test (ubuntu-latest, Node 22.x) 仍在该提交上运行——该任务会执行新增的见证测试,是剩余的最后一项证据。待 CI 在该提交上全绿后批准。

Qwen Code · qwen3.8-max

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

@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.

Not explored to full depth (tool budget reached): "agent 3c": executing scripts/tests/e2e-workflow.test.js — the review worktree has no node_modules (no vitest, no yaml package) and a full install exceeds the tool bu….

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

中文说明

未探索到全部深度(达到工具调用预算):"agent 3c"executing scripts/tests/e2e-workflow.test.js — the review worktree has no node_modules (no vitest, no yaml package) and a full install exceeds the tool bu…

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

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

Comment thread .github/workflows/e2e.yml
Comment thread scripts/tests/e2e-workflow.test.js
Comment thread scripts/tests/e2e-workflow.test.js
Comment thread scripts/tests/e2e-workflow.test.js Outdated
Comment thread scripts/tests/e2e-workflow.test.js
Comment thread scripts/tests/e2e-workflow.test.js
@qwen-code-dev-bot

qwen-code-dev-bot commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator Author

AutoFix round 7 finishedview run. See this round's report below.

中文说明

AutoFix 第 7 轮已完成 —— 查看运行。本轮报告见下方。

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 Addressed the latest review feedback (round 1/10). What changed, and what I pushed back on: · 已处理最新评审反馈(第 1/10 轮)。改动内容与我反驳保留之处如下:

Review round summary — PR #10572 (issue #10566)

All 6 findings from the automated review (1 Critical, 5 Suggestions) are resolved in code in commit 4140912b34. No conflict was reported (--conflict false), and no merge was performed.

The review body [rv:5061654349] carries no actionable finding of its own — it reports the reviewer's own tool-budget exhaustion (it could not execute scripts/tests/e2e-workflow.test.js in a worktree without node_modules) and an actionlint embedded-shell lint it could not run. Its actionable content is the six inline findings below, all addressed.

Findings and dispositions

R1-1 [Critical] — unconditional retry can outrun timeout-minutes: 60 — RESOLVED (rc:3890261023)

The claim checks out against the workflow: timeout-minutes: 60 is job-wide, and the retry re-ran the whole shard unconditionally — in two of the three motivating runs (33293739505, 33302550436) the shard died with ~10–12 job minutes left, less than one shard-time (17–21 min measured), so the retry could only be cancelled mid-flight by the job timeout.

Fix, following the finding's job-elapsed option (the step-level variant cannot work: setup spend varies ~10–29 min, so no static step-level threshold separates the three runs):

  • A new first step Record job start epoch exports E2E_JOB_START_EPOCH=$(date +%s) to GITHUB_ENV, so the gate sees the whole job's spend, not just the test step's.
  • Inside the || { … } group, the retry is now behind elapsed=$(( $(date +%s) - ${E2E_JOB_START_EPOCH:-0} )) / if (( elapsed > 2100 )): past 2100s of job time (3600s budget minus a 25-minute reserve — worst measured shard ~21min plus slack), the step fails fast with an ::error:: annotation instead of starting a retry that cannot finish. With the epoch missing the arithmetic fails closed (elapsed ≈ now > 2100 → no retry).
  • timeout-minutes: 60 was NOT raised, per the finding's constraint.

Checked against all three motivating runs: 33302550436 (retry would start at job minute ~49.7) → denied; 33293739505 (~47.8) → denied; 33317457036 (~19.5) → allowed, and 19.5 + 25 reserve ≤ 60 fits.

R1-2 [Suggestion] — retry not pinned as conditional (end-anchor) — RESOLVED (rc:3890261025)

Added the end-anchored assertion expect(runStep.run).toMatch(/run_shard\s*\n\s*\}\s*\n\s*fi\s*$/) in retries the sandbox:none shard exactly once, pinning the retried run_shard as the group's last command and the group as the script's last statement. The pattern tolerates the literal } inside ${RUNNER_NAME:-this runner} because it is anchored to the trailing run_shard, not scope-matched. Probe P3 (retry moved outside the group) turns it red.

R1-3 [Suggestion] — nothing pins that a failed second attempt fails the step — RESOLVED (rc:3890261026)

Added a bash-execution witness in a new file scripts/tests/e2e-shard-retry.test.js: it extracts runStep.run, substitutes ${{ matrix.sandbox }}sandbox:none and ${{ matrix.shard }}1/3, stubs npm with a controllable per-call exit code, and runs the script under bash -e -o pipefail exactly as the runner does. It asserts (a) a fail-once-then-succeed stub exits 0 with two npm calls, and (b) an always-failing stub exits non-zero with two npm calls. Probe P4 (appending || true to the brace group) turns (b) red. The new file joins the win32 exclude list in scripts/tests/vitest.config.ts alongside the other bash-driven suites, so test_windows and windows-runner-smoke.yml stay green; the pure YAML-parse e2e-workflow.test.js keeps running on Windows.

R1-4 [Suggestion] — retried command's argument list not pinned — RESOLVED (rc:3890261031)

Added retries the full shard command, shard and excludes included, pinning the verbatim invocation including both --exclude arguments and --shard='${{ matrix.shard }}'. Probe P5 (reducing the run_shard() body to the bare script name) turns it red.

R1-5 [Suggestion] — does not retry the docker leg pins count, not structure — RESOLVED (rc:3890261034)

Added the structural assertion expect(runStep.run).not.toMatch(/[A-Za-z_]+\(\)\s*\{[^}]*QWEN_SANDBOX=docker/s) to the existing test, pinning the docker command as outside any function body. It passes against the current unwrapped command; probe P6 (function-wrapped docker command called twice) turns it red.

R1-6 [Suggestion] — nothing blocks continue-on-error: true on Run E2E tests — RESOLVED (rc:3890261039)

Added keeps the run step red when the shard stays red asserting expect(runStep['continue-on-error']).toBeUndefined(), mirroring the sibling block's pin. It targets the run step only — the sandbox-image build step's deliberate continue-on-error: true is untouched. Probe P7 (adding the key) turns it red.

Mutation probes (each applied, suite run red, then restored)

Probe Mutation Tests that went red
P1 Budget gate removed (pre-round unconditional retry restored) fails fast when the remaining job budget cannot fit a retried shard (bash witness), gates the retry on the remaining job budget
P2 Record job start epoch step removed records the job start epoch before the expensive setup steps
P3 Retry run_shard moved after the `
P4 || true appended to the brace group keeps the step red when the shard fails both attempts (bash witness), retries the sandbox:none shard exactly once
P5 Shard/exclude arguments stripped from run_shard() body retries the full shard command, shard and excludes included
P6 Docker command wrapped in a function called twice does not retry the docker leg
P7 continue-on-error: true added to Run E2E tests keeps the run step red when the shard stays red

All seven mutants were caught, and the suite returned to 19/19 green after restoring the fix. P1 also doubles as proof that the Critical's witness tests fail against the pre-round code.

Failed checks noted in the feedback

  • Test (ubuntu-latest Node 22.x): CANCELLED — a cancellation, not a test failure; consistent with concurrency cancelling the previous push's run on this branch. Re-runs with the new push; nothing to fix in code.
  • Post Coverage Comment: FAILURE — downstream of the cancelled Test lane; same treatment.

Verification

  • npm run build — passed (exit 0)
  • npm run typecheck — passed (exit 0). A first attempt exited 2 with TS6305 "output file has not been built" errors while a concurrent npm run build was still writing dist/; re-run sequentially after the build completed and passed cleanly — that failure was a concurrency artifact, not a code defect.
  • npm run lint — passed (exit 0, zero errors/warnings from both eslint invocations)
  • Focused Vitest (touched files): npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-workflow.test.js scripts/tests/e2e-shard-retry.test.js — 19/19 passed (re-run green after the probes and after the stash round-trip)
  • npm run test:scripts (full scripts suite) — 1971/1974 runnable tests pass in the final sequential run; the 3 remaining failures are all outside this PR's footprint and each is evidenced as not caused by this change:
    • no-config-object-create-config.test.js and qwen-autofix-workflow.test.js fail only under full-suite load (30s timeouts on shared-host contention) and pass when run in isolation (isolated re-run: 252/253, the one failure below).
    • verify-capture.test.js > renders 256-colour and truecolor via the default-grey fallback fails deterministically in isolation, and reproduces identically with this change stashed (base tree d8e833b1aa) — a pre-existing librsvg/rendering environment issue on this pool runner, not introduced by this commit.
  • yamllint — the yamllint binary is not installed on this runner and installing it is out of scope for allowed commands; the YAML edits follow the file's existing quoting/indentation conventions and CI's node scripts/lint.js --yamllint step remains the authority.
  • Integration tests after npm run bundle — not applicable: the changed behavior is CI workflow YAML and its script-test witnesses, which are not exercised through the bundled CLI or the integration harness.
中文说明

评审轮次总结 — PR #10572(issue #10566

自动评审的全部 6 条发现(1 条 Critical、5 条 Suggestion)已在提交 4140912b34 中以代码解决。本轮未报告冲突(--conflict false),也未执行任何合并。

评审主体 [rv:5061654349] 本身不含可执行的发现——它报告的是评审者自身的工具预算耗尽(在没有 node_modules 的 worktree 中无法执行 scripts/tests/e2e-workflow.test.js),以及一项无法运行的 actionlint 内嵌 shell 检查。其可执行内容就是下面六条内联发现,均已处理。

发现与处置

R1-1 [Critical] — 无条件重试可能超出 timeout-minutes: 60 — 已解决(rc:3890261023)

该论断与 workflow 相符:timeout-minutes: 60 是整个任务共享的预算,而重试会无条件从零重跑整个分片——在三次动机运行中的两次(33293739505、33302550436)里,分片死亡时任务只剩约 10–12 分钟,不足一个分片时长(实测 17–21 分钟),重试只会在进行中被任务超时取消。

修复采用该发现建议的任务级耗时方案(步骤级方案不可行:安装耗时在约 10–29 分钟之间浮动,没有任何静态的步骤级阈值能区分这三次运行):

  • 新增首个步骤 Record job start epoch,向 GITHUB_ENV 导出 E2E_JOB_START_EPOCH=$(date +%s),使门控能看到整个任务的消耗,而不仅是测试步骤的消耗。
  • || { … } 组内,重试现在位于 elapsed=$(( $(date +%s) - ${E2E_JOB_START_EPOCH:-0} )) / if (( elapsed > 2100 )) 之后:任务耗时超过 2100 秒(3600 秒预算减去 25 分钟预留——实测最差分片约 21 分钟加上余量)时,步骤以 ::error:: 注解快速失败,而不是启动一次不可能完成的重试。若 epoch 缺失,算术上失败即关闭(elapsed ≈ 当前时间戳 > 2100 → 不重试)。
  • 按该发现的约束,未上调 timeout-minutes: 60

对三次动机运行逐一核对:33302550436(重试将在任务第 ~49.7 分钟开始)→ 拒绝;33293739505(~47.8)→ 拒绝;33317457036(~19.5)→ 允许,且 19.5 + 25 分钟预留 ≤ 60,放得下。

R1-2 [Suggestion] — 未固定"重试是有条件的"(末尾锚定)— 已解决(rc:3890261025)

retries the sandbox:none shard exactly once 中加入末尾锚定断言 expect(runStep.run).toMatch(/run_shard\s*\n\s*\}\s*\n\s*fi\s*$/),把被重试的 run_shard 固定为组的最后一条命令、且组是脚本的最后一条语句。该模式能容忍 ${RUNNER_NAME:-this runner} 内的字面 },因为它锚定在末尾的 run_shard 上,而非按作用域匹配。探针 P3(把重试移到组外)使其变红。

R1-3 [Suggestion] — 没有断言固定"第二次尝试失败会让步骤失败" — 已解决(rc:3890261026)

在新文件 scripts/tests/e2e-shard-retry.test.js 中加入 bash 执行见证:提取 runStep.run,把 ${{ matrix.sandbox }} 替换为 sandbox:none${{ matrix.shard }} 替换为 1/3,用可按调用次序控制退出码的桩替换 npm,并在与运行器完全相同的 bash -e -o pipefail 下执行脚本。断言:(a) 失败一次后成功的桩以退出码 0 结束、npm 被调用两次;(b) 总是失败的桩以非零退出、npm 被调用两次。探针 P4(给大括号组追加 || true)使 (b) 变红。新文件已加入 scripts/tests/vitest.config.ts 的 win32 排除列表(与其他 bash 驱动套件并列),test_windowswindows-runner-smoke.yml 通道保持绿色;纯 YAML 解析的 e2e-workflow.test.js 仍继续在 Windows 上运行。

R1-4 [Suggestion] — 未固定被重试命令的参数列表 — 已解决(rc:3890261031)

新增 retries the full shard command, shard and excludes included,逐字固定完整调用,包括两个 --exclude 参数与 --shard='${{ matrix.shard }}'。探针 P5(把 run_shard() 函数体简化为裸脚本名)使其变红。

R1-5 [Suggestion] — does not retry the docker leg 固定的是计数而非结构 — 已解决(rc:3890261034)

在既有测试中补充结构断言 expect(runStep.run).not.toMatch(/[A-Za-z_]+\(\)\s*\{[^}]*QWEN_SANDBOX=docker/s),把 docker 命令固定为不位于任何函数体内。它对当前未包裹的单条命令仍然通过;探针 P6(把 docker 命令包进函数并调用两次)使其变红。

R1-6 [Suggestion] — 没有任何断言阻止给 Run E2E testscontinue-on-error: true — 已解决(rc:3890261039)

新增 keeps the run step red when the shard stays red,断言 expect(runStep['continue-on-error']).toBeUndefined(),与姊妹块的固定方式一致。它只针对 run 步骤——sandbox 镜像构建步骤上有意保留的 continue-on-error: true 不受影响。探针 P7(加上该键)使其变红。

变异探针(逐一应用、跑红后还原)

探针 变异 变红的测试
P1 移除预算门控(恢复轮次前的无条件重试) fails fast when the remaining job budget cannot fit a retried shard(bash 见证)、gates the retry on the remaining job budget
P2 移除 Record job start epoch 步骤 records the job start epoch before the expensive setup steps
P3 把重试的 run_shard 移到 || { … } 组之后 retries the sandbox:none shard exactly once(末尾锚定)、gates the retry on the remaining job budget
P4 给大括号组追加 || true keeps the step red when the shard fails both attempts(bash 见证)、retries the sandbox:none shard exactly once
P5 run_shard() 函数体中移除分片/排除参数 retries the full shard command, shard and excludes included
P6 把 docker 命令包进函数并调用两次 does not retry the docker leg
P7 Run E2E testscontinue-on-error: true keeps the run step red when the shard stays red

七个变异体全部被捕获;还原修复后套件恢复 19/19 全绿。P1 同时证明 Critical 的见证测试在轮次前代码上会失败。

反馈中提到的失败检查

  • Test (ubuntu-latest Node 22.x): CANCELLED — 这是取消而非测试失败;与本分支上新一次推送触发的并发取消一致。新推送后会重新运行,代码层面无需修复。
  • Post Coverage Comment: FAILURE — 是被取消的 Test 通道的下游结果,同样处理。

验证

  • npm run build — 通过(退出码 0)
  • npm run typecheck — 通过(退出码 0)。首次尝试以退出码 2 失败,报 TS6305 "output file has not been built" 错误,原因是并发的 npm run build 当时仍在写 dist/;在构建完成后按顺序重跑即干净通过——该失败是并发伪影,不是代码缺陷。
  • npm run lint — 通过(退出码 0,两次 eslint 调用均零错误零警告)
  • 聚焦 Vitest(触及文件):npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-workflow.test.js scripts/tests/e2e-shard-retry.test.js — 19/19 通过(探针之后与 stash 往返之后均复跑为绿)
  • npm run test:scripts(完整脚本套件)— 最终按序运行 1971/1974 个可运行测试通过;其余 3 个失败都在本 PR 足迹之外,且各有证据证明与本变更无关:
    • no-config-object-create-config.test.jsqwen-autofix-workflow.test.js 只在完整套件负载下失败(共享主机争用下的 30 秒超时),单独运行时通过(隔离复跑:252/253,唯一失败见下条)。
    • verify-capture.test.js > renders 256-colour and truecolor via the default-grey fallback 在隔离运行时确定性失败,且在 stash 掉本变更后(基线树 d8e833b1aa)同样复现——是该池运行器上既有的 librsvg/渲染环境问题,非本提交引入。
  • yamllint — 本运行器未安装 yamllint 二进制,安装不属于允许的命令范围;YAML 改动遵循该文件既有的引号/缩进惯例,以 CI 的 node scripts/lint.js --yamllint 步骤为准。
  • npm run bundle 后的集成测试 — 不适用:本变更的行为是 CI workflow YAML 及其脚本测试见证,不经过打包后的 CLI 或集成测试框架执行。

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。

🧵 Resolved all 6 selected review thread(s). · 已关闭全部选中的 6 条评审线程。

Re-review when you have a moment. After round 10 this bot stops and leaves the PR for a human. · 有空请复审;第 10 轮后本 bot 停止并将 PR 交给人工。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@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": could not execute scripts/tests/e2e-shard-retry.test.js / scripts/tests/e2e-workflow.test.js — no node_modules exists in the review worktree or the main c….

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

中文说明

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

未探索到全部深度(达到工具调用预算):"agent 3b"could not execute scripts/tests/e2e-shard-retry.test.js / scripts/tests/e2e-workflow.test.js — no node_modules exists in the review worktree or the main c…

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

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

Comment thread .github/workflows/e2e.yml
Comment thread .github/workflows/e2e.yml
Comment thread scripts/tests/e2e-shard-retry.test.js Outdated
Comment thread scripts/tests/e2e-workflow.test.js
…10566)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 Addressed the latest review feedback (round 2/10). What changed, and what I pushed back on: · 已处理最新评审反馈(第 2/10 轮)。改动内容与我反驳保留之处如下:

Autofix review round — PR #10572 (issue #10566)

Round outcome: all 4 inline findings addressed in code (commit fb7c9c9afc). No conflict (--conflict false; no merge performed).

Feedback points and decisions

  1. [rc:3890694365] R2-1 — budget-gate arithmetic coupling unwitnessedResolved.

    • Added expect(yml.jobs['e2e-test-linux']['timeout-minutes']).toBe(60) as a new pin in the sandbox:none shard retry YAML-parse suite — the 2100s threshold is derived from this 60-minute timeout (3600s − 25min reserve), so the coupling is now pinned.
    • Added the two exact boundary execution cases to e2e-shard-retry.test.js: elapsed 2100s → retry admitted (npmCalls 2, ::warning::, exit 0), and elapsed 2101s → retry refused (npmCalls 1, ::error::, non-zero exit).
    • One deliberate deviation from the suggested patch: the boundary cases pin date in the harness (same mechanism as the existing npm stub). With a real clock, elapsed only ever grows between the test process's Date.now() and the script's date +%s, which would race the 2100s threshold by up to a second on a loaded runner — a flake source in a PR whose purpose is removing flakes. With the clock pinned, elapsed is exact in every case.
  2. [rc:3890694367] R2-2 — epoch-step unconditionality unwitnessedResolved. Added expect(epochStep.if).toBeUndefined() to the existing 'records the job start epoch...' test: any if: added to the step now turns this red, so the gate's ${E2E_JOB_START_EPOCH:-0} fallback cannot silently disable the retry on one leg.

  3. [rc:3890694368] R1-3 — harness shell flags stricter than the runnerResolved. Verified the claim first: e2e.yml has no defaults: block and the 'Run E2E tests' step has no shell: override, so the runner executes it under GitHub's default Linux step shell bash -e {0} — no pipefail (only explicit shell: bash composite steps get -o pipefail). Took the fidelity fix over the comment-only fix: the harness now runs bash -e scriptFile, exactly matching the runner, so a future pipeline added to the step cannot diverge harness semantics from production. The header comment now states the actual default shell.

  4. [rc:3890694371] R2-3 — job-level continue-on-error unwitnessedResolved. Added expect(yml.jobs['e2e-test-linux']['continue-on-error']).toBeUndefined() alongside the existing step-level pin in 'keeps the run step red when the shard stays red'. Scoped to e2e-test-linux only — isolated-nightly's deliberate job-level key stays untouched.

Mutation probes (every new witness verified against its own mutant)

Mutant Witness that went red
timeout-minutes: 6045 pins the job timeout the budget-gate arithmetic is built on
timeout-minutes: 6090 pins the job timeout the budget-gate arithmetic is built on
elapsed > 2100elapsed > 2900 refuses a retry one second past the 2100s budget-gate threshold
elapsed > 2100elapsed > 2099 retries at exactly the 2100s budget-gate threshold
if: (sandbox:docker) added to the epoch step records the job start epoch before the expensive setup steps
job-level continue-on-error: true on e2e-test-linux keeps the run step red when the shard stays red

Each probe failed exactly one test — the intended witness — with the rest of the suite green; .github/workflows/e2e.yml was restored to pristine after every probe (final git status clean, no workflow diff committed).

Failed checks triage

  • Integration Tests (no-AK No Sandbox): FAILURE — not reproducible locally. Reproduced the gate's exact steps (npm run typecheck:integration + npm run test:integration:no-ak:sandbox:none) under the CI empty-credential environment after npm run build: 13 files / 152 tests all green, exit 0. (A first local attempt failed only because this checkout lacked packages/sdk-typescript/dist; npm run build fixed that — CI's npm ci builds via prepare, so this mode cannot explain the CI failure.) This PR touches no file the gate exercises, and the job runs on the same contended ECS pool this PR exists to stabilize; the evidence points to a transient/environment failure of the same class this change absorbs in e2e.yml. The workflow's independent CI remains the final verification gate.
  • Test / web-shell E2E Smoke: CANCELLED; Post Coverage Comment: FAILURE — cancelled/downstream statuses with no failure content to act on; no code path connects this round's diff (two test files) to those jobs.

Verification

  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed
  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-shard-retry.test.js scripts/tests/e2e-workflow.test.js — 2 files / 22 tests passed (re-run post-commit)
  • npm run typecheck:integration — passed (failed-check triage)
  • npm run test:integration:no-ak:sandbox:none under a CI-equivalent empty-credential env — 13 files / 152 tests passed, exit 0 (failed-check triage)
  • Mutation probes — 6 mutants applied to .github/workflows/e2e.yml; each turned exactly its witness red; file restored after each probe
中文说明

Autofix 审查轮次 — PR #10572(issue #10566

本轮结果:4 条行内发现全部在代码中处理完毕(提交 fb7c9c9afc)。无冲突(--conflict false,未执行任何合并)。

反馈点与处理决定

  1. [rc:3890694365] R2-1 — 预算门控的算术耦合无见证已解决。

    • sandbox:none shard retry 的 YAML 解析套件中新增固定断言 expect(yml.jobs['e2e-test-linux']['timeout-minutes']).toBe(60)——2100s 阈值正是由这个 60 分钟超时推导而来(3600s − 25 分钟预留),二者的耦合从此被固定。
    • e2e-shard-retry.test.js 中加入两个精确边界执行用例:elapsed 2100s → 允许重试(npmCalls 2、::warning::、退出码 0);elapsed 2101s → 拒绝重试(npmCalls 1、::error::、非零退出)。
    • 与建议补丁有一处有意偏差:边界用例在 harness 中固定了 date(与现有 npm 桩相同的机制)。若使用真实时钟,从测试进程的 Date.now() 到脚本内 date +%s 之间 elapsed 只会增大,在高负载运行器上可能与 2100s 阈值相差最多一秒——在一个以消除抖动为目的的 PR 里引入新的抖动源。固定时钟后,所有用例的 elapsed 都是精确值。
  2. [rc:3890694367] R2-2 — epoch 步骤的无条件性无见证已解决。 在现有的 'records the job start epoch...' 测试中加入 expect(epochStep.if).toBeUndefined():今后给该步骤添加任何 if: 都会让此断言变红,门控的 ${E2E_JOB_START_EPOCH:-0} 回退就不可能在某一支路上静默禁用重试。

  3. [rc:3890694368] R1-3 — harness 的 shell 旗标比运行器更严格已解决。 先核实了该主张:e2e.yml 没有 defaults: 块,'Run E2E tests' 步骤也没有 shell: 覆盖,因此运行器实际以 GitHub 的 Linux 默认步骤 shell bash -e {0} 执行——没有 pipefail(只有显式 shell: bash 的复合步骤才有 -o pipefail)。选择了保真修复而非仅改注释:harness 现在以 bash -e scriptFile 执行,与运行器完全一致,未来给步骤加入管道时,harness 语义不会与生产环境背离。文件头注释已改为陈述真实的默认 shell。

  4. [rc:3890694371] R2-3 — 任务级 continue-on-error 无见证已解决。 在 'keeps the run step red when the shard stays red' 测试中,于现有步骤级固定之外补加 expect(yml.jobs['e2e-test-linux']['continue-on-error']).toBeUndefined()。只断言 e2e-test-linux——isolated-nightly 有意携带的任务级键不受影响。

变异探测(每个新见证都针对其自身变异体验证)

变异体 变红的见证
timeout-minutes: 6045 pins the job timeout the budget-gate arithmetic is built on
timeout-minutes: 6090 pins the job timeout the budget-gate arithmetic is built on
elapsed > 2100elapsed > 2900 refuses a retry one second past the 2100s budget-gate threshold
elapsed > 2100elapsed > 2099 retries at exactly the 2100s budget-gate threshold
给 epoch 步骤加 if:(sandbox:docker) records the job start epoch before the expensive setup steps
给 e2e-test-linux 加任务级 continue-on-error: true keeps the run step red when the shard stays red

每个探测恰好只有一个测试失败——正是预期的见证——套件其余部分保持绿色;每次探测后 .github/workflows/e2e.yml 均恢复原状(最终 git status 干净,未提交任何 workflow 差异)。

失败检查的分诊

  • Integration Tests (no-AK No Sandbox): FAILURE — 本地无法复现。在 npm run build 之后,按 CI 的空凭据环境精确复现了该门控的两个步骤(npm run typecheck:integration + npm run test:integration:no-ak:sandbox:none):13 个文件 / 152 个测试全部通过,退出码 0。(第一次本地尝试失败仅因本检出缺少 packages/sdk-typescript/distnpm run build 后即解决——CI 的 npm ci 会通过 prepare 构建,因此该模式不可能解释 CI 的失败。)本 PR 未触碰该门控执行的任何文件,而该任务恰好运行在本 PR 所要稳定的同一套存在竞争的 ECS 池上;证据指向与本变更在 e2e.yml 中所吸收的同类瞬时/环境失败。工作流的独立 CI 仍是最终验证门。
  • Test / web-shell E2E Smoke: CANCELLED;Post Coverage Comment: FAILURE — 属于被取消/下游状态,没有可据以行动的失败内容;本轮差异(两个测试文件)与这些任务之间不存在任何代码路径上的关联。

验证(Verification)

  • npm run build — 通过
  • npm run typecheck — 通过
  • npm run lint — 通过
  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-shard-retry.test.js scripts/tests/e2e-workflow.test.js — 2 个文件 / 22 个测试通过(提交后复跑)
  • npm run typecheck:integration — 通过(失败检查分诊)
  • npm run test:integration:no-ak:sandbox:none,CI 等价空凭据环境 — 13 个文件 / 152 个测试通过,退出码 0(失败检查分诊)
  • 变异探测 — 对 .github/workflows/e2e.yml 施加 6 个变异体,每个恰好使其对应见证变红;每次探测后恢复原文件

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。

🧵 Resolved all 4 selected review thread(s). · 已关闭全部选中的 4 条评审线程。

Re-review when you have a moment. After round 10 this bot stops and leaves the PR for a human. · 有空请复审;第 10 轮后本 bot 停止并将 PR 交给人工。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@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.

Partially reviewed — gaps disclosed. Suggestions are inline.

Not reviewed: reverse audit — stopped before round 1 by the review time budget.

Deferred under the convergence posture (round 3, not a blocker) — recorded, not requested in this round:

  • scripts/tests/e2e-shard-retry.test.js:94 — [probe] No execution witness for the green first-attempt path — an unconditional pre-gate side effect (e.g. a spurious ::warning:: before run_shard || { ) ships with every witness green
  • scripts/tests/e2e-workflow.test.js:180 — [probe] Docker-leg anti-retry pin [^}]* cannot see through an inner } — a function-wrapped docker double invocation (folding the e2e.yml:85 preflight into it) ships with every witness green

Convergence: round 3 posted 1 inline comment(s), 1 of them reported for the first time; the previous round posted 4 (4 new). Findings keep coming back to the same files: scripts/tests/e2e-shard-retry.test.js (findings in round 1; 1 more now). A cluster that keeps producing siblings usually means the fixes are treating instances of a shared root cause — triaging that cause before the next round, or splitting an independent cluster into its own pull request, tends to end the loop faster than fixing them one at a time. (Observation only — nothing was withheld from this review because of this observation.)

中文说明

仅完成部分审查,审查缺口已披露。 建议见行内评论。

未审查:反向审计——评审时间预算不足,未能开始第 1 轮。

收敛姿态下延后(第 3 轮,非阻断)——已记录,本轮不要求修改:共 2 条(原文未翻译,列表见上方英文部分)。

收敛情况:第 3 轮发布了 1 条行内评论,其中 1 条是首次提出;上一轮发布了 4 条(其中 4 条首次提出)。发现反复回到同一批文件:scripts/tests/e2e-shard-retry.test.js(第 1 轮已出过发现,本轮又有 1 条)。一个不断再生兄弟发现的簇,通常意味着逐条修复只在处理同一根因的实例——先定位并处理该根因,或把独立的簇拆成单独的 PR,通常比逐条修复更快结束循环。(仅为观察——本轮评审未因此扣留任何内容。)

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

Comment thread scripts/tests/e2e-shard-retry.test.js
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 Addressed the latest review feedback (round 3/10). What changed, and what I pushed back on: · 已处理最新评审反馈(第 3/10 轮)。改动内容与我反驳保留之处如下:

Autofix review round — PR #10572 (issue #10566)

Round scope: one inline Suggestion plus the two deferred probe findings recorded by the reviewer's convergence posture. All three were confirmed witness gaps in the tests this PR adds; all three were reproduced by mutation probe before any change, then closed with minimal pins. The round is test-only — .github/workflows/e2e.yml is byte-identical to the pre-round HEAD (diff-verified).

Feedback points and decisions

[rc:3891260591] R1-3 (fix-induced): shell-fidelity premise unpinned — RESOLVED (implemented)

Claim: the round-2 execution harness runs the 'Run E2E tests' script under bash -e, relying on the step having no shell: override and e2e.yml no defaults: block; that load-bearing premise had no assertion, so a later shell: bash (expanding to bash --noprofile --norc -e -o pipefail {0}) or defaults: run: shell: would switch the lane's semantics while every witness stayed green.

Reproduced before changing anything: step-level shell: 'bash' → 22/22 green; workflow-level defaults: run: shell: 'bash' → 22/22 green. Gap confirmed on current code.

Fix as proposed: new keeps the default step shell the execution harness assumes test in the sandbox:none shard retry describe of scripts/tests/e2e-workflow.test.js, asserting absence only:

  • expect(runStep.shell).toBeUndefined() — scoped to the e2e-test-linux run step
  • expect(yml.defaults).toBeUndefined() — scoped to e2e.yml's workflow level

The pin never sweeps jobs or workflows that deliberately set a shell: qwen-autofix.yml's deliberate defaults.run.shell: bash stays pinned by its own suite (qwen-autofix-workflow.test.js), untouched here. Also added a header cross-reference in e2e-shard-retry.test.js pointing at the new pin.

Mutation proof, as requested by the finding:

  • MUTATED (step-level shell: 'bash') + pin → × the new assertion, 1 failed | 23 passed
  • MUTATED (defaults: run: shell: 'bash') + pin → × the new assertion, 1 failed | 23 passed
  • CLEAN + pin → 24/24 green

Deferred probe 1 (review rv:5062616507): no execution witness for the green first-attempt path — RESOLVED (implemented early)

The review recorded this as not requested in this round; it was closed anyway because it is a confirmed witness gap in a test this PR adds, inside the same footprint — closing the whole cluster in one round, as the review's cluster observation suggested. Reproduced: an unconditional echo "::warning::..." injected before run_shard || { shipped 22/22 green. Fix: new runs a green shard straight through with no retry noise in e2e-shard-retry.test.js — exactly one npm call, exit 0, no ::warning::/::error:: output. Mutation proof: the injected spurious warning turns that test red (1 failed | 23 passed).

Deferred probe 2 (review rv:5062616507): docker anti-retry pin cannot see through an inner } — RESOLVED (implemented early)

Same reasoning. Reproduced: wrapping the docker command in a function whose body carries its own brace group and calling it twice shipped 22/22 green — [^}]* stops at the inner }. Fix: the structure pin now spans braces: /[A-Za-z_]+\(\)\s*\{.*?QWEN_SANDBOX=docker/s. Mutation proof: the function-wrapped double invocation turns does not retry the docker leg red (1 failed | 23 passed); clean code stays green (no function definition precedes the docker command — run_shard() is defined later, in the else branch).

Conflict notes

None (--conflict false; no merge performed).

Notes

  • The failed checks listed in the feedback (Test CANCELLED, web-shell E2E Smoke CANCELLED, Post Coverage Comment FAILURE) are cancellations and a bot-infrastructure failure, not attributable to this diff; no red check traces to this branch's changes.
  • Round commit: test(ci): pin the shard-retry shell premise and close witness gaps (#10566) — 2 files changed, 33 insertions(+), 3 deletions(-), all in scripts/tests/.

Verification

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-workflow.test.js scripts/tests/e2e-shard-retry.test.js — passed, 24/24 (18 + 6 tests)
  • Mutation probes M1–M4 (step-level shell: bash; workflow defaults:; spurious pre-gate ::warning::; function-wrapped docker double invocation) — each turned exactly the new/hardened witness red (1 failed | 23 passed each time); e2e.yml restored byte-identical after each probe (diff-verified against HEAD)
  • npm run test:scripts — 1975 passed | 16 skipped | 3 failures, all in suites this PR never touched and unrelated to this diff (evidence below)
  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed

Unrelated npm run test:scripts failures (evidence)

  1. install-script.test.js › 'does not package audio-capture test artifacts' — ENOENT ... packages/audio-capture/dist: the native audio-capture package is not built in this workspace. Deterministic environment state; this diff (two leaf test files under scripts/tests/) cannot create or remove that artifact, and git status shows nothing else changed.
  2. verify-capture.test.js › '256-colour fallback' — passes in isolation (1 passed | 22 skipped); parallel-contention artifact.
  3. qwen-autofix-workflow.test.js › 'stale-duplicate revalidation replay' — passes in isolation (1 passed | 228 skipped); parallel-contention artifact.
中文说明

Autofix 审查轮次 — PR #10572(issue #10566

本轮范围:一条行内 Suggestion,外加评审收敛姿态记录的两条延后探针发现。三者均为本 PR 新增测试中已确认的见证缺口;三者都先经变异探针复现、再以最小固定闭合。本轮只改测试——.github/workflows/e2e.yml 与轮前 HEAD 逐字节一致(已用 diff 验证)。

反馈点与决定

[rc:3891260591] R1-3(fix-induced,修复引入):shell 保真前提未被固定 — 已解决(已实现)

主张:第 2 轮的执行 harness 以 bash -e 运行 'Run E2E tests' 脚本,其前提是该步骤没有 shell: 覆盖、e2e.yml 没有 defaults: 块;这个承重前提没有任何断言固定,因此未来任何 shell: bash(会展开为 bash --noprofile --norc -e -o pipefail {0})或 defaults: run: shell: 都会切换通道的 shell 语义,而所有见证依旧全绿。

改动前先复现:给步骤加 shell: 'bash' → 22/22 全绿;给工作流加 defaults: run: shell: 'bash' → 22/22 全绿。缺口在当前代码上确认存在。

按建议实现修复:在 scripts/tests/e2e-workflow.test.jssandbox:none shard retry 块中新增 keeps the default step shell the execution harness assumes 测试,只断言缺席:

  • expect(runStep.shell).toBeUndefined() — 作用域限定在 e2e-test-linux 的 run 步骤
  • expect(yml.defaults).toBeUndefined() — 作用域限定在 e2e.yml 的工作流级

该固定绝不横扫有意设置 shell 的任务或工作流:qwen-autofix.yml 有意设置的 defaults.run.shell: bash 仍由其自己的套件(qwen-autofix-workflow.test.js)固定,此处未触碰。同时在 e2e-shard-retry.test.js 文件头注释中加了指向该固定的交叉引用。

按发现要求补上的变异证明:

  • 变异(步骤级 shell: 'bash')+ 固定 → × 新断言,1 failed | 23 passed
  • 变异(defaults: run: shell: 'bash')+ 固定 → × 新断言,1 failed | 23 passed
  • 干净代码 + 固定 → 24/24 全绿

延后探针 1(评审 rv:5062616507):绿色首次尝试路径没有执行见证 — 已解决(提前实现)

评审将其记录为"本轮不要求";但仍然闭合了它,因为这是本 PR 所加测试中已确认的见证缺口,且在同一足迹范围内——按评审的簇观察建议,一轮闭合整个簇。复现:在 run_shard || { 之前注入一条无条件的 echo "::warning::..." → 22/22 全绿。修复:在 e2e-shard-retry.test.js 新增 runs a green shard straight through with no retry noise——恰好一次 npm 调用、退出码 0、无 ::warning::/::error:: 输出。变异证明:注入的杂散 warning 使该测试变红(1 failed | 23 passed)。

延后探针 2(评审 rv:5062616507):docker 防重试固定无法看穿内层 } — 已解决(提前实现)

理由同上。复现:把 docker 命令包进一个函数体自带花括号组的函数并调用两次 → 22/22 全绿——[^}]* 在内层 } 处停止。修复:结构固定现在可跨越花括号:/[A-Za-z_]+\(\)\s*\{.*?QWEN_SANDBOX=docker/s。变异证明:函数包装的双重调用使 does not retry the docker leg 变红(1 failed | 23 passed);干净代码保持绿色(没有任何函数定义出现在 docker 命令之前——run_shard() 定义在后面的 else 分支里)。

冲突说明

无(--conflict false;未执行合并)。

备注

  • 反馈中列出的失败检查(Test CANCELLED、web-shell E2E Smoke CANCELLED、Post Coverage Comment FAILURE)是取消与机器人基础设施失败,与本 diff 无关;没有任何红色检查能追溯到本分支的改动。
  • 本轮提交:test(ci): pin the shard-retry shell premise and close witness gaps (#10566) — 2 个文件变更,33 行新增、3 行删除,全部位于 scripts/tests/

验证

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-workflow.test.js scripts/tests/e2e-shard-retry.test.js — 通过,24/24(18 + 6 个测试)
  • 变异探针 M1–M4(步骤级 shell: bash;工作流级 defaults:;门前的杂散 ::warning::;函数包装的 docker 双重调用)——每一次都恰好使新增/加强的见证变红(每次 1 failed | 23 passed);每个探针之后 e2e.yml 均恢复为逐字节一致(已与 HEAD diff 验证)
  • npm run test:scripts — 1975 通过 | 16 跳过 | 3 个失败,全部位于本 PR 从未触碰的套件且与本 diff 无关(证据见下)
  • npm run build — 通过
  • npm run typecheck — 通过
  • npm run lint — 通过

npm run test:scripts 中无关的失败(证据)

  1. install-script.test.js › 'does not package audio-capture test artifacts' — ENOENT ... packages/audio-capture/dist:原生 audio-capture 包在本工作区未构建。确定性的环境状态;本 diff(scripts/tests/ 下两个叶子测试文件)既不能创建也不能移除该产物,且 git status 显示没有其他改动。
  2. verify-capture.test.js › '256-colour fallback' — 单独运行时通过(1 passed | 22 skipped);并行竞争产物。
  3. qwen-autofix-workflow.test.js › 'stale-duplicate revalidation replay' — 单独运行时通过(1 passed | 228 skipped);并行竞争产物。

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。

🧵 Resolved all 1 selected review thread(s). · 已关闭全部选中的 1 条评审线程。

Re-review when you have a moment. After round 10 this bot stops and leaves the PR for a human. · 有空请复审;第 10 轮后本 bot 停止并将 PR 交给人工。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@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 6a": none — I did not run the actual vitest suite (no node_modules in the shared worktree), but the hand-rolled bash probe above covers the same semantics, so I am n….

Convergence: round 4 posted 1 inline comment(s), 1 of them reported for the first time; the previous round posted 1 (1 new). The rate of new findings is not falling. Batching the remaining fixes and verifying them before the next push, or dropping this PR's reviews to --severity-floor critical, keeps the loop from re-deriving the same set. No Critical finding is open on this round, so merging and moving the remaining Suggestion threads to a follow-up issue is available as an ending — a merged pull request cannot diverge further. (Observation only — nothing was withheld from this review because of this observation.)

中文说明

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

未探索到全部深度(达到工具调用预算):"agent 6a"none — I did not run the actual vitest suite (no node_modules in the shared worktree), but the hand-rolled bash probe above covers the same semantics, so I am n…

收敛情况:第 4 轮发布了 1 条行内评论,其中 1 条是首次提出;上一轮发布了 1 条(其中 1 条首次提出)。新发现的产出速度没有下降。把剩余修复攒成一批、验证后再推送,或将本 PR 的评审降到 --severity-floor critical,可以避免循环反复推导同一组发现。本轮没有未决的 Critical,因此"合入后把剩余 Suggestion 线程转到后续 issue"是一个可选的结束方式——已合入的 PR 不会继续发散。(仅为观察——本轮评审未因此扣留任何内容。)

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

Comment thread scripts/tests/e2e-workflow.test.js
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🔀 Base updated: red check(s) [Post Coverage Comment (ubuntu-latest, 22.x)] pass on current main — merged current main via update-branch; CI will re-run.

中文说明

🔀 已更新 base:红色检查 [Post Coverage Comment (ubuntu-latest, 22.x)] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 Addressed the latest review feedback (round 4/10). What changed, and what I pushed back on: · 已处理最新评审反馈(第 4/10 轮)。改动内容与我反驳保留之处如下:

Round summary — PR #10572 (issue #10566)

One inline suggestion and two red-check defects addressed; all resolved in code with mutation proofs. One commit: fae3746467.

Feedback points

[rc:3892988046] R4-1 — shell-premise pin misses job-level defaults: (Suggestion) — IMPLEMENTED
The pin added last round guarded the step-level shell: and the workflow-level defaults: only; a job-level defaults: on e2e-test-linux also selects the step's shell. Added expect(yml.jobs['e2e-test-linux'].defaults).toBeUndefined(); to keeps the default step shell the execution harness assumes (scripts/tests/e2e-workflow.test.js) and updated the comment to name all three levels, matching the sibling continue-on-error test that already pins both of its levels.

Mutation proof, as requested by the finding:

  • Pre-fix + mutation (defaults: { run: { shell: 'bash' } } under jobs.e2e-test-linux): test stayed green — gap reproduced exactly as reported.
  • Post-fix + same mutation: test REDAssertionError: expected { run: { shell: 'bash' } } to be undefined.
  • Post-fix + clean e2e.yml: green.

Failed check: Test (ubuntu-latest Node 22.x) — FIXED (two deterministic failures introduced by the merge of main into this branch, both reproduced locally)

  1. does not retry the docker leg false positive. The round-3 structural regex /[A-Za-z_]+\(\)\s*\{.*?QWEN_SANDBOX=docker/s assumed no function definitions precede the docker command; main's Main CI failed: E2E Tests on bc6f1a015cfb #10355 merged build_image() and acquire_daemon_write_lock() helpers into the docker leg, so the regex matched a legitimate helper and the test went red. Replaced it with a brace-depth location of the docker command: every other brace in the step script is a balanced ${...} pair, so a wrapped command (the mutation the check exists to catch — wrapping plus two calls keeps the literal count at one) sits at depth ≥ 1 while the top-level command sits at depth 0. Mutation proof: wrapping the command in run_docker() { … } with two call sites turns the test RED (expected 1 to be +0) while the literal count stays one; clean tree is green.
  2. workflow size growth ratchet > e2e.yml is within its baseline allowance. Post-merge e2e.yml is 21437 bytes; the recorded baseline was 16534 with a 4096-byte allowance. Main grew e2e.yml 2606 bytes without a baseline bump, and this PR's retry gate, epoch step and their rationale comments add 2297 bytes on top — 807 bytes past the allowance. Bumped .size-baseline to 21437 e2e.yml, the remedy the gate's own error message prescribes ("if the growth is real, update .size-baseline in this PR and say why"). The growth is the bounded-retry feature and its incident context; trimming comments to save bytes would delete documentation the neighboring pins exist to protect. Witness: the ratchet test was RED with the old baseline on this exact tree, green after the bump; .github/scripts/check-workflow-size.sh exits 0.

[rv:5064665064] review body (COMMENTED) — no action items beyond the inline suggestion above; the convergence observation is a workflow-side note.

Local-only flakes observed under full-suite parallel load on this shared runner (different subset each run: eslint-config integration tests, lint archive download, upload timing, verify-capture colour render, qwen-fleet-shepherd/qwen-autofix workflow parses) all pass in isolation on the committed tree; none touch a file this PR changes. They are the transient shared-host pressure class this PR exists to absorb, not deterministic failures.

Conflict notes

None (--conflict false; no merge performed this round — the branch already carries the earlier merge of main).

Verification

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-workflow.test.js scripts/tests/workflow-size.test.js217 passed (both touched files green, includes the ratchet)
  • Probe A: job-level defaults: mutation pre-fix → green (gap reproduced); post-fix → RED (expected { run: { shell: 'bash' } } to be undefined); reverted → green
  • Probe B: docker command wrapped in run_docker()RED (expected 1 to be +0); reverted → green
  • bash .github/scripts/check-workflow-size.sh — exit 0, "within 4096 bytes of its recorded baseline"
  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed
  • Full npx vitest run --config ./scripts/tests/vitest.config.ts — 2025 passed / 16 skipped; the 5 remaining failures are the shared-runner load flakes above, each green in isolation and in files this PR does not touch
中文说明

本轮总结 — PR #10572(issue #10566

处理了一条行内建议与两项红色检查缺陷;全部在代码中解决,并附变异证明。单次提交:fae3746467

反馈项

[rc:3892988046] R4-1 — shell 前提固定遗漏任务级 defaults:(Suggestion)— 已实现
上一轮新增的固定只守护了步骤级 shell: 与 workflow 级 defaults:;而 e2e-test-linux 上的任务级 defaults: 同样会选择该步骤的 shell。已在 keeps the default step shell the execution harness assumes(scripts/tests/e2e-workflow.test.js)中补充 expect(yml.jobs['e2e-test-linux'].defaults).toBeUndefined();,并更新注释以列明全部三个层级,与同一 describe 块中已固定两个层级的 continue-on-error 测试保持一致。

按该发现的要求完成变异证明:

  • 修复前 + 变异(在 jobs.e2e-test-linux 下加入 defaults: { run: { shell: 'bash' } }):测试依旧为绿 —— 缺口按报告原样复现。
  • 修复后 + 同一变异:测试变红 —— AssertionError: expected { run: { shell: 'bash' } } to be undefined
  • 修复后 + 干净的 e2e.yml:绿。

失败检查:Test (ubuntu-latest Node 22.x) — 已修复(将 main 合入本分支后引入的两处确定性失败,均已在本地复现)

  1. does not retry the docker leg 误报。第 3 轮的结构正则 /[A-Za-z_]+\(\)\s*\{.*?QWEN_SANDBOX=docker/s 假定 docker 命令之前不存在任何函数定义;而 main 的 Main CI failed: E2E Tests on bc6f1a015cfb #10355build_image()acquire_daemon_write_lock() 两个辅助函数合入了 docker 分支,正则因此匹配到合法辅助函数,测试变红。改为按花括号深度定位 docker 命令:步骤脚本中其余所有花括号都是成对的 ${...},因此被包裹的命令(该检查要捕获的变异——包裹后调用两次时字面量计数仍为一)位于深度 ≥ 1,而顶层命令位于深度 0。变异证明:把命令包进 run_docker() { … } 并设两个调用点后测试变红expected 1 to be +0),且字面量计数仍为 1;干净树为绿。
  2. workflow size growth ratchet > e2e.yml is within its baseline allowance。合并后的 e2e.yml 为 21437 字节;记录的基线为 16534,允许增量为 4096 字节。main 在未更新基线的情况下让 e2e.yml 增长了 2606 字节,本 PR 的重试门、epoch 步骤及其说明注释又在其上增加 2297 字节——超出允许增量 807 字节。已将 .size-baseline 更新为 21437 e2e.yml,这正是门自身错误信息所指定的补救方式("若增长是真实的,就在本 PR 中更新 .size-baseline 并说明原因")。该增长来自有界重试功能及其事件背景;为省字节而删减注释会删掉相邻固定项所要保护的文档。见证:在同一棵树上,旧基线时 ratchet 测试变红,更新基线后变绿;.github/scripts/check-workflow-size.sh 以 0 退出。

[rv:5064665064] 评审主体(COMMENTED) — 除上述行内建议外没有其他行动项;收敛性观察属于工作流侧备注。

在共享 runner 上以全套件并行负载观察到的仅本地偶发失败(每轮子集不同:eslint-config 集成测试、lint 归档下载、上传计时、verify-capture 颜色渲染、qwen-fleet-shepherd/qwen-autofix workflow 解析)在提交后的树上单独运行时全部通过;均未涉及本 PR 修改的文件。它们属于本 PR 正要吸收的共享主机压力类瞬时失败,并非确定性失败。

冲突说明

无(--conflict false;本轮未做合并——分支上已带有早前对 main 的合并)。

验证

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-workflow.test.js scripts/tests/workflow-size.test.js217 通过(两个受影响文件全绿,含 ratchet)
  • 探针 A:任务级 defaults: 变异,修复前 → 绿(缺口复现);修复后 → expected { run: { shell: 'bash' } } to be undefined);还原 → 绿
  • 探针 B:将 docker 命令包入 run_docker()expected 1 to be +0);还原 → 绿
  • bash .github/scripts/check-workflow-size.sh — 退出码 0,"within 4096 bytes of its recorded baseline"
  • npm run build — 通过
  • npm run typecheck — 通过
  • npm run lint — 通过
  • 完整 npx vitest run --config ./scripts/tests/vitest.config.ts — 2025 通过 / 16 跳过;其余 5 个失败为上述共享 runner 负载偶发失败,单独运行均为绿,且所在文件均非本 PR 所修改

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。

🧵 Resolved all 1 selected review thread(s). · 已关闭全部选中的 1 条评审线程。

Re-review when you have a moment. After round 10 this bot stops and leaves the PR for a human. · 有空请复审;第 10 轮后本 bot 停止并将 PR 交给人工。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 85% 85% 90.58% 84.72%
Core N/A% N/A% N/A% N/A%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |      85 |    84.72 |   90.58 |      85 |                   
 src               |   86.57 |    82.86 |   88.88 |   86.57 |                   
  cli.ts           |   95.92 |    88.23 |     100 |   95.92 | ...00-701,705-706 
  llm.tsx          |   73.59 |    77.73 |   80.76 |   73.59 | ...1367-1371,1498 
  ...ractiveCli.ts |   89.27 |    83.13 |   89.06 |   89.27 | ...3157,3163,3229 
  ...liCommands.ts |   89.71 |    84.17 |   81.81 |   89.71 | ...31-633,650,757 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   76.13 |    79.02 |   94.03 |   76.13 |                   
  acpAgent.ts      |   75.19 |    78.62 |    93.3 |   75.19 | ...18,14241-14242 
  ...k-reporter.ts |     100 |       80 |     100 |     100 | 81,84,119,141     
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  ...heap-probe.ts |   97.39 |    96.66 |     100 |   97.39 | 243,264-265       
  errorCodes.ts    |     100 |      100 |     100 |     100 |                   
  ...ion-skills.ts |     100 |     87.5 |     100 |     100 | 17,28             
  generation.ts    |    97.1 |    81.25 |     100 |    97.1 | 109,112           
  ...figuration.ts |     100 |     95.6 |     100 |     100 | 121,196,242,259   
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
  ...ersistence.ts |   94.95 |    92.24 |     100 |   94.95 | ...13-118,227-228 
  ...management.ts |   76.99 |    71.56 |     100 |   76.99 | ...20-524,533-537 
  ...e-download.ts |    64.7 |    62.24 |    87.5 |    64.7 | ...08-609,615-619 
 ...tegration/live |   97.53 |    88.23 |   92.85 |   97.53 |                   
  ...en-context.ts |   95.89 |    82.85 |     100 |   95.89 | ...,72-73,105-106 
  ...structions.ts |     100 |      100 |     100 |     100 |                   
  ...ak-to-user.ts |   96.66 |      100 |    87.5 |   96.66 | 37-38             
  ...task-tools.ts |   98.97 |      100 |   88.88 |   98.97 | 201-202           
 ...ration/service |    97.1 |    95.89 |   93.75 |    97.1 |                   
  filesystem.ts    |    97.1 |    95.89 |   93.75 |    97.1 | ...22-123,246-247 
 ...ration/session |   91.09 |    86.58 |    95.7 |   91.09 |                   
  Session.ts       |   90.47 |    85.65 |   95.09 |   90.47 | ...84,14211-14215 
  ...entTracker.ts |   96.88 |    89.36 |      90 |   96.88 | 139-145,224       
  ...projection.ts |   98.85 |    91.59 |     100 |   98.85 | 234,250,262       
  ...stop-guard.ts |     100 |    98.07 |     100 |     100 | 37,127            
  ...eplay-page.ts |   94.19 |    86.53 |     100 |   94.19 | ...53,357,437,441 
  ...y-replayer.ts |   83.41 |    93.33 |   94.11 |   83.41 | ...30-148,266-268 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   89.19 |     87.8 |     100 |   89.19 | ...85-304,363-365 
  ...oal-update.ts |   98.61 |    97.29 |     100 |   98.61 | 64                
  ...lure-guard.ts |   98.32 |    97.72 |     100 |   98.32 | 294-295,340-341   
  tasksSnapshot.ts |   95.85 |    71.11 |     100 |   95.85 | 68-74,190-191     
  ...on-tracker.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ssion/emitters |   95.68 |    91.97 |   97.14 |   95.68 |                   
  ...ageEmitter.ts |   95.36 |    92.42 |     100 |   95.36 | ...16,129-130,223 
  PlanEmitter.ts   |     100 |    85.71 |     100 |     100 | 68,70             
  base-emitter.ts  |   78.26 |    77.77 |     100 |   78.26 | 23-24,26-28       
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
  ...ll-emitter.ts |   98.57 |    94.84 |     100 |   98.57 | 75-76,394-395     
 ...ession/rewrite |   96.03 |    89.79 |   94.44 |   96.03 |                   
  LlmRewriter.ts   |   94.01 |    88.23 |     100 |   94.01 | 101-102,179-183   
  ...Middleware.ts |   96.99 |    88.37 |     100 |   96.99 | 145,153-155       
  TurnBuffer.ts    |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/agent-view    |   86.86 |    80.98 |   94.01 |   86.86 |                   
  attach-lease.ts  |     100 |    97.05 |     100 |     100 | 173               
  ...t-cli-argv.ts |     100 |     92.3 |     100 |     100 | 15                
  ...ged-detach.ts |     100 |     90.9 |     100 |     100 | 40,64             
  presentation.ts  |   94.13 |    88.72 |   94.73 |   94.13 | ...57-358,382-384 
  protocol.ts      |     100 |      100 |     100 |     100 |                   
  pty-host-env.ts  |     100 |      100 |     100 |     100 |                   
  ...st-process.ts |   88.52 |    78.91 |   94.44 |   88.52 | ...1305,1395-1397 
  pty-host.ts      |   85.25 |    87.03 |   90.69 |   85.25 | ...22-524,539-540 
  ...sor-client.ts |   80.38 |    72.27 |   77.41 |   80.38 | ...22-626,652-656 
  ...r-dispatch.ts |      98 |    85.18 |     100 |      98 | 117,173,190       
  ...or-process.ts |   83.81 |    77.42 |   98.72 |   83.81 | ...4479-4482,4485 
  ...sor-runner.ts |   82.43 |    76.82 |   80.95 |   82.43 | ...69,493,496-506 
  ...sor-server.ts |   84.39 |    83.56 |    93.1 |   84.39 | ...67-568,571-588 
  ...isor-store.ts |   95.56 |    86.22 |     100 |   95.56 | ...,966,1008,1023 
  ...nal-bridge.ts |   93.98 |    91.54 |   83.33 |   93.98 | 228-238           
  ...r-sideband.ts |   94.91 |    89.36 |     100 |   94.91 | ...75-276,299-304 
 src/commands      |   90.45 |    78.26 |   65.62 |   90.45 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  channel.ts       |   55.55 |      100 |       0 |   55.55 | 18-22,30-40       
  extensions.tsx   |   96.77 |      100 |      50 |   96.77 | 39                
  hooks.tsx        |   66.66 |      100 |       0 |   66.66 | 20-24             
  mcp.ts           |   95.45 |      100 |      50 |   95.45 | 31                
  review.ts        |   98.94 |      100 |      50 |   98.94 | 106               
  serve.ts         |   89.06 |    75.72 |     100 |   89.06 | ...27-930,942,953 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.13 |    94.44 |   66.66 |   98.13 | 82-83             
 ...mmands/channel |   89.49 |    88.74 |   90.73 |   89.49 |                   
  channel-cwd.ts   |     100 |      100 |     100 |     100 |                   
  ...l-registry.ts |   94.78 |    94.59 |      90 |   94.78 | ...32-335,380-383 
  ...entry-path.ts |      75 |       50 |     100 |      75 | 8-9               
  config-utils.ts  |   96.91 |    96.27 |     100 |   96.91 | ...60-265,323-326 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   93.72 |    85.81 |   94.33 |   93.72 | ...1305,1312-1313 
  loop-runtime.ts  |   91.66 |      100 |      50 |   91.66 | 15,22             
  ...classifier.ts |   98.53 |    96.66 |     100 |   98.53 | 115-116,161       
  ...tact-store.ts |   93.51 |    87.65 |     100 |   93.51 | ...71,288-289,337 
  pairing.ts       |      75 |      100 |      50 |      75 | 22-28,59-70       
  pidfile.ts       |   95.55 |       90 |     100 |   95.55 | ...50-251,315-316 
  proxy.ts         |     100 |      100 |     100 |     100 |                   
  reload.ts        |    77.5 |    86.95 |      75 |    77.5 | 72-84,93-97       
  runtime.ts       |   82.43 |    86.44 |     100 |   82.43 | ...87-191,251-253 
  set.ts           |   75.72 |    85.71 |      50 |   75.72 | 65-83,111-116     
  start.ts         |    87.7 |    83.63 |      88 |    87.7 | ...95,601-604,616 
  ...ure-format.ts |   93.65 |    82.45 |     100 |   93.65 | ...42,48-49,74-75 
  status.ts        |   78.57 |    59.25 |   66.66 |   78.57 | ...36-137,150-161 
  stop.ts          |   57.83 |    82.35 |      50 |   57.83 | ...3,74-76,85-111 
 ...nds/extensions |   88.85 |    87.91 |   87.09 |   88.85 |                   
  consent.ts       |   72.53 |    90.32 |   42.85 |   72.53 | ...86-142,157-163 
  disable.ts       |     100 |       90 |     100 |     100 | 30                
  enable.ts        |     100 |    91.66 |     100 |     100 | 38                
  install.ts       |   82.95 |    81.57 |      75 |   82.95 | ...96-199,202-211 
  link.ts          |     100 |      100 |     100 |     100 |                   
  list.ts          |     100 |     90.9 |     100 |     100 | 18                
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   99.15 |      100 |   83.33 |   99.15 | 151               
  sources.ts       |   93.42 |    87.09 |   92.85 |   93.42 | ...4-66,96-98,167 
  uninstall.ts     |   74.57 |       40 |   66.66 |   74.57 | 45-47,60-67,70-73 
  update.ts        |   96.71 |    97.05 |     100 |   96.71 | 114-118           
  utils.ts         |   75.63 |    57.14 |     100 |   75.63 | ...30-134,136-140 
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-60              
 ...amples/starter |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-64              
 src/commands/mcp  |   91.19 |    88.76 |   85.71 |   91.19 |                   
  add.ts           |    99.3 |    96.07 |     100 |    99.3 | 154-155           
  approve.ts       |   76.19 |     87.5 |   66.66 |   76.19 | ...,89-99,114-124 
  list.ts          |    92.9 |    84.84 |      80 |    92.9 | ...79-181,199-200 
  reconnect.ts     |   85.54 |    86.76 |    90.9 |   85.54 | 45-58,337-359     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   92.08 |    90.61 |   93.59 |   92.08 |                   
  ab-drive.ts      |   85.22 |    90.47 |   94.11 |   85.22 | ...50-926,969-972 
  agent-prompt.ts  |   94.89 |    93.01 |   97.95 |   94.89 | ...3296,3631-3711 
  base-tree.ts     |   77.02 |    80.76 |   77.77 |   77.02 | ...63-384,386-399 
  capture-local.ts |   94.79 |    96.81 |   94.11 |   94.79 | ...1192,1412-1450 
  ...k-coverage.ts |   50.71 |       35 |   66.66 |   50.71 | ...40-245,279-289 
  cleanup.ts       |   92.34 |     89.5 |    90.9 |   92.34 | ...1107,1109-1110 
  comment-body.ts  |   67.85 |    87.09 |   66.66 |   67.85 | ...30,157,159-164 
  ...ent-status.ts |   94.22 |    87.32 |    90.9 |   94.22 | ...96,462,738-758 
  ...ose-review.ts |   97.38 |    94.08 |    98.8 |   97.38 | ...7376-7420,7691 
  cost-ledger.ts   |   94.58 |     94.4 |   81.25 |   94.58 | ...53-654,694-704 
  ...candidates.ts |   93.12 |    93.95 |   84.61 |   93.12 | ...49-660,662-674 
  drive.ts         |   97.12 |    89.85 |     100 |   97.12 | ...83-985,990-992 
  emit-workflow.ts |   90.57 |     93.1 |   83.33 |   90.57 | 154,176,285-295   
  extract-step.ts  |   91.36 |    90.62 |   88.88 |   91.36 | ...90-707,714-729 
  fetch-diff.ts    |   73.75 |      100 |   66.66 |   73.75 | 77-97             
  fetch-pr.ts      |   97.37 |    92.15 |     100 |   97.37 | ...1592,1806-1811 
  findings.ts      |    96.3 |    93.68 |     100 |    96.3 | ...1418,1427-1428 
  issue-context.ts |   88.15 |     93.1 |   85.71 |   88.15 | 249-276           
  load-rules.ts    |   26.41 |      100 |   16.66 |   26.41 | ...41-153,155-156 
  match-remote.ts  |   85.55 |     92.3 |   66.66 |   85.55 | 74-79,144-150     
  meta.ts          |   79.43 |    93.75 |   66.66 |   79.43 | 123-128,147-162   
  mock-provider.ts |   95.44 |    90.25 |   89.47 |   95.44 | 145,690-709       
  parse-args.ts    |   99.48 |    95.74 |     100 |   99.48 | 665,990,1046,1082 
  plan-diff.ts     |   71.42 |      100 |   66.66 |   71.42 | 162-197           
  pr-context.ts    |   96.22 |    88.86 |     100 |   96.22 | ...2580,2681-2697 
  presubmit.ts     |   94.42 |    90.38 |   94.11 |   94.42 | ...1240,1275-1306 
  ...ish-assets.ts |    81.3 |    82.22 |   85.71 |    81.3 | ...75-479,506-552 
  ...r-findings.ts |   90.74 |    83.75 |     100 |   90.74 | ...17-422,429-430 
  repo-context.ts  |   94.62 |    90.75 |     100 |   94.62 | ...66-467,482-487 
  ...ve-anchors.ts |   78.34 |    89.28 |      75 |   78.34 | ...83-188,200-217 
  revert-hunk.ts   |   91.48 |    87.94 |     100 |   91.48 | ...1189,1236-1239 
  run.ts           |   84.65 |    87.34 |   95.45 |   84.65 | ...43,859-913,927 
  save-artifact.ts |    94.2 |    92.46 |   94.11 |    94.2 | ...14-617,710-713 
  scratch-tree.ts  |   95.93 |       86 |     100 |   95.93 | ...91-392,461-464 
  script-lint.ts   |   81.23 |    80.45 |   88.88 |   81.23 | ...82-796,798-820 
  submit.ts        |   94.21 |       89 |   94.44 |   94.21 | ...1710,1738-1775 
  test-delta.ts    |   95.75 |     92.3 |      75 |   95.75 | 470-478           
  test-efficacy.ts |   84.03 |    80.48 |   96.07 |   84.03 | ...3249,3257-3277 
  test-plan.ts     |   94.61 |    91.79 |      95 |   94.61 | ...29-832,873-874 
  ...low-script.ts |     100 |      100 |     100 |     100 |                   
 ...w/__fixtures__ |     100 |      100 |     100 |     100 |                   
  ...r-default.mjs |     100 |      100 |     100 |     100 |                   
  ...der-empty.mjs |     100 |      100 |     100 |     100 |                   
  ...der-named.mjs |     100 |      100 |     100 |     100 |                   
 ...nds/review/lib |   97.37 |    94.75 |   98.71 |   97.37 |                   
  agent-briefs.ts  |   99.08 |      100 |      50 |   99.08 | 841-842           
  ...t-identity.ts |     100 |      100 |     100 |     100 |                   
  anchors.ts       |     100 |    97.04 |     100 |     100 | ...39,175,184,231 
  assets.ts        |     100 |      100 |     100 |     100 |                   
  audit-layers.ts  |   98.67 |    96.15 |     100 |   98.67 | 288-290           
  authorization.ts |    96.5 |    95.61 |     100 |    96.5 | ...54-255,629-630 
  budget.ts        |     100 |    97.95 |     100 |     100 | 887,940           
  build-budget.ts  |     100 |      100 |     100 |     100 |                   
  certification.ts |     100 |      100 |     100 |     100 |                   
  convergence.ts   |     100 |    97.94 |    92.3 |     100 | 52,515,620,716    
  coverage.ts      |   98.97 |    95.12 |     100 |   98.97 | ...1103,1648-1649 
  deadline.ts      |   98.03 |    91.66 |     100 |   98.03 | ...20,752,820,837 
  diff-flags.ts    |     100 |        0 |     100 |     100 | 75                
  diff-plan.ts     |   99.29 |    95.77 |     100 |   99.29 | 295-296,319       
  disk.ts          |     100 |      100 |     100 |     100 |                   
  effort.ts        |     100 |      100 |     100 |     100 |                   
  failing-files.ts |     100 |    93.33 |     100 |     100 | 41                
  gh.ts            |   89.53 |    95.52 |   78.94 |   89.53 | ...47,384-385,412 
  git.ts           |   96.92 |    94.11 |     100 |   96.92 | 264-265,302-303   
  heavy.ts         |     100 |      100 |     100 |     100 |                   
  import-graph.ts  |   96.68 |     95.6 |     100 |   96.68 | 180-182,211-212   
  ...ntal-scope.ts |     100 |      100 |     100 |     100 |                   
  inline-counts.ts |     100 |      100 |     100 |     100 |                   
  ...audit-gate.ts |     100 |     97.5 |     100 |     100 | 135               
  ledger.ts        |     100 |    99.47 |     100 |     100 | 884               
  local-anchor.ts  |   94.53 |    89.41 |     100 |   94.53 | ...36,669-670,837 
  local-diff.ts    |   86.77 |    94.28 |     100 |   86.77 | ...54-564,566-574 
  ...ry-context.ts |   96.61 |    95.48 |     100 |   96.61 | ...47-450,496-499 
  md-field.ts      |     100 |      100 |     100 |     100 |                   
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  narrow-diff.ts   |     100 |      100 |     100 |     100 |                   
  npm-toolchain.ts |   98.24 |    95.31 |     100 |   98.24 | ...,832,1213,1230 
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |    95.6 |    88.67 |     100 |    95.6 | 40-41,168-173     
  prebuild.ts      |     100 |    96.15 |     100 |     100 | 248               
  prompt-record.ts |   98.03 |    94.23 |     100 |   98.03 | 293-294,300       
  receipt.ts       |     100 |      100 |     100 |     100 |                   
  remote-match.ts  |   98.03 |    94.73 |     100 |   98.03 | 109-110           
  report.ts        |   92.92 |    86.66 |     100 |   92.92 | 213-214,216-220   
  ...ry-context.ts |     100 |    98.66 |     100 |     100 | 187               
  resume.ts        |     100 |      100 |     100 |     100 |                   
  retirement.ts    |     100 |    94.36 |     100 |     100 | ...58-559,760,917 
  review-footer.ts |   99.55 |    98.09 |     100 |   99.55 | 548-549           
  ...w-settings.ts |     100 |    96.42 |     100 |     100 | 99                
  roster.ts        |     100 |    97.14 |     100 |     100 | 177,222           
  round-model.ts   |     100 |      100 |     100 |     100 |                   
  run-ledger.ts    |    98.2 |    93.87 |     100 |    98.2 | ...23,541,647,670 
  same-file.ts     |     100 |       95 |     100 |     100 | 46                
  ...boxed-exec.ts |   94.26 |    89.32 |   95.65 |   94.26 | ...49-550,728-729 
  shell-quote.ts   |     100 |      100 |     100 |     100 |                   
  stale-bundle.ts  |   98.18 |    94.38 |     100 |   98.18 | 431,472,512-513   
  test-utils.ts    |   99.04 |    91.66 |     100 |   99.04 | 75                
  toolchain.ts     |     100 |      100 |     100 |     100 |                   
  transcripts.ts   |   98.09 |    95.07 |     100 |   98.09 | ...92,438,707-708 
  ...pace-scope.ts |     100 |    96.96 |     100 |     100 | 186               
  workspaces.ts    |     100 |    96.85 |     100 |     100 | 222,452,499,512   
  ...ree-reader.ts |     100 |      100 |     100 |     100 |                   
  worktree.ts      |   89.39 |    81.78 |     100 |   89.39 | ...1813-1814,1827 
 ...w/lib/platform |   94.71 |    87.89 |   97.05 |   94.71 |                   
  aone-client.ts   |   94.94 |     87.3 |     100 |   94.94 | ...92-293,299-302 
  aone.ts          |   93.06 |    89.86 |   94.73 |   93.06 | ...34,598-603,655 
  github.ts        |   99.08 |     75.8 |     100 |   99.08 | 249-250           
  registry.ts      |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...mands/sessions |   94.11 |    89.06 |   89.47 |   94.11 |                   
  common.ts        |     100 |      100 |     100 |     100 |                   
  list.ts          |   90.96 |    86.66 |   81.81 |   90.96 | 208-219,221-222   
  ps.ts            |     100 |    94.44 |     100 |     100 | 58                
 src/config        |   94.53 |    90.57 |   95.73 |   94.53 |                   
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.36 |    88.37 |     100 |   93.36 | ...06-307,330-331 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  compile-cache.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   88.92 |    91.37 |   88.63 |   88.92 | ...2485,2487-2495 
  ...cy-monitor.ts |      90 |    77.27 |     100 |      90 | ...72-73,90-92,98 
  ...ust-policy.ts |   83.02 |    88.88 |     100 |   83.02 | ...02-209,232-240 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  environment.ts   |   94.63 |    92.42 |   95.23 |   94.63 | ...24-625,693-694 
  ...le-watcher.ts |   90.86 |    83.65 |   95.83 |   90.86 | ...23-325,370,418 
  ...resh-state.ts |   95.65 |    97.36 |     100 |   95.65 | 137-142           
  ...ime-reload.ts |     100 |    69.69 |     100 |     100 | ...12-113,122-123 
  hot-reload.ts    |   98.91 |    84.61 |     100 |   98.91 | 332-333           
  keyBindings.ts   |    97.4 |       50 |     100 |    97.4 | 240-243           
  ...ngsAdapter.ts |     100 |    94.11 |     100 |     100 | 64                
  ...ig-watcher.ts |   95.17 |    83.05 |     100 |   95.17 | ...78,200,292-293 
  ...er-secrets.ts |   98.97 |    96.87 |     100 |   98.97 | 85                
  mcpApprovals.ts  |   78.57 |       92 |   86.66 |   78.57 | ...18-319,324-326 
  mcpJson.ts       |     100 |      100 |     100 |     100 |                   
  mcpServers.ts    |   92.85 |     87.5 |     100 |   92.85 | 46-47             
  ...idersScope.ts |      95 |    94.73 |     100 |      95 | 11-12             
  ...abledTools.ts |     100 |      100 |     100 |     100 |                   
  ...comparison.ts |     100 |      100 |     100 |     100 |                   
  ...n-settings.ts |   99.15 |    93.93 |     100 |   99.15 | 63                
  sandboxConfig.ts |   93.33 |    93.33 |     100 |   93.33 | ...42-147,216-217 
  session-id.ts    |     100 |      100 |     100 |     100 |                   
  ...ings-cache.ts |   96.52 |    93.93 |     100 |   96.52 | 90-91,201-202     
  settings.ts      |   91.93 |    93.16 |   91.17 |   91.93 | ...1134,1136-1137 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  settingsUtils.ts |   81.12 |     89.2 |   85.18 |   81.12 | ...03-621,628-636 
  ...ngsWatcher.ts |   95.54 |    88.34 |     100 |   95.54 | ...28,277-278,293 
  ...d-env-keys.ts |     100 |      100 |     100 |     100 |                   
  ...l-settings.ts |     100 |      100 |     100 |     100 |                   
  ...paths-lite.ts |   89.47 |       88 |     100 |   89.47 | 43-44,53-54,56-57 
  ...el-options.ts |     100 |      100 |     100 |     100 |                   
  ...precedence.ts |   98.79 |     92.3 |     100 |   98.79 | 62                
  ...tedFolders.ts |   92.53 |    93.47 |     100 |   92.53 | ...36-337,373-384 
 ...nfig/migration |   95.23 |    78.94 |   85.71 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |       80 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.91 |      100 |     100 |   94.91 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |      100 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
  v5-to-v4.ts      |      96 |      100 |     100 |      96 | 94-95,99          
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |   75.08 |    67.64 |   71.42 |   75.08 |                   
  ...tputBridge.ts |   75.33 |    68.18 |   73.68 |   75.33 | ...09-410,418-421 
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/export        |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-7               
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/hooks         |     100 |      100 |     100 |     100 |                   
  ...elete-hook.ts |     100 |      100 |     100 |     100 |                   
 src/i18n          |   89.68 |    88.66 |   93.02 |   89.68 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  languageUtils.ts |   98.88 |    97.01 |     100 |   98.88 | 184-185           
  languages.ts     |   93.07 |     92.3 |   85.71 |   93.07 | ...35,164-169,184 
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |   87.37 |    83.73 |   89.32 |   87.37 |                   
  ...ng-failure.ts |     100 |      100 |     100 |     100 |                   
  ...iveHelpers.ts |   94.95 |    91.05 |     100 |   94.95 | ...30-431,529,542 
  ...uggestions.ts |   84.29 |    70.83 |     100 |   84.29 | 70-76,92-103      
  session.ts       |   84.97 |    76.31 |   96.07 |   84.97 | ...1048,1057-1067 
  ...iagnostics.ts |    95.8 |     87.5 |   93.75 |    95.8 | ...03,277-278,289 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...33-634,637-638 
 ...active/control |   75.54 |    89.83 |      80 |   75.54 |                   
  ...rolContext.ts |    6.06 |        0 |       0 |    6.06 | 57-99             
  ...Dispatcher.ts |   91.95 |    92.98 |   88.88 |   91.95 | ...54-372,392,395 
  ...rolService.ts |    6.89 |        0 |       0 |    6.89 | 46-188            
 ...ol/controllers |   57.57 |    66.48 |   73.68 |   57.57 |                   
  ...Controller.ts |    42.4 |      100 |   83.33 |    42.4 | 101-105,140-223   
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   70.23 |    63.33 |   91.66 |   70.23 | ...19-628,643-648 
  ...Controller.ts |   49.23 |       60 |      50 |   49.23 | ...07-108,111-121 
  ...Controller.ts |   53.96 |    67.08 |   66.66 |   53.96 | ...78-690,699-728 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.18 |    94.11 |   95.34 |   98.18 |                   
  ...putAdapter.ts |   98.07 |    93.21 |   98.11 |   98.07 | ...1448,1464-1465 
  ...putAdapter.ts |   96.22 |    91.66 |   85.71 |   96.22 | 52-53             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.51 |      100 |   90.47 |   98.51 | 90-91,131-132     
  ...projection.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/peerMessaging |   91.89 |    88.29 |   96.42 |   91.89 |                   
  ...ngContext.tsx |     100 |      100 |     100 |     100 |                   
  ...-messaging.ts |   91.78 |    88.17 |   96.29 |   91.78 | ...31-436,507-512 
 src/remoteInput   |   87.31 |    75.32 |   88.23 |   87.31 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   88.01 |       76 |   93.33 |   88.01 | ...49-350,361-364 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/runtime       |   99.72 |    95.17 |     100 |   99.72 |                   
  ...livery-ipc.ts |     100 |    91.17 |     100 |     100 | 94,106,134        
  ...l-delivery.ts |     100 |      100 |     100 |     100 |                   
  cpu-percent.ts   |     100 |      100 |     100 |     100 |                   
  ...ion-source.ts |     100 |      100 |     100 |     100 |                   
  ...d-task-run.ts |     100 |       70 |     100 |     100 | 57,71             
  ...erver-name.ts |     100 |      100 |     100 |     100 |                   
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...-summaries.ts |   86.66 |       50 |     100 |   86.66 | 11,19             
  ...ber-errors.ts |     100 |    95.57 |     100 |     100 | 53,93-94,172,192  
  ...ls-mapping.ts |     100 |    96.15 |     100 |     100 | 26                
 src/serve         |    87.7 |    85.37 |   91.46 |    87.7 |                   
  ...extra-args.ts |     100 |      100 |     100 |     100 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   96.19 |    93.44 |     100 |   96.19 | ...47-448,451-453 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    98.27 |     100 |     100 | 752               
  ...cp-command.ts |     100 |      100 |     100 |     100 |                   
  ...horization.ts |   98.19 |    93.75 |     100 |   98.19 | 135-136           
  ...op-mcp-ipc.ts |   81.06 |    73.68 |   94.11 |   81.06 | ...37-242,267,289 
  ...nt-service.ts |    94.1 |    86.98 |     100 |    94.1 | ...75-477,484,486 
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ings-store.ts |   89.61 |    94.37 |   96.55 |   89.61 | ...64-276,528-531 
  ...ebhook-ipc.ts |    98.5 |     87.5 |     100 |    98.5 | 47                
  ...iagnostics.ts |     100 |      100 |     100 |     100 |                   
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   87.32 |    85.33 |     100 |   87.32 | ...14,820-824,842 
  ...er-manager.ts |   89.39 |    83.88 |   93.33 |   89.39 | ...98,711,722-724 
  ...horization.ts |     100 |      100 |     100 |     100 |                   
  ...tartup-ipc.ts |   97.72 |    96.66 |     100 |   97.72 | 88-89             
  ...supervisor.ts |   93.24 |    85.42 |    97.4 |   93.24 | ...1765,1819-1823 
  ...e-grouping.ts |     100 |    94.28 |     100 |     100 | 71,137            
  core-runtime.ts  |     100 |      100 |     100 |     100 |                   
  ...ub-session.ts |   91.01 |    81.25 |   94.73 |   91.01 | ...1120,1141-1146 
  ...tree-guard.ts |   93.87 |    89.81 |     100 |   93.87 | ...3227,3297-3301 
  daemon-logger.ts |   82.82 |    78.68 |   92.04 |   82.82 | ...1775,1802-1808 
  ...y-pressure.ts |     100 |    96.96 |     100 |     100 | 135               
  ...trics-ring.ts |     100 |      100 |     100 |     100 |                   
  ...s-provider.ts |   68.04 |    52.77 |     100 |   68.04 | ...44-249,282-290 
  daemon-status.ts |    98.7 |    91.96 |     100 |    98.7 | ...1593,1595-1596 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |   93.37 |    85.18 |     100 |   93.37 | 114-117,195-202   
  ...-scheduler.ts |   87.34 |    83.87 |     100 |   87.34 | 33-36,48-50,79-81 
  ...d-provider.ts |   92.06 |    87.09 |     100 |   92.06 | ...72,287-293,316 
  ...h-settings.ts |   94.94 |    90.45 |     100 |   94.94 | ...30,708,724,734 
  fast-path.ts     |    91.4 |       82 |   95.45 |    91.4 | ...47-556,634-635 
  ...ration-sse.ts |   42.55 |    33.33 |     100 |   42.55 | 23-24,30,33-56    
  health-query.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-149             
  ...e-observer.ts |   89.89 |    83.24 |      96 |   89.89 | ...11-512,541-543 
  ...-addresses.ts |     100 |     91.3 |     100 |     100 | 52,72             
  ...back-binds.ts |     100 |      100 |     100 |     100 |                   
  ...-workspace.ts |   91.58 |    86.48 |     100 |   91.58 | ...44-145,156-157 
  ...pp-sandbox.ts |   96.72 |    95.23 |     100 |   96.72 | 41-42             
  ...iders-edit.ts |     100 |    83.33 |     100 |     100 | 58-60,65,81       
  ...ory-picker.ts |    90.9 |    91.66 |      75 |    90.9 | 32,55-64          
  ...-with-auth.ts |     100 |      100 |     100 |     100 |                   
  ...ate-blocks.ts |   99.03 |    94.73 |     100 |   99.03 | 133               
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  ...nal-ledger.ts |    94.9 |    84.94 |     100 |    94.9 | ...81,302,361-362 
  rate-limit.ts    |   92.68 |    88.29 |     100 |   92.68 | ...89-291,303-305 
  ...qwen-serve.ts |   85.04 |    81.95 |    78.8 |   85.04 | ...9593,9611-9615 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |   47.11 |    63.01 |   76.92 |   47.11 | ...1061,1073-1096 
  ...-keepalive.ts |   94.31 |    88.18 |     100 |   94.31 | ...37,541-542,581 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   89.16 |    90.29 |   86.95 |   89.16 | ...24-325,330-334 
  serve-token.ts   |     100 |      100 |     100 |     100 |                   
  server.ts        |   89.64 |    91.47 |   74.26 |   89.64 | ...3343,3374-3375 
  ...ments-root.ts |     100 |      100 |     100 |     100 |                   
  ...-admission.ts |   99.13 |    95.94 |     100 |   99.13 | 308-309           
  ...on-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...-redaction.ts |     100 |      100 |     100 |     100 |                   
  ...t-event-id.ts |     100 |    95.23 |     100 |     100 | 12                
  ...-admission.ts |   98.71 |    89.65 |     100 |   98.71 | 68                
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...t-sessions.ts |   93.72 |    77.93 |     100 |   93.72 | ...51,854,867-869 
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   93.33 |    86.15 |     100 |   93.33 | ...90-293,336-339 
  ...ssion-gate.ts |   98.48 |    94.44 |     100 |   98.48 | 70                
  ...ace-agents.ts |   66.13 |    70.57 |   92.68 |   66.13 | ...2246,2256-2266 
  ...generation.ts |    95.4 |    82.35 |   66.66 |    95.4 | 55-56,78,92       
  ...-git-state.ts |     100 |    91.93 |    90.9 |     100 | 161,172,202,265   
  ...ace-inputs.ts |     100 |      100 |     100 |     100 |                   
  ...ace-memory.ts |      83 |    74.54 |     100 |      83 | ...30-537,597-604 
  ...ers-status.ts |   98.65 |    80.18 |     100 |   98.65 | 111,139,193,196   
  ...tion-store.ts |    89.9 |    88.88 |   92.59 |    89.9 | ...03-412,423-426 
  ...e-registry.ts |   94.09 |    90.57 |     100 |   94.09 | ...93-594,601-602 
  ...e-remember.ts |   98.31 |    93.33 |     100 |   98.31 | ...47,351-356,397 
  ...te-runtime.ts |   89.85 |    90.69 |     100 |   89.85 | ...06-207,275-296 
  ...oordinator.ts |   98.27 |    96.87 |     100 |   98.27 | 147-148           
  ...me-storage.ts |     100 |      100 |     100 |     100 |                   
  ...visibility.ts |     100 |      100 |     100 |     100 |                   
  ...management.ts |   72.91 |    73.04 |   96.29 |   72.91 | ...98-899,906-910 
  ...lls-status.ts |     100 |    95.45 |     100 |     100 | 152               
  ...reconciler.ts |   91.63 |    84.09 |     100 |   91.63 | ...71-273,306-307 
 ...serve/acp-http |   80.67 |    80.25 |   94.53 |   80.67 |                   
  ...r-registry.ts |   96.92 |    94.87 |     100 |   96.92 | 184-187           
  client-mcp-ws.ts |   54.85 |    58.62 |   72.72 |   54.85 | ...99-300,304-305 
  ...n-registry.ts |   93.03 |    84.22 |   98.52 |   93.03 | ...1624,1671-1682 
  dispatch.ts      |      76 |    76.98 |   93.44 |      76 | ...5819,5876-5882 
  index.ts         |   83.61 |     80.6 |   91.22 |   83.61 | ...2465,2551-2552 
  json-rpc.ts      |     100 |    96.96 |     100 |     100 | 92                
  ...ach-budget.ts |     100 |      100 |     100 |     100 |                   
  safe-ws-send.ts  |   52.94 |    71.42 |     100 |   52.94 | 33-42,47-55       
  sse-stream.ts    |   98.26 |    89.02 |     100 |   98.26 | 87-88,117         
  ...ort-stream.ts |       0 |        0 |       0 |       0 | 1                 
  ws-stream.ts     |   94.06 |    89.09 |     100 |   94.06 | 50,55,134,138-141 
 src/serve/auth    |   86.86 |     79.7 |   93.87 |   86.86 |                   
  device-flow.ts   |   96.35 |    80.57 |   97.61 |   96.35 | ...1358,1453,1519 
  ...w-provider.ts |   44.24 |    74.07 |   71.42 |   44.24 | ...23-284,297,301 
 ...rve/cdp-tunnel |   87.73 |    76.21 |    97.5 |   87.73 |                   
  ...r-emulator.ts |   93.27 |    77.77 |     100 |   93.27 | ...53-256,282-283 
  ...verse-link.ts |      88 |    76.19 |     100 |      88 | ...28-329,420-423 
  ...l-registry.ts |     100 |      100 |     100 |     100 |                   
  cdp-ws.ts        |   76.28 |    61.29 |    87.5 |   76.28 | ...13-217,223-228 
 ...nel/acceptance |    6.12 |    57.89 |   46.15 |    6.12 |                   
  ...helpers.d.mts |       0 |        0 |       0 |       0 | 1                 
  ...e-helpers.mjs |   97.64 |    70.96 |     100 |   97.64 | 22-23             
  ...mcp-smoke.mjs |       0 |        0 |       0 |       0 | 1-124             
  ...cceptance.mjs |       0 |        0 |       0 |       0 | 1-473             
  ...re-server.mjs |       0 |        0 |       0 |       0 | 1-59              
  ...ols-smoke.mjs |       0 |        0 |       0 |       0 | 1-268             
  real-tab.mjs     |       0 |        0 |       0 |       0 | 1-218             
  ...al-chrome.mjs |       0 |        0 |       0 |       0 | 1-223             
 .../conversations |   86.63 |     79.1 |   92.96 |   86.63 |                   
  ...e-activity.ts |     100 |      100 |     100 |     100 |                   
  ...ime-errors.ts |     100 |      100 |     100 |     100 |                   
  ...me-manager.ts |   97.88 |    94.91 |     100 |   97.88 | 64-65,92          
  ...-ownership.ts |   87.33 |    83.75 |   88.46 |   87.33 | ...57-558,601-602 
  ...-workspace.ts |   88.17 |    76.15 |     100 |   88.17 | ...52-554,568-572 
  ...on-journal.ts |   91.65 |    80.76 |     100 |   91.65 | ...44-745,751-753 
  ...on-service.ts |   84.02 |    75.91 |   88.54 |   84.02 | ...3082,3091-3093 
 src/serve/fs      |   87.77 |    82.37 |     100 |   87.77 |                   
  audit.ts         |     100 |    96.29 |     100 |     100 | 211               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...x-registry.ts |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.64 |    74.21 |     100 |   77.64 | ...65,594-598,611 
  policy.ts        |   90.52 |    89.18 |     100 |   90.52 | 172-180           
  text-cursor.ts   |   88.23 |       90 |     100 |   88.23 | 74-77,92-95       
  ...ile-system.ts |   88.02 |    81.88 |     100 |   88.02 | ...3027,3037-3038 
 src/serve/live    |   76.57 |    70.54 |    90.2 |   76.57 |                   
  discovery.ts     |   85.89 |    82.14 |    91.3 |   85.89 | ...73-579,592-593 
  ...oordinator.ts |   82.67 |    76.63 |   97.01 |   82.67 | ...1319,1351-1353 
  ...-installer.ts |   63.83 |    82.35 |   80.76 |   63.83 | ...45-446,460-475 
  ...oordinator.ts |    76.7 |    67.47 |   85.71 |    76.7 | ...1885,1976-1977 
  ...controller.ts |   67.82 |    79.66 |      75 |   67.82 | ...66-278,287-295 
  ...sk-service.ts |   82.71 |    66.15 |   93.61 |   82.71 | ...1270,1283,1290 
  ...redentials.ts |   96.26 |    93.47 |     100 |   96.26 | 91-94             
  ...me-session.ts |   65.63 |    57.24 |   88.88 |   65.63 | ...2270,2275-2282 
  ...up-context.ts |   94.85 |    77.39 |     100 |   94.85 | ...18,327-330,350 
  types.ts         |     100 |      100 |     100 |     100 |                   
 .../local-control |   82.89 |    90.09 |      90 |   82.89 |                   
  credentials.ts   |   96.42 |    95.45 |     100 |   96.42 | 109-110           
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...interfaces.ts |   43.58 |    82.75 |   42.85 |   43.58 | ...09-117,130-142 
  ...r-identity.ts |     100 |      100 |     100 |     100 |                   
  service.ts       |    93.4 |       90 |     100 |    93.4 | ...20-222,313-315 
 src/serve/routes  |   86.63 |    82.04 |   95.95 |   86.63 |                   
  a2ui-action.ts   |   96.84 |     88.5 |    87.5 |   96.84 | ...70-272,309-311 
  capabilities.ts  |   98.96 |    95.12 |     100 |   98.96 | 102               
  ...nel-notify.ts |   79.16 |    85.18 |     100 |   79.16 | ...03-104,120-126 
  ...l-webhooks.ts |   93.56 |    84.09 |     100 |   93.56 | ...42,292,332,334 
  daemon-status.ts |   85.71 |    83.33 |     100 |   85.71 | 101-108           
  goals.ts         |   98.94 |    91.17 |     100 |   98.94 | 143               
  health.ts        |   99.09 |    91.42 |     100 |   99.09 | 147               
  live-setup.ts    |   33.33 |     37.5 |      50 |   33.33 | ...18-123,130-135 
  live.ts          |   84.61 |    76.47 |     100 |   84.61 | ...04,106-111,131 
  permission.ts    |   96.03 |    87.87 |     100 |   96.03 | 81-84             
  ...uled-tasks.ts |   87.52 |    83.61 |   95.12 |   87.52 | ...2016,2061-2062 
  ...r-backfill.ts |   98.49 |    93.56 |     100 |   98.49 | ...99,601,821-822 
  ...on-runtime.ts |   91.42 |       90 |     100 |   91.42 | 56-64             
  session.ts       |   86.76 |     83.3 |   94.61 |   86.76 | ...7436,7438-7439 
  sse-events.ts    |   87.15 |    85.09 |   94.44 |   87.15 | ...48-959,962,969 
  ...e-sessions.ts |   87.13 |    80.79 |     100 |   87.13 | ...90-492,495-500 
  terminal.ts      |   92.81 |    90.35 |     100 |   92.81 | ...10-313,332-335 
  usage-stats.ts   |     100 |    95.45 |     100 |     100 | 118               
  user-language.ts |   99.24 |    87.87 |     100 |   99.24 | 167               
  ...space-auth.ts |   84.74 |    75.29 |     100 |   84.74 | ...35,349,357-361 
  ...el-control.ts |   86.26 |    78.94 |     100 |   86.26 | ...17-318,339-347 
  ...management.ts |   90.35 |    78.94 |     100 |   90.35 | ...52-553,576-577 
  ...d-contacts.ts |   83.62 |    94.59 |     100 |   83.62 | 123,125-142       
  ...controller.ts |   83.27 |    80.75 |      90 |   83.27 | ...1071,1076,1083 
  ...extensions.ts |   89.92 |    79.72 |   94.36 |   89.92 | ...2588,2633-2634 
  ...-file-read.ts |      91 |    80.91 |     100 |      91 | ...20-621,624-625 
  ...file-write.ts |   89.72 |    79.35 |     100 |   89.72 | ...05,719-726,807 
  ...t-branches.ts |   77.16 |    72.02 |     100 |   77.16 | ...42-647,656-663 
  ...e-git-diff.ts |   97.19 |    89.58 |     100 |   97.19 | 157-158,185-187   
  ...ce-git-log.ts |     100 |       95 |     100 |     100 | 48,73             
  workspace-git.ts |   74.71 |     87.5 |     100 |   74.71 | 83-104            
  ...github-prs.ts |   88.26 |    63.46 |     100 |   88.26 | ...38-239,264-265 
  ...-lifecycle.ts |   95.23 |    75.75 |     100 |   95.23 | ...50-151,186-187 
  ...al-control.ts |   73.61 |       70 |     100 |   73.61 | ...28,230-236,241 
  ...management.ts |   87.22 |    84.17 |     100 |   87.22 | ...1823,1833-1838 
  ...cp-control.ts |    73.2 |    67.54 |   85.71 |    73.2 | ...27-633,644-645 
  ...ace-models.ts |   89.84 |    87.35 |     100 |   89.84 | ...27-332,336-338 
  ...ermissions.ts |    77.9 |    72.41 |     100 |    77.9 | ...69-277,298-316 
  ...ce-runtime.ts |     100 |    96.55 |     100 |     100 | 117               
  ...e-settings.ts |      79 |    78.49 |     100 |      79 | ...92-893,919-922 
  ...tup-github.ts |   77.97 |    70.58 |   84.21 |   77.97 | ...46-352,397-398 
  ...ace-skills.ts |   76.41 |    86.11 |     100 |   76.41 | ...29-354,360-394 
  ...ace-status.ts |   82.57 |    74.48 |     100 |   82.57 | ...71-473,477-478 
  ...pace-tools.ts |   75.94 |    69.69 |   66.66 |   75.94 | ...59-164,193-194 
  ...pace-trust.ts |   76.92 |     67.1 |      80 |   76.92 | ...38-343,351-352 
  ...pace-voice.ts |   91.33 |    81.02 |     100 |   91.33 | ...70-673,676-678 
 src/serve/server  |   93.73 |    91.63 |   96.24 |   93.73 |                   
  access-log.ts    |   98.73 |    97.26 |     100 |   98.73 | 119,196           
  ...-timestamp.ts |     100 |      100 |     100 |     100 |                   
  aone-mrs.ts      |   91.48 |    91.35 |   81.25 |   91.48 | ...53,299-300,466 
  ...er-helpers.ts |   63.82 |    78.15 |   81.81 |   63.82 | ...16,330,332-347 
  ...w-registry.ts |    98.8 |    81.81 |     100 |    98.8 | 107               
  ...r-handlers.ts |   97.87 |       80 |     100 |   97.87 | 27                
  ...r-response.ts |   89.67 |    82.69 |     100 |   89.67 | ...1007,1034-1043 
  fs-factory.ts    |     100 |    95.52 |     100 |     100 | 77,144,200        
  ...branch-ops.ts |     100 |      100 |     100 |     100 |                   
  ...list-cache.ts |   99.01 |    95.52 |     100 |   99.01 | 184-185           
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |      65 |       80 |   33.33 |      65 | 30-35,38-43,47-48 
  ...st-helpers.ts |   95.13 |    95.09 |     100 |   95.13 | ...66-168,423-428 
  self-origin.ts   |     100 |      100 |     100 |     100 |                   
  ...e-features.ts |   95.27 |     87.5 |     100 |   95.27 | 194-200           
  ...on-archive.ts |   92.46 |    90.49 |   97.61 |   92.46 | ...1150,1191-1192 
  ...ion-export.ts |   98.57 |    90.47 |     100 |   98.57 | 85                
  session-list.ts  |    97.4 |    93.75 |     100 |    97.4 | ...1192,1401-1405 
  ...pr-refresh.ts |   99.37 |    97.01 |     100 |   99.37 | 69-70             
  ...ry-context.ts |    87.5 |       50 |     100 |    87.5 | 49-50             
  telemetry.ts     |   99.18 |    97.65 |     100 |   99.18 | ...95,882,961-963 
 src/serve/voice   |    92.7 |    91.53 |   97.72 |    92.7 |                   
  ...ice-config.ts |   84.81 |       30 |     100 |   84.81 | 91-100,104-105    
  voice-ws.ts      |   91.58 |    93.44 |      96 |   91.58 | ...68,483,521-523 
  ...oordinator.ts |     100 |    98.24 |     100 |     100 | 176               
 ...kspace-service |      90 |    87.33 |   91.66 |      90 |                   
  index.ts         |   89.65 |    86.98 |   90.47 |   89.65 | ...1393,1407,1421 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |   92.72 |     89.8 |   98.13 |   92.72 |                   
  ...mandLoader.ts |     100 |       95 |     100 |     100 | 107               
  ...killLoader.ts |   97.19 |    86.48 |     100 |   97.19 | 142,153-154       
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   87.09 |    83.07 |     100 |   87.09 | ...35-340,345-350 
  ...omptLoader.ts |   79.55 |    88.65 |   85.71 |   79.55 | ...48,178,245-246 
  ...mandLoader.ts |   97.95 |    93.44 |     100 |   97.95 | 186,193-194       
  ...nd-factory.ts |   91.42 |    91.66 |     100 |   91.42 | 128,137-144       
  ...ation-tool.ts |     100 |    95.45 |     100 |     100 | 125               
  ...ndMetadata.ts |   98.23 |    96.77 |     100 |   98.23 | 83,87             
  commandUtils.ts  |      96 |     90.9 |     100 |      96 | 48                
  ...and-parser.ts |   90.69 |    85.71 |     100 |   90.69 | 63-66             
  ...ionService.ts |     100 |      100 |     100 |     100 |                   
  prompt-stash.ts  |   96.66 |    92.85 |     100 |   96.66 | 34-35             
  ...tree-lease.ts |   92.14 |    92.42 |     100 |   92.14 | ...91-296,329-330 
  ...low-loader.ts |     100 |    96.29 |     100 |     100 | 88                
  setup-github.ts  |    90.8 |    80.95 |     100 |    90.8 | ...49-450,457-458 
  ...-args-file.ts |   93.93 |    91.66 |    87.5 |   93.93 | 208-210,224-230   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |   98.64 |    95.77 |     100 |   98.64 | 116,142-143       
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  voice-service.ts |    90.4 |    87.87 |     100 |    90.4 | ...81,288,353-358 
  ...e-settings.ts |     100 |    95.23 |     100 |     100 | 19                
  ...ranscriber.ts |   91.77 |    87.11 |   97.22 |   91.77 | ...96-898,901-903 
 ...s/housekeeping |   93.03 |    88.57 |      95 |   93.03 |                   
  scheduler.ts     |   93.03 |    88.57 |      95 |   93.03 | ...70-372,424-428 
 ...rvices/insight |     100 |      100 |     100 |     100 |                   
  dates.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   88.94 |    86.86 |   96.29 |   88.94 |                   
  DataProcessor.ts |   88.31 |    86.84 |      95 |   88.31 | ...1368,1372-1379 
  ...tGenerator.ts |   98.24 |    85.71 |     100 |   98.24 | 47                
  ...teRenderer.ts |     100 |      100 |     100 |     100 |                   
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.25 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |       85 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.83 |     100 |   97.41 | 96-99             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services/tips |   97.27 |    84.61 |     100 |   97.27 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  tipHistory.ts    |   92.59 |       70 |     100 |   92.59 | ...24,146,153,162 
  tipRegistry.ts   |     100 |      100 |     100 |     100 |                   
  tipScheduler.ts  |     100 |    91.66 |     100 |     100 | 55                
 src/startup       |   88.99 |    83.47 |    90.9 |   88.99 |                   
  ...p-prefetch.ts |   98.09 |    94.23 |    87.5 |   98.09 | 50,209,225-226    
  ...reeStartup.ts |   80.53 |     74.6 |     100 |   80.53 | ...94,403,409-412 
 src/test-utils    |    94.6 |    76.66 |      80 |    94.6 |                   
  ci-env.ts        |      88 |     62.5 |     100 |      88 | 22-23,28          
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...mised-lock.ts |     100 |      100 |   66.66 |     100 |                   
  ...lot-client.ts |     100 |    66.66 |     100 |     100 | 31,39             
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   71.68 |    78.68 |   72.18 |   71.68 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |    77.5 |    74.24 |   76.31 |    77.5 | ...4520,4636-4642 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |    30.3 |      100 |       0 |    30.3 | 26-76             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |   63.63 |      100 |   41.17 |   63.63 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...AutoUpdate.ts |   93.54 |    94.64 |      90 |   93.54 | 126,131,202-213   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.81 |    77.44 |   62.16 |   39.81 | ...1193,1196-1215 
  ...ractiveUI.tsx |   68.53 |    78.26 |      50 |   68.53 | ...65-467,497-502 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  systemInfo.ts    |   95.09 |    90.27 |     100 |   95.09 | ...54-255,260-264 
  ...InfoFields.ts |   89.28 |    69.04 |     100 |   89.28 | ...09-110,124-125 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-relaunch.ts |   89.61 |    86.66 |      50 |   89.61 | 56-61,83-84       
 src/ui/auth       |   73.75 |    70.24 |   61.22 |   73.75 |                   
  AuthDialog.tsx   |   59.01 |     42.1 |   16.66 |   59.01 | ...25,332-354,358 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  ...etupSteps.tsx |   74.93 |    78.62 |   71.42 |   74.93 | ...92-902,918,921 
  useAuth.ts       |   94.83 |    75.67 |     100 |   94.83 | ...33-234,253-259 
  ...rSetupFlow.ts |   79.13 |     57.4 |     100 |   79.13 | ...01,424,431-437 
 src/ui/commands   |   84.71 |    84.54 |   91.66 |   84.71 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...or-command.ts |     100 |    95.65 |     100 |     100 | 104,182           
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |    93.1 |    95.23 |     100 |    93.1 | 77-82             
  arenaCommand.ts  |   63.89 |    65.71 |   65.21 |   63.89 | ...01-606,691-699 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  branchCommand.ts |     100 |      100 |     100 |     100 |                   
  btwCommand.ts    |   94.32 |    81.25 |     100 |   94.32 | 35-36,114-119     
  bugCommand.ts    |     100 |    77.77 |     100 |     100 | 28,62             
  cdCommand.ts     |    92.3 |    82.75 |     100 |    92.3 | ...,94-99,178,187 
  clearCommand.ts  |    80.9 |    70.83 |     100 |    80.9 | ...28-129,137-146 
  commands.ts      |   97.45 |    96.72 |     100 |   97.45 | 153-155           
  ...essCommand.ts |   86.91 |    66.66 |     100 |   86.91 | ...22-223,237-240 
  ...astCommand.ts |   84.75 |    76.47 |     100 |   84.75 | ...96-102,130-135 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   73.96 |    74.68 |   83.33 |   73.96 | ...76-609,620-621 
  copyCommand.ts   |    98.7 |    96.29 |     100 |    98.7 | 66-67,172,272,323 
  ...or-command.ts |   85.95 |    80.55 |   88.88 |   85.95 | ...68-274,298-309 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |    87.87 |     100 |     100 | ...63,231-232,245 
  ...ryCommand.tsx |   90.56 |    87.83 |    90.9 |   90.56 | ...75-280,327-334 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 26                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  doctorCommand.ts |   70.16 |    84.61 |      95 |   70.16 | ...29-679,682-816 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...rt-command.ts |   80.95 |       80 |     100 |   80.95 | 49-54,69-72,93-98 
  effort-utils.ts  |     100 |      100 |     100 |     100 |                   
  exportCommand.ts |   98.25 |    91.02 |     100 |   98.25 | ...81,198-199,364 
  ...onsCommand.ts |   52.31 |    56.25 |   69.23 |   52.31 | ...09,277-329,390 
  forgetCommand.ts |     100 |       90 |     100 |     100 | 59                
  forkCommand.ts   |     100 |    94.11 |     100 |     100 | 95,146            
  goalCommand.ts   |     100 |    96.49 |     100 |     100 | 139,192           
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.25 |    65.71 |   85.71 |   81.25 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |    58.5 |    74.07 |      80 |    58.5 | ...21-331,334-343 
  initCommand.ts   |   91.86 |       80 |     100 |   91.86 | 48,83-88          
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   94.63 |    90.66 |     100 |   94.63 | ...25-226,253-263 
  learn-command.ts |     100 |      100 |     100 |     100 |                   
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,102-103        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   86.28 |    86.29 |     100 |   86.28 | ...1112,1146-1151 
  peers-command.ts |     100 |    94.36 |     100 |     100 | 59,70,223,228     
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  planCommand.ts   |   78.82 |    76.92 |     100 |   78.82 | 30-35,51-56,68-73 
  quitCommand.ts   |     100 |      100 |     100 |     100 |                   
  recapCommand.ts  |   21.81 |      100 |      50 |   21.81 | 24-73             
  ...ns-command.ts |   98.83 |    81.81 |     100 |   98.83 | 100               
  ...berCommand.ts |     100 |     87.5 |     100 |     100 | 46                
  renameCommand.ts |    89.6 |       90 |     100 |    89.6 | ...72-176,212-219 
  ...oreCommand.ts |   90.96 |    86.04 |     100 |   90.96 | ...41-146,177-178 
  resumeCommand.ts |     100 |      100 |     100 |     100 |                   
  rewindCommand.ts |   81.25 |      100 |      50 |   81.25 | 20-22             
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   89.47 |       75 |      80 |   89.47 | 54-59             
  skillsCommand.ts |   78.31 |    81.81 |     100 |   78.31 | 37-52,73,92       
  statsCommand.ts  |   90.65 |    76.73 |     100 |   90.65 | ...30-733,825-832 
  ...ineCommand.ts |     100 |      100 |     100 |     100 |                   
  ...aryCommand.ts |   73.04 |     82.3 |      90 |   73.04 | ...20-547,561-565 
  tasksCommand.ts  |   77.33 |    72.13 |     100 |   77.33 | ...46-150,173-178 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  trustCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...te-command.ts |     100 |    94.11 |     100 |     100 | 74,148            
  vimCommand.ts    |     100 |      100 |     100 |     100 |                   
  voice-command.ts |   93.63 |       88 |     100 |   93.63 | 36,98-103         
  ...owsCommand.ts |   94.38 |    85.29 |     100 |   94.38 | ...78-183,282-287 
 src/ui/components |   74.09 |    80.37 |   78.96 |   74.09 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  AnsiOutput.tsx   |   65.57 |      100 |      50 |   65.57 | 69-90             
  ApiKeyInput.tsx  |       0 |        0 |       0 |       0 | 1-97              
  AppHeader.tsx    |    88.7 |       75 |     100 |    88.7 | 36,38-43,45       
  ...odeDialog.tsx |   87.24 |    72.22 |   33.33 |   87.24 | ...85,233-238,245 
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   95.65 |    66.66 |     100 |   95.65 | 27,52             
  ...TextInput.tsx |    89.2 |    91.13 |     100 |    89.2 | ...92-294,308-310 
  ...ontroller.tsx |     100 |      100 |     100 |     100 |                   
  Composer.tsx     |   94.54 |    66.66 |     100 |   94.54 | ...-76,88,143,158 
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   68.42 |    57.14 |     100 |   68.42 | 16-17,31-32,42-50 
  CronPill.tsx     |     100 |    93.75 |     100 |     100 | 19                
  ...ification.tsx |      84 |       60 |     100 |      84 | 23-24,40-42       
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |   11.28 |      100 |       0 |   11.28 | 71-598            
  DiffDialog.tsx   |    53.5 |     37.5 |   69.23 |    53.5 | ...32-737,747-760 
  ...ngsDialog.tsx |    8.44 |      100 |       0 |    8.44 | 37-195            
  EffortDialog.tsx |   97.36 |      100 |     100 |   97.36 | 55-56             
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...hProgress.tsx |    87.8 |    33.33 |     100 |    87.8 | 28-31,56          
  ...gsDisplay.tsx |     100 |    96.87 |   83.33 |     100 | 69                
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   81.27 |    69.23 |      50 |   81.27 | ...06,245,267-272 
  GoalPill.tsx     |   93.51 |    81.81 |     100 |   93.51 | 37-38,106-109,123 
  Header.tsx       |   98.65 |    94.73 |     100 |   98.65 | 173,175           
  Help.tsx         |   98.33 |       90 |     100 |   98.33 | ...25,382,448-449 
  ...emDisplay.tsx |   79.69 |    67.61 |     100 |   79.69 | ...17,520,523-529 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   86.36 |    83.41 |      80 |   86.36 | ...2242,2263,2366 
  ...Shortcuts.tsx |     100 |       88 |     100 |     100 | 98,119            
  ...Indicator.tsx |   98.18 |    97.82 |     100 |   98.18 | 161-162           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   95.88 |    96.03 |   46.15 |   95.88 | ...20,523-527,530 
  MemoryDialog.tsx |   86.59 |    80.15 |     100 |   86.59 | ...34-435,485,553 
  ModelDialog.tsx  |   85.22 |    74.17 |     100 |   85.22 | ...1042,1098,1100 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | 14-56             
  ...onsDialog.tsx |    2.13 |      100 |       0 |    2.13 | 62-133,148-1004   
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...icePrompt.tsx |   92.64 |    85.71 |     100 |   92.64 | 102-106,134-139   
  PrepareLabel.tsx |   91.66 |    77.27 |     100 |   91.66 | 73-75,77-79,110   
  ...atePrompt.tsx |   91.34 |       70 |     100 |   91.34 | 48-51,63-66,78    
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |   21.42 |      100 |       0 |   21.42 | 13-39             
  ...hProgress.tsx |   85.25 |    88.46 |     100 |   85.25 | 121-147           
  ...ngSpinner.tsx |   67.85 |    85.71 |      50 |   67.85 | 33-50,71,78-79    
  ...dSelector.tsx |   92.79 |    82.65 |     100 |   92.79 | ...19-323,354-370 
  ...ionPicker.tsx |   84.02 |    74.19 |     100 |   84.02 | ...04,410,452-474 
  ...onPreview.tsx |   93.58 |    83.78 |     100 |   93.58 | ...,70-71,195-197 
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   92.06 |    86.36 |   83.33 |   92.06 | ...,70-72,120-123 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   71.55 |    73.89 |   69.23 |   71.55 | ...1252,1258-1259 
  ...ionDialog.tsx |    92.3 |    96.15 |   33.33 |    92.3 | 60-63,68-75,164   
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |      28 |      100 |       0 |      28 | 18-40             
  ...iewDialog.tsx |   97.77 |    87.67 |     100 |   97.77 | ...97,305-307,324 
  ...tsDisplay.tsx |   95.86 |       75 |     100 |   95.86 | 67-71             
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-171             
  ...tivityTab.tsx |    3.94 |      100 |       0 |    3.94 | 27-275            
  StatsDialog.tsx  |    8.64 |      100 |       0 |    8.64 | ...76-111,130-322 
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |    78.9 |    56.52 |     100 |    78.9 | ...26,213,262-288 
  ...atmapView.tsx |    8.98 |      100 |       0 |    8.98 | 20-107            
  ...essionTab.tsx |      80 |    66.66 |     100 |      80 | ...70-277,283-300 
  ...ineDialog.tsx |    93.9 |    86.88 |     100 |    93.9 | ...20,282,302-304 
  ...yTodoList.tsx |   96.36 |    88.23 |     100 |   96.36 | 138-141           
  ...nsDisplay.tsx |   96.01 |    88.05 |     100 |   96.01 | ...29-130,295-297 
  ...inalImage.tsx |     100 |    93.93 |     100 |     100 | 75,129            
  ThemeDialog.tsx  |   89.95 |    46.15 |      75 |   89.95 | ...71-173,243-245 
  Tips.tsx         |   93.54 |       75 |     100 |   93.54 | 39-40             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  TrustDialog.tsx  |     100 |    83.33 |     100 |     100 | 72-87             
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...Indicator.tsx |    92.5 |     87.5 |     100 |    92.5 | 50-53             
  ...ackDialog.tsx |    7.84 |      100 |       0 |    7.84 | 24-134            
  ...xitDialog.tsx |   80.36 |    43.47 |      60 |   80.36 | ...24-238,248-251 
  ...odeVisuals.ts |   97.22 |    85.71 |     100 |   97.22 | 25                
  ...s-helpers.tsx |   66.25 |    81.25 |      50 |   66.25 | 25-32,46-53,62-72 
 ...nts/agent-view |    61.5 |    75.57 |    62.5 |    61.5 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |     100 |    81.81 |     100 |     100 | 82                
  ...tComposer.tsx |   78.35 |     64.7 |   66.66 |   78.35 | ...64,277,303-305 
  AgentFooter.tsx  |   15.38 |      100 |       0 |   15.38 | 28-65             
  AgentHeader.tsx  |   15.38 |      100 |       0 |   15.38 | 27-64             
  AgentTabBar.tsx  |    87.9 |    63.88 |     100 |    87.9 | ...88,110-118,136 
  ...oryAdapter.ts |     100 |    91.83 |     100 |     100 | 103,109-110,138   
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
 ...mponents/arena |   45.51 |    70.53 |   60.86 |   45.51 |                   
  ArenaCards.tsx   |   73.06 |    71.79 |   85.71 |   73.06 | ...83-185,321-326 
  ...ectDialog.tsx |   83.48 |    69.86 |   88.88 |   83.48 | ...88-392,409-410 
  ...artDialog.tsx |    9.77 |      100 |       0 |    9.77 | 27-166            
  ...tusDialog.tsx |    5.63 |      100 |       0 |    5.63 | 33-75,80-288      
  ...topDialog.tsx |    6.17 |      100 |       0 |    6.17 | 33-213            
 ...ackground-view |   85.86 |     85.1 |   92.98 |   85.86 |                   
  ...sksDialog.tsx |   82.66 |    83.09 |   85.71 |   82.66 | ...1854,1977-1983 
  ...TasksPill.tsx |   78.84 |    94.28 |     100 |   78.84 | 64,109-129        
  ...gentPanel.tsx |   97.08 |    86.31 |     100 |   97.08 | 132,442-446,520   
  agent-forest.ts  |    99.2 |    93.93 |     100 |    99.2 | 258               
  ...Visibility.ts |     100 |      100 |     100 |     100 |                   
  ...e-overlay.tsx |    88.2 |    76.47 |     100 |    88.2 | ...36-138,140-142 
 ...nts/extensions |   84.32 |    76.78 |   83.33 |   84.32 |                   
  ...gerDialog.tsx |   82.15 |    76.08 |     100 |   82.15 | ...91-198,258,260 
  TabBar.tsx       |   97.29 |    88.88 |     100 |   97.29 | 33                
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   46.26 |       85 |   58.82 |   46.26 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |       0 |        0 |       0 |       0 | 1-145             
  ...nListStep.tsx |   75.26 |    88.37 |   66.66 |   75.26 | ...53,174,203-209 
  ...electStep.tsx |       0 |        0 |       0 |       0 | 1-83              
  ...nfirmStep.tsx |   16.32 |      100 |       0 |   16.32 | 28-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
 ...xtensions/tabs |   71.92 |    68.21 |   70.83 |   71.92 |                   
  DiscoverTab.tsx  |   68.22 |    67.66 |   55.55 |   68.22 | ...93,656-660,664 
  InstalledTab.tsx |   75.49 |    67.44 |   83.33 |   75.49 | ...77,782-783,820 
  SourcesTab.tsx   |   71.67 |    70.47 |   77.77 |   71.67 | ...28,547,621-633 
 ...tensions/views |    50.7 |    52.38 |   20.83 |    50.7 |                   
  ...tionsView.tsx |   73.75 |    56.36 |   66.66 |   73.75 | ...30,353,369-374 
  ...tionsView.tsx |   43.45 |    44.82 |    6.66 |   43.45 | ...98-405,408-420 
  ...etailView.tsx |    9.24 |      100 |       0 |    9.24 | 40-67,70-163      
 ...mponents/hooks |   87.11 |    81.37 |   91.89 |   87.11 |                   
  ...rListBody.tsx |   95.29 |    85.18 |     100 |   95.29 | 95-98             
  ...etailStep.tsx |   75.32 |    71.42 |      60 |   75.32 | ...56-169,173-186 
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entHeader.tsx |     100 |    85.71 |     100 |     100 | 47                
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...abledStep.tsx |     100 |      100 |     100 |     100 |                   
  ...sListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   72.29 |    70.49 |     100 |   72.29 | ...51,563-568,572 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
  ...erGrouping.ts |     100 |      100 |     100 |     100 |                   
  sourceLabels.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |   40.91 |    63.44 |   70.58 |   40.91 |                   
  ...ealthPill.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   32.09 |    26.19 |      40 |   32.09 | ...12,914,927-933 
  ...valDialog.tsx |   15.06 |      100 |       0 |   15.06 | 40-109            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-35              
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |      97 |       95 |     100 |      97 | 24,113-114        
 ...ents/mcp/steps |   53.94 |    73.51 |   57.14 |   53.94 |                   
  ...icateStep.tsx |    5.65 |      100 |       0 |    5.65 | 40-66,69-308      
  ...electStep.tsx |   10.95 |      100 |       0 |   10.95 | 16-88             
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...eListStep.tsx |   99.09 |    97.36 |     100 |   99.09 | 71                
  ...etailStep.tsx |   62.83 |       60 |   33.33 |   62.83 | ...87-296,307-332 
  ...rListStep.tsx |   88.53 |    81.25 |     100 |   88.53 | ...64,170,175-180 
  ...etailStep.tsx |    10.3 |      100 |       0 |    10.3 | ...1,67-79,82-140 
  ToolListStep.tsx |   69.29 |       50 |     100 |   69.29 | ...23,126,135-144 
 ...nents/messages |   90.71 |    87.78 |   86.53 |   90.71 |                   
  ...orMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...ionDialog.tsx |   89.23 |     84.9 |   81.81 |   89.23 | ...75,593,611-613 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |    94.73 |     100 |     100 | ...43,289,402,432 
  ...onMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...nMessages.tsx |   92.35 |    96.07 |   76.92 |   92.35 | ...59-361,364-367 
  DiffRenderer.tsx |   93.17 |    86.02 |     100 |   93.17 | ...07,235-236,302 
  ...tsDisplay.tsx |   97.08 |    77.77 |     100 |   97.08 | 95,97,106         
  ...usMessage.tsx |   81.73 |     65.9 |      75 |   81.73 | ...10-214,222,245 
  ...tsDisplay.tsx |   95.52 |    88.31 |     100 |   95.52 | ...40,142,175-180 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   21.05 |      100 |       0 |   21.05 | 23-39             
  ...sMessages.tsx |   59.04 |       50 |    37.5 |   59.04 | ...21-126,147-159 
  ...ryMessage.tsx |   13.63 |      100 |       0 |   13.63 | 23-64             
  ...onMessage.tsx |   91.87 |    82.51 |     100 |   91.87 | ...49-651,658-660 
  ...upMessage.tsx |   98.38 |    95.38 |     100 |   98.38 | 188-191,422       
  ToolMessage.tsx  |   95.04 |    89.55 |     100 |   95.04 | ...1075,1120-1122 
 ...ponents/shared |   86.36 |    82.21 |    86.6 |   86.36 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...rBoundary.tsx |     100 |      100 |     100 |     100 |                   
  MaxSizedBox.tsx  |   84.71 |    86.95 |      90 |   84.71 | ...67-568,685-686 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   90.37 |    82.85 |   18.18 |   90.37 | ...60-63,65,73-76 
  StaticRender.tsx |     100 |      100 |     100 |     100 |                   
  TextInput.tsx    |   81.31 |    68.85 |      80 |   81.31 | ...36-240,252-258 
  ...ontroller.tsx |     100 |    81.81 |     100 |     100 | 59-62             
  ...apsedTime.tsx |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...lizedList.tsx |   91.49 |    86.66 |   83.33 |   91.49 | ...18-846,859,959 
  text-buffer.ts   |   85.98 |    81.78 |   97.91 |   85.98 | ...2664,2762-2763 
  ...er-actions.ts |   73.93 |    67.22 |     100 |   73.93 | ...32-733,934-936 
 ...ponents/skills |    4.07 |      100 |       0 |    4.07 |                   
  ...gerDialog.tsx |    4.07 |      100 |       0 |    4.07 | 78-136,139-667    
 ...ents/subagents |   30.87 |        0 |       0 |   30.87 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
  reducers.tsx     |    12.1 |      100 |       0 |    12.1 | 33-190            
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |   10.95 |      100 |       0 |   10.95 | ...1,56-57,60-102 
 ...bagents/create |   18.06 |     62.5 |    8.33 |   18.06 |                   
  ...ionWizard.tsx |    7.28 |      100 |       0 |    7.28 | 34-299            
  ...rSelector.tsx |   14.75 |      100 |       0 |   14.75 | 26-85             
  ...onSummary.tsx |    4.26 |      100 |       0 |    4.26 | 27-331            
  ...tionInput.tsx |   72.41 |     62.5 |     100 |   72.41 | ...32-139,163-170 
  ...dSelector.tsx |   33.33 |      100 |       0 |   33.33 | 20-21,26-27,36-63 
  ...nSelector.tsx |    37.5 |      100 |       0 |    37.5 | 20-21,26-27,36-58 
  ...EntryStep.tsx |   12.76 |      100 |       0 |   12.76 | 34-78             
  ToolSelector.tsx |    4.16 |      100 |       0 |    4.16 | 31-253            
 ...bagents/manage |    21.6 |    59.52 |   27.27 |    21.6 |                   
  ...ctionStep.tsx |   10.25 |      100 |       0 |   10.25 | 21-103            
  ...eleteStep.tsx |   20.93 |      100 |       0 |   20.93 | 23-62             
  ...tEditStep.tsx |   25.53 |      100 |       0 |   25.53 | ...2,37-38,51-124 
  ...ctionStep.tsx |   35.61 |    59.52 |     100 |   35.61 | ...21-433,438-440 
  ...iewerStep.tsx |   13.72 |      100 |       0 |   13.72 | 18-73             
  ...gerDialog.tsx |    6.74 |      100 |       0 |    6.74 | 35-341            
 ...mponents/views |   69.22 |    71.81 |   61.11 |   69.22 |                   
  ContextUsage.tsx |   71.49 |    64.86 |      80 |   71.49 | ...30-436,473-567 
  DoctorReport.tsx |     9.8 |      100 |       0 |     9.8 | 25-54,57-131      
  ...sionsList.tsx |   88.05 |       75 |     100 |   88.05 | 70-77             
  McpStatus.tsx    |   92.01 |     73.8 |     100 |   92.01 | ...36,175-177,262 
  SkillsList.tsx   |   20.51 |      100 |       0 |   20.51 | 17-20,27-57       
  ToolsList.tsx    |      75 |    81.81 |     100 |      75 | 39-42,59-67       
 src/ui/contexts   |   86.47 |    82.27 |   86.48 |   86.47 |                   
  ...ewContext.tsx |   91.66 |       90 |      75 |   91.66 | ...89-193,279-289 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   93.83 |    68.51 |   42.85 |   93.83 | ...44,281-285,317 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.65 |    84.85 |     100 |   85.65 | ...1612-1614,1620 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   80.77 |    79.56 |    92.3 |   80.77 | ...31-434,443-446 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...edContext.tsx |     100 |      100 |      50 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 156-157           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 237-238           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
  ...rtContext.tsx |     100 |      100 |     100 |     100 |                   
 src/ui/daemon     |   89.51 |    76.92 |   95.65 |   89.51 |                   
  ...ui-adapter.ts |   89.51 |    76.92 |   95.65 |   89.51 | ...59,877-878,964 
 src/ui/editors    |   93.33 |    85.71 |   66.66 |   93.33 |                   
  ...ngsManager.ts |   93.33 |    85.71 |   66.66 |   93.33 | 49,63-64          
 src/ui/hooks      |   86.52 |    84.43 |   88.88 |   86.52 |                   
  ...dProcessor.ts |   85.53 |    85.13 |     100 |   85.53 | ...-970,1017-1018 
  ...ention-ref.ts |   97.72 |       84 |     100 |   97.72 | 65                
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...esourceRef.ts |     100 |      100 |     100 |     100 |                   
  ...completion.ts |     100 |    95.45 |     100 |     100 | 95                
  ...ention-ref.ts |     100 |      100 |     100 |     100 |                   
  ...dProcessor.ts |   94.51 |    73.58 |     100 |   94.51 | ...97-298,303-304 
  ...dProcessor.ts |   86.83 |    71.86 |   83.33 |   86.83 | ...1536,1565-1569 
  ...rt-command.ts |     100 |      100 |     100 |     100 |                   
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...llm-stream.ts |   88.87 |    85.13 |   85.18 |   88.87 | ...6265,6267,6372 
  ...ng-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...oice-input.ts |   92.41 |    82.08 |   66.66 |   92.41 | ...12,514-515,670 
  ...ke-repaint.ts |     100 |      100 |     100 |     100 |                   
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      52 |    63.63 |     100 |      52 | ...59,67-70,76-87 
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...enaCommand.ts |      85 |      100 |     100 |      85 | 23-24,29          
  ...aInProcess.ts |   27.92 |       80 |      25 |   27.92 | ...69-170,173-175 
  ...Completion.ts |   86.44 |    88.48 |     100 |   86.44 | ...14-515,525-541 
  ...ifications.ts |   87.82 |    96.77 |     100 |   87.82 | 138-152           
  ...tIndicator.ts |   88.28 |    81.57 |     100 |   88.28 | ...66,175,179-187 
  ...waySummary.ts |   96.26 |       75 |     100 |   96.26 | 126-128,170       
  ...ndTaskView.ts |   94.89 |    77.55 |     100 |   94.89 | 164-168,257,263   
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   96.03 |    88.75 |     100 |   96.03 | ...04-205,362-365 
  ...ompletion.tsx |    97.1 |    87.23 |     100 |    97.1 | ...26-327,337-338 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   96.64 |    91.37 |     100 |   96.64 | ...37-238,242-243 
  ...nitMessage.ts |     100 |      100 |     100 |     100 |                   
  ...extualTips.ts |   78.26 |       50 |     100 |   78.26 | ...2,75-79,96-104 
  ...eteCommand.ts |   89.52 |    90.69 |     100 |   89.52 | ...98-106,114-115 
  ...ialogClose.ts |   36.11 |       10 |     100 |   36.11 | ...89-195,202-207 
  useDiffData.ts   |   11.62 |      100 |       0 |   11.62 | 44-87             
  ...oublePress.ts |   53.12 |       75 |     100 |   53.12 | 33-35,41-54       
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   99.12 |    97.64 |     100 |   99.12 | 182-183           
  ...ionUpdates.ts |   93.72 |    92.98 |     100 |   93.72 | ...87-291,314-320 
  ...agerDialog.ts |   88.88 |      100 |     100 |   88.88 | 21,25             
  ...backDialog.ts |    63.9 |    76.47 |   66.66 |    63.9 | ...66-168,190-191 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |    93.33 |     100 |     100 | 62                
  ...ggestions.tsx |   96.47 |    78.94 |     100 |   96.47 | 121,155-156       
  ...BranchName.ts |     100 |    94.44 |     100 |     100 | 54                
  ...oryManager.ts |   98.44 |     98.9 |     100 |   98.44 | 157-160           
  ...ooksDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...stListener.ts |     100 |      100 |     100 |     100 |                   
  ...nAuthError.ts |   76.19 |       50 |     100 |   76.19 | 39-40,43-45       
  ...putHistory.ts |   92.59 |    85.71 |     100 |   92.59 | 63-64,72,94-96    
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |   22.58 |      100 |      50 |   22.58 | 11-32,44-85       
  ...gIndicator.ts |     100 |    96.66 |     100 |     100 | 109               
  useLogger.ts     |      16 |      100 |       0 |      16 | 15-45             
  useMCPHealth.ts  |   10.52 |      100 |       0 |   10.52 | 36-75             
  ...cpApproval.ts |   93.12 |    86.11 |     100 |   93.12 | ...24-127,139-140 
  useMcpDialog.ts  |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...moryDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...oryMonitor.ts |   83.14 |    78.57 |     100 |   83.14 | 54-63,74-79       
  ...ssageQueue.ts |     100 |    95.19 |     100 |     100 | ...53,289,360,375 
  ...delCommand.ts |     100 |       96 |     100 |     100 | 61                
  ...ouseEvents.ts |   94.89 |       95 |   83.33 |   94.89 | 78-82             
  ...raseCycler.ts |   84.74 |    76.47 |     100 |   84.74 | ...49,52-53,69-71 
  ...rredEditor.ts |   58.33 |    22.22 |     100 |   58.33 | 23-27,29-33       
  ...derUpdates.ts |   89.16 |     82.6 |     100 |   89.16 | ...77,329-339,419 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   89.13 |     86.9 |     100 |   89.13 | ...61-463,496-506 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...umeCommand.ts |   96.51 |    90.19 |     100 |   96.51 | 279,306-311       
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.19 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.26 |     100 |   92.87 | ...99-501,503-505 
  ...earchInput.ts |     100 |    97.29 |     100 |     100 | 82                
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   93.28 |    80.95 |     100 |   93.28 | ...96,153-154,164 
  ...oryCommand.ts |   85.48 |    58.33 |     100 |   85.48 | 22-28,40,71       
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   82.79 |    85.33 |   94.73 |   82.79 | ...86-688,696-732 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |   97.32 |    93.93 |     100 |   97.32 | ...18-422,518-525 
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...mInProcess.ts |   27.35 |       80 |      25 |   27.35 | ...82-183,186-188 
  ...tification.ts |     100 |     87.5 |     100 |     100 | 50                
  ...alProgress.ts |   67.34 |    58.82 |   66.66 |   67.34 | 52-53,61-68,79-85 
  ...rminalSize.ts |     100 |      100 |     100 |     100 |                   
  ...emeCommand.ts |    79.2 |    35.29 |     100 |    79.2 | ...15-116,120-121 
  useTimer.ts      |   97.59 |    94.73 |     100 |   97.59 | 17-18             
  ...lMigration.ts |       0 |        0 |       0 |       0 |                   
  ...rustModify.ts |     100 |    90.47 |     100 |     100 | 112,134           
  useTurnDiffs.ts  |   95.12 |    78.57 |     100 |   95.12 | 133-134,156-157   
  ...elcomeBack.ts |   87.36 |     90.9 |     100 |   87.36 | ...,94-96,114-115 
  ...reeSession.ts |   93.75 |    72.72 |     100 |   93.75 | 47-48,72          
  vim.ts           |      74 |    67.56 |   69.23 |      74 | ...1854-1861,1869 
 src/ui/layouts    |   91.25 |    89.47 |     100 |   91.25 |                   
  ...AppLayout.tsx |   90.99 |     87.5 |     100 |   90.99 | 61-63,111-116,152 
  ...AppLayout.tsx |   91.66 |    92.85 |     100 |   91.66 | 75-80             
 src/ui/model      |   97.91 |    98.36 |     100 |   97.91 |                   
  ...ggregation.ts |     100 |      100 |     100 |     100 |                   
  ...ming-model.ts |   97.43 |    97.72 |     100 |   97.43 | 261-265           
 src/ui/models     |   80.72 |       80 |   71.42 |   80.72 |                   
  ...ableModels.ts |   80.72 |       80 |   71.42 |   80.72 | ...,61-71,125-127 
 ...noninteractive |     100 |      100 |    6.66 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |    6.66 |     100 |                   
 src/ui/opentui    |   64.46 |     80.8 |   76.82 |   64.46 |                   
  ...plain-text.ts |     100 |    89.47 |     100 |     100 | 73,134            
  ...een-reader.ts |     100 |    88.57 |     100 |     100 | 79-83,198,211     
  ...t-tool-run.ts |   97.26 |     62.5 |   66.66 |   97.26 | 116,130           
  clipboard.ts     |     100 |    88.88 |     100 |     100 | 47                
  ...ds-context.ts |   96.66 |      100 |   38.88 |   96.66 | 159,161           
  ...s-dispatch.ts |   80.59 |    84.02 |   73.07 |   80.59 | ...6-970,993-1004 
  ...nds-output.ts |     100 |      100 |     100 |     100 |                   
  ...s-registry.ts |    98.8 |    89.36 |     100 |    98.8 | 177-179           
  dialog-data.ts   |   82.48 |    72.08 |   89.65 |   82.48 | ...1291,1295-1325 
  ...ogs-arena.tsx |       0 |      100 |     100 |       0 | 3-818             
  dialogs-auth.tsx |   76.17 |    66.85 |      84 |   76.17 | ...41,957,966-982 
  dialogs-core.ts  |     100 |    94.44 |     100 |     100 | 179,190           
  ...xtensions.tsx |   89.06 |     82.7 |   78.57 |   89.06 | ...33-636,659-661 
  dialogs-mcp.tsx  |   29.85 |    98.71 |      90 |   29.85 | 295,320-872       
  ...ry-status.tsx |   22.58 |       80 |   28.57 |   22.58 | ...11-154,159-175 
  dialogs-misc.tsx |   12.02 |      100 |      20 |   12.02 | ...47-655,658-712 
  ...ogs-model.tsx |   45.95 |    96.77 |   76.92 |   45.95 | ...72-173,243-408 
  ...ogs-modes.tsx |       0 |      100 |     100 |       0 | 3-222             
  ...rmissions.tsx |   18.65 |    89.28 |   83.33 |   18.65 | ...58-159,201-734 
  ...-settings.tsx |   20.25 |    84.61 |    90.9 |   20.25 | ...71,239,254-870 
  ...gs-shared.tsx |   82.86 |    80.28 |   46.15 |   82.86 | ...51,453-456,472 
  ...ts-skills.tsx |     5.8 |      100 |       0 |     5.8 | ...04-381,391-458 
  ...ogs-theme.tsx |    30.8 |    88.88 |      75 |    30.8 | 148-326           
  diff-render.ts   |   97.87 |    95.23 |     100 |   97.87 | 89-90             
  early-input.ts   |   94.23 |    73.68 |   71.42 |   94.23 | 85,88-89          
  event-adapter.ts |      91 |    74.54 |   88.88 |      91 | ...36,721,740-748 
  exit-guard.ts    |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   95.45 |     87.5 |     100 |   95.45 | 56                
  ...rust-gate.tsx |   98.55 |    96.55 |      75 |   98.55 | 190-191           
  help-content.ts  |   98.11 |    85.41 |     100 |   98.11 | 226-227,316,318   
  help-overlay.tsx |       0 |      100 |     100 |       0 | 3-281             
  input-history.ts |     100 |    84.21 |     100 |     100 | 43-45,58          
  ...prompt-key.ts |     100 |      100 |     100 |     100 |                   
  ...ompt-model.ts |   85.41 |    87.81 |   84.09 |   85.41 | ...1127,1130-1140 
  input-prompt.tsx |   81.95 |    68.01 |      28 |   81.95 | ...1071,1085-1087 
  ...projection.ts |   81.16 |    62.66 |   86.66 |   81.16 | ...1077-1082,1084 
  key-map.ts       |     100 |      100 |     100 |     100 |                   
  ...egotiation.ts |   94.82 |    73.68 |     100 |   94.82 | 142-144           
  link-click.ts    |     100 |    82.97 |     100 |     100 | ...49,152,185-189 
  ...sion-model.ts |   83.77 |       85 |   85.71 |   83.77 | ...40-550,623,679 
  live-session.ts  |   87.37 |    83.17 |   73.68 |   87.37 | ...60,462,479-489 
  markdown-heal.ts |     100 |      100 |     100 |     100 |                   
  ...rogressive.ts |   85.41 |    83.33 |   71.42 |   85.41 | 53,60-62,89-91    
  messages.tsx     |   58.82 |     79.1 |   73.68 |   58.82 | ...93-409,417-474 
  mouse-caret.ts   |     100 |      100 |     100 |     100 |                   
  mouse-hit.ts     |     100 |      100 |     100 |     100 |                   
  mouse-rows.ts    |     100 |      100 |     100 |     100 |                   
  ...-scrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...app-shell.tsx |   94.94 |    90.19 |   63.63 |   94.94 | ...45-246,251-253 
  ...log-mount.tsx |   71.92 |    90.62 |   28.57 |   71.92 | ...53,473,548-564 
  ...-boundary.tsx |   95.91 |      100 |   85.71 |   95.91 | 82-83             
  opentui-host.ts  |   97.53 |    94.73 |   97.43 |   97.53 | ...04,216,236-237 
  ...ui-runtime.ts |   93.57 |    80.95 |     100 |   93.57 | 97-101,152,173    
  osc8-parity.ts   |     100 |      100 |     100 |     100 |                   
  ...me-session.ts |   72.34 |    77.77 |   57.14 |   72.34 | 40,44,59-63,76-81 
  ...ompaction.tsx |   76.19 |      100 |   66.66 |   76.19 | 106-130           
  ...wind-model.ts |    94.7 |    87.23 |     100 |    94.7 | 245-252,254       
  ...on-rewind.tsx |       0 |      100 |     100 |       0 | 3-391             
  ...ion-switch.ts |   74.74 |       50 |     100 |   74.74 | ...92-401,411-414 
  ...h-dispatch.ts |   56.86 |    38.88 |      50 |   56.86 | ...13-126,130-137 
  slash-gateway.ts |   96.82 |       90 |   81.81 |   96.82 | 70-71             
  sticky-todos.ts  |     100 |      100 |     100 |     100 |                   
  text-batcher.ts  |     100 |      100 |     100 |     100 |                   
  theme-auto.ts    |     100 |      100 |     100 |     100 |                   
  theme-parity.ts  |   98.68 |    82.35 |     100 |   98.68 | 87                
  theme.ts         |    97.7 |    96.55 |     100 |    97.7 | 202-204           
  ...pt-adapter.ts |   89.56 |       75 |   33.33 |   89.56 | ...50-152,172-173 
 src/ui/selection  |   93.56 |    86.19 |     100 |   93.56 |                   
  screen-buffer.ts |   94.73 |    66.66 |     100 |   94.73 | 51-52             
  ...ion-coords.ts |     100 |      100 |     100 |     100 |                   
  ...ction-span.ts |   93.81 |     92.1 |     100 |   93.81 | ...1,45-46,99-100 
  ...tion-state.ts |     100 |      100 |     100 |     100 |                   
  ...ction-text.ts |   93.85 |    93.44 |     100 |   93.85 | 30-34,130-131     
  ...selection.tsx |   91.88 |    78.57 |     100 |   91.88 | ...16-417,446-447 
 src/ui/state      |      95 |    81.81 |     100 |      95 |                   
  extensions.ts    |      95 |    81.81 |     100 |      95 | 69-70,89          
 src/ui/themes     |    98.5 |    73.17 |     100 |    98.5 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |   99.23 |    97.14 |     100 |   99.23 | 277-278           
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  ...inal-theme.ts |   88.59 |     86.2 |     100 |   88.59 | ...57-261,266-270 
  dracula.ts       |     100 |      100 |     100 |     100 |                   
  github-dark.ts   |     100 |      100 |     100 |     100 |                   
  github-light.ts  |     100 |      100 |     100 |     100 |                   
  googlecode.ts    |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  qwen-dark.ts     |     100 |      100 |     100 |     100 |                   
  qwen-light.ts    |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-manager.ts |   88.68 |    84.14 |     100 |   88.68 | ...83-392,397-398 
  theme.ts         |     100 |    38.02 |     100 |     100 | ...34-449,457-461 
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   88.07 |    86.06 |   96.15 |   88.07 |                   
  ...Colorizer.tsx |   80.31 |    85.41 |     100 |   80.31 | ...00-201,313-339 
  ...nRenderer.tsx |   80.07 |     75.6 |     100 |   80.07 | ...70,274,332-333 
  ...wnDisplay.tsx |   92.87 |     93.5 |     100 |   92.87 | ...,955,1002-1020 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   93.63 |    81.77 |   95.23 |   93.63 | ...47-750,803-808 
  ...odeDisplay.ts |   94.28 |    85.71 |     100 |   94.28 | 23,40             
  asciiCharts.ts   |    96.7 |     87.5 |     100 |    96.7 | 170-177,278       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |    52.9 |    74.15 |    92.3 |    52.9 | ...29,632-641,644 
  commandUtils.ts  |   98.61 |    93.27 |     100 |   98.61 | 189,217-218,424   
  ...ssion-text.ts |   90.54 |    71.42 |     100 |   90.54 | 66-68,80,82,90-91 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   73.84 |    73.91 |     100 |   73.84 | ...34,36-40,42-46 
  ...coalescing.ts |     100 |      100 |     100 |     100 |                   
  formatters.ts    |   94.87 |    98.27 |     100 |   94.87 | 116-119           
  goal-runtime.ts  |   94.44 |    96.29 |     100 |   94.44 | 32-34             
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...gap-notice.ts |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |    95.65 |     100 |     100 | 45,151            
  historyUtils.ts  |   96.07 |     97.1 |     100 |   96.07 | 104-107           
  ...mage-parts.ts |   97.75 |    94.73 |     100 |   97.75 | 82-83             
  inline-math.ts   |   98.48 |    95.23 |     100 |   98.48 | 129-130           
  input-mouse.ts   |     100 |    85.71 |     100 |     100 | 48,93             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |   68.81 |       75 |   66.66 |   68.81 | ...27-132,160-161 
  latexRenderer.ts |   94.95 |     73.8 |     100 |   94.95 | ...76-178,184-187 
  layoutUtils.ts   |     100 |      100 |     100 |     100 |                   
  list-mouse.ts    |     100 |      100 |     100 |     100 |                   
  ...ightLoader.ts |     100 |       95 |     100 |     100 | 81                
  ...nUtilities.ts |   98.72 |    94.36 |     100 |   98.72 | 145-146           
  ...t-position.ts |     100 |     87.5 |     100 |     100 | 85                
  ...geRenderer.ts |   86.51 |    70.16 |   95.12 |   86.51 | ...1286,1326-1332 
  ...alRenderer.ts |   86.69 |     71.9 |     100 |   86.69 | ...1476,1513-1519 
  ...lsBySource.ts |     100 |    95.45 |     100 |     100 | 84                
  mouse-hit.ts     |     100 |     90.9 |     100 |     100 | 62-64             
  mouse.ts         |   92.85 |    74.19 |     100 |   92.85 | ...38,145,149-152 
  osc8.ts          |   91.33 |    79.03 |     100 |   91.33 | ...73,273,277-278 
  ...red-height.ts |   98.38 |    97.14 |     100 |   98.38 | 195-197           
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |     100 |      100 |     100 |     100 |                   
  ...storyUtils.ts |   84.37 |    81.09 |     100 |   84.37 | ...03-625,759-760 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...evel-label.ts |   77.77 |    66.66 |     100 |   77.77 | 18,22-24          
  ...are-cursor.ts |      90 |     87.5 |     100 |      90 | 39-44             
  ...ataService.ts |   93.17 |     79.1 |     100 |   93.17 | ...14,227,254-256 
  suggestions.ts   |     100 |      100 |     100 |     100 |                   
  ...izedOutput.ts |   95.19 |      100 |   88.88 |   95.19 | 121-126           
  ...nal-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...e-renderer.ts |   90.24 |    82.66 |     100 |   90.24 | ...04,506-508,631 
  ...ize-reflow.ts |     100 |     92.3 |     100 |     100 | 57,62,209,217,347 
  ...wOptimizer.ts |     100 |    94.73 |     100 |     100 | 35,78             
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   98.75 |    95.96 |     100 |   98.75 | 292-293,488-489   
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   95.81 |     92.3 |     100 |   95.81 | ...09-210,243-244 
  ...isplay-map.ts |     100 |      100 |     100 |     100 |                   
  updateCheck.ts   |     100 |    92.75 |     100 |     100 | 227-239,331       
  windowTitle.ts   |   96.55 |    94.73 |     100 |   96.55 | 56-57             
  ...ow-keyword.ts |     100 |      100 |     100 |     100 |                   
 ...i/utils/export |   75.03 |     60.1 |   94.59 |   75.03 |                   
  collect.ts       |   71.27 |    65.81 |      96 |   71.27 | ...90-633,655-656 
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |   80.42 |    51.35 |     100 |   80.42 | ...59-364,376-378 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |     100 |      100 |     100 |     100 |                   
 ...ort/formatters |   52.92 |    47.22 |   71.42 |   52.92 |                   
  html.ts          |   84.61 |       50 |     100 |   84.61 | ...53,57-58,62-63 
  json.ts          |     100 |      100 |     100 |     100 |                   
  jsonl.ts         |   82.45 |     37.5 |     100 |   82.45 | ...48,50-51,65-66 
  markdown.ts      |   36.32 |    47.05 |      50 |   36.32 | ...16-219,233-295 
 src/ui/voice      |   81.24 |    79.78 |   81.69 |   81.24 |                   
  ...d-recorder.ts |     6.2 |      100 |       0 |     6.2 | ...33-159,162-163 
  ...o-recorder.ts |   84.61 |    93.33 |   57.14 |   84.61 | ...16-117,131-136 
  ...me-session.ts |   91.09 |     92.1 |     100 |   91.09 | ...99,305,316-319 
  sox-recorder.ts  |    92.7 |    71.87 |     100 |    92.7 | ...34-135,153-154 
  ...ailability.ts |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |     100 |      100 |     100 |     100 |                   
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  ...e-recorder.ts |   88.29 |    67.74 |   81.81 |   88.29 | ...,98-99,112,115 
  voice-refine.ts  |     100 |    93.33 |     100 |     100 | 92                
  ...ream-retry.ts |   86.79 |       70 |     100 |   86.79 | 16-18,48-49,59-60 
  ...am-session.ts |   88.02 |    66.66 |   84.61 |   88.02 | ...26,343-345,363 
  ...ranscriber.ts |     100 |      100 |     100 |     100 |                   
 src/utils         |   92.47 |    90.02 |   96.11 |   92.47 |                   
  ...p-profiler.ts |   98.39 |    92.59 |     100 |   98.39 | 141,185,235       
  acpModelUtils.ts |   97.36 |    95.14 |     100 |   97.36 | ...09-210,214-215 
  apiPreconnect.ts |   96.74 |    94.59 |     100 |   96.74 | 167-170           
  ...ol-call-id.ts |   84.61 |       60 |     100 |   84.61 | 26-27,37-38       
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  ...-api-error.ts |     100 |    96.42 |     100 |     100 | 14                
  cleanup.ts       |   84.05 |    94.11 |      80 |   84.05 | 80,111-121        
  ...y-identity.ts |   89.38 |    85.32 |     100 |   89.38 | ...48-449,456-457 
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.73 |    73.23 |   88.88 |   70.73 | ...27,430-431,438 
  deepMerge.ts     |     100 |       90 |     100 |     100 | 50-52,58          
  ...re-runtime.ts |     100 |      100 |     100 |     100 |                   
  ...putCapture.ts |   90.65 |    86.31 |     100 |   90.65 | ...73,371,373-374 
  errors.ts        |   97.56 |    94.64 |     100 |   97.56 | 69-70,304-305     
  events.ts        |     100 |      100 |     100 |     100 |                   
  ...on-mention.ts |   88.48 |     82.6 |     100 |   88.48 | ...56-160,164-168 
  gitUtils.ts      |   92.85 |    86.66 |     100 |   92.85 | ...13-116,164-167 
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.81 |    94.69 |     100 |   97.81 | ...03,420-421,466 
  ...projection.ts |   95.27 |    95.58 |     100 |   95.27 | 140-145           
  jsonc-editor.ts  |   93.18 |    92.66 |     100 |   93.18 | ...80-381,384-385 
  load-undici.ts   |     100 |      100 |     100 |     100 |                   
  ...npm-update.ts |   89.31 |    77.33 |     100 |   89.31 | ...87,303-304,344 
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...er-mention.ts |     100 |    66.66 |     100 |     100 | 14,30,44-46       
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   96.05 |    93.79 |     100 |   96.05 | ...,85-86,334,443 
  ...-part-list.ts |     100 |      100 |     100 |     100 |                   
  osc.ts           |   97.18 |      100 |    87.5 |   97.18 | 182-183           
  package.ts       |   88.88 |    85.71 |     100 |   88.88 | 31-32             
  paths.ts         |     100 |      100 |     100 |     100 |                   
  processUtils.ts  |    92.3 |       80 |     100 |    92.3 | 45-46             
  readStdin.ts     |   93.67 |    94.11 |   85.71 |   93.67 | 79-83             
  relaunch.ts      |   95.87 |    89.28 |     100 |   95.87 | 103-105,131       
  resolvePath.ts   |     100 |      100 |     100 |     100 |                   
  runBudget.ts     |   99.44 |    97.36 |     100 |   99.44 | 121               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  ...xImageName.ts |     100 |    77.77 |     100 |     100 | 10,18             
  sandboxMounts.ts |     100 |      100 |     100 |     100 |                   
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  shell-args.ts    |     100 |      100 |     100 |     100 |                   
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |   76.66 |       90 |   83.33 |   76.66 | 93-99             
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   76.47 |       25 |     100 |   76.47 | 13,17,23-24       
  ...on-handler.ts |    73.8 |       75 |     100 |    73.8 | 17-18,25-26,67-73 
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   87.75 |       75 |     100 |   87.75 | 47-48,53-54,57-58 
  version.ts       |     100 |    66.66 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   94.35 |    94.11 |     100 |   94.35 |                   
  cleanup.ts       |   92.59 |    93.75 |     100 |   92.59 | ...02-205,209-211 
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  throttledOnce.ts |   95.95 |    93.93 |     100 |   95.95 | 77-78,153-154     
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
Core full-text-summary.txt not found at: coverage_artifact/core/coverage/full-text-summary.txt

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

@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.

No blocking issues. LGTM! ✅

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

Deferred under the convergence posture (round 5, not a blocker) — recorded, not requested in this round:

  • .github/workflows/e2e.yml:283 — [probe] Budget gate's unset-epoch fallback lacks an execution witness
中文说明

无阻断问题。LGTM!✅

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

收敛姿态下延后(第 5 轮,非阻断)——已记录,本轮不要求修改:共 1 条(原文未翻译,列表见上方英文部分)。

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

@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.

⚠️ Downgraded from Approve to Comment: CI still running. Reviewed.

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

中文说明

⚠️ 已从批准降级为评论:CI still running。 已审查。

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

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 AutoFix ran out of time before finishing (timeout (7200000ms)) (attempt 5/10) — it will retry on the next scan.

What I found before stopping:
Qwen failed during address-review: timeout (7200000ms).

See the Qwen Autofix agent step logs for model/tool output.

中文说明

🤖 AutoFix 在完成前耗尽了时间(timeout (7200000ms))(第 5/10 次尝试)—— 将在下次扫描时重试。

Run log: https://github.com/QwenLM/qwen-code/actions/runs/33463003729


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 AutoFix updated a stale base — the fix did not pass verification, but this PR was behind main, so it merged current main in via update-branch and will retry on the next scan. A stale base (a dependency or symbol main already changed) can fail the build without being the fix's fault; if it still fails once current, it hands off to a human.

What I found before stopping:

Round blocked: red CI checks on PR #10572 are not attributable to the PR diff

Blocker

This round's only actionable feedback is two failed checks on run 33454756719:

  • Test (ubuntu-latest, Node 22.x): FAILURE (job 99692287968)
  • Post Coverage Comment (ubuntu-latest, 22.x): FAILURE (job 99713080944), a derivative of the first

Every locally verifiable surface of this PR is green (evidence below), and there is no in-scope, evidence-backed change available to turn these checks green: the failing job ran on the shared self-hosted pool, the failure signature matches the shared-host pressure class this PR exists for, and the job logs are unreachable from this environment (no GitHub credentials; gh is unauthenticated, and the job-log endpoint answers 403 without them). No commit was made this round.

Why the second check is derivative

Post Coverage Comment declares needs: [classify_pr, test] and its first real step downloads the coverage-reports-22.x-ubuntu-latest artifact that only the Test job uploads; it failed after 13 seconds at that download. Fixing the Test job fixes it. It also carries job-level continue-on-error: true, so nothing in this PR's footprint needs to change for it.

Evidence: the PR surface is green

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-shard-retry.test.js scripts/tests/e2e-workflow.test.js — 25/25 passed
  • npm run build — exit 0
  • npm run typecheck — exit 0
  • npm run lint — exit
中文说明

🤖 AutoFix 更新了一个过期的 base —— 修复未通过验证,但本 PR 落后于 main,因此已通过 update-branch 合入当前 main,并将在下次扫描时重试。过期的 base(main 已改动的依赖或符号)可能让构建失败而并非修复本身的错;若 base 更新后仍然失败,将移交人工处理。

停止前我了解到的情况:

本轮受阻:PR #10572 的红色 CI 检查无法归因于该 PR 的改动

阻塞点

本轮唯一可执行的反馈是运行 33454756719 中两个失败的检查:

  • Test (ubuntu-latest, Node 22.x):失败(job 99692287968)
  • Post Coverage Comment (ubuntu-latest, 22.x):失败(job 99713080944),是前者的衍生失败

本 PR 所有可在本地验证的面均为绿色(证据见下),并且不存在任何"范围内且有证据支撑"的改动能把这两个检查变绿:失败的 job 运行在共享自托管 runner 池上,失败特征与本 PR 要解决的共享主机压力问题属于同一类,而该 job 的日志在本环境中无法获取(没有 GitHub 凭据;gh 未登录,且 job 日志接口在没有凭据时返回 403)。本轮未提交任何 commit。

为什么第二个检查是衍生失败

Post Coverage Comment 声明了 needs: [classify_pr, test],它的第一个实质步骤是下载 coverage-reports-22.x-ubuntu-latest 产物,而该产物只有 Test job 会上传;该检查在下载这一步 13 秒内即失败。修好 Test job 即修好它。它本身还带有 job 级 continue-on-error: true,因此本 PR 的范围内无需为它做任何改动。

证据:PR 自身的面全部为绿色

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-shard-retry.test.js scripts/tests/e2e-workflow.test.js —— 25/25 通过
  • npm run build —— 退出码 0
  • npm run typecheck —— 退出码 0
  • npm run lint —— 退出码 0
  • npx eslint scripts/tests/e2e-shard-retry.test.js scripts/tests/e2e-workflow.test.js --max-warnings 0 —— 无告警
  • 对 PR 改动的全部四个文件执行 npx prettier --check —— 全部符合格式
  • 工作流体积棘轮:.size-baseline 中的 21437 e2e.yml 与文件实际字节数一致;合并时对该文件的冲突解决已与双方父提交核对(main 侧 16534,分支侧 21437)
  • 合并审计:合并提交中唯一带冲突解决块的文件就是 .size-baseline,因此 e2e.yml 与测试文件中不可能隐藏错误的冲突合并结果

证据:Test 失败无法归因于本 PR

  1. 本 PR 的全部改动为 e2e.yml(重试 + epoch 记录步骤)、.size-baseline 以及 scripts/tests 下的三个文件。它没有触碰任何 packages/ 源码、任何 ci.yml,也没有触碰本地失败的任何一个测试文件(已用 git diff 核对)。
  2. Test job 运行了 106.6 分钟(00:26:47Z–02:13:24Z)。ci.yml 将 GitHub 托管通道上限设为 60 分钟,只有 ecs-qwen 池通道是 120 分钟——因此该检查实际运行在 issue Main CI failed: E2E Tests on 3aa1b1462478 #10566 所描述的同一个共享自托管 runner 池上。
  3. 在同一套池基础设施上,本地连续两次完整运行 npm run test:scripts 分别失败 7 个和 5 个测试,全部位于本 PR 未触碰的文件中,且两次失败的集合并不相同——属于负载/环境抖动,而非确定性缺陷:
    • 三个 CPU

Run log: https://github.com/QwenLM/qwen-code/actions/runs/33471581722


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@qqqys qqqys 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.

Verification: no Critical found; approving per the CI-green + bot-approved posture.

Reviewed the full diff at head 14099ccc60 (one bounded retry for the sandbox:none E2E shard, budget-gated on job-elapsed time).

What I checked (correctness of the retry semantics, not style):

  • Exit-code contract: the retried run_shard is the last command of the || { ... } group, which is the script's last statement, under GitHub's default bash -e {0} step shell. The step (and job) conclusion still equals the second attempt's exit code — a deterministic failure fails both attempts and keeps the shard red; there is no || true / continue-on-error anywhere on the path.
  • Budget gate: elapsed > 2100 refuses the retry with ::error:: + exit 1, so a retry can only start when a full shard-time fits inside the 60-minute timeout-minutes. The ${E2E_JOB_START_EPOCH:-0} fallback errs closed (refuses the retry), and the un-skipped, if:-free epoch step runs before the expensive setup so setup spend counts toward the budget (the motivating runs died with setup eating ~29 of 60 minutes).
  • Scope: the docker leg keeps no retry (two ~30min attempts would outrun the job timeout); matrix substitutions (sandbox, shard) are single-expansion into the function body; excludes are carried verbatim into both attempts.
  • Test evidence is not copy-pasted shape: e2e-shard-retry.test.js parses e2e.yml at run time and executes the extracted script under real bash -e with stubbed npm/date — green-path quietness, single retry, red-both-attempts, exact 2100/2101 boundary, and fail-fast at 3000s are all witnessed by bash. The new workflow test pins the contract this harness assumes (no shell: override, no defaults: block, no continue-on-error, epoch step placement and lack of if:).

Local run at head: extracted pull/10572/head (14099ccc60) via codeload tarball and executed scripts/tests/e2e-workflow.test.js + scripts/tests/e2e-shard-retry.test.js against that tree with an isolated vitest config → 25/25 green (19 workflow witnesses incl. the 11 new retry-shape pins, 6 bash-execution cases), exit 0.

CI at head: all completed lanes success (Test ubuntu, Integration no-AK, Desktop Shell ×2, Typecheck, Secret scan, CVE audit), remainder skipped. qwen-code-ci-bot's round-5 review is an APPROVE with an empty findings ledger ("No blocking issues. LGTM"), and its round-6 re-check of the following merge state recorded 0 findings too (downgraded to COMMENTED only because CI was still running then); its standing note — actionlint embedded-shell source mapping — is self-declared as a tool limitation, not a blocker.

tmux e2e: not applicable — the change only affects CI workflow execution and is covered above by the bash-execution harness.

中文说明

验证结论:未发现 Critical;按 CI 全绿 + bot 已在同一 head 批准的状态,予以 Approve。

已在 head 14099ccc60 审阅全量 diff(sandbox:none E2E 分片的一次有界重试,按作业已用时长做预算门控)。重点核对:重试后退出码契约保持(第二次尝试的退出码即步骤结论,两次皆红则保持失败,无 || true/continue-on-error);预算门 elapsed > 2100 拒绝重试并 exit 1(宁保守拒重试,不中途被 timeout 取消),缺 epoch 时的 :-0 回退同样 fail-closed;计时步骤无 if: 且置于昂贵的 setup 之前,使 setup 耗时计入预算(正是三起失败案例中占用 ~29/60 分钟的来源);docker 分支明确不重试。新增测试直接从 e2e.yml 解析出脚本并用真实 bash -e 执行(npm/date 打桩),绿路径安静、单次重试、双败保持红、2100/2101 边界、3000s 快速失败均由 bash 实证。本地验证(head):通过 codeload tarball 展开 pull/10572/head14099ccc60),以隔离的 vitest 配置在该树上执行 e2e-workflow.test.js + e2e-shard-retry.test.js25/25 全绿(含新增 11 个形状钉住用例与 6 个 bash 实际执行用例),exit 0。head 上所有已完成的 CI 车道均 success;ci-bot 第 5 轮为 APPROVE(findings 为空),第 6 轮复核其后合并态也是 0 findings(仅因当时 CI 未跑完而降级为 COMMENTED);其保留说明(actionlint 无法映射嵌入式 shell)为工具限制、非阻断项。tmux e2e 不适用——仅 CI workflow 变更。

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🕐 Review received — an automatic review of the current head is still running, so this round is held until it lands (a push now would cancel it and discard its work, #8888). Your feedback stays queued for the next eligible round.

中文说明

🕐 已收到评审 —— 当前 head 上仍有一轮自动 review 在运行,本轮暂缓(现在推送会取消该 review 并丢弃其工作,#8888)。反馈保持排队,等待下一次可运行的轮次处理。

@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.

1 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:

  • D7-3 unwitnessed fail-closed :-0 fallback (e2e.yml:283) — already recorded in round 5's deferral list (review 5067731765)

Not explored to full depth (tool budget reached): "agent 6c": none — npm ci was not run (no node_modules in the shared worktree), so the vitest suites themselves were not executed; the behavioral probe above replicates….

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

Deferred under the convergence posture (round 7, not a blocker) — recorded, not requested in this round:

  • .github/workflows/e2e.yml:283 — [probe] Budget gate's time source $(date +%s) unpinned — a format mutation ( +%M / +%s%N ) flips the gate with every witness green
  • .github/workflows/e2e.yml:283 — [probe] Arithmetic sink on $GITHUB_ENV-carried epoch — an array-subscript payload executes in the OPENAI-secrets step
中文说明

已审查。

本轮确认的 1 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。

未探索到全部深度(达到工具调用预算):"agent 6c"none — npm ci was not run (no node_modules in the shared worktree), so the vitest suites themselves were not executed; the behavioral probe above replicates…

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

收敛姿态下延后(第 7 轮,非阻断)——已记录,本轮不要求修改:共 2 条(原文未翻译,列表见上方英文部分)。

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 Reviewed the latest feedback — no changes needed. Why, point by point: · 已审阅最新反馈——无需改动。逐点说明原因如下:

Autofix round result: no action taken

No changes were made this round, and nothing was committed.

Why

  • Critical-only mode is active (5 change-producing rounds are complete in this window). The workflow's deterministic brake excluded all non-Critical feedback from this round's actionable sections.
  • All actionable sections were empty: no reviews, no inline comments, no issue-level comments, no failed checks, and no still-red checks newer than the last evaluation (2026-08-31T11:03:24Z).
  • Deferred non-Critical feedback was left untouched, per the brake's rules (no code changes, no thread resolution, no comment replies for it):
  • Budget warning noted: one previous round exhausted its time budget before finishing anything. With zero actionable items this round, the minimal blocking subset was empty, so there was nothing to retry.
  • CI state verified from the supplied check data: no failed or incomplete checks; all check runs are SUCCESS or SKIPPED, including Test (ubuntu-latest, Node 22.x) and Integration Tests (no-AK, No Sandbox). A maintainer approval (no Critical found) was also recorded at head 14099ccc60.

The PR stays at its current head (14099ccc60). The remaining open Suggestion-level item waits for a maintainer, or @qwen-code /retry to start a fresh counting window.

中文说明

Autofix 本轮结果:未采取任何操作

本轮未做任何改动,也未提交任何内容。

原因

  • 当前处于仅处理 Critical 的模式(本窗口已完成 5 个产生改动的轮次)。工作流的确定性刹车已将全部非 Critical 反馈排除在本轮可执行区域之外。
  • 所有可执行区域均为空:自上次评估(2026-08-31T11:03:24Z)之后,没有新的 review、没有行内评论、没有 issue 级评论、没有失败的检查,也没有持续失败的检查。
  • 延后的非 Critical 反馈保持原样未动,遵循刹车规则(不改动代码、不解决讨论串、不回复评论):
  • 已知悉预算警告:此前有一轮在未完成任何工作的情况下耗尽了时间预算。本轮可执行条目为零,最小阻塞子集为空,因此没有需要重试的内容。
  • 已依据提供的检查数据核实 CI 状态:没有失败或未完成的检查;所有 check run 均为 SUCCESSSKIPPED,包括 Test (ubuntu-latest, Node 22.x)Integration Tests (no-AK, No Sandbox)。此外,在 head 14099ccc60 上记录到一条维护者批准("no Critical found")。

PR 保持在当前 head(14099ccc60)。剩余的开放 Suggestion 级条目等待维护者处理,或评论 @qwen-code /retry 开启新的计数窗口。

Deferred non-Critical feedback

Critical-only mode is active: 5 change-producing rounds are complete. The workflow excluded the non-Critical feedback below from this round's actionable sections; the items remain open for human follow-up. Maintainer feedback is deferred only after its author has used 2 regular feedback batches in this window's Critical-only tail; authors at that budget, if any, are named below. (@qwen-code /retry starts a fresh counting window.)

中文说明

已进入仅处理 Critical 的模式:已完成 5 个产生改动的轮次。本轮可执行区域已排除下方非 Critical 反馈;这些条目保持开放,留待人工跟进。维护者反馈仅在其本人于本窗口 Critical-only 阶段已使用 2 批常规反馈预算后才会延后;达到预算的作者(如有)在下方点名。(评论 @qwen-code /retry 可开启新的计数窗口。)

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@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.

⚠️ Downgraded from Approve to Comment: CI still running. Reviewed.

Not explored to full depth (tool budget reached): "agent 6a": none — no check was cut short..

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

中文说明

⚠️ 已从批准降级为评论:CI still running。 已审查。

未探索到全部深度(达到工具调用预算):"agent 6a"none — no check was cut short.

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

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 Reviewed the latest feedback — no changes needed. Why, point by point: · 已审阅最新反馈——无需改动。逐点说明原因如下:

Autofix round result: no action taken

No changes were made this round, and nothing was committed. The PR stays at head b9d043d7a4.

What was actionable

Critical-only mode is active (5 change-producing rounds are complete in this window), so the workflow excluded all non-Critical feedback; deferred items were left untouched per the brake's rules. All actionable sections were empty except one failed check: Test (ubuntu-latest, Node 22.x) — conclusion CANCELLED on run 33538518982.

Why the cancelled check is not attributable to this PR

  1. It is a job timeout on the shared pool, not a test failure and not a run cancellation. The job ran 17:34:20Z–19:35:17Z = 120.95 minutes. ci.yml grants a 120-minute timeout-minutes only to the ecs-qwen lane (the hosted lane is capped at 60), so the job ran on the shared self-hosted pool and was killed exactly at that ceiling — GitHub reports a job timeout as conclusion cancelled. The rest of the run continued afterwards: web-shell E2E Smoke and Post Coverage Comment of the same run both started 4 seconds after the cancellation and succeeded, ruling out a concurrency cancel-in-progress of the whole run.
  2. The suite did not hang mid-flight. Post Coverage Comment (needs: [classify_pr, test]) successfully downloaded coverage-reports-22.x-ubuntu-latest, which only the Test job's FINAL step (Upload coverage reports, gated if: always()) uploads. The job therefore ran through the entire suite — including npm run test:ci, which runs this PR's two new scripts/tests files — and was killed at or near its last artifact step.
  3. The slowness is environmental. The pool's pressure is directly observable on this very checkout host: load average ~110–131 on 64 cores while this round ran. ci.yml documents the same lane ("Shared ECS hosts can stretch the normally 25-minute lane beyond an hour while tests are still making progress"), and main just merged a mitigation for this exact test step (fix(autofix): clamp gate test load explicitly instead of via RUNNER_NAME #10671, clamping Vitest workers to 4 on ecs-qwen-* runners) — now part of this branch via the latest merge.
  4. This PR contributes nothing heavy to that job. The only things in the diff that run inside the Test job are the two new workflow-witness test files; measured locally they are green and fast (25/25, ~0.4s of test time) and passed in every full npm run test:scripts run this round. Those full runs, executed on a pool host under load ~110, did show failures — but only in files this PR never touches, with a different failure set each run (3 files in one run, a different 8 in the next: standalone-packaging ENOENT on a dist directory, terminal-color rendering, timing-sensitive workflow replays). That is load jitter, not a deterministic defect.
  5. This exact check already flapped on this PR. Run 33454756719 failed it at 106.6 minutes on the same pool, and the check went green on the next run (head 14099ccc60) with zero code changes — round 6's analysis reached the same shared-host-pressure classification. Job logs remain unreachable from this environment (gh is unauthenticated here, and the log endpoint answers 403 without credentials), so the classification rests on the check metadata, the workflow definitions, and local reproduction instead.

There is no in-scope code change that turns this check green: the Test job is ci.yml territory this PR does not own, and what it needs is a re-run once pool pressure eases. Re-running checks is a GitHub write this environment cannot perform; the workflow or a maintainer can trigger it.

Verification

Commands actually run this round in the PR checkout at head b9d043d7a4:

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-shard-retry.test.js scripts/tests/e2e-workflow.test.js — 25/25 passed
  • npm run test:scripts (full scripts suite, twice) — both PR files passed in both runs; the varying failures were confined to non-PR files (see point 4 above)
  • npm run build — exit 0
  • npm run typecheck — exit 0
  • npm run lint — exit 0
  • npx prettier --check on all five PR-touched files — clean
  • Workflow-size ratchet: .size-baseline entry 21437 e2e.yml matches the file's actual byte count
  • Merge audit: git show --cc b9d043d7a4 — no conflict-resolution hunks in the latest merge from main; git status --short is clean
中文说明

Autofix 本轮结果:未采取任何操作

本轮未做任何改动,也未提交任何内容。PR 保持在 head b9d043d7a4

本轮可执行内容

当前处于仅处理 Critical 的模式(本窗口已完成 5 个产生改动的轮次),因此工作流已将全部非 Critical 反馈排除;延后条目遵循刹车规则保持原样未动。除一个失败检查外,所有可执行区域均为空:Test (ubuntu-latest, Node 22.x) —— 在运行 33538518982 中结论为 CANCELLED(已取消)。

为什么该被取消的检查无法归因于本 PR

  1. 这是共享 runner 池上的 job 超时,不是测试失败,也不是整个运行被取消。该 job 运行于 17:34:20Z–19:35:17Z,共 120.95 分钟。ci.yml 仅对 ecs-qwen 通道授予 120 分钟的 timeout-minutes(托管通道上限为 60 分钟),因此该 job 运行在共享自托管池上,并恰好在该上限处被终止——GitHub 将 job 超时报告为结论 cancelled。运行的其余部分在其后继续:同一运行中的 web-shell E2E SmokePost Coverage Comment 在取消后 4 秒启动并双双成功,排除了并发组对整个运行执行 cancel-in-progress 的可能。
  2. 测试套件没有在运行中途挂起。Post Coverage Commentneeds: [classify_pr, test])成功下载了 coverage-reports-22.x-ubuntu-latest,而该产物只由 Test job 的最后一步(Upload coverage reports,以 if: always() 门控)上传。因此该 job 跑完了整个套件——包括执行本 PR 两个新增 scripts/tests 文件的 npm run test:ci——并在其最后一个产物步骤处或附近被终止。
  3. 变慢是环境因素。池的压力在本检出所在的这台主机上即可直接观测:本轮运行期间,64 核机器上负载均值约 110–131。ci.yml 本身也记录了同一通道的这一现象("共享 ECS 主机能在测试仍在推进时把通常 25 分钟的通道拉长到 1 小时以上"),且 main 刚刚为这同一个测试步骤合并了一项缓解措施(fix(autofix): clamp gate test load explicitly instead of via RUNNER_NAME #10671,在 ecs-qwen-* runner 上将 Vitest worker 数钳制为 4)——现已通过最新合并进入本分支。
  4. 本 PR 没有给该 job 增加任何重负载。diff 中唯一会在 Test job 里运行的内容是两个新的工作流见证测试文件;本地实测它们既绿又快(25/25,测试耗时约 0.4 秒),并且在本轮每一次完整的 npm run test:scripts 运行中都通过。这些完整运行在负载约 110 的池主机上执行时确实出现了失败——但全部位于本 PR 从未触碰的文件中,且每次运行的失败集合都不同(一次 3 个文件,下一次是另外 8 个:独立打包时某 dist 目录 ENOENT、终端颜色渲染、对时序敏感的工作流重放套件)。这是负载抖动,不是确定性缺陷。
  5. 这同一个检查此前已在本 PR 上抖动过一次。运行 33454756719 中它在同一池上以 106.6 分钟失败,随后在零代码改动的情况下于下一次运行(head 14099ccc60)变绿——第 6 轮分析得出了同样的"共享主机压力"分类。本环境仍无法获取 job 日志(此处 gh 未登录,日志接口在无凭据时返回 403),因此该分类依据的是检查元数据、工作流定义与本地复现。

不存在任何"范围内"的代码改动能让这个检查变绿:Test job 属于本 PR 并不拥有的 ci.yml 领域,它需要的是在池压力缓解后重跑一次。重跑检查属于 GitHub 写操作,本环境无权执行;需由工作流或维护者触发。

验证

本轮在 head b9d043d7a4 的 PR 检出中实际运行的命令:

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/e2e-shard-retry.test.js scripts/tests/e2e-workflow.test.js —— 25/25 通过
  • npm run test:scripts(完整 scripts 套件,运行两次)—— 两个 PR 文件在两次运行中均通过;变化的失败全部局限于非 PR 文件(见上文第 4 点)
  • npm run build —— 退出码 0
  • npm run typecheck —— 退出码 0
  • npm run lint —— 退出码 0
  • 对全部 5 个 PR 触碰文件执行 npx prettier --check —— 全部符合格式
  • 工作流体积棘轮:.size-baseline 中的 21437 e2e.yml 与文件实际字节数一致
  • 合并审计:git show --cc b9d043d7a4 —— 最近一次从 main 的合并不含任何冲突解决块;git status --short 干净

Deferred non-Critical feedback

Critical-only mode is active: 5 change-producing rounds are complete. The workflow excluded the non-Critical feedback below from this round's actionable sections; the items remain open for human follow-up. Maintainer feedback is deferred only after its author has used 2 regular feedback batches in this window's Critical-only tail; authors at that budget, if any, are named below. (@qwen-code /retry starts a fresh counting window.)

中文说明

已进入仅处理 Critical 的模式:已完成 5 个产生改动的轮次。本轮可执行区域已排除下方非 Critical 反馈;这些条目保持开放,留待人工跟进。维护者反馈仅在其本人于本窗口 Critical-only 阶段已使用 2 批常规反馈预算后才会延后;达到预算的作者(如有)在下方点名。(评论 @qwen-code /retry 可开启新的计数窗口。)

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@wenshao
wenshao added this pull request to the merge queue Sep 2, 2026
Merged via the queue into main with commit fde6565 Sep 2, 2026
44 of 45 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review/self-reported The linked issue was opened by the PR author (self-reported)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Main CI failed: E2E Tests on 3aa1b1462478

4 participants