Skip to content

perf(dev): add pnpm worktree bootstrap foundation - #10449

Open
yiliang114 wants to merge 28 commits into
mainfrom
codex/pnpm-worktree-bootstrap
Open

perf(dev): add pnpm worktree bootstrap foundation#10449
yiliang114 wants to merge 28 commits into
mainfrom
codex/pnpm-worktree-bootstrap

Conversation

@yiliang114

@yiliang114 yiliang114 commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Adds an opt-in, frozen pnpm dependency bootstrap for additional Git worktrees while preserving every existing npm build, CI, versioning, packaging, and publishing path. Internal workspace dependencies are normalized only in pnpm's in-memory resolution so release version bumps cannot stale the pnpm lock during the dual-lock transition. A three-OS smoke workflow verifies that the bootstrap installs dependencies without changing tracked files.

Why it's needed

Each npm-backed worktree currently materializes roughly 1.44 GiB of dependencies and triggers the repository prepare build unless callers know the skip environment variable. The measured warm-store pnpm path materialized about 99 MiB, a 93.3% reduction, and completed dependency installation in about 22 seconds versus 27 seconds for warm-cache npm. This first stage makes that saving available independently, so later pnpm build/CI and release migrations can be reviewed and landed separately.

Reviewer Test Plan

How to verify

Create a fresh worktree, run the opt-in worktree bootstrap, and confirm that the frozen install succeeds and leaves no tracked changes. Confirm that existing npm build and release commands and the npm lockfile are unchanged. Change an internal channel dependency version locally and verify that pnpm's frozen lock check still passes without regenerating the lockfile.

Evidence (Before & After)

N/A — developer tooling only. A detailed benchmark and test report is posted in the PR conversation.

Tested on

OS Status
🍏 macOS
🪟 Windows
🐧 Linux

Environment (optional)

macOS APFS, Node.js 22, pnpm 11.24.0. Local registry fallback was also observed; the registry subsequently timed out while downloading optional binaries for unrelated platforms, so the committed three-OS workflow is the authoritative clean-install gate.

Risk & Scope

  • Main risk or tradeoff: The repository temporarily carries npm and pnpm lockfiles; path-filtered smoke CI prevents pnpm inputs from drifting.
  • Not validated / out of scope: Building from the pnpm layout, migrating existing CI installation, and changing release packaging or publication. These are explicitly deferred to Stages 2 and 3.
  • Breaking changes / migration notes: None. Existing npm commands remain authoritative and unchanged; the pnpm bootstrap is opt-in.

Linked Issues

Part of #10444

中文说明

本 PR 做了什么

新增一个可选的、冻结锁文件的 pnpm worktree 依赖安装入口,同时保持现有 npm 构建、CI、版本管理、打包和发布链路不变。在双锁文件过渡期,内部 workspace 依赖只在 pnpm 的内存解析阶段被标准化,因此发布版本号变化不会使 pnpm 锁文件过期。新增三操作系统 smoke workflow,验证安装完成后不会改动受跟踪文件。

为什么需要

目前每个 npm worktree 都会额外落盘约 1.44 GiB 依赖,而且如果调用方不知道跳过环境变量,还会触发仓库 prepare 构建。实测 pnpm warm-store 路径约占 99 MiB,空间下降 93.3%,依赖安装约 22 秒,而 npm warm-cache 约 27 秒。第一阶段先独立提供这部分收益,后续 pnpm 构建/CI 和发布迁移可以分别评审、分别合入。

Reviewer Test Plan

如何验证

创建新 worktree,运行可选的 worktree bootstrap,确认冻结安装成功且没有受跟踪文件变化。确认现有 npm 构建、发布命令和 npm 锁文件均未变化。临时修改内部 channel 依赖版本,确认不重新生成锁文件时 pnpm frozen lock 检查仍能通过。

前后证据

N/A——仅开发工具改动。详细 benchmark 与测试报告已发布在 PR 评论区。

测试平台

OS 状态
🍏 macOS
🪟 Windows
🐧 Linux

环境

macOS APFS、Node.js 22、pnpm 11.24.0。本地也验证了 registry fallback 会被触发;随后 registry 在下载其他平台可选二进制包时超时,因此提交中的三系统 workflow 是权威的 clean-install gate。

风险与范围

  • 主要风险或取舍:仓库过渡期同时维护 npm 与 pnpm 锁文件;通过按输入路径触发的 smoke CI 防止 pnpm 配置漂移。
  • 未验证/范围外:从 pnpm 布局执行构建、迁移现有 CI 安装,以及改变发布打包或发布流程;这些明确延后到第二、第三阶段。
  • 破坏性变化/迁移说明:无。现有 npm 命令保持权威且未改变,pnpm bootstrap 为可选入口。

关联 Issue

属于 #10444 的第一阶段。

yiliang114 and others added 4 commits August 29, 2026 08:36
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Validate pnpm lock updates in releases and exercise real installs and builds across supported hosts. Preserve npm release compatibility and keep dependency-only setup from rewriting npm-layout notices.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@yiliang114

yiliang114 commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator Author

Stage 1 test report (updated for a51bcac8)

This report covers the narrowed Stage 1 scope: an opt-in, low-disk dependency bootstrap for additional worktrees. pnpm build/CI migration is Stage 2; release installation, packaging, and publishing are Stage 3.

Measured benefit

Baseline measurements were taken from isolated worktrees on the same commit and APFS volume:

Dependency path Elapsed Additional worktree disk
npm, warm cache 27.13 s 1,472.18 MiB
pnpm, warm shared store 22.31 s 98.69 MiB
  • Additional disk usage: 93.3% lower with pnpm (14.9× smaller).
  • A second warm pnpm bootstrap completed in 3.48 s.
  • A separate eager repository build measured 128.57 s; Stage 1 intentionally skips that work and does not claim pnpm build support.

Scope and compatibility checks

  • Existing npm build, release workflow, versioning script, npm lockfile, and VS Code package manifest have zero diff from current main.
  • Internal workspace versions are normalized only for pnpm resolution. As a release-version simulation, changing the channel-base manifest version from 0.22.3 to 9.99.9 still passed pnpm install --lockfile-only --frozen-lockfile --ignore-scripts in 362 ms, without regenerating the pnpm lockfile.
  • The real bootstrap was observed taking the offline path first and correctly falling back to the registry when the shared store lacked a newly added dependency. The local registry then repeatedly timed out on unrelated cross-platform optional binaries; the run was stopped after 195.83 s. The three-OS clean-install workflow below is the authoritative networked gate.

Local verification

Check Result
Worktree/bootstrap and workflow tests 27/27 passed
VS Code notice-generation tests 24/24 passed
Workflow size tests 175 passed, 23 skipped
Frozen offline lockfile validation passed, 413 ms
Prettier passed
yamllint passed
actionlint passed
Final diff whitespace check passed

CI gate

The real frozen bootstrap and clean-worktree check passed on all three hosts at the current head in run 33256922709:

Host Result Duration
Linux passed 59 s
macOS passed 1 m 35 s
Windows passed 2 m 5 s

The unchanged npm path also passed dependency installation, the critical runtime dependency audit, lockfile validation, lint/format/schema checks, and the 152-test no-AK integration gate in Qwen Code CI. The Java daemon E2E independently completed npm installation, a full Qwen Code build, bundling, and daemon E2E in SDK Java. Two initial Ubuntu Java timing-test failures passed on the targeted rerun, leaving the SDK Java workflow green. These are direct checks that Stage 1 leaves the existing npm build path operational.

The preceding run exposed a real nested-lifecycle issue: npm run replaced npm_lifecycle_event, causing notice generation to rewrite a tracked file. The fix uses a bootstrap-scoped guard instead; the explicit notice-generation path remains unchanged. The corrected behavior passed locally through the real nested npm command and in all three clean-worktree CI jobs. Build and release jobs remain the repository's existing npm-based gates.


第一阶段测试报告

本报告只覆盖收窄后的第一阶段:为额外 worktree 提供可选的低磁盘依赖安装。pnpm 构建/CI 迁移属于第二阶段;发布安装、打包和 publishing 属于第三阶段。

  • 同提交、同 APFS 卷基准:npm warm-cache 为 27.13 秒 / 1,472.18 MiB,pnpm warm-store 为 22.31 秒 / 98.69 MiB
  • pnpm 的额外磁盘占用降低 93.3%,约小 14.9 倍;第二次 warm bootstrap 为 3.48 秒
  • 当前 npm 构建、release workflow、版本脚本、npm 锁文件及 VS Code package manifest 相对最新 main 零差异
  • 将内部 channel-base 版本从 0.22.3 模拟改为 9.99.9 后,pnpm frozen lock 检查仍在 362 ms 内通过,不需要发布脚本刷新 pnpm lock。
  • 本地定向测试 51/51 通过,workflow size 测试 175 通过 / 23 跳过,冻结锁、格式、YAML 与 workflow 静态检查全部通过。
  • 真实安装已验证离线优先与缺包时 registry fallback;本地 registry 在下载其他平台可选二进制时持续超时,运行于 195.83 秒停止,因此最终 clean install 以 PR 的 Linux/macOS/Windows 三系统 CI 为准。
  • 当前 head 的最终三系统 CI 已全部通过:Linux 59 秒、macOS 1 分 35 秒、Windows 2 分 5 秒,且安装后 worktree 均保持干净。
  • 未改动的 npm 路径已在 CI 中通过依赖安装、关键运行时依赖审计、lockfile、lint/format/schema 检查和 152 项 no-AK 集成测试;Java daemon E2E 也通过了 npm 安装、完整构建、bundle 和 daemon E2E。两个 Ubuntu Java 时序测试的首次失败在定向重跑后均通过,SDK Java 工作流最终全绿。这些结果直接证明阶段 1 没有破坏现有 npm 构建链路。

yiliang114 and others added 3 commits August 29, 2026 21:55
Keep Stage 1 limited to low-disk worktree dependency installation while leaving npm build and release paths unchanged. Normalize internal pnpm workspace dependencies so release version bumps do not stale the pnpm lockfile.\n\nCo-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Record the required attribution for the Stage 1 merge without rewriting published history.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Use a bootstrap-scoped notice guard because nested npm lifecycle commands replace npm_lifecycle_event. This preserves explicit notice generation while preventing dependency setup from rewriting tracked output.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@yiliang114
yiliang114 marked this pull request as ready for review August 29, 2026 14:04
Register the new workflow in the repository size ratchet as required by the main CI gate.

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

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

qwen-code-ci-bot commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

Re-run at a new head — the branch moved from fd43387 to def9ec3 (two commits) since the last pass. The gate inputs still pass, but a review round landed a blocking Critical on this head in the meantime, so the outcome changes from the earlier approval.

Template: Complete ✓

Problem: Real and measured, not a hypothesis. Every npm-backed worktree materializes ~1.44 GiB of dependencies and pays the prepare build; the pnpm-store path measured in the design doc lands at ~99 MiB and ~22 s vs ~27 s for warm-cache npm. Tracked in planning issue #10444 (open).

Direction: Dev-tooling only, strictly opt-in, Stage 1 of a staged plan with npm left authoritative everywhere. No auth/sandbox/model/telemetry/release or public-contract surface touched.

Size: The +22,653 headline is ~96% generated pnpm-lock.yaml (21,909 lines). Hand-written change: ~177 production lines (bootstrap script, packageManager pin, workspace hook, notice-generation guard), ~368 test lines, 74 lines of design doc, ~125 lines of CI workflow/config. No core-module paths touched; below every escalation threshold.

Approach: Scope still feels right for a foundation stage — but the round-5 review on this head found a Critical (R5-1): the committed pnpm resolution leaves packages/vscode-ide-companion unable to resolve @qwen-code/qwen-code-core, because the companion's manifest never declares it. npm hides the undeclared dependency by symlinking every workspace project into the root node_modules; pnpm's hoisted linker does not. I verified the load-bearing facts independently — see Stage 2.

Risk: No elevated risk signals — none of the revert-correlated high-risk paths are touched.

The gate passes, but this head is blocked on the review-round Critical — it should not merge until R5-1 is resolved. ⛔

中文说明

在新提交上重新运行——自上次审查以来分支已从 fd43387 推进到 def9ec3(两个提交)。门禁各项输入依然通过,但期间有一轮代码审查在该提交上给出了阻断级 Critical,因此结论由先前的批准改为阻断。

模板:完整 ✓

问题:真实且有测量数据,不是假设。每个 npm worktree 都会额外落盘约 1.44 GiB 依赖并触发 prepare 构建;设计文档中 pnpm 存储路径实测约 99 MiB、约 22 秒(对比 npm warm-cache 约 27 秒)。由规划 issue #10444(开放中)跟踪。

方向:纯开发工具改动,完全可选启用,属于分阶段计划的第一阶段,npm 链路全程保持权威。不涉及 auth/沙箱/模型/遥测/发布或公共契约面。

规模:+22,653 的标题数字约 96% 是生成的 pnpm-lock.yaml(21,909 行)。手写改动约 177 行生产代码、约 368 行测试、74 行设计文档、约 125 行 CI workflow/配置。未触及核心模块路径,低于所有升级阈值。

方案:作为基础阶段范围合理——但第 5 轮审查在该提交上发现一个 Critical(R5-1):已提交的 pnpm 解析使 packages/vscode-ide-companion 无法解析 @qwen-code/qwen-code-core,因为 companion 的 manifest 从未声明它。npm 通过把每个 workspace 项目软链进根 node_modules 掩盖了这个未声明依赖;pnpm 的 hoisted linker 不会。我已独立核实其关键事实——见 Stage 2。

风险:无升级风险信号——未触及任何与 revert 相关的高风险路径。

门禁通过,但该提交被审查轮 Critical 阻断——在 R5-1 解决前不应合并。⛔

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

Code review (re-read at def9ec3)

The head moved two commits since the last pass, and the round-5 /review (v0.22.3) landed a Critical (R5-1) on this exact head and submitted CHANGES_REQUESTED. I did not take that on faith — I re-derived the load-bearing facts from the tree myself:

  • R5-1 is real and I corroborated it. packages/vscode-ide-companion/package.json declares @qwen-code/acp-bridge, @qwen-code/sdk and @qwen-code/web-shell — but not @qwen-code/qwen-code-core, while 36 files under its src/ import core. npm ci hides that undeclared dependency by symlinking every workspace project into the root node_modules. This PR's pnpm layout uses a hoisted linker that does not, and its .pnpmfile.mjs hook only rewrites dependencies that are already declared (core is listed in its workspacePackages set, but there is no edge to rewrite). So the moment a worktree is bootstrapped through this PR's path, @qwen-code/qwen-code-core becomes unresolvable from the companion — its tsc --noEmit and its unit tests fail with MODULE_NOT_FOUND. The round-5 review carries first-hand evidence (a real pnpm tree built at this commit, then resolve / tsc / vitest run against the npm-layout arm); my independent read of the manifest and the imports confirms both premises.
  • Why nothing in CI catches it: the three new smoke legs only install frozen and run git diff --exit-code, and no lane builds or tests from the pnpm tree. The main unit suite runs from the npm tree (npm run test:ci), where the symlinked root still masks the missing declaration. So a fully green run would not exonerate R5-1 — this is a defect CI is structurally blind to, which is also why it needs a test witness (below).
  • The rest of the diff stays minimal and correctly scoped. Exact packageManager pin, offline-first frozen install with a registry fallback, in-memory workspace:* normalization that leaves package-lock.json untouched, the notice-generation skip guard with tests, and a path-filtered three-OS install gate. The earlier rounds' two Criticals (R1-1 CRLF log split, R3-1 case-insensitive Path read) remain fixed and pinned.
  • The recorded Suggestion/deferral items — overrides-parity pin, the hand-maintained workspacePackages set, @types/node half of the perf(dev): reduce worktree setup cost with pnpm and a fast bootstrap path #10444 blocker unpinned, the ENOENT-retry witness, lockfile prettierignore — stay in the review threads as the maintainer's Stage 2/3 scope call, not merge blockers.

The fix is named in the round-5 review and it is the right one: declare the dependency the companion already uses — spelled "*" (not workspace:*), so .pnpmfile.mjs can rewrite it for pnpm while npm still accepts it — and regenerate both lockfiles in the same commit. And because no lane observes this class of failure, add a post-install resolution assertion to the smoke workflow (e.g. node -e "require.resolve('@qwen-code/qwen-code-core/package.json', { paths: ['packages/vscode-ide-companion'] })") so removing the edge turns all three OS legs red.

Testing evidence — the PR's own CI, read via the API

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

Check Conclusion
Classify PR ✅ success
Dependency CVE audit ✅ success
Desktop Shell (ubuntu-22.04) ✅ success
Desktop Shell (windows-2022) ✅ success
Install (macos-latest) ✅ success
Install (ubuntu-latest) ✅ success
Install (windows-latest) ✅ success
Integration Tests (no-AK, No Sandbox) ✅ success
macos-latest / Java 21 ✅ success
Post Coverage Comment (ubuntu-latest, 22.x) ✅ success
Real daemon E2E / Java 11 ✅ success
Secret scan (TruffleHog) ✅ success
Test (ubuntu-latest, Node 22.x) ✅ success
ubuntu-latest / Java 11 ✅ success
ubuntu-latest / Java 17 ✅ success
ubuntu-latest / Java 21 ✅ success
web-shell E2E Smoke (ubuntu-latest, Node 22.x) ✅ success
windows-latest / Java 21 ✅ success

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

Reading this honestly: the PR's own three-OS frozen-install gates are all green, and the surrounding suite (CVE audit, secret scan, desktop shell, integration, Java SDK) is green — that proves the npm path is untouched, which is exactly what this PR promises. The main unit suite is still running at this head. But none of these lanes builds or tests from the pnpm tree, so this CI cannot reproduce R5-1 and — just as importantly — cannot clear it. Green here is necessary and not sufficient.

Not verified: real-scenario tmux testing — N/A for dev tooling with no user-visible runtime surface; on this CI path the live signal is the PR's own checks quoted above. The pnpm-tree tsc/vitest failure in R5-1 is the round-5 reviewer's first-hand evidence; I corroborated its two premises from the tree but did not re-run a pnpm install here (this run executes no PR code). Once the fix lands, a sandboxed @qwen-code /verify that builds/tests the companion from the pnpm tree would pin it, since no standing lane does.

中文说明

代码审查(在 def9ec3 上重新通读)

自上次审查以来头部推进了两个提交,第 5 轮 /review(v0.22.3)恰在该提交上给出了一个 Critical(R5-1) 并提交了 CHANGES_REQUESTED。我没有照单全收,而是自己从代码树重新推导了关键事实:

  • R5-1 属实,我已独立印证。 packages/vscode-ide-companion/package.json 声明了 @qwen-code/acp-bridge@qwen-code/sdk@qwen-code/web-shell——但没有 @qwen-code/qwen-code-core,而其 src/ 下有 36 个文件 import core。npm ci 通过把每个 workspace 项目软链进根 node_modules 掩盖了这个未声明依赖;本 PR 的 pnpm 布局使用的 hoisted linker 不会,且其 .pnpmfile.mjs 钩子只改写已声明的依赖(core 虽列在 workspacePackages 集合里,但没有可改写的边)。因此一旦用本 PR 的路径引导 worktree,@qwen-code/qwen-code-core 从 companion 就变得不可解析——其 tsc --noEmit 与单测都会以 MODULE_NOT_FOUND 失败。第 5 轮审查附有第一手证据(在该提交上真实构建 pnpm 树,再与 npm 布局对照运行 resolve / tsc / vitest);我对 manifest 与 import 的独立读取确认了这两个前提。
  • 为什么 CI 看不到它: 三个新 smoke 腿只做冻结安装并跑 git diff --exit-code,没有任何 lane 从 pnpm 树构建或测试。主单测套件从 npm 树运行(npm run test:ci),那里的根软链仍掩盖缺失的声明。所以即便全绿也不能为 R5-1 洗脱——这是 CI 在结构上看不到的缺陷,也因此需要一个测试见证(见下)。
  • diff 的其余部分仍是最小化且范围正确。 精确的 packageManager 固定、离线优先的冻结安装(带回退)、内存期 workspace:* 标准化(package-lock.json 不受影响)、带测试的 notice 生成跳过守卫、按路径过滤的三系统安装门禁。早先两轮的两个 Critical(R1-1 CRLF 日志切分、R3-1 大小写不敏感的 Path 读取)保持已修复并有防变异固定。
  • 已记录的建议级/延后项——overrides 对等固定、手工维护的 workspacePackages 集合、perf(dev): reduce worktree setup cost with pnpm and a fast bootstrap path #10444 阻碍中未固定的 @types/node、ENOENT 重试见证、锁文件 prettierignore——留在审查线程中,属于维护者对第二、第三阶段的范围决策,非合并阻断项。

修复方案已在第 5 轮审查中点名,且是正确的:声明 companion 已在使用的依赖——写作 "*"(而非 workspace:*),使 .pnpmfile.mjs 可为 pnpm 改写、同时 npm 仍接受——并在同一提交中重新生成两个锁文件。又因为没有任何 lane 观察这类失败,应在 smoke workflow 中加一条安装后解析断言(如 node -e "require.resolve('@qwen-code/qwen-code-core/package.json', { paths: ['packages/vscode-ide-companion'] })"),使删除该依赖边时三个系统腿都变红。

测试证据——通过 API 读取的 PR 自身 CI

如实解读:本 PR 自身的三系统冻结安装门禁全绿,周边套件(CVE 审计、密钥扫描、桌面壳、集成、Java SDK)也全绿——这证明了 npm 链路未受影响,正是本 PR 的承诺。主单测套件在该提交上仍在运行。但这些 lane 没有一个从 pnpm 树构建或测试,所以这份 CI 既无法复现 R5-1,同样也无法为它洗脱。这里的绿是必要条件,不是充分条件。

未验证:真实场景 tmux 测试——对无用户可见运行时面的开发工具为 N/A;本 CI 路径下的实时信号即上方引用的 PR 自身检查。R5-1 中的 pnpm 树 tsc/vitest 失败是第 5 轮审查者的第一手证据;我从代码树印证了其两个前提,但此处未重新运行 pnpm 安装(本次运行不执行任何 PR 代码)。修复落地后,一个从 pnpm 树构建/测试 companion 的沙箱 @qwen-code /verify 可以将其固定,因为现有 lane 都不做这件事。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

Confidence: 2/5 — the design and shape are right (this was a clean 4/5 at the previous head), but this head ships a verified Critical: a pnpm-bootstrapped worktree cannot resolve @qwen-code/qwen-code-core from packages/vscode-ide-companion, which breaks the documented test command for that package.

Stepping back: my independent proposal for this problem is exactly the shape this PR has — opt-in pnpm bootstrap, content-addressed store, in-memory workspace normalization, frozen lockfile, npm left authoritative, three-OS install gate — and I still haven't found a simpler path it missed. But the one thing a package-manager migration must not do is silently drop a dependency edge the old layout was masking, and that is precisely R5-1. npm symlinks every workspace project into the root and hides that the companion never declared core; pnpm's hoisted linker does not, so the omission becomes a hard MODULE_NOT_FOUND the moment you bootstrap. What makes it a Stage-1 blocker rather than a Stage-2 deferral: running a package's unit tests is the documented everyday workflow (cd packages/<pkg> && npx vitest run …), and the round-5 review showed the companion's tests fail under the pnpm tree even with core's dist/ present — nothing about the build stage is needed to hit it. I re-derived the premises from the tree myself rather than trusting the review's word.

Verdict: blocked — request changes, not approved. Two procedural notes so the state is legible:

  • I am not stacking a duplicate CHANGES_REQUESTED review — the round-5 review already gates this exact commit, and its findings stand.
  • I am not emitting an approve-on-green marker either: the only in-flight check is the main unit suite, which runs on the npm tree and cannot observe this defect. A fully green board at this head would still be broken, so deferred approval would be wrong.

This is not a maintainer-adjudication case — the fix is concrete and spelled out in the round-5 review: declare "@qwen-code/qwen-code-core": "*" in the companion's manifest, regenerate both lockfiles, and add a post-install resolution assertion to the smoke workflow so the regression becomes observable on all three OS legs. Once that lands and CI is green, re-run triage; everything else here is solid and it should be straight back into approve territory.

@yiliang114 — the ball is in your court on R5-1; the rest of the foundation is in good shape. 🙏

中文说明

置信度:2/5 —— 设计与形态是对的(在上一个提交上是干净的 4/5),但该提交带有一个已核实的 Critical:经 pnpm 引导的 worktree 无法从 packages/vscode-ide-companion 解析 @qwen-code/qwen-code-core,导致该包的文档化测试命令失败。

整体回顾:我对这个问题的独立方案就是这个 PR 的形态——可选启用的 pnpm 引导、内容寻址存储、内存期 workspace 标准化、冻结锁文件、npm 保持权威、三系统安装门禁——我依然没有找到它遗漏的更简路径。但包管理器迁移最不该做的事,就是悄悄丢掉一条旧布局一直在掩盖的依赖边——这正是 R5-1。npm 把每个 workspace 项目软链进根目录,从而掩盖了 companion 从未声明 core 这一事实;pnpm 的 hoisted linker 不会,于是这个缺失在你引导的瞬间变成硬性的 MODULE_NOT_FOUND。它之所以是第一阶段阻断项而非第二阶段延后项:运行某个包的单测是文档化的日常流程(cd packages/<pkg> && npx vitest run …),而第 5 轮审查表明即便 core 的 dist/ 在场,companion 的测试在 pnpm 树下依然失败——根本不需要到构建阶段就会踩中。这些前提是我自己从代码树重新推导的,而非照信审查的结论。

结论:阻断——请求修改,不予批准。 两点程序性说明以便读懂当前状态:

  • 我不会叠加一个重复的 CHANGES_REQUESTED 审查——第 5 轮审查已经作用于这一提交,其结论依然有效。
  • 我也不会发出 approve-on-green 标记:唯一在跑的检查是主单测套件,它运行在 npm 树上,看不到这个缺陷。该提交即便全绿也仍然是坏的,因此延迟批准是错误的。

这不是需要维护者裁决的情形——修复方案具体且已在第 5 轮审查中写明:在 companion 的 manifest 中声明 "@qwen-code/qwen-code-core": "*",重新生成两个锁文件,并在 smoke workflow 中加入安装后解析断言,使该回归在三个系统腿上可被观测。待其落地且 CI 转绿后重新运行 triage;其余部分都很扎实,应能直接回到可批准状态。

@yiliang114 —— R5-1 在你这边;其余基础部分状态良好。🙏

Qwen Code · qwen3.8-max

Reviewed at def9ec39558d280a9bff93f13524ada93b15a3f7 · 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.

Partially reviewed — gaps disclosed.

Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the macOS lane of the scripts suite did not run locally.

Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the Windows lane of the scripts suite did not run locally (the lane where R1-1 fires).

Not explored to full depth (tool budget reached): chunk 6: could not execute the two new tests via vitest (no node_modules installed in the review worktree); equivalence verified mechanically instead..

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

中文说明

仅完成部分审查,审查缺口已披露。

未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the macOS lane of the scripts suite did not run locally。

未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the Windows lane of the scripts suite did not run locally (the lane where R1-1 fires)。

未探索到全部深度(达到工具调用预算):chunk 6:could not execute the two new tests via vitest (no node_modules installed in the review worktree); equivalence verified mechanically instead.

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

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

Comment thread scripts/tests/package-scripts.test.js Outdated
Comment thread packages/vscode-ide-companion/scripts/generate-notices.test.js
Comment thread scripts/tests/package-scripts.test.js
Comment thread scripts/setup-worktree.js
Comment thread scripts/tests/package-scripts.test.js
Comment thread scripts/tests/package-scripts.test.js Outdated
Comment thread scripts/setup-worktree.js
Comment thread scripts/tests/package-scripts.test.js
@yiliang114

Copy link
Copy Markdown
Collaborator Author

CI attribution for run 33256922668: the Test (ubuntu-latest, Node 22.x) job failed on the 1h job timeout ("The job has exceeded the maximum execution time of 1h0m0s", job 99134467834, 1h0m26s) — not on a test assertion. The downstream failures (coverage upload "No files were found", junit parse "Cannot read properties of null", Post Coverage Comment artifact-not-found) all stem from the job being killed mid-run. web-shell E2E Smoke hit the same 20m timeout.

This is the same infra/baseline job-timeout signature seen across this window (#9531, #10394, #9260) and is unrelated to the PR diff. Rerunning the failed jobs.

yiliang114 and others added 2 commits August 30, 2026 22:54
The lockfile was generated before the WebShell cutover (#9811) removed
@qwen-code/webui from web-shell and the tailwind tooling plus
@qwen-code/webui from vscode-ide-companion, so frozen-lockfile
installs fail on all three smoke platforms with
ERR_PNPM_OUTDATED_LOCKFILE. Drop the five stale importer entries so
the lockfile matches the current package.json manifests; verified with
pnpm 11.24.0 install --frozen-lockfile --lockfile-only.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@github-actions

github-actions Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

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

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

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

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

  • R1-2 QWEN_SKIP_NOTICE_GENERATION guard's non-skip path untested — already reported (comment 3887326314)
  • R1-3 .pnpmfile.mjs rewrite test exercises only the dependencies field — already reported (comment 3887326317)
  • R1-4 exit-code fallback ?? 1 in exitWithResult untested (mutant survives) — already reported (comment 3887326319)
  • R1-5 smoke-workflow step pin is order-insensitive — already reported (comment 3887326321)
  • R1-6 no-build guard pinned by exact-string equality — already reported (comment 3887326324)
  • R1-7 corepack→npx fallback only on ENOENT; EACCES aborts — already reported (comment 3887326325)
  • R1-8 fail-fast: false not pinned alongside the matrix OS list — already reported (comment 3887326327)

Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on Windows (the lane where R1-1 fires).

Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on macOS.

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

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

  • pnpm-lock.yaml:1 — [probe] lockfile fails prettier --check and is absent from .prettierignore; format passes rewrite the generated file (+6,306-line churn)
  • pnpm-lock.yaml:5246 — [probe] pins @ungap/structured-clone@1.3.0 with an open CWE-502 registry deprecation; override to >=1.3.1, deciding npm parity deliberately
  • scripts/tests/package-scripts.test.js:253 — [probe] pinned clean-check git diff --exit-code cannot see untracked non-ignored files; use git status --porcelain
  • scripts/tests/package-scripts.test.js:238 — [probe] matrix OS list pinned but runs-on '${{ matrix.os }}' is not; a fixed-label mutation collapses all three legs onto one host
  • pnpm-workspace.yaml:2 — [probe] channels glob packages/channels/* diverges from npm's explicit workspaces list; membership silently splits when a channel is added
  • .pnpmfile.mjs:7 — [probe] hardcoded workspacePackages set has no cross-check against manifests; a missed name reintroduces release-lock staleness
  • scripts/tests/package-scripts.test.js:273 — [probe] pinned lifecycle-script paths list has no completeness guard; a member gaining an install script silently drops out of the smoke trigger
中文说明

仅完成部分审查,审查缺口已披露。

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

未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on Windows (the lane where R1-1 fires)。

未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on macOS。

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

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

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

Comment thread scripts/tests/package-scripts.test.js Outdated
@yiliang114
yiliang114 enabled auto-merge August 31, 2026 13:08
yiliang114 and others added 4 commits September 1, 2026 15:34
…ootstrap

# Conflicts:
#	scripts/tests/package-scripts.test.js
The merge of origin/main added remend@^1.3.1 to packages/cli/package.json
without updating pnpm-lock.yaml, breaking the pnpm Worktree Smoke workflow
frozen-lockfile install. Regenerated with pnpm install.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-conflict/jmtid3rse9h

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

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

  • R1-2 runNoticeGeneration non-skip path untested — already reported (comment 3887326314)
  • R1-3 .pnpmfile.mjs hook fixture exercises only the dependencies field — already reported (comment 3887326317)
  • R1-4 exit-code fallback ?? 1 untested (mutant survives) — already reported (comment 3887326319)
  • pnpm-lock.yaml absent from .prettierignore (format rewrites the generated file) — already disclosed in the round-2 deferral list (review 5061723088)
  • smoke clean-check git diff --exit-code cannot see untracked files — already disclosed in the round-2 deferral list (review 5061723088, anchored at scripts/tests/package-scripts.test.js:253)

Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on Windows (the lane where R1-1 fires).

Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on macOS.

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

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

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

  • pnpm-workspace.yaml:13 — [review] @types/node half of issue #10444's named blocker is unpinned; hoisted root moves 20.19.1 → 22.20.1 vs the design doc's preservation claim
  • scripts/tests/package-scripts.test.js:170 — [review] expected npx invocations hardcode pnpm@11.24.0 instead of deriving from the root packageManager pin
  • pnpm-workspace.yaml:25 — [review] no parity pin between root package.json overrides and pnpm-workspace.yaml overrides; one-sided drift passes every gate
  • .pnpmfile.mjs:23 — [review] workspacePackages omits @qwen-code/web-shell; resolution depends on linkWorkspacePackages (unpublished package, registry 404)
  • pnpm-lock.yaml:3213 — [review] @opentui/react peer react-devtools-core ^7.0.1 unsatisfied (pnpm binds 6.1.5; npm nested 7.0.1); pnpm peers check red
  • pnpm-workspace.yaml:17 — [review] ansi-regex override diverges from npm under packages/sdk-typescript: ESM-only 6.2.2 forced into the CJS eslint chain (TypeError on require)
  • pnpm-workspace.yaml:16 — [review] mobile-mcp typescript override pair yields 12 unmet non-optional peers (pnpm peers check exit 1) on every resolving install
中文说明

仅完成部分审查,审查缺口已披露。

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

未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on Windows (the lane where R1-1 fires)。

未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on macOS。

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

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

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

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

Comment thread scripts/tests/package-scripts.test.js Outdated
Comment thread scripts/setup-worktree.js Outdated
A spread of process.env is an ordinary object, and native Windows shells
expose the path variable as `Path`, so `env.PATH` was undefined there and
findOnPath never located corepack — the offline-first Corepack bootstrap
silently degraded to npx on exactly the hosts it exists for.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Split the fallback log on /\r?\n/ like the sibling cmd.exe mocks, so the
  assertion holds on the Windows lane's CRLF output.
- Add a win32 variant bootstrapping with the native `Path` casing to pin
  the case-insensitive lookup.
- Assert the smoke workflow's fail-fast flag, the install-before-clean
  step order, and the no-build guard via a substring on the raw job text.
- Extend the pnpmfile rewrite fixture to devDependencies and
  optionalDependencies, which the committed lockfile already uses.
- Assert the notice-skip guard by effect (writeFile never called) and add
  the flag-absent companion test with I/O stubbed.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Sandboxed verification: ⚠️ incomplete — results unavailable - workflow run

The verification ran, but its result artifact could not be retrieved for publishing, so there is nothing to report here. The run log still has the agent output; re-run @qwen-code /verify for a fresh report.

中文 — 判定:⚠️ 未完成 · 结果不可用

验证已执行,但结果产物未能取回用于发布,因此此处没有可报告的内容。运行日志中仍有 agent 输出;如需完整报告请重新运行 @qwen-code /verify

Qwen Code · sandboxed verification

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

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

  • exit-code fallback ?? 1 in exitWithResult untested (mutant survives) — already reported (comment 3887326319)
  • findOnPath accepts directories/non-executables; EACCES aborts bootstrap instead of falling back — already reported (comment 3887326325)
  • @ungap/structured-clone@1.3.0 registry CWE-502 deprecation — already disclosed in the round-2 deferral list (review 5061723088)
  • smoke clean-check git diff --exit-code cannot see untracked files — already disclosed in the round-2 deferral list (review 5061723088)

Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on Windows (the lane where the R1-1/R3-1 fixes are pinned by the new win32-only tests).

Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on macOS.

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

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

  • .yamllint.yml:86 — [test] yamllint ignore entry for pnpm-lock.yaml unpinned by any test (measured mutant survival)
  • scripts/tests/package-scripts.test.js:190 — [review] corepack ENOENT fallback retry block has no test witness (probe-verified mutant survival)
中文说明

仅完成部分审查,审查缺口已披露。

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

未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on Windows (the lane where the R1-1/R3-1 fixes are pinned by the new win32-only tests)。

未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the scripts suite did not run locally on macOS。

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

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

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

@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Sandboxed verification: ✅ passed — merge-ready (agent verdict) - workflow run

Ran the PR in an isolated, token-free container: A/B against the base build, mock-free harness assertions, targeted gates. Advisory evidence for human reviewers — not a review, an approval, or a CI check.

Scripted assertions: 322 passed · 0 failed · 322 total

Flakiness gate: ✅ 2 changed test file(s) x 5 identical rounds, no divergence

中文 — 判定:✅ 通过 · 可合入(agent 判定)

沙箱验证在隔离、无凭证的容器中执行了该 PR 的代码(与 base 构建 A/B 对照、无 mock harness 断言、定向门禁)。仅作为评审证据,不构成评审、批准或 CI 检查

脚本断言:322 通过 · 0 失败 · 322 总计

抖动门:✅ 2 changed test file(s) x 5 identical rounds, no divergence

Verification report

PR #10449 deep verification — perf(dev): add pnpm worktree bootstrap foundation

Verdict: merge-ready — 322 / 322 scripted assertions passed, 0 failed.
Verified head: fd43387ab04e622763f2289553b580080b491859 (merge commit 3770aed2, base tip 18046830).

中文摘要
  • 结论merge-ready。中心主张(node scripts/setup-worktree.js 在新 worktree 上以冻结锁文件完成 pnpm 依赖安装、且不改动任何受跟踪文件)经真实 A/B 证明成立:head 侧退出码 0、git diff --exit-code / git diff --staged / git status --porcelain 全部干净;base 侧该脚本不存在(对照组按预期失败)。见 Central claim A/B 表 与图 01-final-ab-head-vs-base.png
  • 机制负载证明.pnpmfile.mjs 钩子是承重件 —— 移走它后冻结安装被 ERR_PNPM_LOCKFILE_CONFIG_MISMATCH 拒绝(Mechanism cells 表,图 02-mechanism-frozen-cells.png)。内部 channel 依赖版本从 0.22.3 改到 9.9.9 后冻结检查仍然通过且锁文件不被重写(双锁过渡主张成立);外部依赖版本改动则被正确拒绝,说明冻结检查不是空转。锁文件与 pnpm 11.24.0 重新生成的输出逐字节一致。
  • 通知文件守卫(组合行):两个守卫(环境变量 + 生成器早退)同时还原后,真实安装会把受跟踪的 NOTICES.txt 重写(该文件 +521/−6728 行),即工作流自己的 git diff --exit-code 关卡会被触发 —— 守卫集合端到端承重。单个守卫分别由变异矩阵 M2/M3 钉住;5 个新守卫的变异全部被对应测试捕获(20/20),图 03-mutation-matrix.png04-combo-guard-set-revert.png
  • findings:无阻断项。1 条建议(工作流的干净树检查 git diff --exit-code 看不见未跟踪文件,建议补 git status --porcelain;本次实测未跟踪集合为空)+ 2 条信息性说明(不带引导环境变量裸跑 pnpm install 会在 Stage-1 边界处高声失败;性能数字在本 Linux 容器与作者 APFS 环境的量级差异)。见 Findings
  • 未覆盖:17 个提交逐一归因(浅克隆不可达,验证的是聚合 diff)、Windows/macOS 冒烟单元(本容器为 Linux;win32 专属测试按设计跳过)、yamllint(容器无 pip)、仓库级全量测试/类型检查(本 PR 未改 TS 生产代码)。见 Not covered

Scope

Central claim: the opt-in bootstrap (node scripts/setup-worktree.js) performs a frozen-lockfile pnpm dependency install in a fresh worktree and leaves the tree clean, while the feature is absent on base.

Secondary claims: (1) the .pnpmfile.mjs hook is what keeps the frozen lockfile check green and makes internal release-version bumps tolerate the dual-lock transition; (2) existing npm paths are unchanged and still work.

Out of scope (listed in Not covered): building from the pnpm layout (Stage 2 by design), release/publish paths, per-commit attribution, non-Linux smoke cells.

Central claim — A/B table

Environment: node:22 container (v22.23.2), corepack 0.34.6 resolving the pinned pnpm@11.24.0 from packageManager, registry.npmjs.org reachable, fresh scratch worktrees at the merge commit and the base tip.

cell tree command oracle result
A cold fresh worktree @​ merge node scripts/setup-worktree.js exit 0; offline attempt → designed fallback; tracked + untracked clean exit 0 in 82.4 s; fallback Done in 1m 20.7s; git diff --exit-code, git diff --staged, git status --porcelain all clean; node_modules 1088 top + 517 scoped pkgs, 1.0 GiB apparent
A warm same worktree, store warm same exit 0; skip-guard log line present; clean exit 0, offline stage Done in 4.4s; Skipping VS Code notice generation during worktree bootstrap. in output; clean
B control fresh worktree @​ base tip same nonzero, ERR_MODULE_NOT_FOUND for setup-worktree.js exit 1, module-not-found — feature absent on base, as expected (control cell passed)
N baseline fresh worktree @​ merge QWEN_SKIP_PREPARE=1 npm ci exit 0; clean exit 0 in 59.6 s, node_modules 0.95 GiB apparent, tree clean — npm path intact at head

Witness: evidence/01-final-ab-head-vs-base.png; raw logs logs/h1.log, logs/h4.log. The corrected census also asserts every @qwen-code/* symlink under an importer (packages/cli/node_modules/...) resolves inside the worktree (no link escapes into the main checkout).

The workflow's two substantive steps (node scripts/setup-worktree.js then git diff --exit-code) are exactly cells A + clean-check, reproduced here on the same ubuntu-latest-class runtime.

Mechanism — .pnpmfile.mjs hook load-bearing (frozen lockfile cells)

All cells: pnpm install --frozen-lockfile --lockfile-only in a scratch worktree @​ merge (~0.8 s each).

cell change expectation result
D as-committed exit 0 exit 0 (Lockfile passes supply-chain policies)
E .pnpmfile.mjs removed frozen install rejected exit 1 — ERR_PNPM_LOCKFILE_CONFIG_MISMATCH (pnpmfileChecksum mismatch)
F dingtalk → @qwen-code/channel-base bumped 0.22.3 → 9.9.9 frozen stays green, lockfile untouched exit 0, git diff pnpm-lock.yaml clean
F2 external dep dingtalk-stream-sdk-nodejs bumped to a nonexistent range frozen rejected (check not vacuous) exit 1 — specifier mismatch (lockfile: ^2.0.4, manifest: ^2.0.4-nonexistent.0)
G non-frozen pnpm install --lockfile-only, unchanged manifests committed lockfile byte-identical to generator output no diff — committed pnpm-lock.yaml is canonical pnpm 11.24.0 output

Cell E is the load-bearing proof: the lockfile was generated with the hook (importer specifiers are workspace:* while manifests carry file:/exact versions), and pnpm's recorded pnpmfileChecksum rejects any attempt to run the frozen install without it. The in-process twin (mutation M6, no-op hook → keeps internal pnpm workspaces independent of manifest versions goes red) matches the end-to-end cell. Witness: evidence/02-mechanism-frozen-cells.png; log logs/h2.log.

Cell F is the PR's dual-lock claim verbatim from its Reviewer Test Plan ("change an internal channel dependency version locally… frozen lock check still passes without regenerating the lockfile") — it holds, for manifests that use exact versions (0.22.3, the shape the release bump writes) and for file: refs alike.

Guard set — combination row (notice rewrite hazard)

The PR defends one hazard from two sides: setup-worktree.js exports QWEN_SKIP_NOTICE_GENERATION=1, and generate-notices.js honors it via the new runNoticeGeneration early return.

row reverted observation
single (M2) env export only unit test bootstraps worktrees… red (log line 1 pnpm … mismatch)
single (M3) guard only unit test skips generation… red (writeFile called)
combination (H5) both, then a real warm bootstrap install exits 0 and rewrites tracked packages/vscode-ide-companion/NOTICES.txt (+521/−6728 lines on that file; aggregate tree diff +521/−6736); git diff --exit-code trips; scratch tree restored after

So the set is load-bearing end-to-end, and the smoke workflow's own git diff --exit-code step would have caught the regression it defends against. The rewrite content also shows why: under the pnpm layout the notice generator's npm-layout assumptions break (Could not find package.json for @shikijs/themes at …/packages/web-shell/node_modules/…; 656 deps enumerated vs the committed file). Witness: evidence/04-combo-guard-set-revert.png; log logs/combo.log.

Mutation matrix — every new guard pinned

Unmutated controls green before and after (gates below). Each mutation was applied to the live tree, the intended suite run, then the file restored (git status clean after every cell). No survivors.

mutation guard suite that catches it result
M2 drop QWEN_SKIP_NOTICE_GENERATION env bootstrap env export bootstraps worktrees with frozen pnpm dependencies and skips prepare 🔴 caught (assertion mismatch named)
M3 remove skip-guard early return runNoticeGeneration skips generation during dependency-only worktree setup 🔴 caught
M4 collapse signal handling to exit(1) interrupt propagation preserves a worktree bootstrap interrupt status (130 ≠ 1) 🔴 caught
M5 retry --offline instead of --prefer-offline registry fallback falls back to registry access when the pnpm store is incomplete 🔴 caught
M6 no-op pnpmfile hook workspace normalization keeps internal pnpm workspaces independent of manifest versions 🔴 caught

Positive control is intrinsic: five independent mutations each turned their intended test red inside the very collection that runs the mutant (a harness that collected nothing would have stayed green). Every red run was verified to fail on the intended assertion text, not on import/setup breakage. Witness: evidence/03-mutation-matrix.png; harness h3-mutations.mjs.

The two Windows-only tests (resolves the path variable under its native Windows casing) are skipIf on non-win32 by design; they pin the Path-casing fix landed in 0cb3aec and run on the windows-latest smoke lane.

Premise measurement (size/time claims)

Measured on this container (shared runner class; npm cache warm from the verify job's own setup, pnpm store warmed by the cold cell):

metric measured here PR/design doc (macOS APFS)
cold bootstrap (empty store) 82.4 s (offline attempt fails fast, fallback Done in 1m 20.7s) n/a (author's warm-store numbers only)
warm bootstrap (partially warm store) 67.9 s (offline probe failed after ~32 s, fallback Done in 35s) 22 s
fully-warm offline bootstrap 4.4 s (--offline stage succeeds) (22 s warm-store)
npm ci warm, QWEN_SKIP_PREPARE=1 59.6 s, node_modules 0.95 GiB apparent 27 s, +1.44 GiB
new blocks allocated by warm pnpm cell (df delta) 373 MiB +99 MiB

Reading: the direction of the claim reproduces (pnpm's warm path allocates a fraction of the npm tree; offline hits at 4.4 s once the store is complete), the magnitudes do not — they depend on platform (no fsevents on Linux), store state, and filesystem. The partially-warm state is a real regime: the --offline probe can spend ~30 s before falling back, which is why the two-stage design matters. Nothing in the PR gates on these numbers, and every measured value is far inside the workflow's 20-minute timeout; the smoke workflow has no store-cache step, so its runs are always the cold column (~82 s install observed).

Two probes worth recording: corepack pnpm --version resolves exactly 11.24.0 from the new packageManager pin, and a bare pnpm install without the bootstrap envs runs the root prepare and fails at npm run build on the pnpm layout — the Stage-1 boundary, loudly (see Findings).

Targeted gates

gate result
scripts/tests/package-scripts.test.js (root vitest) 28 passed, 1 skipped (win32-only by design)
scripts/tests/workflow-size.test.js (same run) 201 passed (combined run: 229 passed | 1 skipped)
packages/vscode-ide-companion generate-notices.test.js 25 passed
actionlint (repo wrapper, all workflows) clean; liveness proven — planted a steps-less job, caught ("steps" section is missing in job "bad"), removed, clean again
ESLint on the 6 new/changed JS/MJS files clean; liveness proven — planted unused var caught (no-unused-vars), restored, clean again
prettier --check on all 9 new/changed files clean
yamllint not runnable in this container (no pip/pip3; wrapper installer failed) — actionlint + prettier cover the new YAML instead
.size-baseline ratchet covered by workflow-size suite (201 tests) after the 2489 pnpm-worktree-smoke.yml line

The npm path at head was additionally proven by the container's own pre-verify npm ci + npm run build (environment contract) and by cell N above. The CLI's runtime packageManager references (installationInfo.ts, handleAutoUpdate.ts, startup-prefetch.ts) are argv/path-based install detection and do not read the new package.json field — the field's only readers are the two new scripts and corepack itself.

Findings

No Critical findings. No blockers.

  1. Suggestion — the clean-tree oracle is weaker than the hazard. The workflow's final step is git diff --exit-code, which cannot see untracked files; a bootstrap that created a new file outside .gitignore would pass it. Measured state at head is clean (git status --porcelain empty, cell A), so there is no leak today — but the oracle should cover the class: add a check that fails when git status --porcelain prints anything (one extra line in the same step, e.g. test -z "$(git status --porcelain)").
  2. Informational — bare pnpm install fails loudly at the Stage-1 boundary (as designed). Running pnpm install in a checkout without QWEN_SKIP_PREPARE/QWEN_SKIP_NOTICE_GENERATION (i.e. not via setup-worktree.js) runs the root preparenpm run build, which fails on the pnpm layout (prepare: npm run build exited with status 1, ELIFECYCLE). This matches the design doc's declared boundary ("Building from this pnpm layout is deferred to Stage 2"), and pre-PR behavior for a curious pnpm install was no better; recorded so the failure mode is documented, not discovered.
  3. Informational — premise magnitudes are environment-dependent. See the premise table: 67.9 s warm / 373 MiB new blocks here vs the doc's 22 s / 99 MiB on APFS with a fully warm store. Direction holds; the doc's numbers are labeled as same-commit APFS measurements, and nothing in the change asserts them in CI.

No injection-style instructions were found in the PR text; the metadata was treated as claims to test throughout.

Not covered

  • Per-commit attribution. The PR has 17 commits (metadata), but the checkout is depth 2 — git rev-list HEAD^1..HEAD^2 returns 1 at the shallow boundary (the known artifact), so intermediate states (5535f7b stale importers, 9300088 regen, …) are unreachable. The aggregate HEAD^1..HEAD diff is what was verified; cell G (byte-identical regeneration) subsumes the lockfile-history concerns.
  • Windows/macOS behavior. The win32-only test (Path casing) and the corepack.cmd/shell: true spawn paths are skipped on Linux by design; the macos/windows smoke cells belong to the PR's own workflow. This verification is the ubuntu-lane equivalent.
  • yamllint gatepip3/pip do not exist in this container (wrapper install failed: pip3: Permission denied, No module named pip); actionlint and prettier covered the YAML instead. Not an A/A-proven environmental failure — the tool simply is not installable here.
  • Repo-wide test suite and typecheck — the PR changes no TypeScript production code (JS scripts, YAML, lockfile, docs); targeted suites per the scoping rule. The container's successful npm ci + npm run build at HEAD covers the compile gate.
  • Full allowBuilds parity enumeration (exactly which npm-run dependency scripts pnpm blocks) — verified by artifact instead: esbuild binary runs (0.25.12), @esbuild/linux-x64 present, keytar/build/Release/keytar.node compiled. No Ignored build scripts summary line surfaced in the captured offline install output.
  • Stage-2 build from the pnpm layout — deferred by design; only its loud failure mode was observed (Finding 2).
  • Day-one trigger-rate cost math. No GitHub API access and no history in the shallow clone; bounded local estimate: the pull_request path filter covers 19 dependency-input patterns, so any PR touching a package.json (including release version bumps, which touch all channel manifests) fires 3 OS cells of ~2–3 min each, cold. Confirm post-merge with gh run list --repo QwenLM/qwen-code --workflow pnpm-worktree-smoke.yml against PR arrival rate.
  • Per the environment contract there was no previous-report.md in the context directory — this is a first round, nothing carried forward.

Methodology

Environment: GitHub-Actions verify container (node:22-bookworm class), node v22.23.2, corepack 0.34.6 (no global pnpm; the pinned pnpm@11.24.0 was fetched from registry.npmjs.org via corepack on first use), HOME=/__w/_temp/verify-agent-home, 246 GB free on /__w, no zstd, no pip. Five scratch worktrees (wt-head/wt-base/wt-mech/wt-warm/wt-npm) were created under the artifact dir, driven by harnesses h1-ab-bootstrap.mjs, h2-mechanism.mjs, h3-mutations.mjs, h4-premise.mjs, h5-combo.mjs, h6-final-cells.mjs (all kept in this directory with raw logs in logs/), and removed with git worktree remove --force after capture. Base side = worktree at HEAD^1: since every production file in this PR is new, the control is feature-absence by construction. Two harness bugs were found and corrected mid-round, both mine: (1) h1's first realpath assertion looked for @qwen-code/* at the hoisted root, but the hoisted linker places those links in importer workspaces — corrected in h6 (all links resolve inside the worktree); (2) h4 expected the offline stage to hit on a partially warm Linux store, but the design's own fallback exists for exactly that regime (other-platform optional binaries absent), and the corrected oracle (h6 cell W2) asserts success via either designed stage. One assertion-expectation fix in h2 accepted pnpm's actual error code (ERR_PNPM_LOCKFILE_CONFIG_MISMATCH) for hook removal. fail in assertions.json counts only unexpected outcomes; both superseded assertions were replaced by corrected, executed, passing ones and are disclosed here. Image evidence was produced with scripts/verify-capture.mjs (four captures, all live runs of the harnesses above).

Flakiness gate log

rounds=5 files=2 skipped=0
file packages/vscode-ide-companion/scripts/generate-notices.test.js: (cd packages/vscode-ide-companion) npx --no-install vitest run ./scripts/generate-notices.test.js
file scripts/tests/package-scripts.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/package-scripts.test.js


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/vscode-ide-companion/scripts/generate-notices.test.js: PPPPP
  scripts/tests/package-scripts.test.js: PPPPP

verdict: pass
summary: 2 changed test file(s) x 5 identical rounds, no divergence

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 1 · scripts/tests/package-scripts.test.js: P (exit 0)
round 2 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 2 · scripts/tests/package-scripts.test.js: P (exit 0)
round 3 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 3 · scripts/tests/package-scripts.test.js: P (exit 0)
round 4 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 4 · scripts/tests/package-scripts.test.js: P (exit 0)
round 5 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 5 · scripts/tests/package-scripts.test.js: P (exit 0)

Evidence images

01-final-ab-head-vs-base

02-mechanism-frozen-cells

03-mutation-matrix

04-combo-guard-set-revert

Harness scripts and raw logs are in the workflow run artifacts (7-day retention).

Qwen Code · sandboxed verification

@yiliang114

Copy link
Copy Markdown
Collaborator Author

CI attribution for head fd43387run 33527752425, Test (ubuntu-latest, Node 22.x):

  • The job was killed at the 2h job wall-clock (annotation: "The job has exceeded the maximum execution time of 2h0m0s"); at the kill point the suite had reached 1 failed | 27493 passed | 90 skipped (27584).
  • The single failing test is SettingsDialog.test.tsx > String Settings Editing > should allow editing and committing a string setting (12164ms). This PR touches 13 files, all dev-tooling (scripts/, pnpm-lock.yaml, .github/workflows, packages/vscode-ide-companion) — nothing near SettingsDialog or its import path. A 12s UI-interaction test on this saturated runner reads as a timing flake, consistent with the same run hitting the wall-clock.
  • Post Coverage Comment (ubuntu-latest, 22.x) failing is a downstream effect: junit.xml was incomplete because the test job was killed mid-run.

Conclusion: infra-caused (runner saturation + wall-clock), not PR-caused — no code change on this PR for it. Leaving the rerun decision to maintainers.

@yiliang114

Copy link
Copy Markdown
Collaborator Author

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

LGTM, looks ready to ship. ✅

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Sandboxed verification: ⚠️ incomplete — infrastructure failure - workflow run

The verification job did not complete (checkout, runner, or setup error) and produced no report. See the workflow run for details.

中文 — 判定:⚠️ 未完成 · 基础设施故障

验证作业未完成(检出、runner 或初始化错误),未生成报告。详见工作流运行日志。

Qwen Code · sandboxed verification

yiliang114 and others added 4 commits September 2, 2026 16:54
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-conflict/jmtjyz3tdco
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-conflict/jmtjyz3tdco
…nto prmerge-10449

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-conflict/jmtjyz3tdco

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

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

  • pnpm-lock.yaml absent from .prettierignore, so format/preflight passes rewrite the generated lockfile — already disclosed in the round-2 deferral list (review 5061723088)
  • pnpm-workspace.yaml:13-25 overrides map has no reconciliation test against package.json's overrides — already disclosed in the round-3 deferral list (review 5077942910)
  • .pnpmfile.mjs:7-24 hand-maintained workspacePackages set (omits @qwen-code/web-shell, lists unreferenced @qwen-code/webui) — already disclosed in the round-2 and round-3 deferral lists (reviews 5061723088, 5077942910)
  • scripts/setup-worktree.js:56-57 corepack fallback fires on ENOENT only and the resolved corepackPath is discarded — already reported (comment 3887326325)
  • scripts/setup-worktree.js:56-62 ENOENT retry block has no test witness — already disclosed in the round-4 deferral list (review 5081625043)
  • scripts/tests/package-scripts.test.js:224-225 expected npx invocations hardcode pnpm@11.24.0 — already disclosed in the round-3 deferral list (review 5077942910)
  • scripts/setup-worktree.js:83-84 exit-status propagation untested (the ?? 1 mutant survives) — already reported (comment 3887326319)
  • pnpm-workspace.yaml:13-14 @types/node half of issue 10444's named blocker is unpinned — already disclosed in the round-3 deferral list (review 5077942910); this round's measurement supplies the concrete build failure it lacked
  • pnpm-lock.yaml peer bindings outside the ranges the same lockfile records — already disclosed in the round-3 deferral list (review 5077942910); re-audited this round over the whole population, and a 14th candidate instance was rejected as t…

Not reviewed: build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the Windows lane of the scripts suite did not run locally (the lane where this diff's win32-only pathValue() test executes); the new smoke workflow's own windows-latest leg did run the bootstrap script and passed.

Not reviewed: build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the macOS lane of the scripts suite did not run locally; the new smoke workflow's own macos-latest leg did run the bootstrap script and passed.

Not reviewed: hoisted-root winner for duplicated package names other than zod (typescript 5.8.2/5.8.3/5.9.3, esbuild 0.21.5/0.25.12/0.28.2, web-tree-sitter 0.24.7/0.25.10) — pnpm decides it at install time and the lockfile's snapshots section does not record it, so no read of the diff can answer it; measured by real install for zod only.

Not explored to full depth (tool budget reached): "agent reverse-audit (round 2)": could not execute scripts/tests/package-scripts.test.js in this worktree to confirm the new tests are green — node_modules here is incomplete ( npx vitest r…; chunk 6: none of my planned checks were cut short, but two things I could not execute here: (1) the suite itself — the worktree has no node_modules , so I reproduced th…; chunk 4: verbatim line-by-line paging of diff lines 13874-22286 (snapshots @radix-ui/react-toast → end of file), covered instead by exhaustive programmatic validation ….

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

Not linted (tool limitation, not a blocker): the executable-script lint — .github/workflows/pnpm-worktree-smoke.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/pnpm-worktree-smoke.yml:55 — [probe] unconditional cancel-in-progress: true on a workflow that also fires on push to main, so consecutive merges cancel each other's post-merge run and nothing escalates a cancelled check
  • .github/workflows/pnpm-worktree-smoke.yml:82 — [probe] no lane audits the new pnpm lockfile: the CVE gate enumerates only npm lockfiles and dependabot has no pnpm ecosystem
  • .github/workflows/pnpm-worktree-smoke.yml:82 — [probe] the lane restores no pnpm store, so the warm-store offline arm the design exists to deliver is exercised on none of the three platforms
  • .github/workflows/pnpm-worktree-smoke.yml:82 — [probe] root postinstall patch-package writes through pnpm hardlinks into the machine-global store, so the offline arm can only succeed on a machine's first bootstrap
  • docs/design/2026-08-29-pnpm-worktree-bootstrap.md:37 — [review] the bootstrap is named in no contributor-facing surface, so the linked issue's knowledge-gap harm replays on every documented worktree path
  • docs/design/2026-08-29-pnpm-worktree-bootstrap.md:55 — [probe] no documented or scripted path to regenerate the pnpm lockfile, and --frozen-lockfile on both attempts makes any dependency change kill the bootstrap
  • packages/vscode-ide-companion/scripts/generate-notices.js:509 — [probe] the notice-skip gate is caller-scoped not layout-scoped: a pnpm install outside the bootstrap rewrites tracked NOTICES.txt with 54 of 656 entries degraded to placeholde…
  • packages/vscode-ide-companion/scripts/generate-notices.test.js:25 — [probe] the comment states the opposite of what the load-bearing fs.writeFile stub does
  • pnpm-workspace.yaml:29 (+2 locations) — [probe] two inert settings in the new pnpm-workspace.yaml (the allowBuilds workspace-project entry and minimumReleaseAgeExclude), the latter pinned by a test so it cannot simply be removed
  • scripts/pnpm-package.js:9 — [probe] the pin regex rejects the digest form corepack itself writes, so corepack use pnpm@X breaks every bootstrap and all three smoke lanes
  • scripts/setup-worktree.js:50 — [probe] both spawnSync calls omit cwd, so the script validates the worktree's pin but installs into the caller's tree and still exits 0
  • scripts/setup-worktree.js:68 — [probe] the new 21,909-line lockfile has no integrity gate while its npm sibling does (check-lockfile.js hardcodes package-lock.json)
  • scripts/setup-worktree.js:99 — [probe] the registry retry fires on any exit status below 128, not only an incomplete offline cache, and its warning blames the store
  • scripts/tests/package-scripts.test.js:148 — [probe] every Windows-specific test this diff adds, including the sole witness for the R3-1 fix, runs on no lane that reports on a pull request
  • scripts/tests/package-scripts.test.js:327 — [probe] the no-build guard's needle npm run build misses the repo's own primary build spelling node scripts/build.js

[Critical] R5-1 [fails-closed] [new-surface] at pnpm-lock.yaml:1155-1157 (the packages/vscode-ide-companion importer): the committed pnpm resolution leaves packages/vscode-ide-companion unable to resolve @qwen-code/qwen-code-core, which 36 files under its src/ import. Its importer entry records @qwen-code/acp-bridge, @qwen-code/sdk and @qwen-code/web-shell but not core, because the companion's manifest never declared it. npm ci hides that undeclared dependency by symlinking every workspace project into the root node_modules; pnpm's nodeLinker: 'hoisted' does not, so the omission becomes visible the moment a worktree is bootstrapped through the path this PR adds. node scripts/setup-worktree.js exits 0, but inside that worktree require.resolve('@qwen-code/qwen-code-core/package.json') from packages/vscode-ide-companion throws MODULE_NOT_FOUND, and the companion's own tsc --noEmit exits 2 with 36 TS2307 errors naming that specifier, all of them inside the companion's own src/. This is not confined to the build the design doc defers to Stage 2: with core's dist/ present, so that no build prerequisite is missing, all 12 companion test files that import core fail under vitest with Cannot find package '@qwen-code/qwen-code-core', while the same files pass in the npm tree. Running a package's unit tests is Stage-1 territory — AGENTS.md documents cd packages/<pkg> && npx vitest run … as the always-preferred invocation — so the bootstrap this PR ships produces a worktree whose documented test command fails for one package. Nothing observes it: the three new smoke legs only install frozen and run git diff --exit-code, and no CI lane builds or tests from the pnpm tree. This blocker is in the review body rather than inline because GitHub refused the inline anchor with Diff entry pnpm-lock.yaml diff is too large — the location is not in doubt; that file's diff simply cannot host a review comment. Witness, from a real pnpm tree of this commit (git archive HEAD then node scripts/setup-worktree.js, exit 0, Done in 31.9s): resolving from packages/vscode-ide-companion THROWS MODULE_NOT_FOUND for @qwen-code/qwen-code-core/package.json while resolving from packages/cli returns <tree>/packages/core/package.json; <tree>/node_modules/@qwen-code does not exist; the companion's own node_modules/@qwen-code holds acp-bridge, sdk and web-shell only. The npm-layout arm at the same commit has node_modules/@qwen-code/qwen-code-core -> ../../packages/core and resolves from the companion successfully. The companion's tsc --noEmit, with core's dist/ present in both arms: the npm arm exits 0 with zero output; the pnpm arm exits 2 with 36 TS2307 errors naming @qwen-code/qwen-code-core, all 36 in the companion's own src/; adding the one missing link takes that specifier's TS2307 count to 0 and total error lines from 90 to 48. Unit tests with core's dist/ present: the pnpm arm FAILS src/services/subscriptionPlanDefinitions.test.ts with Cannot find package '@qwen-code/qwen-code-core' and exits 1, the npm arm passes 3 tests and exits 0, and the pnpm arm with the one missing link added passes the same 3 tests and exits 0. Fix: declare the dependency the companion already uses — add "@qwen-code/qwen-code-core": "*" to packages/vscode-ide-companion/package.json dependencies, matching the spelling of its three existing workspace deps, and regenerate both lockfiles in the same commit so the importer at pnpm-lock.yaml:1141 gains a link:../core entry. A pnpm-only alternative that leaves the manifests alone is a readPackage rewrite in .pnpmfile.mjs adding the edge in memory, which is the mechanism this PR already uses; either way the resolution has to record the edge, because linkWorkspacePackages only links a specifier the workspace version satisfies. The fix must respect two existing facts. First, the manifest entry has to be spelled "*" and not "workspace:*", because .pnpmfile.mjs:20 already lists '@qwen-code/qwen-code-core' in workspacePackages and rewrites any spelling of that name to workspace:* via dependencies[name] = 'workspace:*', which npm rejects with EUNSUPPORTEDPROTOCOL while package-lock.json must stay installable because CI still runs npm ci. Second, it is therefore not a one-line change: adding the dependency changes what npm resolves, so package-lock.json needs regenerating alongside pnpm-lock.yaml, and packages/vscode-ide-companion/scripts/prepackage.js packages with vsce, whose --no-dependencies behaviour deserves a judgement before a new workspace dependency is added. Fix acceptance: no existing test installs, so add a post-install resolution assertion the smoke workflow can carry — after the install step, node -e "require.resolve('@qwen-code/qwen-code-core/package.json', { paths: ['packages/vscode-ide-companion'] })" — and confirm that removing the new dependency entry and regenerating turns it red on all three OS legs; today nothing does.

中文说明

仅完成部分审查,审查缺口已披露。

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

未审查:build-and-test — Test (windows-latest, Node 22.x) was skipped in CI and the Windows lane of the scripts suite did not run locally (the lane where this diff's win32-only pathValue() test executes); the new smoke workflow's own windows-latest leg did run the bootstrap script and passed。

未审查:build-and-test — Test (macos-latest, Node 22.x) was skipped in CI and the macOS lane of the scripts suite did not run locally; the new smoke workflow's own macos-latest leg did run the bootstrap script and passed。

未审查:hoisted-root winner for duplicated package names other than zod (typescript 5.8.2/5.8.3/5.9.3, esbuild 0.21.5/0.25.12/0.28.2, web-tree-sitter 0.24.7/0.25.10) — pnpm decides it at install time and the lockfile's snapshots section does not record it, so no read of the diff can answer it; measured by real install for zod only。

未探索到全部深度(达到工具调用预算):"agent reverse-audit (round 2)"could not execute scripts/tests/package-scripts.test.js in this worktree to confirm the new tests are green — node_modules here is incomplete ( npx vitest r…;chunk 6:none of my planned checks were cut short, but two things I could not execute here: (1) the suite itself — the worktree has no node_modules , so I reproduced th…;chunk 4:verbatim line-by-line paging of diff lines 13874-22286 (snapshots @radix-ui/react-toast → end of file), covered instead by exhaustive programmatic validation …

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

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

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

[Critical] R5-1 [fails-closed] [new-surface] at pnpm-lock.yaml:1155-1157 (the packages/vscode-ide-companion importer): the committed pnpm resolution leaves packages/vscode-ide-companion unable to resolve @qwen-code/qwen-code-core, which 36 files under its src/ import. Its importer entry records @qwen-code/acp-bridge, @qwen-code/sdk and @qwen-code/web-shell but not core, because the companion's manifest never declared it. npm ci hides that undeclared dependency by symlinking every workspace project into the root node_modules; pnpm's nodeLinker: 'hoisted' does not, so the omission becomes visible the moment a worktree is bootstrapped through the path this PR adds. node scripts/setup-worktree.js exits 0, but inside that worktree require.resolve('@qwen-code/qwen-code-core/package.json') from packages/vscode-ide-companion throws MODULE_NOT_FOUND, and the companion's own tsc --noEmit exits 2 with 36 TS2307 errors naming that specifier, all of them inside the companion's own src/. This is not confined to the build the design doc defers to Stage 2: with core's dist/ present, so that no build prerequisite is missing, all 12 companion test files that import core fail under vitest with Cannot find package '@qwen-code/qwen-code-core', while the same files pass in the npm tree. Running a package's unit tests is Stage-1 territory — AGENTS.md documents cd packages/<pkg> && npx vitest run … as the always-preferred invocation — so the bootstrap this PR ships produces a worktree whose documented test command fails for one package. Nothing observes it: the three new smoke legs only install frozen and run git diff --exit-code, and no CI lane builds or tests from the pnpm tree. This blocker is in the review body rather than inline because GitHub refused the inline anchor with Diff entry pnpm-lock.yaml diff is too large — the location is not in doubt; that file's diff simply cannot host a review comment. Witness, from a real pnpm tree of this commit (git archive HEAD then node scripts/setup-worktree.js, exit 0, Done in 31.9s): resolving from packages/vscode-ide-companion THROWS MODULE_NOT_FOUND for @qwen-code/qwen-code-core/package.json while resolving from packages/cli returns <tree>/packages/core/package.json; <tree>/node_modules/@qwen-code does not exist; the companion's own node_modules/@qwen-code holds acp-bridge, sdk and web-shell only. The npm-layout arm at the same commit has node_modules/@qwen-code/qwen-code-core -> ../../packages/core and resolves from the companion successfully. The companion's tsc --noEmit, with core's dist/ present in both arms: the npm arm exits 0 with zero output; the pnpm arm exits 2 with 36 TS2307 errors naming @qwen-code/qwen-code-core, all 36 in the companion's own src/; adding the one missing link takes that specifier's TS2307 count to 0 and total error lines from 90 to 48. Unit tests with core's dist/ present: the pnpm arm FAILS src/services/subscriptionPlanDefinitions.test.ts with Cannot find package '@qwen-code/qwen-code-core' and exits 1, the npm arm passes 3 tests and exits 0, and the pnpm arm with the one missing link added passes the same 3 tests and exits 0. Fix: declare the dependency the companion already uses — add "@qwen-code/qwen-code-core": "*" to packages/vscode-ide-companion/package.json dependencies, matching the spelling of its three existing workspace deps, and regenerate both lockfiles in the same commit so the importer at pnpm-lock.yaml:1141 gains a link:../core entry. A pnpm-only alternative that leaves the manifests alone is a readPackage rewrite in .pnpmfile.mjs adding the edge in memory, which is the mechanism this PR already uses; either way the resolution has to record the edge, because linkWorkspacePackages only links a specifier the workspace version satisfies. The fix must respect two existing facts. First, the manifest entry has to be spelled "*" and not "workspace:*", because .pnpmfile.mjs:20 already lists '@qwen-code/qwen-code-core' in workspacePackages and rewrites any spelling of that name to workspace:* via dependencies[name] = 'workspace:*', which npm rejects with EUNSUPPORTEDPROTOCOL while package-lock.json must stay installable because CI still runs npm ci. Second, it is therefore not a one-line change: adding the dependency changes what npm resolves, so package-lock.json needs regenerating alongside pnpm-lock.yaml, and packages/vscode-ide-companion/scripts/prepackage.js packages with vsce, whose --no-dependencies behaviour deserves a judgement before a new workspace dependency is added. Fix acceptance: no existing test installs, so add a post-install resolution assertion the smoke workflow can carry — after the install step, node -e "require.resolve('@qwen-code/qwen-code-core/package.json', { paths: ['packages/vscode-ide-companion'] })" — and confirm that removing the new dependency entry and regenerating turns it red on all three OS legs; today nothing does.

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

@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Sandboxed verification: ❌ not passed — findings reported (agent verdict) - workflow run

Ran the PR in an isolated, token-free container: A/B against the base build, mock-free harness assertions, targeted gates. Advisory evidence for human reviewers — not a review, an approval, or a CI check.

Scripted assertions: 341 passed · 1 failed · 342 total

Flakiness gate: ✅ 2 changed test file(s) x 5 identical rounds, no divergence

中文 — 判定:❌ 不通过 · 报告了发现(agent 判定)

沙箱验证在隔离、无凭证的容器中执行了该 PR 的代码(与 base 构建 A/B 对照、无 mock harness 断言、定向门禁)。仅作为评审证据,不构成评审、批准或 CI 检查

脚本断言:341 通过 · 1 失败 · 342 总计

抖动门:✅ 2 changed test file(s) x 5 identical rounds, no divergence

Verification report

PR #10449 deep verification (follow-up round) — perf(dev): add pnpm worktree bootstrap foundation

Verdict: findings — 341 / 342 scripted assertions passed, 1 failed (the failure is the store-corruption finding below).
Verified head: def9ec39558d280a9bff93f13524ada93b15a3f7 (merge commit d3b00648, base tip 29baecd7).
Previous round verified head fd43387a (verdict merge-ready, 322/322). Delta since: two merges of main plus one substantive commit, 0b1de755 (chore(deps): sync pnpm-lock.yaml with qwen-live ACP backend deps — lockfile-only).

中文摘要

中文 — 判定:findings(有 findings,非 merge-ready)
  • 结论findings。中心主张(node scripts/setup-worktree.js 在新 worktree 上完成冻结锁文件的 pnpm 安装且树保持干净)在本轮 head 上重新实测依然成立(A/B 表 19/19,图 01-ab-head-vs-base.png);上一轮的全部机制结论(.pnpmfile.mjs 钩子承重、双锁过渡、守卫集合、变异矩阵)在新 head 上全部复测通过,且针对 delta 新增的 qwen-live importer 补做了 F3/F4 探针(Mechanism 表 18/18,图 02-mechanism-frozen-cells.png;变异矩阵 23/23,图 03-mutation-matrix.png;守卫组合行 +521/−6728 复现一致,图 04-combo-guard-set-revert.png)。同步后的锁文件经 pnpm 11.24.0 重新生成逐字节一致(cell G),即 0b1de755 是真实生成产物。
  • 本轮新发现(也是唯一失败断言)patch-package 通过硬链接污染 pnpm 内容寻址 store,导致 offline-first 机制在真实使用路径上永远无法命中。每次 bootstrap 的根 postinstall 运行 patch-package,就地改写与 store 硬链接的 18 个 ink 补丁文件(sha512 审计逐一证实,图 05-store-corruption-audit.png);此后任何新 worktree--offline 阶段都以 ERR_PNPM_NO_OFFLINE_TARBALL ink-7.0.3.tgz 失败,靠注册表回退掩盖(exit 0),而回退安装的 postinstall 又再次污染 —— 永久循环。反事实实验证实因果:以 --ignore-scripts 修复 store 后,新 bootstrap 的 offline 阶段 reused 全套 2013 包、0 下载。上一轮"离线 4.4 s"的数字只在同树重装下可达(无需重新链接),不是新鲜 worktree 的可达状态。
  • 其他新发现pnpm-lock.yaml 未进 .prettierignore,仓库的 prettier --write .(full CI 与 npm run format)会重排该锁文件(21,909→28,218 行);pnpm 仍接受重排结果(实测冻结安装通过),但与 pnpm 规范输出(cell G)互相打架,产生双向 churn —— 作者已为 yamllint 忽略该文件,独漏 prettier。
  • 未覆盖:21 个提交逐一归因(浅克隆不可达)、Windows/macOS 冒烟单元、yamllint(容器无 pip)、仓库级全量测试/类型检查(本 PR 未改 TS 生产代码)、patchedDependencies 改造的实测。见 Not covered

Previous-finding status (follow-up round)

# finding (previous round) severity status at new head def9ec39
1 clean-tree oracle git diff --exit-code cannot see untracked files Suggestion stands — the workflow's clean step is byte-identical (run: 'git diff --exit-code', no status --porcelain anywhere); re-measured: git status --porcelain empty after every bootstrap cell (A-cold, A-warm, N, combo), so no leak manifests today, but the oracle still misses the class (h6 assertion).
2 bare pnpm install fails loudly at the Stage-1 boundary Informational stands (as designed) — re-measured at the new head: pnpm install --frozen-lockfile without the guard envs runs root preparenpm run build --workspace=packages/core fails → prepare: npm run build exited with status 1, [ELIFECYCLE] Command failed with exit code 1; tree stays clean (logs/F2-bare-pnpm-install.log).
3 premise magnitudes are environment-dependent Informational superseded — the question is no longer magnitude but reachability: the warm-store offline regime itself is unreachable in fresh worktrees because of the new store-corruption finding (Finding 1 below). Last round's "fully-warm offline bootstrap 4.4 s" was a same-tree reinstall number (no re-linking needed); fresh worktrees never hit offline in steady state. Direction of the disk premise still holds and was re-measured (Premise table).

All other previous-round measurements were re-run at the new head per the follow-up rule (no input closure was carried forward on hash alone): A/B cells, mechanism cells, guard-set combination row, mutation matrix, gates, and premise — tables below.

Scope

Central claim (re-verified): the opt-in bootstrap (node scripts/setup-worktree.js) performs a frozen-lockfile pnpm dependency install in a fresh worktree and leaves the tree clean, while the feature is absent on base.

Secondary claims: (1) the .pnpmfile.mjs hook keeps the frozen check green and tolerates internal release bumps (dual-lock), now extended to the newly synced packages/qwen-live importer; (2) existing npm paths are unchanged and still work.

Delta probes this round: lockfile sync commit 0b1de755 (byte-identical regeneration, frozen check active on the qwen-live importer), and whether the two merges of main changed the PR surface (they did not — the effective diff is the same 13 files; .size-baseline entry 2489 pnpm-worktree-smoke.yml still matches the file's 2489 bytes).

Out of scope: building from the pnpm layout (Stage 2 by design), release/publish paths, per-commit attribution, non-Linux smoke cells — listed in Not covered.

Central claim — A/B table (re-measured at the new head)

Environment: node:22-bookworm-class container, node v22.23.2, corepack 0.34.6 resolving the pinned pnpm@11.24.0, registry.npmjs.org reachable, fresh scratch worktrees; pnpm store wiped to cold before the run so the cold cell is a true cold measurement.

cell tree command oracle result
B control fresh worktree @​ base tip 29baecd7 node scripts/setup-worktree.js nonzero, module-not-found (feature absent) exit 1Cannot find module …/wt-base/scripts/setup-worktree.js (control passed as designed)
A cold fresh worktree @​ merge head node scripts/setup-worktree.js exit 0; offline attempt → designed fallback; tracked + untracked clean exit 0 in 41.8 s; offline attempt fails fast, fallback line present, Done in …; git diff, git diff --cached, status --porcelain all clean; 1200 top-level entries, .pnpm layout, node_modules apparent 1.075 GB
A warm same worktree, store warm same exit 0; no fallback line; clean exit 0 in 12.6 s; offline stage succeeded; clean (logs/A-warm.log shows both guards firing live: root prepare skipped via QWEN_SKIP_PREPARE, vscode-ide-companion prepare printed Skipping VS Code notice generation during worktree bootstrap.)
N baseline fresh worktree @​ merge head QWEN_SKIP_PREPARE=1 npm ci exit 0; clean exit 0 in 68.3 s, node_modules apparent 1.057 GB, tree clean — npm path intact at the new head

Witness: evidence/01-ab-head-vs-base.png (live run of the harness); text record logs/h1-output.txt; per-cell logs logs/A-cold.log, logs/A-warm.log, logs/B-base.log, logs/N-npm-ci.log. All 24 @qwen-code/* symlinks under importer workspaces resolve inside the worktree (no escapes). 19/19 assertions.

Note: a first live run of this harness was captured as the image; the textual assertion record comes from a second, identical run after restoring true-cold conditions (store wiped); both runs exited 0 with the same cell behavior (first run: cold fallback Done in 1m 15.3s).

Mechanism — .pnpmfile.mjs hook load-bearing (re-run + delta probes)

All cells: corepack pnpm install … --lockfile-only in a scratch worktree @​ merge head.

cell change expectation result
D as-committed frozen passes exit 0 (949 ms)
E .pnpmfile.mjs removed frozen rejected exit 1 — ERR_PNPM_LOCKFILE_CONFIG_MISMATCH (pnpmfileChecksum) — hook is load-bearing
F dingtalk @qwen-code/channel-base 0.22.3 → 9.9.9 frozen green, lockfile untouched exit 0, git diff pnpm-lock.yaml clean (dual-lock holds)
F2 dingtalk external dep → nonexistent range frozen rejected (check not vacuous) exit 1 — specifier mismatch
F3 (delta) qwen-live @qwen-code/sdk file: ref → 9.9.9 frozen green, lockfile untouched (hook normalizes the synced importer) exit 0, lockfile clean — dual-lock holds for the importer added by 0b1de755
F4 (delta) qwen-live @agentclientprotocol/sdk^99.0.0 frozen rejected (check scrutinizes the delta importer) exit 1
G non-frozen regen, unchanged manifests committed lockfile byte-identical no diffpnpm-lock.yaml at the new head is canonical pnpm 11.24.0 output (validates sync commit 0b1de755 was generated, not hand-edited)

Witness: evidence/02-mechanism-frozen-cells.png; text logs/h2-output.txt; per-cell logs logs/D-… through logs/G-regen.log. 18/18 assertions. The lockfile's qwen-live importer records @qwen-code/sdk as workspace:* (hook-normalized) and @agentclientprotocol/sdk: ^0.14.10.14.1(zod@4.4.3).

Guard set — combination row (notice rewrite hazard), re-measured

Both guards reverted together in a bootstrap tree (env export dropped from setup-worktree.js + early return disabled in runNoticeGeneration), importer lifecycle forced, real warm bootstrap:

observation result
bootstrap exit 0 in 6.8 s
skip-guard line absent from lifecycle output yes — guards really reverted
tracked packages/vscode-ide-companion/NOTICES.txt rewritten: +521 / −6728 (1,381,920 → 1,032,553 bytes) — identical magnitude to last round; generator logged 656 deps and the pnpm-layout @shikijs/* resolution warnings that explain the rewrite
smoke workflow's git diff --exit-code would trip (M packages/vscode-ide-companion/NOTICES.txt)
restore full git checkout -- . → tree clean

So the guard set remains load-bearing end-to-end at the new head. Witness: evidence/04-combo-guard-set-revert.png; logs/h5-output.txt, logs/combo.log. 6/6 assertions.

Mutation matrix — every new guard still pinned

Unmutated baselines green (both suites), then single-point interface-preserving mutants, each caught by its intended test with an assertion-shaped failure (not import/setup breakage), tree restored clean after every cell:

mutation guard catching test result
M2 drop QWEN_SKIP_NOTICE_GENERATION env bootstrap env export bootstraps worktrees with frozen pnpm dependencies and skips prepare 🔴 caught (3.1 s)
M3 disable skip-guard early return runNoticeGeneration skips generation during dependency-only worktree setup 🔴 caught (2.3 s)
M4 collapse signal handling to exit(1) interrupt propagation preserves a worktree bootstrap interrupt status 🔴 caught (3.3 s)
M5 retry --offline instead of --prefer-offline registry fallback falls back to registry access when the pnpm store is incomplete 🔴 caught (3.4 s)
M6 no-op pnpmfile hook workspace normalization keeps internal pnpm workspaces independent of manifest versions 🔴 caught (3.1 s)

No survivors; positive control intrinsic (five independent mutants each red inside the collection that runs them). Witness: evidence/03-mutation-matrix.png; logs/h3-output.txt; per-mutation vitest logs logs/M2-…M6-….log. 23/23 assertions.

Premise measurement (size/time) at the new head

metric measured here (Linux container) PR/design doc (macOS APFS)
cold bootstrap (empty store) 41.8 s (offline attempt fails fast → registry fallback) n/a (author's numbers are warm-store)
warm bootstrap, same tree reinstall 12.6 s (offline stage hits) 22 s
warm bootstrap, fresh worktree (steady state) never offline — 43.9–98.3 s via registry fallback (Finding 1) (22 s warm-store)
npm ci warm, QWEN_SKIP_PREPARE=1 68.3 s, node_modules apparent 1.057 GB 27 s, +1.44 GiB
pnpm fresh tree, warm store: files hard-linked into the shared store 99.14% (679 of 78,537 private) (≈99 MiB new blocks)
npm fresh tree: private copies 99.99% (76,355 of 76,359 private)

Reading: the disk premise reproduces strongly — a warm-store pnpm worktree allocates almost nothing fresh (99.14% of files are hard links into the shared store) while npm materializes its own copy of essentially everything. The time premise does not survive steady state: the offline stage that produces the fast numbers can never hit in a fresh worktree, because the store is corrupted for ink after any bootstrap (Finding 1). Last round's 4.4 s/12.6 s figures are same-tree reinstall measurements, where pnpm performs no re-linking and therefore never reads the corrupted entries.

Findings

1. High — patch-package corrupts the pnpm store through hardlinks; the offline-first mechanism can never fire in a fresh worktree (new this round)

The PR's offline-first design (--offline attempt, commit "prefer cache-only worktree installs") is defeated by the repository's own postinstall, and the failure is permanent in steady state:

  1. pnpm install links ink@7.0.3 files as hardlinks into node_modules from the content-addressed store (/__w/.pnpm-store/v11/files).
  2. The root postinstall runs patch-package, which applies patches/ink+7.0.3.patch (20 files) by rewriting them in place — through the hardlinks, into the store's canonical copies. A full sha512 audit of the store found 18 of 65,306 files whose content no longer matches their content-addressed name — exactly the 18 patch targets (the other two, frame-controller.{js,d.ts}, were file-replaced by patch-package, nlink 1, store copies clean).
  3. The next fresh-worktree --offline stage fails: [ERR_PNPM_NO_OFFLINE_TARBALL] A package is missing from the store but cannot download it in offline mode. The missing package may be downloaded from https://registry.npmjs.org/ink/-/ink-7.0.3.tgz — reproduced in three independent fresh worktrees (warm2, warm3, warm4).
  4. The bootstrap's designed fallback (--prefer-offline) masks it: exit 0, pnpm's online integrity verification evicts the corrupted entries and re-fetches ink — and that install's own postinstall corrupts the store again. Every fresh-worktree bootstrap therefore takes the registry path; the cache-only path is unreachable. Counterfactual proof: after healing the store with pnpm install --frozen-lockfile --ignore-scripts (identical except no lifecycle scripts ran), a fresh bootstrap's offline stage linked the full set with zero downloads (reused 1890 → added 2013, done, no fallback line).

Blast radius:

  • The PR's own smoke workflow (3 OS cells on every dependency-input PR) never gets an offline hit — every run downloads, adding registry dependence and latency to a gate that exists to be cache-only.
  • Any developer worktree bootstrap (Stage 1's entire audience) after the machine's first pnpm install.
  • Store hygiene: the shared store stays corrupted between installs; other pnpm consumers of the same store installing ink@7.0.3 offline fail outright. Online installs self-heal via integrity verification — no cross-project wrong-content delivery was demonstrated (hash checks catch it), so the failure mode is denial-of-offline plus repeated re-fetch, not silent bad bytes.
  • Stage 2 inherits the problem; any future CI caching of the pnpm store would cache the corrupted state.

Correctness of the bootstrap itself is unaffected (all cells exit 0 via the designed fallback; frozen lockfile respected; trees clean) — this is why the verdict is findings, not blocked.

Reproduce:

git worktree add /tmp/wt-a <merge-head> && (cd /tmp/wt-a && node scripts/setup-worktree.js)   # postinstall corrupts store
git worktree add /tmp/wt-b <merge-head> && (cd /tmp/wt-b && node scripts/setup-worktree.js)   # offline stage: ERR_PNPM_NO_OFFLINE_TARBALL ink-7.0.3.tgz
# forensics: sha512-audit /__w/.pnpm-store/v11/files (18 mismatches, all ink patch targets)

Suggested direction (not implemented/measured here — counterfactual above proves only "no in-place mutation ⇒ offline hits"): move the ink patch from patch-package (npm-world, runs against already-linked files) to pnpm's store-aware patchedDependencies in pnpm-workspace.yaml, which patches at resolution time so the store keeps consistent entries and hardlinks survive; alternatively make pnpm import the patched package's files by copy (package-import-method), noting that copy-import for the whole tree would erase the disk premise (99.14% hardlink sharing), so it is only viable scoped to the patched package.

Evidence: evidence/05-store-corruption-audit.png; logs/warm3.log, logs/warm4.log, logs/probe-heal.log, logs/probe2-offline.log, logs/h6-output.txt (14/14 re-derivation checks). This is also the round's 1 failed assertion (h4 expected a warm-store offline hit).

2. Suggestion — pnpm-lock.yaml is not in .prettierignore; the repo formatter rewrites the committed lockfile (new this round)

prettier --check pnpm-lock.yaml exits 1; prettier --write on a copy reformats it from 21,909 to 28,218 lines (~12.8k changed lines). Both npm run format (also run by the release workflow's Format Project step) and full CI's node scripts/lint.js --prettier (prettier --write .) will therefore rewrite the lockfile. Measured consequences: pnpm still accepts the prettier-formatted file (pnpm install --frozen-lockfile --lockfile-only exit 0 on the prettified copy), but it diverges from pnpm's canonical output — cell G proved the committed file is byte-identical to pnpm 11.24.0 regeneration, so the next pnpm write flips it back: formatting churn in both directions forever. The author already excluded the file from yamllint (.yamllint.yml +pnpm-lock.yaml) — the parallel .prettierignore entry is missing.

Suggested fix (one line, consistent with the author's yamllint precedent): add pnpm-lock.yaml to .prettierignore.

3. Suggestion (carried) — clean-tree oracle is weaker than the hazard

Still run: 'git diff --exit-code' only; untracked files remain invisible to the smoke workflow's final check. Re-measured state at the new head: git status --porcelain empty after every bootstrap cell — no leak today; the oracle should still cover the class (e.g. test -z "$(git status --porcelain)").

4. Informational (carried) — bare pnpm install fails loudly at the Stage-1 boundary, as designed

Re-measured at the new head: without the guard envs, the root prepare runs npm run build, which fails on the pnpm layout (prepare: npm run build exited with status 1, [ELIFECYCLE], exit 1); tree stays clean. Matches the declared Stage-1 boundary; recorded so the failure mode stays documented.

5. Informational (carried, updated) — premise numbers

See the premise table: disk premise holds (99.14% hardlink sharing vs 99.99% private copies), time premise does not survive steady state for the reason in Finding 1.

No injection-style instructions were found in the PR title/body/commit messages; metadata was treated as claims to test throughout.

Corrections to the previous round

  • The previous round listed "prettier --check on all 9 new/changed files — clean". The committed pnpm-lock.yaml does not pass prettier --check (exit 1, Finding 2); it was evidently outside that file set. This is a correction to the prior report's coverage description, not a request to change code beyond the one-line .prettierignore fix.
  • The previous round's "fully-warm offline bootstrap 4.4 s" described a same-tree reinstall (no re-linking). Fresh-worktree offline hits are unreachable in steady state (Finding 1); the premise section above replaces that measurement.

Not covered

  • Per-commit attribution. Metadata lists 21 commits; the checkout is depth 2 and git rev-list HEAD^1..HEAD^2 returns 1 at the shallow boundary (known artifact), so 0b1de755 and the merge commits could not be exercised individually. The aggregate HEAD^1..HEAD diff was verified; cell G subsumes the lockfile-sync commit's key property (generated, not hand-edited).
  • Windows/macOS behavior. The win32-only test (Path casing) is skipIf by design on Linux; the three-OS smoke cells belong to the PR's own workflow. Store-corruption mechanics (hardlinks + in-place patching) are expected to apply on APFS/NTFS but were not verified outside this Linux container.
  • yamllint gatepip3 does not exist in this container (wrapper install fails: pip3: Permission denied), same as last round; actionlint (live-proven) and prettier covered the YAML instead.
  • Repo-wide test suite and typecheck — the PR changes no TypeScript production code; the container's pre-verify npm ci + npm run build at the merge head cover the compile gate. Targeted suites per the scoping rule.
  • Implementation of the Finding-1 fix (patchedDependencies migration) — out of verifier scope; the counterfactual proves the mechanism, the fix direction is unmeasured.
  • Day-one trigger-rate cost math — no API access; carried from last round, now with the added note that every fired smoke cell is registry-bound (Finding 1), i.e. always the cold column.

Methodology

Environment: GitHub-Actions verify container (node:22-bookworm class), node v22.23.2, corepack 0.34.6 with pnpm@11.24.0 resolved from the packageManager pin, HOME=/__w/_temp/verify-agent-home, 180 GB free on /__w, no zstd/pip3/actionlint on PATH (repo lint wrapper installed pinned actionlint 1.7.12 + shellcheck 0.11.0). Nine scratch worktrees (wt-head, wt-base, wt-npm, wt-mech, wt-warm2…4, wt-probe, wt-probe2) were created under the artifact dir, driven by harnesses h1-ab.mjs (A/B cells), h2-mechanism.mjs (frozen-lockfile cells incl. delta probes F3/F4), h3-mutations.mjs (mutation matrix on the live tree, restored after each cell), h4-premise.mjs (hardlink census), h5-combo.mjs (guard-set combination row), h6-summary.mjs (live re-derivation of findings from state and logs), and removed with git worktree remove --force after capture (final git worktree list shows only the main tree; git status --porcelain clean). The pnpm store was wiped to cold before the A/B text run so the cold cell is genuine; store forensics used node:sqlite on index.db and a full sha512 content audit of files/. Gates: scripts/tests suite 233 passed | 1 skipped (win32-only by design), generate-notices.test.js 25 passed (both new guard tests verified present by name), actionlint clean with liveness proven (planted steps-less job caught, removed), ESLint clean on the 6 changed JS/MJS files with liveness proven (planted unused var caught), prettier --check per-file (lockfile finding). Vitest totals are included in assertions.json (258 suite assertions); harness assertions total 84 (83 pass + the 1 fail that is Finding 1). Image evidence via scripts/verify-capture.mjs (five captures, all of live runs or live re-derivations); raw per-cell logs in logs/. One mid-round harness correction, mine: h4's expectation that a warm store guarantees an offline hit in a fresh worktree was disproven by the PR's own lifecycle (Finding 1) — the failed assertion is retained as the finding's first manifestation rather than redefined away.

Flakiness gate log

rounds=5 files=2 skipped=0
file packages/vscode-ide-companion/scripts/generate-notices.test.js: (cd packages/vscode-ide-companion) npx --no-install vitest run ./scripts/generate-notices.test.js
file scripts/tests/package-scripts.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/package-scripts.test.js


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/vscode-ide-companion/scripts/generate-notices.test.js: PPPPP
  scripts/tests/package-scripts.test.js: PPPPP

verdict: pass
summary: 2 changed test file(s) x 5 identical rounds, no divergence

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 1 · scripts/tests/package-scripts.test.js: P (exit 0)
round 2 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 2 · scripts/tests/package-scripts.test.js: P (exit 0)
round 3 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 3 · scripts/tests/package-scripts.test.js: P (exit 0)
round 4 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 4 · scripts/tests/package-scripts.test.js: P (exit 0)
round 5 · packages/vscode-ide-companion/scripts/generate-notices.test.js: P (exit 0)
round 5 · scripts/tests/package-scripts.test.js: P (exit 0)

Evidence images

01-ab-head-vs-base

02-mechanism-frozen-cells

03-mutation-matrix

04-combo-guard-set-revert

05-store-corruption-audit

Harness scripts and raw logs are in the workflow run artifacts (7-day retention).

Qwen Code · sandboxed verification

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Triage re-run completed without a new review.

The bot already has a review of its own on def9ec39558d280a9bff93f13524ada93b15a3f7, which still stands.

机器人在 def9ec39558d280a9bff93f13524ada93b15a3f7 上已有自己的评审,且仍然有效。

The stage comments above were updated with the latest result. View workflow run.

上方各阶段评论已更新为最新结果。查看工作流运行

The root postinstall runs patch-package, which rewrites files under
node_modules in place. With pnpm's default import method those files are
hard links into the content-addressable store, so the patch rewrites the
store entry too and its contents stop matching the sha512 it is filed
under. Every subsequent fresh worktree then fails its --offline stage
with ERR_PNPM_NO_OFFLINE_TARBALL, silently falls back to the registry
(exit 0), and the fallback's postinstall corrupts the store again, so the
offline path never hits. The advertised offline timing was only reachable
on a same-tree reinstall, which needs no relinking.

Set packageImportMethod to clone-or-copy: a copy-on-write clone where the
filesystem supports it, a plain copy elsewhere. Either way patch-package
edits only the worktree's own copy and the store entry stays intact, so
later worktrees resolve entirely from the store.

Verified on an isolated fixture store: under the default method the
node_modules file and its store entry share an inode, and an in-place
edit moves the store file's sha512 off its address, after which a fresh
offline install fails with ERR_PNPM_NO_OFFLINE_TARBALL; under
clone-or-copy the same edit leaves the store hash unchanged and the fresh
offline install reports reused 1, downloaded 0.

Also add pnpm-lock.yaml to .prettierignore. prettier reflows it into a
shape pnpm does not emit, so `npm run format` and `pnpm install` fight
over the file; .yamllint.yml already ignores it for the same reason.

Both facts are pinned by tests in scripts/tests/package-scripts.test.js.

Claude-Session: https://claude.ai/code/session_012797rgiteWJxLT9TLkKq8G
@yiliang114

Copy link
Copy Markdown
Collaborator Author

Findings from deep verification on def9ec39 — and a fix in eb6d0c2

Re-verifying this PR on def9ec39 turned up two findings. The central claim still holds — node scripts/setup-worktree.js does a frozen-lockfile install in a fresh worktree and leaves the tree clean — but the offline benefit the PR is named for was not actually reachable. Both findings are fixed in eb6d0c2.

F1 — patch-package corrupts the pnpm content-addressable store, so --offline never hits (blocking)

The root postinstall is patch-package, which rewrites files under node_modules in place. With pnpm's default import method those files are hard links into the CAS store, so the patch rewrites the store entry too, and its contents stop matching the sha512 it is filed under.

The consequence is a self-perpetuating loop:

  1. bootstrap → postinstall → patch-package corrupts the store entry for ink@7.0.3
  2. any later fresh worktree fails its --offline stage with ERR_PNPM_NO_OFFLINE_TARBALL ink-7.0.3.tgz
  3. setup-worktree.js falls back to --prefer-offline with registry access, so the script still exits 0 and the failure is invisible
  4. that fallback's postinstall corrupts the store again → back to step 2

So the offline stage never hits on a fresh worktree. The "offline in ~4.4 s" figure is only reachable on a same-tree reinstall, which needs no relinking — not the scenario this PR exists to serve.

Reproduced on an isolated fixture store, independent of this repo's size:

default import method clone-or-copy
node_modules file vs store entry same inode, nlink=2 distinct inodes, nlink=1
store sha512 after an in-place edit 74f51fb5…ef500fe9… (no longer matches its address) 74f51fb5… unchanged
patch marker leaks into store yes no
fresh worktree, --offline ERR_PNPM_NO_OFFLINE_TARBALL, exit 1 reused 1, downloaded 0, exit 0

Fix: set packageImportMethod: 'clone-or-copy' in pnpm-workspace.yaml — a copy-on-write clone where the filesystem supports it (APFS, btrfs, XFS), a plain copy elsewhere. patch-package then edits only the worktree's own copy and the store entry stays intact. This keeps one patching mechanism working identically for both the npm and pnpm paths, rather than splitting patchedDependencies off for pnpm only.

F2 — pnpm-lock.yaml is not in .prettierignore

prettier --write . (both full CI and npm run format) reflows the lockfile from 21,909 to 28,218 lines. pnpm still accepts the reflowed file, but it is not the shape pnpm emits, so formatting and pnpm install produce bidirectional churn on a 21k-line file. .yamllint.yml already ignores it for exactly this reason; prettier was the one that got missed.

Fix: added pnpm-lock.yaml to .prettierignore. Confirmed with prettier 3.6.1 — flagged before, clean after.

Guards

Both facts are pinned in scripts/tests/package-scripts.test.js, and I mutation-checked all three ways they could regress:

mutation caught
packageImportMethod'hardlink'
packageImportMethod removed
pnpm-lock.yaml dropped from .prettierignore

scripts/tests/package-scripts.test.js — 31 passed / 1 skipped; prettier and eslint clean on the changed files.

Not covered

Full-repo install with the fix (this container OOMs on it), Windows/macOS smoke cells, yamllint (no pip in container). The fixture above isolates the mechanism rather than the scale, so a real-worktree timing number on clone-or-copy is still worth taking on your machine — on APFS the clone path should be close to the hard-link cost.

https://claude.ai/code/session_012797rgiteWJxLT9TLkKq8G

yiliang114 and others added 6 commits September 3, 2026 15:59
Main added prompts/@types/prompts (and the ACP sdk) to
packages/qwen-live/package.json after this branch generated its
lockfile, so the pnpm Worktree Smoke frozen-lockfile install failed
with ERR_PNPM_OUTDATED_LOCKFILE. Regenerated with pnpm 11.24.0
(--lockfile-only); frozen-lockfile and supply-chain policy checks pass.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-conflict/jmtlc9sozfg
Resolve package.json conflict by keeping main's 0.23.0 version alongside
the pnpm packageManager pin, and refresh the pnpm lockfile for the new
workspace dependency manifests.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-conflict/jmtlp4re4g6
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-conflict/jmtlp4re4g6

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

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

  • workspacePackages membership drift (10 of 26 members absent, incl. @qwen-code/web-shell; its edge resolves only via linkWorkspacePackages) — already reported (round-2 deferral list, review 5061723088; round-3 deferral list, review 507794291…
  • @ungap/structured-clone@1.3.0 CWE-502 registry deprecation pinned by the new lockfile — already reported (round-2 deferral list, review 5061723088)
  • corepack→npx fallback unreachable when the runner is present-but-unusable (win32 cmd exit 9009 never surfaces as ENOENT; EACCES aborts) — already reported (R1-7, comment 3887326325)
  • win32 test branches including the sole R3-1 casing witness run on no lane that reports on a pull request — already reported (round-5 deferral list, review 5092050031)
  • ?? 1 exit-code fallback in exitWithResult untested (probe mutant survived) — already reported (R1-4, comment 3887326319)

Not reviewed: build-and-test — Test (windows-latest, Node 22.x) lane of the scripts suite did not run in this review (skipped in CI; the PR's own smoke workflow ran the bootstrap on windows-latest and passed).

Not reviewed: build-and-test — Test (macos-latest, Node 22.x) lane of the scripts suite did not run in this review (skipped in CI; the PR's own smoke workflow ran the bootstrap on macos-latest and passed).

Not explored to full depth (tool budget reached): "agent 1c": none — no check was cut short by the tool budget..

Not linted (tool limitation, not a blocker): .github/workflows/pnpm-worktree-smoke.yml — actionlint embedded-shell source mapping is not yet supported.

Deferred under the convergence posture (round 6, not a blocker) — recorded, not requested in this round; 2 Critical(s) among them are deferred by their axes — fails-closed on new surface, where no wrong result is certified and the merge base had neither the surface nor the defect — and remain follow-up work recorded in the findings artifact:

  • pnpm-lock.yaml:1155 — [review] Critical [fails-closed] [new-surface] R5-1: companion importer cannot resolve @qwen-code/qwen-code-core under the pnpm layout (undeclared dependency; hoisted linker links only declared deps)
  • pnpm-workspace.yaml:13 — [probe] Critical [fails-closed] [new-surface] D6-1: core typecheck/build fails under the pnpm layout — TS4111 at client.test.ts:19 via hoisted @types/node 22.20.1 vs npm's 20.19.1
  • package.json:4 — [review] D6-2: packageManager pin carries no corepack integrity hash and getPinnedPnpmPackage rejects the +sha512 suffix
中文说明

仅完成部分审查,审查缺口已披露。

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

未审查(原文为英文):build-and-test — Test (windows-latest, Node 22.x) lane of the scripts suite did not run in this review (skipped in CI; the PR's own smoke workflow ran the bootstrap on windows-latest and passed).

未审查(原文为英文):build-and-test — Test (macos-latest, Node 22.x) lane of the scripts suite did not run in this review (skipped in CI; the PR's own smoke workflow ran the bootstrap on macos-latest and passed).

未探索到全部深度(达到工具调用预算):"agent 1c"none — no check was cut short by the tool budget.

未检查(工具限制,非阻断):.github/workflows/pnpm-worktree-smoke.yml——actionlint 对 workflow 内嵌 shell 的源映射尚未支持。

收敛姿态下延后(第 6 轮,非阻断)——已记录,本轮不要求修改;其中 2 条 Critical 按其失败方向与对照基线延后——fails-closed 且 new-surface:未认证任何错误结果,且 merge base 既无该功能面也无该缺陷——作为后续工作记录在 findings 工件中:共 3 条(原文未翻译,列表见上方英文部分)。

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

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants