Skip to content

fix(ci): recover /resolve requests lost to moved heads, fork pushes, 503s and drafts - #10429

Merged
wenshao merged 24 commits into
mainfrom
fix/resolve-recover-more-requests
Aug 31, 2026
Merged

fix(ci): recover /resolve requests lost to moved heads, fork pushes, 503s and drafts#10429
wenshao merged 24 commits into
mainfrom
fix/resolve-recover-more-requests

Conversation

@wenshao

@wenshao wenshao commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Four changes to the /resolve path in qwen-code-pr-review.yml, each recovering a class of request that the survey behind #10428 showed being lost after the agent had already done its work, or before it was allowed to start:

  1. Replay on a moved head. When the force-with-lease push is declined because the PR head advanced while the agent worked, Report result now fetches the new head, redoes the merge of the base on top of it, and for every file that still conflicts takes the agent's resolution if the new commits did not touch that file. The replayed tree is re-checked with the same structural guards Resolution check applied to the first merge (no conflict markers, merges cleanly against the base, only base-changed files), committed with the agent's message, and pushed with a lease on the new head. If any still-conflicting file was changed by the new commits, the replay gives up, restores the original resolution, and the run reports "moved" exactly as before. The agent is never re-run.
  2. Fork PRs the bot cannot push to are refused up front. Prepare pull request branch reads maintainerCanModify; a fork PR with "Allow edits by maintainers" off gets the skip comment immediately instead of a full agent run whose push is then rejected.
  3. Transient permission-API errors are retried. authorize asks up to three times (5s, 10s back-off) when gh api …/permission fails with a 5xx-class error before treating the error as a denial. The fail-closed outcome for a real error or a non-writer is unchanged.
  4. Draft PRs are no longer refused. /resolve is an explicit request from someone with write permission; the draft gate only turned such requests into a skip comment. The automatic review lane keeps its own draft gate.

Tests: the replay functions are extracted from the run: block and exercised against a real git fixture (bare origin with refs/pull/1/head, a runner checkout holding the agent's resolution, a contributor clone that moves the head) in three cases — unrelated move → replayed on the new head with the agent's resolution, the contributor's change and the base merge all present, only base-changed files differing from the new head; move that edits the conflicted file → gives up with the tree restored to the original resolution; no move → gives up. Contract pins cover the push wiring (lease on ${HEAD_SHA}, moved to the new head; no bare --force), the fork preflight (conjoined with the head-repo comparison, since same-repo PRs also report maintainerCanModify=false), the draft-gate removal, and the retry loop.

Why it's needed

Of the 294 resolutions the agent has produced since the command shipped, 17 were thrown away because the head moved during the run — the largest single loss after the agent itself — and in the runs inspected the intervening pushes were unrelated to the conflict (a CI fix, a review nit). Ten more agent runs were spent on fork PRs whose push was then rejected for lack of maintainer edits, something the PR metadata says before the run starts. A 503 from the permission API silently denied requests from a writer with no comment on the PR (e.g. run 32054217289), and 182 explicit requests on draft PRs were answered with "PR is draft". Together these are most of the non-agent losses once the outage fixed by #10428 is out of the way.

Reviewer Test Plan

How to verify

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/qwen-resolve-workflow.test.js scripts/tests/qwen-autofix-workflow.test.js scripts/tests/ci-flaky-rerun-workflow.test.js → 3 files, 267 tests pass (36 in the resolve file; 7 new, 3 of them driving real git repositories).
  • The three edited run: blocks (authorize permission check, Prepare pull request branch, Report result) pass bash -n after stripping ${{ }} expressions; the workflow parses with js-yaml.
  • Mutation checks, each expected red: pushing the replay with --force instead of the lease → "wires the replay…" fails; dropping the [ "$head_repo" != "$REPO" ] half of the fork check → "refuses fork PRs…" fails; naming the replay branch qwen-resolve/pr-N/replay (a ref under the existing qwen-resolve/pr-N branch, which git refuses) → the fixture test fails with "could not check out" — this is how the current pr-N-replay name was arrived at.
  • After merge: on a conflicted PR, comment @qwen-code /resolve and push an unrelated commit to the head while the agent runs; expect the result comment to say the head moved to <sha> and the resolution was replayed, and the pushed merge commit to have that <sha> as its first parent.

Evidence (Before & After)

Before — the "moved" outcome as it has read on 17 PRs: Qwen Code resolved the merge conflicts, but the head branch changed while resolving, so the update was not pushed. Re-run /resolve. — the resolution exists only as an artifact and the re-run costs a second agent run.

After — fixture run from the new test, unrelated move (b.txt) while a.txt was the conflicted file:

rc=0
HEAD_SHA=<new head>            ← lease moved to the new head
replayed_on=<new head>
parents of HEAD: <new head> <origin/main>
a.txt: resolved by agent       ← agent's resolution kept
b.txt: b changed after the agent started   ← contributor's new change kept
files differing from new head: a.txt c.txt ← base-changed files only

Move that edits a.txt: rc=1, Replay gave up: a.txt still conflicts and the new head changed it since <original head>, checkout back on qwen-resolve/pr-1 at the original resolution, clean tree.

Tested on

OS Status
🍏 macOS
🪟 Windows N/A
🐧 Linux N/A

Environment (optional)

Unit tests only (vitest with real git fixtures).

Risk & Scope

  • Main risk or tradeoff: the replay pushes a tree the agent did not see as a whole. It is bounded to the case where every still-conflicting file is byte-identical between the original and the new head (so the agent's resolution of it is still the resolution of the same conflict), the new head's own changes are taken verbatim, and the result must pass the same marker / clean-merge / base-changed-files guards as the first merge. Anything else falls back to today's behaviour. The retry adds up to 15 seconds to a genuinely failing authorize.
  • Not validated / out of scope: organisation-owned forks (GitHub refuses maintainer edits even when ticked; that still surfaces at the push as before). A live moved-head run needs the workflow on the default branch. The consecutive-failure alarm and the sandbox/version pin are separate PRs (fix(ci): run /resolve without the container sandbox and pin its CLI version #10428).
  • Breaking changes / migration notes: draft PRs now get a real /resolve run instead of a skip comment.

Linked Issues

Related: #10428 (restores the lane this PR builds on).

中文说明

本 PR 做了什么

qwen-code-pr-review.yml/resolve 链路做四处改动,每一处都对应 #10428 背后的统计里发现的一类损失——agent 已经完成工作却被丢弃,或者根本没被允许开始:

  1. head 变动后重放解决结果。 当 force-with-lease 推送因 PR head 在 agent 工作期间前进而被拒绝时,Report result 现在会拉取新 head,在其之上重新合并 base,对每个仍然冲突的文件,如果新提交没有触碰该文件,就采用 agent 的解决版本。重放后的树会用 Resolution check 对第一次合并所做的同样结构检查再验一遍(无冲突标记、能干净合并到 base、只改动 base 变更过的文件),用 agent 的提交信息提交,然后以新 head 为 lease 推送。若任何仍冲突的文件被新提交改过,重放放弃,恢复原来的解决结果,run 与以前一样报告 "moved"。agent 不会被重新运行。
  2. 无法推送的 fork PR 提前拒绝。 Prepare pull request branch 读取 maintainerCanModify;来自 fork 且未勾选 "Allow edits by maintainers" 的 PR 直接得到跳过评论,而不是跑完一整轮 agent 再在推送时被拒。
  3. 权限 API 的瞬时错误会重试。 authorizegh api …/permission 返回 5xx 类错误时最多重试三次(退避 5s、10s),然后才把错误当作拒绝。真实错误或非写权限用户的 fail-closed 结果不变。
  4. 不再拒绝 draft PR。 /resolve 是有写权限的人发出的显式请求;draft 门只是把这类请求变成一条跳过评论。自动评审链路保留自己的 draft 门。

测试:从 run: 块中提取重放函数,在真实 git fixture 上运行(带 refs/pull/1/head 的裸 origin、持有 agent 解决结果的 runner 检出、能移动 head 的贡献者克隆),覆盖三种情况——无关移动 → 在新 head 上重放,agent 的解决、贡献者的新改动、base 合并全部在场,与新 head 的差异只有 base 变更过的文件;移动改到了冲突文件 → 放弃并把树恢复到原来的解决结果;没有移动 → 放弃。契约钉子覆盖推送接线(lease 仍用 ${HEAD_SHA}、重放后指向新 head;没有裸 --force)、fork 预检(必须与 head 仓库比较联立,因为同仓 PR 的 maintainerCanModify 也是 false)、draft 门的移除、以及重试循环。

为什么需要

自命令上线以来 agent 产出的 294 次解决结果中,有 17 次因为 head 在运行期间变动而被丢弃——这是 agent 自身之外最大的单项损失——而抽查的这些 run 里,中间的推送都与冲突无关(CI 修复、评审小改)。另有 10 次 agent 运行花在 fork PR 上,推送时因没有 maintainer edit 权限被拒,而这一点在运行前从 PR 元数据就能知道。权限 API 的一次 503 会静默拒绝有写权限者的请求且 PR 上没有任何评论(如 run 32054217289),draft PR 上的 182 次显式请求得到的回复是 "PR is draft"。在 #10428 修复的故障之外,这些占了非 agent 原因损失的大部分。

评审验证方案

如何验证

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/qwen-resolve-workflow.test.js scripts/tests/qwen-autofix-workflow.test.js scripts/tests/ci-flaky-rerun-workflow.test.js → 3 个文件 267 个测试通过(resolve 文件 36 个;新增 7 个,其中 3 个驱动真实 git 仓库)。
  • 三个改动的 run: 块(authorize 权限检查、Prepare pull request branchReport result)去掉 ${{ }} 表达式后通过 bash -n;workflow 能被 js-yaml 解析。
  • 变异检查,每项预期变红:重放改用 --force 而非 lease 推送 → "wires the replay…" 失败;去掉 fork 检查里 [ "$head_repo" != "$REPO" ] 这一半 → "refuses fork PRs…" 失败;把重放分支命名为 qwen-resolve/pr-N/replay(位于已存在的 qwen-resolve/pr-N 分支之下的 ref,git 会拒绝)→ fixture 测试报 "could not check out"——当前的 pr-N-replay 命名就是这样得出的。
  • 合入后:在有冲突的 PR 上评论 @qwen-code /resolve,并在 agent 运行期间向 head 推一个无关提交;预期结果评论说明 head 移动到了 <sha> 且解决结果已重放,推送的合并提交的第一个父提交是该 <sha>

证据(改动前后)

改动前——17 个 PR 上出现过的 "moved" 结果:Qwen Code resolved the merge conflicts, but the head branch changed while resolving, so the update was not pushed. Re-run /resolve.——解决结果只存在于 artifact 里,重跑要再花一轮 agent。

改动后——新测试的 fixture 运行,冲突文件是 a.txt,期间无关移动(b.txt):

rc=0
HEAD_SHA=<new head>            ← lease 移到新 head
replayed_on=<new head>
parents of HEAD: <new head> <origin/main>
a.txt: resolved by agent       ← 保留 agent 的解决
b.txt: b changed after the agent started   ← 保留贡献者的新改动
files differing from new head: a.txt c.txt ← 只有 base 变更过的文件

移动改到 a.txt:rc=1Replay gave up: a.txt still conflicts and the new head changed it since <original head>,检出回到 qwen-resolve/pr-1 上原来的解决结果,工作树干净。

测试平台

OS Status
🍏 macOS
🪟 Windows N/A
🐧 Linux N/A

环境(可选)

仅单元测试(vitest + 真实 git fixture)。

风险与范围

  • 主要风险或取舍:重放推送的是 agent 没有整体看过的树。它被限定在:每个仍冲突的文件在原 head 与新 head 之间逐字节相同(因此 agent 对它的解决仍然是对同一冲突的解决),新 head 自身的改动原样采用,结果必须通过与第一次合并相同的标记 / 干净合并 / 仅 base 变更文件守卫。其他情况一律回退到现有行为。重试最多给真正失败的 authorize 增加 15 秒。
  • 未验证 / 不在范围内:组织所有的 fork(即使勾选 GitHub 也拒绝 maintainer edit;这一情况仍在推送时暴露,与以前一样)。真实的 head 变动 run 需要 workflow 在默认分支上。连败告警与沙箱/版本钉是另外的 PR(fix(ci): run /resolve without the container sandbox and pin its CLI version #10428)。
  • 破坏性变更 / 迁移说明:draft PR 现在会真正跑 /resolve,而不是收到跳过评论。

关联 Issue

相关:#10428(恢复本 PR 所依赖的链路)。

…503s and drafts

Of the 294 resolutions the /resolve agent has ever produced, 17 were thrown
away because the PR head moved while it worked, ten more agent runs were
spent on fork PRs whose push was then rejected for lack of maintainer
edits, a 503 from the permission API denied writers silently, and 182
explicit requests on drafts were answered with a skip comment.

- Report result: when the lease push is declined for a moved head, fetch
  the new head, redo the base merge on it, take the agent's resolution for
  every still-conflicting file the new commits did not touch, re-run the
  marker / clean-merge / base-changed-files guards, and push with a lease
  on the new head. Anything else gives up and reports "moved" as before.
  The agent is never re-run.
- Prepare: refuse fork PRs with "Allow edits by maintainers" off before
  the agent runs, via maintainerCanModify.
- authorize: retry a 5xx from the permission API up to three times before
  treating it as a denial; still fails closed.
- Prepare: drop the draft gate for the command (the review lane keeps its
  own).

The replay functions are exercised against a real git fixture in three
cases; contract pins cover the push wiring, the fork preflight, the draft
gate and the retry loop.
@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Gate re-run on request — still passes at the current head.

  • Template: complete, including the Chinese translation ✓
  • Problem: observed, with numbers. 17 of 294 resolutions lost to heads moving mid-run, 10 agent runs wasted on fork PRs the bot cannot push to, a real 503 denial (run 32054217289), and 182 draft-PR skip comments on explicit requests. This is the survey behind fix(ci): run /resolve without the container sandbox and pin its CLI version #10428 turned into fixes — not theoretical hardening.
  • Direction: aligned. This recovers work the /resolve lane has already paid for and refuses work it cannot push, on the repo's own bot infrastructure.
  • Size: not applicable — no core paths. 284 production lines (228+/54− in the workflow, 2 in .size-baseline) and 881 test lines.
  • Approach: four targeted recovery paths, each bounded so anything uncertain falls back to today's behaviour; the replay never re-runs the agent. Scope matches the four loss classes — nothing extra in the diff.
  • Risk: no high-risk path matches; no elevated risk signals.

Moving on to code review. 🔍

中文说明

应请求重新执行门禁检查——在当前 head 上仍然通过。

  • 模板:完整,包含中文翻译 ✓
  • 问题:已观测到,且有数据支撑。294 次解决结果中 17 次因 head 在运行期间变动而丢失,10 次 agent 运行浪费在无法推送的 fork PR 上,一次真实的 503 拒绝(run 32054217289),draft PR 上 182 次显式请求只得到跳过评论。这是把 fix(ci): run /resolve without the container sandbox and pin its CLI version #10428 背后的统计变成了修复——不是理论性加固。
  • 方向:对齐。这是在为仓库自己的 bot 基础设施挽回 /resolve 链路已经付出过成本的工作、并提前拒绝无法推送的工作。
  • 规模:不适用——未触及核心路径。284 行生产代码(workflow 228+/54−,.size-baseline 2 行),881 行测试。
  • 方案:四条有针对性的恢复路径,每条都有边界,任何不确定情况都回退到现有行为;重放不会重新运行 agent。范围与四类损失一一对应——diff 中没有多余内容。
  • 风险:未命中高风险路径;无升级风险信号。

进入代码审查。🔍

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Code review

Independent take before reading the diff: for "lease-declined push drops the resolution", the sane fix is to fetch the new head, re-merge the base, keep the agent's version only for still-conflicting files the new head did not touch, re-verify structurally, and push with a lease on the new head. That is what this PR does — with the right conservatism: any still-conflicting file the new head touched aborts the replay and restores the original resolution.

What I verified against the full workflow at the reviewed commit, beyond the diff itself:

  • The replay's structural guards (marker grep, git merge-tree --write-tree, comm -23 scope check) are line-identical to 'Resolution check', and that step fetches origin/${BASE_REF} into the publish job's checkout before 'Report result' runs — so every ref the replay consumes exists there.
  • resolve-pr exports base_ref and 'Report result' now carries it in its env block; the new env-coverage test pins the pair so the set -u abort that a missing BASE_REF would cause cannot ship again.
  • The draft gate survives only in delay-automatic-review (the automatic lane), and the fork preflight is correctly conjoined with the head-repo comparison — same-repo PRs report maintainerCanModify=false too, so the bare check would have refused every in-repo PR.
  • Every give-up path aborts the merge, checks the original qwen-resolve/pr-N branch back out, and leaves HEAD_SHA untouched — the "moved" comment and artifact then describe exactly what exists.
  • The classification reorder (moved before permission) is sound: git echoes the destination branch into the push log, and fix/permission-prompt is a legal branch name; the moved arm now anchors to the parenthesised server phrases at end-of-line, pinned by tests using exactly those hostile names.
  • The authorize retry stays fail-closed: only 5xx-class errors retry, three attempts, 5s/10s back-off; any other error or a non-writer is denied on first failure, as before.

No blockers. Two non-blocking observations: the newline-joined scope list has the same embedded-newline-filename edge as the original 'Resolution check' guard (same technique, same documented bound, fails toward giving up), and the retry adds up to 15 s to a genuinely failing authorize — both documented in the PR.

Testing

This is an unattended run — PR code is never executed here. Evidence is the PR's own CI on the reviewed commit, quoted from the API:

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

The ubuntu Test job runs npm run test:ci, which includes test:scripts — the vitest suite over scripts/tests — so the new resolve tests (real-git-fixture replays, scripted-gh authorize retries, hostile-branch-name classification pins) ran green in CI on this commit; they pin the change rather than passing identically without it. The macOS/Windows skips are the CI-only-change classification, not failures. The review-pr check still in flight is the bot's own orchestration lane, not this PR's CI.

Real-scenario (tmux): N/A — bot infrastructure with no user-visible product surface. Not verified pre-merge: a live moved-head run, because this workflow only executes from the default branch — the fixture tests exercise the exact extracted production shell against real repositories instead, and every replay uncertainty falls back to today's behaviour. A maintainer watching the first few real /resolve runs after merge is the sensible follow-up.

中文说明

代码审查

读 diff 之前的独立判断:对"推送被租约拒绝就丢掉解决结果"这个问题,合理的修法是拉取新 head、重新合并 base、只对仍冲突且新 head 未触碰的文件保留 agent 的版本、重新做结构校验、再以新 head 为租约推送。本 PR 正是这样做的——且保守得当:任何仍冲突的文件只要被新 head 改过,重放就放弃并恢复原来的解决结果。

在 diff 之外,我在被审查的 commit 上对照完整 workflow 核实了:

  • 重放的三个结构守卫(冲突标记 grep、git merge-tree --write-treecomm -23 范围检查)与 'Resolution check' 逐行一致;该步骤会先把 origin/${BASE_REF} 拉进 publish job 的检出,'Report result' 运行时重放所需的全部 ref 都已就位。
  • resolve-pr 导出 base_ref,'Report result' 的 env 块现在携带它;新增的 env 覆盖测试钉住了这一对,缺 BASE_REF 导致的 set -u 中止不会再悄悄上线。
  • draft 门只保留在 delay-automatic-review(自动评审链路);fork 预检正确地与 head 仓库比较联立——同仓 PR 的 maintainerCanModify 也是 false,单独检查会拒绝所有同仓 PR。
  • 所有放弃路径都会中止合并、切回原 qwen-resolve/pr-N 分支、并保持 HEAD_SHA 不变——"moved" 评论与 artifact 因此描述的正是实际存在的状态。
  • 分类顺序调整(moved 先于 permission)成立:git 会把目标分支名回显进推送日志,fix/permission-prompt 是合法分支名;moved 分支现在锚定行尾的带括号服务端短语,并由使用这些恶意名字的测试钉住。
  • authorize 重试保持 fail-closed:只有 5xx 类错误会重试,共三次,退避 5s/10s;其他错误或非写权限用户仍然首次失败即拒绝。

无阻塞问题。两个非阻塞观察:换行连接的范围列表与原 'Resolution check' 守卫有同样的"文件名含换行"边界(同一技术、同样的已记录边界、失败方向是放弃);重试最多给真正失败的 authorize 增加 15 秒——两者 PR 中均已说明。

测试

这是无人值守运行——此处从不执行 PR 代码。证据是被审查 commit 上 PR 自己的 CI,摘自 API(见上表):

  • ubuntu Test 任务运行 npm run test:ci,其中包含 test:scripts——即 scripts/tests 的 vitest 套件——因此新增的 resolve 测试(真实 git fixture 重放、脚本化 gh 的 authorize 重试、恶意分支名分类钉子)已在 CI 中于本 commit 上通过;它们钉住了改动,而不是去掉改动也照样通过。macOS/Windows 的跳过是"仅 CI 变更"的分类结果,不是失败。仍在运行的 review-pr 检查是 bot 自己的编排链路,不属于本 PR 的 CI。

真实场景(tmux):N/A——bot 基础设施,没有用户可见的产品界面。合入前无法验证的是:真实的 head 变动运行,因为该 workflow 只在默认分支上执行——fixture 测试改为对真实仓库运行从生产脚本中逐字提取的 shell 作为替代,且重放的任何不确定情况都回退到现有行为。合入后关注最初几次真实 /resolve 运行是合理的后续动作。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Confidence: 4/5 — clean across every stage; the single reservation is that the live moved-head path is only observable after merge, which is intrinsic to default-branch workflow changes, not a doubt about the code.

This reads like someone watched the lane lose real work and went after each loss class with exactly as much machinery as it earns and no more. The replay is the right shape: it never re-runs the agent, it re-holds the replayed tree to the same structural checks as the first merge, and every uncertainty gives up into today's behaviour instead of guessing. The test suite is the strongest part — real git fixtures driving the extracted production shell, scripted-gh behavioural tests for the retry, and hostile branch names pinning the classification order. The independent human review on this exact commit reached the same conclusion; my pass got there from the opposite direction and found no blockers either.

Non-blocking notes for merge: the retry adds up to 15 s to a genuinely failing authorize, and the first few real /resolve runs after merge are worth watching for the replay in the wild.

中文说明

置信度:4/5 —— 每个阶段都干净;唯一的保留是真实的 head 变动路径只能合入后观测,这是默认分支 workflow 变更的固有属性,不是对代码本身的疑虑。

这看起来像是有人亲眼看着这条链路丢失真实的工作,然后对每一类损失都用了恰好够用的机制去解决、一点不多。重放的形状是对的:从不重新运行 agent,重放后的树被按与第一次合并相同的结构检查再验一遍,任何不确定情况都放弃并回退到现有行为,而不是猜测。测试套件是最强的部分——用真实 git fixture 驱动从生产脚本逐字提取的 shell、用脚本化 gh 做重试的行为测试、用恶意分支名钉住分类顺序。该 commit 上的独立人工审查得到了相同结论;我从另一个方向审查,同样没有发现阻塞问题。

合入时的非阻塞提示:重试最多给真正失败的 authorize 增加 15 秒;合入后最初几次真实 /resolve 运行值得观察一下实战中的重放。

Qwen Code · qwen3.8-max

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

Two blocking items — details in my notes above:

  1. BASE_REF is not defined in the Report result step's env, so the replay path dies on unbound variable at its first expansion — exactly when a moved head triggers it — and the result comment is never posted. The fixture tests mask this by injecting the variable themselves. One-line fix: add BASE_REF: '${{ steps.prepare.outputs.base_ref }}' to the step's env.
  2. CI is red on the workflow size gate (176,564 bytes vs the 165,876 baseline, allowance 4,096), so vitest never ran on this commit. Update .github/workflows/.size-baseline with the reason, or shrink the workflow.

The rest of the review was clean — direction, bounds, guards, and tests all check out. With these two fixed this should be ready. 🙏

@wenshao

wenshao commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /takeover

@qwen-code-dev-bot qwen-code-dev-bot added the autofix/takeover Summon the autofix loop to manage this PR (remove to release; needs triage+) label Aug 28, 2026
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

🤝 Takeover engaged: the autofix loop now manages this PR — it will address new review feedback and resolve base conflicts until the label is removed or the round cap is reached. Remove the autofix/takeover label (or comment @qwen-code /takeover stop) to release.

中文说明

🤝 已接管:autofix 循环现在管理此 PR —— 将持续处理新的评审反馈与 base 冲突,直到移除标签或达到轮次上限。移除 autofix/takeover 标签(或评论 @qwen-code /takeover stop)即可释放。

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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

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

中文说明

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

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

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

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

Copy link
Copy Markdown
Collaborator

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

中文说明

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

The moved-head replay, the fork preflight and the authorize retry grow
qwen-code-pr-review.yml past the 4096-byte ratchet; the growth is the
recovery logic itself, so bump the baseline.
The moved-head replay merges the base branch again, but the step's env
never defined BASE_REF, so under `set -u` the first replay would have
aborted the step. Add the env entry and a test that walks every run
block of resolve-pr and fails on any expanded uppercase variable that
neither the job env, the step env, a shell assignment nor a runner
builtin defines — the fixture test injected BASE_REF itself, which is
why nothing caught it.
@wenshao

wenshao commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 28, 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: 102 passed · 0 failed · 102 total

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

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

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

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

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

Verification report

PR 10429 deep verification — fix(ci): recover /resolve requests lost to moved heads, fork pushes, 503s and drafts

Verdict: merge-ready — 102/102 scripted assertions passed (0 unexpected failures).
Verified head: 3a00591246db2388ab806df8955f99bb6fcc9b30 (git rev-parse HEAD^2); base tip a268b7d1754bf7856fa74ce464a7dce5a59dff41 (HEAD^1).
Artifact dir: tmp/pr10429-verify-20260828-232316/.

中文摘要

结论:merge-ready(102/102 脚本化断言通过,无意外失败)。

  • A/B 结论(核心主张):对逐字提取的 Report result run 块(js-yaml 提取,非转录)在真实 git 电路上驱动 9 个单元格(下表)。关键翻转在 Cell A:head 移动且新提交未触碰仍冲突文件时,base 丢弃解决结果(旧 "Re-run /resolve" 评论、fork 分支不变),head 在新 head 上重放并推送正确树——从"损坏"翻转为"修复"。Cell E 快乐路径两臂一致(无回归);新提交改到冲突文件(B)、删除冲突文件(D)、权限拒绝(C)等形状在 head 上全部 fail-closed 并恢复原状;干净合并形状(F)同样恢复。
  • 次要主张authorize 重试与 fail-closed 行为见 authorize 表(实测退避符合 5s/10s;base 臂第一次 503 即静默拒绝——翻转成立)。fork 预检拒绝不可推送的 fork PR 且不伤同仓 PR(关键防误伤单元格 P2);draft 门移除(P5/P6 对照)。
  • 变异矩阵:8 个突变体全部被杀(含 BASE_REF env 删除、--force 替换 lease、分支命名 pr-N/replay、行为性对照删除 HEAD_SHA="$new_sha"、跨步骤未定义变量探针),0 存活;未突变对照 37/37 绿。
  • findings:无阻塞。两处低危观察:干净合并重放时评论措辞略夸大(见 F1);.size-baseline 记录值落后实际 220 字节但在 4096 容差内(见 F2)。描述中测试计数有 off-by-one(267/36/7 实为 268/37/8,见 Corrections)。
  • 未覆盖:合入后的真实 moved-head run(需要 workflow 在默认分支);组织所有 fork 的推送行为;yamllint(容器无 pip,js-yaml 解析与 actionlint 已覆盖);逐提交归属(本地仅 merge 提交与两个父提交可达,元数据列 5 个提交);重放未用真实已发布评论校准(无 token;base 臂评论措辞与描述 "Before" 引文逐字吻合,作为旁证)。

Scope selection

Central claim: when the lease push is declined because the PR head moved during the agent run, Report result fetches the new head, re-merges the base on top of it, takes the agent's resolution for every still-conflicting file the new commits did not touch, re-checks the result with the same structural guards as Resolution check, and pushes with a lease on the new head; any other shape fails closed to exactly today's "moved" report.
Secondary claims: (1) unpushable fork PRs are refused before an agent run without refusing same-repo PRs (which also report maintainerCanModify=false); (2) authorize retries transient 5xx permission-API errors (≤3 attempts, 5s/10s backoff) while staying fail-closed; (3) the draft gate is removed for /resolve only.

Central claim — A/B table

Harness: ab-harness.mjs drives the verbatim js-yaml-extracted Report result run block (head and base arms, bash --noprofile --norc, the block's own set -euo pipefail) against a real git wire: a bare base-origin mirroring refs/pull/1/head + main, and a bare fork owning refs/heads/feature. The production push URL https://x-access-token:…@github.com/contributor/repo.git is redirected to the fork via url.insteadOf (a git-config seam — no code under test is stubbed); only the GitHub comment API is simulated (gh stub records the exact comment body). ${{ }} expressions are substituted exactly as Actions does before bash runs. Witness: evidence/01-ab-replay-matrix-head-vs-base.png.

Cell Scenario Base (HEAD^1) Head (HEAD^2)
A head moves on an unrelated file (b.txt) while a.txt is the conflict exit 1; fork stays at new head; old comment "…the update was not pushed. Re-run /resolve." — resolution lost exit 0; replayed merge pushed; parents = [new head, origin/main]; a.txt=agent resolution, b.txt=contributor's new change, c.txt=base merge; only a.txt,c.txt differ from new head (scope guard); comment names the replay + new sha
B move edits the conflicted file (a.txt) exit 1, moved comment exit 1; "Replay gave up: a.txt still conflicts and the new head changed it…"; fork untouched; runner restored to original resolution branch, clean tree
C push refused 403-style, head NOT moved exit 1; classified permission; no replay attempted (no -replay branch); permission comment
D sibling shape: move DELETES the conflicted file (delete/modify conflict) exit 1; fails closed on a.txt; moved comment; original resolution restored
E no move; push succeeds first try exit 0; resolution pushed; plain comment identical — happy path unchanged (no regression)
F moved head already resolved the conflict (clean merge on replay) exit 0; clean merge replayed + pushed; parents correct; a.txt=base content

Counts: 9 cells, 44 scripted oracles, 44 pass (base-arm failures are expected-failure assertions encoded as passes). The load-bearing flip is cell A: broken → fixed on identical fixtures, differing only in the extracted run block.

Guard fidelity: the replay's three guards were compared line-by-line against Resolution check — identical marker regex ('^(<<<<<<<|>>>>>>>) ' over diff-filter=ACMRT), identical git merge-tree --write-tree "origin/${BASE_REF}" HEAD, identical comm -23 scope-guard pipeline, differing only in the reference ($new_sha vs $HEAD_FETCH_REF).

Secondary claims

authorize retry — wire oracle under a scripted gh

authorize-harness.mjs drives the extracted Check principal write permission block with real sleep and a stub gh whose gh api follows a scripted outcome plan and logs millisecond timestamps (evidence/02-authorize-retry-head-vs-base.png):

Cell Plan Head Base
R1 503, 503, write should_review=true, 3 calls, gaps 5.01s / 10.05s, retry messages name attempts 1 and 2 of 3 should_review=false, 1 call, 20 ms — the silent denial the PR exists to fix
R2 503 ×3 should_review=false after exactly 3 attempts, ::error:: + summary record (fail closed)
R3 404 should_review=false, 1 call — no retry for non-transient errors
R4 write true, 1 call true, 1 call (unchanged)
R5 read false, 1 call, summary names permission is 'read' (non-writer denial unchanged)

25/25 oracles. Note authorize is shared with the review lane — the retry applies there too by construction, fail-closed outcome unchanged.

Fork preflight + draft gate — extracted Prepare pull request branch with real jq/git fixture

preflight-harness.mjs (evidence/03-fork-preflight-draft-gate.png), 16/16 oracles:

Cell Shape Head Base
P1 fork, edits OFF unsupported, skip reason names the fork + the setting, exit 0, no branch → no agent run
P2 same repo, maintainerCanModify=false decision=run (the false-positive guard; a bare maintainerCanModify check would refuse every in-repo PR)
P3 fork, edits ON decision=run
P4 fork, edits OFF decision=run — agent run would be spent and rejected at the push (the A/B pair)
P5 draft skip, "PR #1 is draft."
P6 draft decision=run — draft is no longer even fetched (isDraft absent from the --json list)

The review lane keeps its own gate: "Skipping delayed review: PR #… is draft." present at line 267 of the head workflow. unsupported is consumed by Report skipped request (line 2835), so the refusal reaches the PR as a comment.

Targeted gates

Gate Result
vitest, head: resolve + autofix + ci-flaky-rerun + workflow-size 463/463 pass (resolve 37, autofix 223, flaky 8, size 195) — evidence/05-targeted-gates-vitest-head.png
Same suites, base (HEAD^1 worktree) 455/455 pass → delta +8 tests, 0 changed, 0 lost
bash -n (expressions stripped) on the 3 edited run blocks, both arms 6/6 OK
js-yaml parse of the full workflow, both arms OK (extraction is the witness)
actionlint (pinned binary; live-proven: planted needs: [nonexistent-job] → rc=1) PR workflow clean, rc=0
Size ratchet 176,784 B ≤ 176,564 recorded + 4,096 allowance → green (see F2)

Reviewer Test Plan walkthrough (per step)

  1. vitest command → passes (see Corrections for the count mismatch).
  2. bash -n + js-yaml on the three edited blocks → passes, both arms.
  3. The three claimed mutation checks → all reproduced: --force instead of the lease → red (2 tests); dropping the head_repo conjunct → red; branch name qwen-resolve/pr-N/replay → fixture red with "could not check out" (git refuses a ref under the existing qwen-resolve/pr-N branch).
  4. "After merge: live moved-head run" → not performable here (requires the workflow on the default branch). This is the one step of the plan that cannot be executed in-container; the fixture-level wire evidence above is the substitute.

Mutation matrix (vacuity) — 8 mutants, 0 survivors

All runs in a scratch worktree at HEAD (run-mutations.shevidence/04-mutation-matrix-8-mutants-killed.png; full logs in mut-logs/); unmutated control 37/37 green first.

Mutant Killed by Attribution
M1 remove BASE_REF env + comment defines every uppercase variable… → "step 'Report result' expands undefined: BASE_REF" the intended assertion; proves the last commit's test is non-vacuous. Note the fixture tests stayed green under M1 (they inject BASE_REF themselves) — exactly the hole the commit message describes
M2 revert replay wiring to if false wires the replay into the push path… intended
M3 --force-with-lease=…--force pre-existing keeps the authorization and scope guards and new wires the replay… lease is pinned on both sides
M4 drop [ "$head_repo" != "$REPO" ] conjunct refuses fork PRs… intended
M5 replay branch pr-N/replay both fixture tests — "could not check out" (real git D/F refusal) matches the author's claimed derivation
M6 delete HEAD_SHA="$new_sha" fixture test 1's SHA oracle (expected <new> to be <orig>) + wiring pin behavioral control in the same file: the fixture catches a real behavioral regression, not just text
M7 reword "Allow edits by maintainers" pin refuses fork PRs… pin (pre-existing pin survived via the prose comment still containing the phrase — stated for accuracy) positive control
M8 ${TOTALLY_UNDEFINED_PROBE_VAR} planted in Show run artifacts defines every uppercase variable… → "step 'Show run artifacts' expands undefined: …" the env scan is genuinely job-wide, not just Report result

Corrections (description inaccuracies, not code defects)

  1. The Reviewer Test Plan says "3 files, 267 tests pass (36 in the resolve file; 7 new, 3 of them driving real git repositories)". Measured at head: 268 tests across the 3 files; the resolve file has 37 tests with 8 new (the 8th, defines every uppercase variable…, appears to be uncounted in the headline). The "3 driving real git repositories" part is accurate.
  2. .size-baseline records 176,564 B while the file at HEAD is 176,784 B. The gap is exactly consistent with the final commit's 3-line BASE_REF env addition landing after the baseline bump (commit ordering visible in the metadata). It passes via the documented 4,096-byte allowance; the next workflow PR touching this file will pay the 220 B. See F2.

Findings

No blocking findings. Two low-severity observations:

F1 (low, cosmetic). In the clean-merge replay shape (cell F — the moved head already resolved the conflict itself), the posted comment still says "only files the new commits did not touch were taken from the agent's merge", but in that shape nothing is taken from the agent's merge (the clean merge result is pushed, correctly). The tree is right; only the wording overstates. No fix suggested — flagging for the author's awareness.

F2 (low, informational). .size-baseline lags the actual file by 220 B (see Corrections #2). Gate is green via the allowance; nothing to change unless the maintainer wants the ratchet exact.

Not covered

  • Live moved-head run on the default branch (Reviewer Test Plan step 4) — requires the merged workflow; the fixture wire is the substitute. Related: the double-move race (head advances again between the replay's fetch and its second push) was not interleaved; it reduces to a standard lease decline, and cell C proves decline classification after a first push.
  • Replay calibration against a real emitted artifact — no GitHub token in this sandbox, so no actually-posted "moved" comment could be fetched. The replay is therefore uncalibrated: corroborating but weaker evidence is that the base arm's cell-A comment reproduces the description's quoted "Before" text verbatim (plus the artifact sentence). Calibrating would need one real qwen-resolve-result comment from a production moved run.
  • Per-commit attribution — the checkout is depth 2 (merge commit + two parents); the metadata lists 5 commits but only HEAD^2 is reachable, so the aggregate HEAD^1..HEAD diff was verified, not each commit.
  • yamllint — not installable in this container (pip3 permission-denied, no pip module); YAML well-formedness is covered by js-yaml parse on both arms, and actionlint (live-proven) covers workflow structure.
  • Organisation-owned forks (declared out of scope by the PR) — they pass the new preflight when the box is ticked and surface at the push as before; not driven.
  • The loss statistics (294 resolutions / 17 moved losses / 10 fork runs / 182 draft skips, run 32054217289) — author claims, no API access to verify; the mechanisms they motivate are each verified above.
  • Other jobs of qwen-code-pr-review.yml beyond the draft-gate spot check, and #10428-related behavior — out of this PR's diff.

Methodology

Container: the verify lane's own node:22-bookworm sample (node v22.23.2, git 2.39.5, jq 1.6, bash). All workflow code was extracted verbatim via js-yaml (extract-steps.mjs) from the head and base YAML copies — never retyped — and driven under bash --noprofile --norc with each block's own set -euo pipefail, ${{ }} expressions substituted exactly as Actions substitutes them before bash runs. The unit under test was never stubbed: the only seams are git's own url.insteadOf rewrite of the production push URL onto local bare repos (the wire oracle: post-run fork refs, pushed commit parents/trees, exact comment bodies captured by the gh stub) and the scripted gh api/gh pr view at the API boundary (real jq, real git fixtures, real sleep for the measured 5s/10s backoff). Harness scripts, raw per-cell logs (ab-matrix-raw.log, authorize-raw.log, preflight-raw.log, mutation-raw.log, mut-logs/), and the extracted blocks live in this directory; the base arm used git worktree add tmp/base-tree HEAD^1 (removed after the A/B). Every numbered assertion in assertions.json maps to a check()/exit-code/test-result that executed: 44 A/B oracles + 25 authorize + 16 preflight + 6 bash -n + 9 mutation-matrix outcomes + 2 suite-level vitest runs = 102.

Flakiness gate log

rounds=5 files=1 skipped=0
file scripts/tests/qwen-resolve-workflow.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/qwen-resolve-workflow.test.js


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  scripts/tests/qwen-resolve-workflow.test.js: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 2 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 3 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 4 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 5 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)

Evidence images

01-ab-replay-matrix-head-vs-base

02-authorize-retry-head-vs-base

03-fork-preflight-draft-gate

04-mutation-matrix-8-mutants-killed

05-targeted-gates-vitest-head

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 has neither a verdict nor a deferral on 3a00591246db2388ab806df8955f99bb6fcc9b30 — no APPROVED, CHANGES_REQUESTED, or COMMENTED review of its own. A DISMISSED one does not count: dismiss_stale_reviews voids the bot's approval on every push, which is exactly when a fresh one is needed. If this re-run was meant to review or approve, it did not, and an approval left by another account is a separate vote that does not count as the bot's own.

⚠️ 机器人在 3a00591246db2388ab806df8955f99bb6fcc9b30既没有裁决也没有 defer —— 没有属于它自己的 APPROVEDCHANGES_REQUESTEDCOMMENTED 评审。DISMISSED 不算:dismiss_stale_reviews 会在每次推送时作废机器人的批准,而那恰恰是需要一次新批准的时刻。如果这次重跑本应评审或批准,那么它没有做到;而其他账号留下的批准是另一张票,不能算作机器人自己的。

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

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

@github-actions

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 85.82% 85.82% 91.04% 84.66%
Core 88.92% 88.92% 90.58% 87.33%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   85.82 |    84.66 |   91.04 |   85.82 |                   
 src               |   86.53 |    82.86 |   88.88 |   86.53 |                   
  cli.ts           |   95.92 |    88.23 |     100 |   95.92 | ...00-701,705-706 
  llm.tsx          |   73.22 |    77.73 |   80.76 |   73.22 | ...1345-1349,1476 
  ...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 |   75.37 |    77.84 |   93.83 |   75.37 |                   
  acpAgent.ts      |   74.58 |    77.79 |   93.18 |   74.58 | ...99,13777-13778 
  ...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 |    89.65 |     100 |     100 | 79,125,142        
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
  ...ersistence.ts |   94.95 |    92.24 |     100 |   94.95 | ...13-118,227-228 
  ...management.ts |   74.75 |     66.3 |     100 |   74.75 | ...92-496,505-509 
  ...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.03 |     86.2 |   95.86 |   91.03 |                   
  Session.ts       |   90.38 |    85.15 |    95.3 |   90.38 | ...81,13808-13812 
  ...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.65 |    92.34 |   97.14 |   95.65 |                   
  ...ageEmitter.ts |   95.36 |    92.42 |     100 |   95.36 | ...16,129-130,223 
  PlanEmitter.ts   |     100 |       90 |     100 |     100 | 66                
  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.81 |   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.81 |   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.73 |    78.53 |   65.62 |   90.73 |                   
  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.46 |    76.02 |     100 |   89.46 | ...12-915,927,938 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.13 |    94.44 |   66.66 |   98.13 | 82-83             
 ...mmands/channel |   89.46 |    88.72 |   90.68 |   89.46 |                   
  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.84 |    96.22 |     100 |   96.84 | ...40-245,303-306 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   93.72 |    85.81 |   94.33 |   93.72 | ...1305,1312-1313 
  loop-runtime.ts  |   91.66 |      100 |      50 |   91.66 | 15,22             
  ...classifier.ts |   98.53 |    96.66 |     100 |   98.53 | 115-116,161       
  ...tact-store.ts |   93.51 |    87.65 |     100 |   93.51 | ...71,288-289,337 
  pairing.ts       |      75 |      100 |      50 |      75 | 22-28,59-70       
  pidfile.ts       |   95.55 |       90 |     100 |   95.55 | ...50-251,315-316 
  proxy.ts         |     100 |      100 |     100 |     100 |                   
  reload.ts        |    77.5 |    86.95 |      75 |    77.5 | 72-84,93-97       
  runtime.ts       |   82.43 |    86.44 |     100 |   82.43 | ...87-191,251-253 
  set.ts           |   75.72 |    85.71 |      50 |   75.72 | 65-83,111-116     
  start.ts         |    87.7 |    83.63 |      88 |    87.7 | ...95,601-604,616 
  ...ure-format.ts |   93.65 |    82.45 |     100 |   93.65 | ...42,48-49,74-75 
  status.ts        |   78.57 |    59.25 |   66.66 |   78.57 | ...36-137,150-161 
  stop.ts          |   57.83 |    82.35 |      50 |   57.83 | ...3,74-76,85-111 
 ...nds/extensions |   88.85 |    87.73 |   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 |     87.5 |     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 |    55.55 |     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 |   91.96 |    90.53 |   93.54 |   91.96 |                   
  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.68 |     97.6 |   94.11 |   94.68 | 269,1334-1372     
  ...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.41 |    93.96 |   98.73 |   97.41 | ...6570-6614,6874 
  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.29 |    92.25 |     100 |   97.29 | ...1566,1724-1729 
  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.32 |    90.83 |   94.11 |   94.32 | ...1219,1254-1285 
  ...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.47 |    87.58 |   95.45 |   84.47 | ...00,816-870,884 
  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.27 |    80.45 |   88.88 |   81.27 | ...69-783,785-807 
  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.34 |    94.73 |    98.7 |   97.34 |                   
  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.11 |     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.36 |    89.24 |     100 |   94.36 | ...36,669-670,818 
  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.23 |    95.29 |     100 |   98.23 | ...,822,1203,1220 
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |    95.6 |    88.67 |     100 |    95.6 | 40-41,168-173     
  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.37 |    90.47 |    95.3 |   94.37 |                   
  ...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.2 |    90.75 |   86.11 |    88.2 | ...2314,2316-2324 
  ...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.38 |   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 |   90.57 |    97.29 |   93.75 |   90.57 | 137-142,146-152   
  ...ime-reload.ts |     100 |    69.69 |     100 |     100 | ...12-113,122-123 
  hot-reload.ts    |     100 |    89.13 |     100 |     100 | 47,172-178,238    
  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.96 |     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.52 |    92.85 |   90.32 |   91.52 | ...1073,1075-1076 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  settingsUtils.ts |   80.92 |     89.2 |   85.18 |   80.92 | ...87-605,612-620 
  ...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.54 |     100 |   92.53 | ...36-337,373-384 
 ...nfig/migration |   95.23 |    78.94 |   85.71 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |       80 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.91 |      100 |     100 |   94.91 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |      100 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
  v5-to-v4.ts      |      96 |      100 |     100 |      96 | 94-95,99          
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |   75.08 |    67.64 |   71.42 |   75.08 |                   
  ...tputBridge.ts |   75.33 |    68.18 |   73.68 |   75.33 | ...09-410,418-421 
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/export        |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-7               
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/hooks         |     100 |      100 |     100 |     100 |                   
  ...elete-hook.ts |     100 |      100 |     100 |     100 |                   
 src/i18n          |   89.68 |    88.66 |   93.02 |   89.68 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  languageUtils.ts |   98.88 |    97.01 |     100 |   98.88 | 184-185           
  languages.ts     |   93.07 |     92.3 |   85.71 |   93.07 | ...35,164-169,184 
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |   87.37 |    83.73 |   89.32 |   87.37 |                   
  ...ng-failure.ts |     100 |      100 |     100 |     100 |                   
  ...iveHelpers.ts |   94.95 |    91.05 |     100 |   94.95 | ...30-431,529,542 
  ...uggestions.ts |   84.29 |    70.83 |     100 |   84.29 | 70-76,92-103      
  session.ts       |   84.97 |    76.31 |   96.07 |   84.97 | ...1048,1057-1067 
  ...iagnostics.ts |    95.8 |     87.5 |   93.75 |    95.8 | ...03,277-278,289 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...33-634,637-638 
 ...active/control |   75.54 |    89.83 |      80 |   75.54 |                   
  ...rolContext.ts |    6.06 |        0 |       0 |    6.06 | 57-99             
  ...Dispatcher.ts |   91.95 |    92.98 |   88.88 |   91.95 | ...54-372,392,395 
  ...rolService.ts |    6.89 |        0 |       0 |    6.89 | 46-188            
 ...ol/controllers |   57.57 |    66.48 |   73.68 |   57.57 |                   
  ...Controller.ts |    42.4 |      100 |   83.33 |    42.4 | 101-105,140-223   
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   70.23 |    63.33 |   91.66 |   70.23 | ...19-628,643-648 
  ...Controller.ts |   49.23 |       60 |      50 |   49.23 | ...07-108,111-121 
  ...Controller.ts |   53.96 |    67.08 |   66.66 |   53.96 | ...78-690,699-728 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.18 |    94.11 |   95.34 |   98.18 |                   
  ...putAdapter.ts |   98.07 |    93.21 |   98.11 |   98.07 | ...1448,1464-1465 
  ...putAdapter.ts |   96.22 |    91.66 |   85.71 |   96.22 | 52-53             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.51 |      100 |   90.47 |   98.51 | 90-91,131-132     
  ...projection.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/peerMessaging |   91.89 |    88.29 |   96.42 |   91.89 |                   
  ...ngContext.tsx |     100 |      100 |     100 |     100 |                   
  ...-messaging.ts |   91.78 |    88.17 |   96.29 |   91.78 | ...31-436,507-512 
 src/remoteInput   |   87.31 |    75.32 |   88.23 |   87.31 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   88.01 |       76 |   93.33 |   88.01 | ...49-350,361-364 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/runtime       |   99.72 |    95.47 |     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.53 |     100 |     100 | 53,93-94,172,192  
  ...ls-mapping.ts |     100 |      100 |     100 |     100 |                   
 src/serve         |   87.56 |    85.28 |   91.06 |   87.56 |                   
  ...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.21 |     100 |     100 | 737               
  ...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.69 |    91.96 |     100 |   98.69 | ...1590,1592-1593 
  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.38 |       82 |   95.45 |   91.38 | ...46-555,633-634 
  ...ration-sse.ts |   42.55 |    33.33 |     100 |   42.55 | 23-24,30,33-56    
  health-query.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-149             
  ...e-observer.ts |   89.89 |    83.24 |      96 |   89.89 | ...11-512,541-543 
  ...-addresses.ts |     100 |     91.3 |     100 |     100 | 52,72             
  ...back-binds.ts |     100 |      100 |     100 |     100 |                   
  ...-workspace.ts |   91.58 |    86.48 |     100 |   91.58 | ...44-145,156-157 
  ...pp-sandbox.ts |   96.72 |    95.23 |     100 |   96.72 | 41-42             
  ...iders-edit.ts |     100 |    83.33 |     100 |     100 | 58-60,65,81       
  ...ory-picker.ts |    90.9 |    91.66 |      75 |    90.9 | 32,55-64          
  ...-with-auth.ts |     100 |      100 |     100 |     100 |                   
  ...ate-blocks.ts |   99.03 |    94.73 |     100 |   99.03 | 133               
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  ...nal-ledger.ts |    94.9 |    84.94 |     100 |    94.9 | ...81,302,361-362 
  rate-limit.ts    |   92.68 |    88.29 |     100 |   92.68 | ...89-291,303-305 
  ...qwen-serve.ts |   84.85 |    81.81 |   78.24 |   84.85 | ...9505,9523-9527 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |   46.92 |     62.5 |   76.92 |   46.92 | ...1058,1070-1093 
  ...-keepalive.ts |   94.31 |    88.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.46 |    91.44 |   71.75 |   89.46 | ...3255,3286-3287 
  ...-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.63 |       80 |     100 |   98.63 | 108,136,186,189   
  ...tion-store.ts |   89.67 |    88.27 |   92.59 |   89.67 | ...91-400,411-414 
  ...e-registry.ts |   94.09 |    90.57 |     100 |   94.09 | ...91-592,599-600 
  ...e-remember.ts |   98.31 |    93.31 |     100 |   98.31 | ...47,351-356,397 
  ...te-runtime.ts |   89.85 |    90.76 |     100 |   89.85 | ...06-207,275-296 
  ...me-storage.ts |     100 |      100 |     100 |     100 |                   
  ...visibility.ts |     100 |      100 |     100 |     100 |                   
  ...management.ts |   72.63 |    72.83 |   96.15 |   72.63 | ...88-889,896-900 
  ...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.64 |    80.25 |   94.53 |   80.64 |                   
  ...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.13 |   98.52 |   93.03 | ...1624,1671-1682 
  dispatch.ts      |   75.94 |    77.03 |   93.44 |   75.94 | ...5822,5879-5885 
  index.ts         |   83.61 |    80.67 |   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.63 |    79.05 |   92.96 |   86.63 |                   
  ...e-activity.ts |     100 |      100 |     100 |     100 |                   
  ...ime-errors.ts |     100 |      100 |     100 |     100 |                   
  ...me-manager.ts |   97.88 |    94.91 |     100 |   97.88 | 64-65,92          
  ...-ownership.ts |   87.33 |    83.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.02 |    75.91 |   88.54 |   84.02 | ...3082,3091-3093 
 src/serve/fs      |   87.77 |    82.35 |     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.01 |     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.6 |    70.53 |    90.2 |    76.6 |                   
  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 |    64.3 |    82.35 |   80.76 |    64.3 | ...45-446,460-472 
  ...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.19 |      90 |   82.89 |                   
  credentials.ts   |   96.42 |    95.45 |     100 |   96.42 | 109-110           
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...interfaces.ts |   43.58 |    83.33 |   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.41 |    81.79 |   95.81 |   86.41 |                   
  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.5 |    93.65 |     100 |    98.5 | ...98,600,824-825 
  ...on-runtime.ts |   91.42 |       90 |     100 |   91.42 | 56-64             
  session.ts       |   86.76 |    83.18 |   94.44 |   86.76 | ...7281,7283-7284 
  sse-events.ts    |   87.15 |    85.09 |   94.44 |   87.15 | ...48-959,962,969 
  ...e-sessions.ts |   87.13 |    80.79 |     100 |   87.13 | ...90-492,495-500 
  terminal.ts      |   92.81 |    90.35 |     100 |   92.81 | ...10-313,332-335 
  usage-stats.ts   |     100 |    95.45 |     100 |     100 | 118               
  ...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.31 |    80.47 |      90 |   83.31 | ...1055,1060,1067 
  ...extensions.ts |   89.91 |    79.47 |   93.93 |   89.91 | ...2340,2385-2386 
  ...-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 |   75.04 |     66.4 |     100 |   75.04 | ...99-604,613-620 
  ...e-git-diff.ts |   97.19 |    89.58 |     100 |   97.19 | 157-158,185-187   
  ...ce-git-log.ts |     100 |       95 |     100 |     100 | 48,73             
  workspace-git.ts |   74.71 |     87.5 |     100 |   74.71 | 83-104            
  ...github-prs.ts |   88.26 |    63.46 |     100 |   88.26 | ...38-239,264-265 
  ...-lifecycle.ts |   95.23 |    75.75 |     100 |   95.23 | ...50-151,186-187 
  ...al-control.ts |   73.61 |       70 |     100 |   73.61 | ...28,230-236,241 
  ...management.ts |   87.14 |    84.21 |     100 |   87.14 | ...1802,1812-1817 
  ...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 
  ...e-settings.ts |   75.67 |       75 |     100 |   75.67 | ...15-726,732-733 
  ...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.53 |    91.71 |   96.15 |   93.53 |                   
  access-log.ts    |   98.73 |    97.26 |     100 |   98.73 | 119,196           
  ...-timestamp.ts |     100 |      100 |     100 |     100 |                   
  aone-mrs.ts      |   91.48 |    91.35 |   81.25 |   91.48 | ...53,299-300,466 
  ...er-helpers.ts |   63.82 |    78.15 |   81.81 |   63.82 | ...16,330,332-347 
  ...w-registry.ts |    98.8 |    81.81 |     100 |    98.8 | 107               
  ...r-handlers.ts |   97.87 |       80 |     100 |   97.87 | 27                
  ...r-response.ts |   88.93 |    84.37 |     100 |   88.93 | ...74,891,954-963 
  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.2 |     87.5 |     100 |    95.2 | 191-197           
  ...on-archive.ts |   92.43 |     90.3 |   97.61 |   92.43 | ...1140,1181-1182 
  ...ion-export.ts |   98.57 |    90.47 |     100 |   98.57 | 85                
  session-list.ts  |   97.27 |    93.88 |     100 |   97.27 | ...1183,1392-1396 
  ...pr-refresh.ts |     100 |    97.05 |     100 |     100 | 199,252,427       
  ...ry-context.ts |    87.5 |       50 |     100 |    87.5 | 49-50             
  telemetry.ts     |   99.06 |    97.27 |     100 |   99.06 | ...10,879,958-960 
 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.29 |     87.7 |   91.48 |   90.29 |                   
  index.ts         |   89.95 |    87.37 |   90.24 |   89.95 | ...1410,1424,1438 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |    92.7 |    89.73 |   98.13 |    92.7 |                   
  ...mandLoader.ts |     100 |       95 |     100 |     100 | 107               
  ...killLoader.ts |   97.19 |    86.48 |     100 |   97.19 | 142,153-154       
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   87.09 |    83.07 |     100 |   87.09 | ...35-340,345-350 
  ...omptLoader.ts |   79.55 |    88.65 |   85.71 |   79.55 | ...48,178,245-246 
  ...mandLoader.ts |   97.77 |    92.59 |     100 |   97.77 | 176,183-184       
  ...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.06 |    88.57 |      95 |   93.06 |                   
  scheduler.ts     |   93.06 |    88.57 |      95 |   93.06 | ...62-364,416-420 
 ...rvices/insight |     100 |      100 |     100 |     100 |                   
  dates.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   88.94 |    86.86 |   96.29 |   88.94 |                   
  DataProcessor.ts |   88.31 |    86.84 |      95 |   88.31 | ...1368,1372-1379 
  ...tGenerator.ts |   98.24 |    85.71 |     100 |   98.24 | 47                
  ...teRenderer.ts |     100 |      100 |     100 |     100 |                   
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.25 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |       85 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.83 |     100 |   97.41 | 96-99             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services/tips |   97.27 |    84.61 |     100 |   97.27 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  tipHistory.ts    |   92.59 |       70 |     100 |   92.59 | ...24,146,153,162 
  tipRegistry.ts   |     100 |      100 |     100 |     100 |                   
  tipScheduler.ts  |     100 |    91.66 |     100 |     100 | 55                
 src/startup       |   88.99 |    83.47 |    90.9 |   88.99 |                   
  ...p-prefetch.ts |   98.09 |    94.23 |    87.5 |   98.09 | 50,209,225-226    
  ...reeStartup.ts |   80.53 |     74.6 |     100 |   80.53 | ...94,403,409-412 
 src/test-utils    |    94.6 |    76.66 |      80 |    94.6 |                   
  ci-env.ts        |      88 |     62.5 |     100 |      88 | 22-23,28          
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...mised-lock.ts |     100 |      100 |   66.66 |     100 |                   
  ...lot-client.ts |     100 |    66.66 |     100 |     100 | 31,39             
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   71.68 |    78.68 |   72.18 |   71.68 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |    77.5 |    74.24 |   76.31 |    77.5 | ...4520,4636-4642 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |    30.3 |      100 |       0 |    30.3 | 26-76             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |   63.63 |      100 |   41.17 |   63.63 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...AutoUpdate.ts |   93.54 |    94.64 |      90 |   93.54 | 126,131,202-213   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.81 |    77.44 |   62.16 |   39.81 | ...1193,1196-1215 
  ...ractiveUI.tsx |   68.53 |    78.26 |      50 |   68.53 | ...65-467,497-502 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  systemInfo.ts    |   95.09 |    90.27 |     100 |   95.09 | ...54-255,260-264 
  ...InfoFields.ts |   89.28 |    69.04 |     100 |   89.28 | ...09-110,124-125 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-relaunch.ts |   89.61 |    86.66 |      50 |   89.61 | 56-61,83-84       
 src/ui/auth       |   69.23 |    72.03 |   61.22 |   69.23 |                   
  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 |     100 |   94.83 | ...33-234,253-259 
  ...rSetupFlow.ts |   59.79 |    58.33 |     100 |   59.79 | ...82-403,420-463 
 src/ui/commands   |    84.7 |    84.48 |   91.66 |    84.7 |                   
  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.75 |    74.02 |   83.33 |   73.75 | ...72-605,616-617 
  copyCommand.ts   |    98.7 |    96.29 |     100 |    98.7 | 66-67,172,272,323 
  ...or-command.ts |   85.95 |    80.55 |   88.88 |   85.95 | ...68-274,298-309 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |    87.87 |     100 |     100 | ...63,231-232,245 
  ...ryCommand.tsx |   90.56 |    87.83 |    90.9 |   90.56 | ...75-280,327-334 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 26                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  doctorCommand.ts |   70.16 |    84.61 |      95 |   70.16 | ...29-679,682-816 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...rt-command.ts |   80.95 |       80 |     100 |   80.95 | 49-54,69-72,93-98 
  effort-utils.ts  |     100 |      100 |     100 |     100 |                   
  exportCommand.ts |   98.25 |    91.02 |     100 |   98.25 | ...81,198-199,364 
  ...onsCommand.ts |   52.31 |    56.25 |   69.23 |   52.31 | ...09,277-329,390 
  forgetCommand.ts |     100 |       90 |     100 |     100 | 59                
  forkCommand.ts   |     100 |    94.11 |     100 |     100 | 95,146            
  goalCommand.ts   |     100 |    96.49 |     100 |     100 | 139,192           
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.25 |    65.71 |   85.71 |   81.25 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |    58.5 |    74.07 |      80 |    58.5 | ...21-331,334-343 
  initCommand.ts   |   91.86 |       80 |     100 |   91.86 | 48,83-88          
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   94.63 |    90.66 |     100 |   94.63 | ...25-226,253-263 
  learn-command.ts |     100 |      100 |     100 |     100 |                   
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,102-103        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   86.28 |    86.29 |     100 |   86.28 | ...1112,1146-1151 
  peers-command.ts |     100 |    94.36 |     100 |     100 | 59,70,223,228     
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  planCommand.ts   |   78.82 |    76.92 |     100 |   78.82 | 30-35,51-56,68-73 
  quitCommand.ts   |     100 |      100 |     100 |     100 |                   
  recapCommand.ts  |   21.81 |      100 |      50 |   21.81 | 24-73             
  ...ns-command.ts |   98.83 |    81.81 |     100 |   98.83 | 100               
  ...berCommand.ts |     100 |     87.5 |     100 |     100 | 46                
  renameCommand.ts |    89.6 |       90 |     100 |    89.6 | ...72-176,212-219 
  ...oreCommand.ts |   90.96 |    86.04 |     100 |   90.96 | ...41-146,177-178 
  resumeCommand.ts |     100 |      100 |     100 |     100 |                   
  rewindCommand.ts |   81.25 |      100 |      50 |   81.25 | 20-22             
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   89.47 |       75 |      80 |   89.47 | 54-59             
  skillsCommand.ts |   78.82 |    81.81 |     100 |   78.82 | 37-52,78,97       
  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.07 |    80.32 |   78.81 |   74.07 |                   
  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.06 |    90.78 |     100 |   89.06 | ...87-289,303-305 
  ...ontroller.tsx |     100 |      100 |     100 |     100 |                   
  Composer.tsx     |   94.54 |    66.66 |     100 |   94.54 | ...-76,88,143,158 
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   68.42 |    57.14 |     100 |   68.42 | 16-17,31-32,42-50 
  CronPill.tsx     |     100 |    93.75 |     100 |     100 | 19                
  ...ification.tsx |      84 |       60 |     100 |      84 | 23-24,40-42       
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |   11.28 |      100 |       0 |   11.28 | 71-598            
  DiffDialog.tsx   |    53.5 |     37.5 |   69.23 |    53.5 | ...32-737,747-760 
  ...ngsDialog.tsx |    8.44 |      100 |       0 |    8.44 | 37-195            
  EffortDialog.tsx |   97.36 |      100 |     100 |   97.36 | 55-56             
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...hProgress.tsx |    87.8 |    33.33 |     100 |    87.8 | 28-31,56          
  ...gsDisplay.tsx |     100 |    96.87 |   83.33 |     100 | 69                
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   81.27 |    69.23 |      50 |   81.27 | ...06,245,267-272 
  GoalPill.tsx     |   93.51 |    81.81 |     100 |   93.51 | 37-38,106-109,123 
  Header.tsx       |   98.65 |    94.73 |     100 |   98.65 | 173,175           
  Help.tsx         |   98.33 |       90 |     100 |   98.33 | ...25,382,448-449 
  ...emDisplay.tsx |   79.69 |    67.61 |     100 |   79.69 | ...17,520,523-529 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   86.36 |    83.41 |      80 |   86.36 | ...2242,2263,2366 
  ...Shortcuts.tsx |     100 |       88 |     100 |     100 | 98,119            
  ...Indicator.tsx |   98.18 |    97.82 |     100 |   98.18 | 161-162           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   95.88 |    96.03 |   46.15 |   95.88 | ...20,523-527,530 
  MemoryDialog.tsx |   86.59 |    80.15 |     100 |   86.59 | ...34-435,485,553 
  ModelDialog.tsx  |   85.22 |    74.17 |     100 |   85.22 | ...1042,1098,1100 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | 14-56             
  ...onsDialog.tsx |    2.13 |      100 |       0 |    2.13 | 62-133,148-1004   
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...icePrompt.tsx |   92.64 |    85.71 |     100 |   92.64 | 102-106,134-139   
  PrepareLabel.tsx |   91.66 |    77.27 |     100 |   91.66 | 73-75,77-79,110   
  ...atePrompt.tsx |   91.34 |       70 |     100 |   91.34 | 48-51,63-66,78    
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |   21.42 |      100 |       0 |   21.42 | 13-39             
  ...hProgress.tsx |   85.25 |    88.46 |     100 |   85.25 | 121-147           
  ...ngSpinner.tsx |   67.85 |    85.71 |      50 |   67.85 | 33-50,71,78-79    
  ...dSelector.tsx |   92.79 |    82.65 |     100 |   92.79 | ...19-323,354-370 
  ...ionPicker.tsx |   83.66 |    72.13 |     100 |   83.66 | ...96,402,444-466 
  ...onPreview.tsx |   93.58 |    83.78 |     100 |   93.58 | ...,70-71,195-197 
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   92.06 |    86.36 |   83.33 |   92.06 | ...,70-72,120-123 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   71.55 |    73.89 |   69.23 |   71.55 | ...1252,1258-1259 
  ...ionDialog.tsx |    92.3 |    96.15 |   33.33 |    92.3 | 60-63,68-75,164   
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |      28 |      100 |       0 |      28 | 18-40             
  ...iewDialog.tsx |   97.77 |    87.67 |     100 |   97.77 | ...97,305-307,324 
  ...tsDisplay.tsx |   95.86 |       75 |     100 |   95.86 | 67-71             
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-171             
  ...tivityTab.tsx |    3.94 |      100 |       0 |    3.94 | 27-275            
  StatsDialog.tsx  |    8.64 |      100 |       0 |    8.64 | ...76-111,130-322 
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |    78.9 |    56.52 |     100 |    78.9 | ...26,213,262-288 
  ...atmapView.tsx |    8.98 |      100 |       0 |    8.98 | 20-107            
  ...essionTab.tsx |      80 |    66.66 |     100 |      80 | ...70-277,283-300 
  ...ineDialog.tsx |    93.9 |    86.88 |     100 |    93.9 | ...20,282,302-304 
  ...yTodoList.tsx |   96.36 |    88.23 |     100 |   96.36 | 138-141           
  ...nsDisplay.tsx |   96.01 |    88.05 |     100 |   96.01 | ...29-130,295-297 
  ...inalImage.tsx |     100 |    93.93 |     100 |     100 | 75,129            
  ThemeDialog.tsx  |   89.95 |    46.15 |      75 |   89.95 | ...71-173,243-245 
  Tips.tsx         |   93.54 |       75 |     100 |   93.54 | 39-40             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  TrustDialog.tsx  |     100 |    83.33 |     100 |     100 | 72-87             
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...Indicator.tsx |    92.5 |     87.5 |     100 |    92.5 | 50-53             
  ...ackDialog.tsx |    7.84 |      100 |       0 |    7.84 | 24-134            
  ...xitDialog.tsx |   80.36 |    43.47 |      60 |   80.36 | ...24-238,248-251 
  ...odeVisuals.ts |   97.22 |    85.71 |     100 |   97.22 | 25                
  ...s-helpers.tsx |   66.25 |    81.25 |      50 |   66.25 | 25-32,46-53,62-72 
 ...nts/agent-view |    61.5 |    75.57 |    62.5 |    61.5 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |     100 |    81.81 |     100 |     100 | 82                
  ...tComposer.tsx |   78.35 |     64.7 |   66.66 |   78.35 | ...64,277,303-305 
  AgentFooter.tsx  |   15.38 |      100 |       0 |   15.38 | 28-65             
  AgentHeader.tsx  |   15.38 |      100 |       0 |   15.38 | 27-64             
  AgentTabBar.tsx  |    87.9 |    63.88 |     100 |    87.9 | ...88,110-118,136 
  ...oryAdapter.ts |     100 |    91.83 |     100 |     100 | 103,109-110,138   
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
 ...mponents/arena |   45.51 |    70.53 |   60.86 |   45.51 |                   
  ArenaCards.tsx   |   73.06 |    71.79 |   85.71 |   73.06 | ...83-185,321-326 
  ...ectDialog.tsx |   83.48 |    69.86 |   88.88 |   83.48 | ...88-392,409-410 
  ...artDialog.tsx |    9.77 |      100 |       0 |    9.77 | 27-166            
  ...tusDialog.tsx |    5.63 |      100 |       0 |    5.63 | 33-75,80-288      
  ...topDialog.tsx |    6.17 |      100 |       0 |    6.17 | 33-213            
 ...ackground-view |   85.86 |     85.1 |   92.98 |   85.86 |                   
  ...sksDialog.tsx |   82.66 |    83.09 |   85.71 |   82.66 | ...1854,1977-1983 
  ...TasksPill.tsx |   78.84 |    94.28 |     100 |   78.84 | 64,109-129        
  ...gentPanel.tsx |   97.08 |    86.31 |     100 |   97.08 | 132,442-446,520   
  agent-forest.ts  |    99.2 |    93.93 |     100 |    99.2 | 258               
  ...Visibility.ts |     100 |      100 |     100 |     100 |                   
  ...e-overlay.tsx |    88.2 |    76.47 |     100 |    88.2 | ...36-138,140-142 
 ...nts/extensions |   84.32 |    76.78 |   83.33 |   84.32 |                   
  ...gerDialog.tsx |   82.15 |    76.08 |     100 |   82.15 | ...91-198,258,260 
  TabBar.tsx       |   97.29 |    88.88 |     100 |   97.29 | 33                
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   46.26 |       85 |   58.82 |   46.26 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |       0 |        0 |       0 |       0 | 1-145             
  ...nListStep.tsx |   75.26 |    88.37 |   66.66 |   75.26 | ...53,174,203-209 
  ...electStep.tsx |       0 |        0 |       0 |       0 | 1-83              
  ...nfirmStep.tsx |   16.32 |      100 |       0 |   16.32 | 28-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
 ...xtensions/tabs |   71.92 |    68.21 |   70.83 |   71.92 |                   
  DiscoverTab.tsx  |   68.22 |    67.66 |   55.55 |   68.22 | ...93,656-660,664 
  InstalledTab.tsx |   75.49 |    67.44 |   83.33 |   75.49 | ...77,782-783,820 
  SourcesTab.tsx   |   71.67 |    70.47 |   77.77 |   71.67 | ...28,547,621-633 
 ...tensions/views |    50.7 |    52.38 |   20.83 |    50.7 |                   
  ...tionsView.tsx |   73.75 |    56.36 |   66.66 |   73.75 | ...30,353,369-374 
  ...tionsView.tsx |   43.45 |    44.82 |    6.66 |   43.45 | ...98-405,408-420 
  ...etailView.tsx |    9.24 |      100 |       0 |    9.24 | 40-67,70-163      
 ...mponents/hooks |   87.11 |    81.37 |   91.89 |   87.11 |                   
  ...rListBody.tsx |   95.29 |    85.18 |     100 |   95.29 | 95-98             
  ...etailStep.tsx |   75.32 |    71.42 |      60 |   75.32 | ...56-169,173-186 
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entHeader.tsx |     100 |    85.71 |     100 |     100 | 47                
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...abledStep.tsx |     100 |      100 |     100 |     100 |                   
  ...sListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   72.29 |    70.49 |     100 |   72.29 | ...51,563-568,572 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
  ...erGrouping.ts |     100 |      100 |     100 |     100 |                   
  sourceLabels.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |   40.91 |    63.44 |   70.58 |   40.91 |                   
  ...ealthPill.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   32.09 |    26.19 |      40 |   32.09 | ...12,914,927-933 
  ...valDialog.tsx |   15.06 |      100 |       0 |   15.06 | 40-109            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-35              
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |      97 |       95 |     100 |      97 | 24,113-114        
 ...ents/mcp/steps |   53.94 |    73.51 |   57.14 |   53.94 |                   
  ...icateStep.tsx |    5.65 |      100 |       0 |    5.65 | 40-66,69-308      
  ...electStep.tsx |   10.95 |      100 |       0 |   10.95 | 16-88             
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...eListStep.tsx |   99.09 |    97.36 |     100 |   99.09 | 71                
  ...etailStep.tsx |   62.83 |       60 |   33.33 |   62.83 | ...87-296,307-332 
  ...rListStep.tsx |   88.53 |    81.25 |     100 |   88.53 | ...64,170,175-180 
  ...etailStep.tsx |    10.3 |      100 |       0 |    10.3 | ...1,67-79,82-140 
  ToolListStep.tsx |   69.29 |       50 |     100 |   69.29 | ...23,126,135-144 
 ...nents/messages |   90.71 |    87.78 |   86.53 |   90.71 |                   
  ...orMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...ionDialog.tsx |   89.23 |     84.9 |   81.81 |   89.23 | ...75,593,611-613 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |    94.73 |     100 |     100 | ...43,289,402,432 
  ...onMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...nMessages.tsx |   92.35 |    96.07 |   76.92 |   92.35 | ...59-361,364-367 
  DiffRenderer.tsx |   93.17 |    86.02 |     100 |   93.17 | ...07,235-236,302 
  ...tsDisplay.tsx |   97.08 |    77.77 |     100 |   97.08 | 95,97,106         
  ...usMessage.tsx |   81.73 |     65.9 |      75 |   81.73 | ...10-214,222,245 
  ...tsDisplay.tsx |   95.52 |    88.31 |     100 |   95.52 | ...40,142,175-180 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   21.05 |      100 |       0 |   21.05 | 23-39             
  ...sMessages.tsx |   59.04 |       50 |    37.5 |   59.04 | ...21-126,147-159 
  ...ryMessage.tsx |   13.63 |      100 |       0 |   13.63 | 23-64             
  ...onMessage.tsx |   91.87 |    82.51 |     100 |   91.87 | ...49-651,658-660 
  ...upMessage.tsx |   98.38 |    95.38 |     100 |   98.38 | 188-191,422       
  ToolMessage.tsx  |   95.04 |    89.55 |     100 |   95.04 | ...1075,1120-1122 
 ...ponents/shared |   86.34 |    82.18 |    86.6 |   86.34 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...rBoundary.tsx |     100 |      100 |     100 |     100 |                   
  MaxSizedBox.tsx  |   84.71 |    86.95 |      90 |   84.71 | ...67-568,685-686 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   90.37 |    82.85 |   18.18 |   90.37 | ...60-63,65,73-76 
  StaticRender.tsx |     100 |      100 |     100 |     100 |                   
  TextInput.tsx    |    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 |    3.99 |      100 |       0 |    3.99 |                   
  ...gerDialog.tsx |    3.99 |      100 |       0 |    3.99 | 79-137,140-678    
 ...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 |    9.13 |      100 |       0 |    9.13 |                   
  ...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 |    8.63 |      100 |       0 |    8.63 | 23-177            
  ...dSelector.tsx |   33.33 |      100 |       0 |   33.33 | 20-21,26-27,36-63 
  ...nSelector.tsx |    37.5 |      100 |       0 |    37.5 | 20-21,26-27,36-58 
  ...EntryStep.tsx |   12.76 |      100 |       0 |   12.76 | 34-78             
  ToolSelector.tsx |    4.16 |      100 |       0 |    4.16 | 31-253            
 ...bagents/manage |    21.6 |    59.52 |   27.27 |    21.6 |                   
  ...ctionStep.tsx |   10.25 |      100 |       0 |   10.25 | 21-103            
  ...eleteStep.tsx |   20.93 |      100 |       0 |   20.93 | 23-62             
  ...tEditStep.tsx |   25.53 |      100 |       0 |   25.53 | ...2,37-38,51-124 
  ...ctionStep.tsx |   35.61 |    59.52 |     100 |   35.61 | ...21-433,438-440 
  ...iewerStep.tsx |   13.72 |      100 |       0 |   13.72 | 18-73             
  ...gerDialog.tsx |    6.74 |      100 |       0 |    6.74 | 35-341            
 ...mponents/views |   69.22 |    71.81 |   61.11 |   69.22 |                   
  ContextUsage.tsx |   71.49 |    64.86 |      80 |   71.49 | ...30-436,473-567 
  DoctorReport.tsx |     9.8 |      100 |       0 |     9.8 | 25-54,57-131      
  ...sionsList.tsx |   88.05 |       75 |     100 |   88.05 | 70-77             
  McpStatus.tsx    |   92.01 |     73.8 |     100 |   92.01 | ...36,175-177,262 
  SkillsList.tsx   |   20.51 |      100 |       0 |   20.51 | 17-20,27-57       
  ToolsList.tsx    |      75 |    81.81 |     100 |      75 | 39-42,59-67       
 src/ui/contexts   |   86.47 |    82.27 |   86.48 |   86.47 |                   
  ...ewContext.tsx |   91.66 |       90 |      75 |   91.66 | ...89-193,279-289 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   93.83 |    68.51 |   42.85 |   93.83 | ...44,281-285,317 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.65 |    84.85 |     100 |   85.65 | ...1612-1614,1620 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   80.77 |    79.56 |    92.3 |   80.77 | ...31-434,443-446 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...edContext.tsx |     100 |      100 |      50 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 156-157           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 237-238           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
  ...rtContext.tsx |     100 |      100 |     100 |     100 |                   
 src/ui/daemon     |   89.51 |    76.92 |   95.65 |   89.51 |                   
  ...ui-adapter.ts |   89.51 |    76.92 |   95.65 |   89.51 | ...59,877-878,964 
 src/ui/editors    |   93.33 |    85.71 |   66.66 |   93.33 |                   
  ...ngsManager.ts |   93.33 |    85.71 |   66.66 |   93.33 | 49,63-64          
 src/ui/hooks      |   86.49 |    84.45 |   88.88 |   86.49 |                   
  ...dProcessor.ts |   85.53 |     85.2 |     100 |   85.53 | ...-970,1017-1018 
  ...ention-ref.ts |   97.72 |       84 |     100 |   97.72 | 65                
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...esourceRef.ts |     100 |      100 |     100 |     100 |                   
  ...completion.ts |     100 |    95.45 |     100 |     100 | 95                
  ...ention-ref.ts |     100 |      100 |     100 |     100 |                   
  ...dProcessor.ts |   94.51 |    73.58 |     100 |   94.51 | ...97-298,303-304 
  ...dProcessor.ts |   86.83 |    71.86 |   83.33 |   86.83 | ...1536,1565-1569 
  ...rt-command.ts |     100 |      100 |     100 |     100 |                   
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...llm-stream.ts |   88.85 |    85.07 |   85.18 |   88.85 | ...6260,6262,6367 
  ...ng-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...oice-input.ts |   92.41 |    82.08 |   66.66 |   92.41 | ...12,514-515,670 
  ...ke-repaint.ts |     100 |      100 |     100 |     100 |                   
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      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 |   36.11 |       10 |     100 |   36.11 | ...89-195,202-207 
  useDiffData.ts   |   11.62 |      100 |       0 |   11.62 | 44-87             
  ...oublePress.ts |   53.12 |       75 |     100 |   53.12 | 33-35,41-54       
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   99.12 |    97.64 |     100 |   99.12 | 182-183           
  ...ionUpdates.ts |   93.72 |    92.98 |     100 |   93.72 | ...87-291,314-320 
  ...agerDialog.ts |   88.88 |      100 |     100 |   88.88 | 21,25             
  ...backDialog.ts |    63.9 |    76.47 |   66.66 |    63.9 | ...66-168,190-191 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |    93.33 |     100 |     100 | 62                
  ...ggestions.tsx |   96.47 |    78.94 |     100 |   96.47 | 121,155-156       
  ...BranchName.ts |     100 |    94.44 |     100 |     100 | 54                
  ...oryManager.ts |   98.44 |     98.9 |     100 |   98.44 | 157-160           
  ...ooksDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...stListener.ts |     100 |      100 |     100 |     100 |                   
  ...nAuthError.ts |   76.19 |       50 |     100 |   76.19 | 39-40,43-45       
  ...putHistory.ts |   92.59 |    85.71 |     100 |   92.59 | 63-64,72,94-96    
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |   22.58 |      100 |      50 |   22.58 | 11-32,44-85       
  ...gIndicator.ts |     100 |    96.66 |     100 |     100 | 109               
  useLogger.ts     |      16 |      100 |       0 |      16 | 15-45             
  useMCPHealth.ts  |   10.52 |      100 |       0 |   10.52 | 36-75             
  ...cpApproval.ts |   93.12 |    86.11 |     100 |   93.12 | ...24-127,139-140 
  useMcpDialog.ts  |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...moryDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...oryMonitor.ts |   83.14 |    78.57 |     100 |   83.14 | 54-63,74-79       
  ...ssageQueue.ts |     100 |    95.19 |     100 |     100 | ...53,289,360,375 
  ...delCommand.ts |     100 |       96 |     100 |     100 | 61                
  ...ouseEvents.ts |   94.89 |       95 |   83.33 |   94.89 | 78-82             
  ...raseCycler.ts |   84.74 |    76.47 |     100 |   84.74 | ...49,52-53,69-71 
  ...rredEditor.ts |   58.33 |    22.22 |     100 |   58.33 | 23-27,29-33       
  ...derUpdates.ts |   89.16 |     82.6 |     100 |   89.16 | ...77,329-339,419 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   89.13 |     86.9 |     100 |   89.13 | ...61-463,496-506 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...umeCommand.ts |   96.51 |    90.19 |     100 |   96.51 | 279,306-311       
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.19 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.35 |     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 |       70 |     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    |   83.78 |    76.39 |   80.59 |   83.78 |                   
  ...plain-text.ts |     100 |    89.47 |     100 |     100 | 73,134            
  ...een-reader.ts |     100 |    88.57 |     100 |     100 | 79-83,198,211     
  clipboard.ts     |     100 |    88.88 |     100 |     100 | 47                
  ...ds-context.ts |   96.66 |      100 |   38.88 |   96.66 | 159,161           
  ...nds-output.ts |     100 |      100 |     100 |     100 |                   
  dialogs-core.ts  |     100 |    94.28 |     100 |     100 | 179,190           
  ...gs-shared.tsx |   51.32 |     64.7 |      40 |   51.32 | ...28-331,371-449 
  ...ogs-theme.tsx |    30.8 |    88.88 |      75 |    30.8 | 148-326           
  early-input.ts   |   94.23 |    73.68 |   71.42 |   94.23 | 85,88-89          
  event-adapter.ts |   90.57 |    71.42 |   88.88 |   90.57 | ...36,721,740-748 
  exit-guard.ts    |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   95.45 |     87.5 |     100 |   95.45 | 56                
  help-content.ts  |   98.11 |    85.41 |     100 |   98.11 | 226-227,316,318   
  input-history.ts |     100 |    84.21 |     100 |     100 | 43-45,58          
  ...projection.ts |    83.6 |    63.26 |   86.66 |    83.6 | ...1069,1074,1079 
  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 
  mouse-caret.ts   |     100 |      100 |     100 |     100 |                   
  mouse-hit.ts     |     100 |      100 |     100 |     100 |                   
  osc8-parity.ts   |     100 |      100 |     100 |     100 |                   
  ...h-dispatch.ts |   75.24 |     63.1 |      50 |   75.24 | ...73,592-593,636 
  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           
 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.27 |     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.33 |     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.33 |     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.1 |     100 |   96.07 | 104-107           
  ...mage-parts.ts |   97.75 |       95 |     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.93 |     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.24 |    89.84 |   96.14 |   92.24 |                   
  ...p-profiler.ts |   98.39 |    92.59 |     100 |   98.39 | 141,185,235       
  acpModelUtils.ts |   97.36 |    95.09 |     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 
  ...arResolver.ts |   97.14 |    96.55 |     100 |   97.14 | 125-126           
  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 |   86.64 |    77.02 |     100 |   86.64 | ...03-304,335-345 
  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 |   94.31 |    91.36 |     100 |   94.31 | ...34,440,443-447 
  ...-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.35 |    96.77 |     100 |   99.35 | 119               
  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          |   88.92 |    87.33 |   90.58 |   88.92 |                   
 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.51 |    85.04 |      94 |   90.51 |                   
  ...transcript.ts |   88.49 |    84.09 |     100 |   88.49 | ...32,640,646-650 
  ...ent-resume.ts |   85.74 |       78 |    85.1 |   85.74 | ...1803-1807,1810 
  ...ound-tasks.ts |   95.19 |    90.75 |   96.42 |   95.19 | ...1889,1897-1898 
  forkedAgent.ts   |   95.91 |    87.12 |   94.44 |   95.91 | ...76-478,601,728 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   94.64 |    88.67 |   95.71 |   94.64 | ...1676,1690-1692 
  ...w-snapshot.ts |   75.58 |    72.47 |    87.5 |   75.58 | ...24,448,455-457 
  worktree-pin.ts  |     100 |    88.23 |     100 |     100 | 78,99             
 src/agents/arena  |   76.87 |    68.43 |   78.94 |   76.87 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |    75.8 |    65.46 |   78.57 |    75.8 | ...1879,1885-1886 
  arena-events.ts  |   64.44 |      100 |      50 |   64.44 | ...71-175,178-183 
  diff-summary.ts  |    87.5 |    72.34 |     100 |    87.5 | ...32-133,137-138 
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...gents/backends |   77.77 |    86.68 |   75.86 |   77.77 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   92.12 |    90.74 |   97.05 |   92.12 | ...37-538,666-672 
  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.43 |    87.58 |   91.66 |   93.43 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  ...-test-mock.ts |   98.82 |    66.66 |   58.33 |   98.82 | 85                
  agent-core.ts    |   90.38 |    80.91 |   81.25 |   90.38 | ...2550,2596-2598 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   93.57 |    89.41 |   83.33 |   93.57 | ...04-505,508-509 
  ...nteractive.ts |   81.64 |     82.6 |      80 |   81.64 | ...33,535-538,541 
  ...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.86 |    90.47 |     100 |   93.86 | ...2213,2306-2309 
  ...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   |   85.75 |     86.2 |   91.15 |   85.75 |                   
  TeamManager.ts   |   80.12 |    84.78 |   84.37 |   80.12 | ...2089,2112-2113 
  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.29 |       83 |     100 |   89.29 | ...1000,1044-1045 
  team-events.ts   |   73.68 |      100 |   66.66 |   73.68 | 140-144,151-155   
  teamHelpers.ts   |   92.99 |    94.52 |      95 |   92.99 | ...29-330,415-425 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   95.28 |    95.34 |   98.24 |   95.28 |                   
  ...on-harness.ts |   96.49 |    85.71 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |     100 |    96.96 |     100 |     100 | 189,198           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |    86.3 |    88.53 |   78.38 |    86.3 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   84.86 |    87.79 |   76.28 |   84.86 | ...9561,9565-9567 
  ...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.84 |    88.69 |   93.96 |   92.84 |                   
  ...on-restore.ts |   88.23 |    85.41 |     100 |   88.23 | ...60,63-64,67-68 
  baseLlmClient.ts |    88.4 |    83.68 |   81.81 |    88.4 | ...59,672,678-680 
  client.ts        |   92.48 |    88.27 |   91.91 |   92.48 | ...4688,4786-4787 
  ...tGenerator.ts |   87.45 |    88.09 |   88.88 |   87.45 | ...09-510,555-561 
  ...lScheduler.ts |   90.22 |    84.96 |   94.73 |   90.22 | ...6488,6516-6532 
  ...entContext.ts |   96.63 |    90.13 |   96.66 |   96.63 | ...42,444-445,512 
  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.21 |     90.8 |   96.66 |   95.21 | ...5769,5814-5815 
  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       |   93.89 |     91.2 |      85 |   93.89 | ...1272,1475-1476 
  ...ing-effort.ts |     100 |      100 |     100 |     100 |                   
  ...n-recovery.ts |   95.13 |       80 |     100 |   95.13 | ...06-107,142-144 
  ...t-profiler.ts |    97.9 |    81.15 |   88.23 |    97.9 | 117,124-125,130   
  stream-guards.ts |   91.16 |    93.18 |     100 |   91.16 | ...89,218-229,294 
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |    91.89 |     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 | 784-785,854       
  ...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.41 |    90.86 |   96.33 |   92.41 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   91.25 |    89.66 |   96.87 |   91.25 | ...1946,2115-2130 
  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.3 |    91.36 |     100 |    96.3 | ...1204-1205,1312 
  ...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.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   97.24 |       92 |   98.64 |   97.24 |                   
  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.87 |       96 |     100 |   98.87 | 178,304           
  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.16 |    86.49 |   93.61 |   89.16 |                   
  ...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 |   92.82 |     89.1 |    98.3 |   92.82 | ...1641-1647,1691 
  ...ionManager.ts |   84.96 |    84.05 |      83 |   84.96 | ...3159,3197-3198 
  ...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.59 |    90.38 |      95 |   93.59 |                   
  ...eGoalStore.ts |   87.61 |    88.88 |   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.82 |   97.36 |   95.75 | ...76,666,684-685 
  goal-runtime.ts  |   96.51 |    90.64 |   96.49 |   96.51 | ...1645-1646,1777 
  ...provenance.ts |     100 |      100 |     100 |     100 |                   
  goal-tools.ts    |   98.58 |     95.2 |   96.15 |   98.58 | ...41-242,350-351 
  ...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.59 |    86.89 |   90.32 |   90.59 |                   
  ...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.66 |    93.33 |     100 |   96.66 | 66-67             
  ...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.57 |    84.76 |   94.73 |   95.57 | ...1040-1041,1051 
  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 | ...58-759,765-766 
  ...HookRunner.ts |   79.06 |    66.66 |      80 |   79.06 | ...33-434,452-456 
  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,169-184     
  ...oksManager.ts |   94.87 |    90.12 |     100 |   94.87 | ...84,325,327-329 
  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.64 |    94.01 |   96.72 |   94.64 |                   
  inbound-gate.ts  |   98.99 |    89.71 |     100 |   98.99 | 557-559           
  ...-directory.ts |     100 |      100 |     100 |     100 |                   
  peer-envelope.ts |     100 |      100 |     100 |     100 |                   
  peer-frames.ts   |   97.61 |    97.22 |     100 |   97.61 | 262-264           
  peer-routing.ts  |     100 |      100 |     100 |     100 |                   
  peer-send.ts     |   97.17 |     98.3 |   88.88 |   97.17 | 183-187           
  socket-path.ts   |   85.71 |    93.33 |     100 |   85.71 | 83-88             
  uds-client.ts    |   88.52 |    92.59 |   85.71 |   88.52 | 172-185           
  uds-inbox.ts     |   82.42 |    84.09 |     100 |   82.42 | ...33,240-250,282 
 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.72 |    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 |    83.33 |     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        |   92.81 |    89.34 |   91.35 |   92.81 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   97.77 |    91.83 |     100 |   97.77 | 155,161,171       
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   79.43 |    64.51 |   85.71 |   79.43 | ...,89-96,131-142 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.07 |     100 |     100 | 177,262           
  modelsConfig.ts  |   89.36 |    86.93 |   88.09 |   89.36 | ...1407,1436-1437 
  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.44 |    91.62 |   71.77 |   84.44 |                   
  autoMode.ts      |   97.66 |    93.13 |     100 |   97.66 | ...82-589,635,712 
  ...transcript.ts |   98.51 |    86.48 |     100 |   98.51 | 264-265           
  classifier.ts    |      94 |    94.54 |     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.26 |     91.9 |   82.35 |   88.26 | ...1374,1480-1484 
  rule-parser.ts   |    94.9 |    92.81 |     100 |    94.9 | ...1552,1586-1588 
  ...-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.67 |    86.35 |   96.59 |   90.67 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   98.48 |    87.28 |     100 |   98.48 | 81-82,105,474-475 
  branch-points.ts |     100 |    95.23 |     100 |     100 | ...20,211,224,327 
  ...ionService.ts |   97.77 |    96.56 |     100 |   97.77 | ...1098,1241-1249 
  ...ingService.ts |   92.25 |    87.59 |   94.79 |   92.25 | ...2924,2939-2940 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |    97.2 |    94.23 |     100 |    97.2 | ...39-340,378-381 
  cronScheduler.ts |   94.11 |    89.74 |   98.03 |   94.11 | ...1366,1775-1776 
  cronTasksFile.ts |   95.88 |       92 |     100 |   95.88 | ...72,381-382,520 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   96.22 |    93.54 |      90 |   96.22 | 121,155-156,161   
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |    97.5 |    96.07 |     100 |    97.5 | 349-350,363-364   
  ...temService.ts |    92.8 |    84.68 |   94.11 |    92.8 | ...53,479-486,531 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |   74.75 |    70.76 |   96.07 |   74.75 | ...2296,2325-2326 
  ...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 |   98.26 |    97.24 |     100 |   98.26 | ...65-866,889-890 
  ...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.23 |     100 |     100 | 31                
  ...on-service.ts |   94.61 |    92.44 |   97.22 |   94.61 | ...11-613,669-677 
  ...pr-service.ts |   96.04 |    89.74 |     100 |   96.04 | 72,98-101,190-191 
  ...ce-service.ts |    98.5 |    94.11 |    90.9 |    98.5 | 64-65             
  ...n-registry.ts |    98.8 |    96.73 |     100 |    98.8 | 630,684-685,743   
  ...ken-counts.ts |     100 |       96 |     100 |     100 | 58                
  ...ipt-reader.ts |    93.7 |    91.09 |    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.33 |    87.47 |   91.72 |   89.33 | ...4207-4208,4249 
  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 |   90.77 |    84.92 |     100 |   90.77 | ...43-546,598-599 
  ...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.8 |     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.78 |    86.08 |   94.73 |   89.78 |                   
  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    |   94.84 |    87.69 |     100 |   94.84 | ...03,223,235-237 
  skill-manager.ts |   86.11 |    85.71 |   86.11 |   86.11 | ...1244,1251-1255 
  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     |   88.93 |    89.34 |   98.36 |   88.93 |                   
  ...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.75 |    86.38 |   97.56 |   85.75 | ...1653,1730-1731 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   94.14 |    95.23 |     100 |   94.14 | 47-52,65-66,71-76 
 src/telemetry     |   83.23 |    84.98 |   86.51 |   83.23 |                   
  ...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.79 |   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.77 |   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.26 |    88.81 |   86.36 |   83.26 | ...1467,1471-1478 
  uiTelemetry.ts   |   98.87 |     95.1 |   97.05 |   98.87 | ...59,696,786-787 
 ...ry/qwen-logger |   74.23 |     80.7 |      70 |   74.23 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   74.23 |    80.53 |   69.49 |   74.23 | ...1122,1160-1161 
 src/test-utils    |   96.38 |    98.64 |   84.09 |   96.38 |                   
  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     |   94.85 |      100 |      80 |   94.85 | ...53,227-228,241 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   87.75 |    86.37 |   90.35 |   87.75 |                   
  ...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.29 |     83.8 |   94.73 |   83.29 | ...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.04 |    82.25 |     100 |   96.04 | ...41,594,604-608 
  ...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         |   78.96 |    84.29 |      93 |   78.96 | ...5036,5111-5112 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   93.56 |    90.78 |   91.66 |   93.56 | ...49,653,701-723 
  ...-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     |   80.43 |    86.95 |   85.71 |   80.43 | ...67,121,125-132 
  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.73 |    90.47 |   93.75 |   95.73 | ...48-552,565-570 
  ...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.61 |    90.35 |     100 |   90.61 | ...53-461,498-504 
  ...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   |   87.26 |    88.53 |   89.71 |   87.26 |                   
  agent.ts         |   85.88 |    87.66 |   87.35 |   85.88 | ...4277,4311-4321 
  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         |   92.79 |    89.75 |    96.9 |   92.79 |                   
  ...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 |    89.47 |     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.29 |     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.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  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  |   91.64 |    84.87 |    92.3 |   91.64 | ...00,415-420,580 
  ...fig-safety.ts |   97.01 |       80 |     100 |   97.01 | 53-54             
  git-ignore.ts    |     100 |      100 |     100 |     100 |                   
  gitDiff.ts       |   95.19 |    81.36 |     100 |   95.19 | ...1073,1419-1420 
  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 
  github-prs.ts    |   96.06 |    84.09 |     100 |   96.06 | 251,350-358       
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  image-view.ts    |   95.08 |    93.47 |     100 |   95.08 | ...62-166,234-238 
  ...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.51 |     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             
  notebook.ts      |   94.57 |    89.91 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   91.66 |    89.74 |     100 |   91.66 | ...26-228,251-256 
  osc8.ts          |   54.26 |    64.86 |   83.33 |   54.26 | ...72-195,197-257 
  partUtils.ts     |     100 |    98.64 |     100 |     100 | 211               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   90.88 |     90.6 |     100 |   90.88 | ...28-629,631-633 
  pdf.ts           |   92.17 |    85.81 |     100 |   92.17 | ...64-565,606-611 
  ...s-liveness.ts |     100 |    93.47 |     100 |     100 | 62,72,108         
  projectPath.ts   |     100 |      100 |     100 |     100 |                   
  projectRoot.ts   |   71.73 |    78.57 |     100 |   71.73 | 54-66             
  ...ectSummary.ts |   89.62 |    72.41 |     100 |   89.62 | ...40-145,196-199 
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  proxyUtils.ts    |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   71.15 |       86 |     100 |   71.15 | ...-90,96-101,147 
  ...noreParser.ts |   92.63 |    91.66 |     100 |   92.63 | ...77-178,197-198 
  rateLimit.ts     |   93.75 |    89.62 |     100 |   93.75 | ...13,218-219,262 
  ...text-range.ts |   96.98 |    87.36 |     100 |   96.98 | ...87-688,763-764 
  retry.ts         |   96.09 |    92.52 |     100 |   96.09 | ...72,563-564,582 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.63 |    97.08 |     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.21 |    86.32 |     100 |   96.21 | ...70,386,466,485 
  ...-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.59 |     100 |    98.3 | ...1340-1342,1352 
  ...nlyChecker.ts |   96.33 |    96.57 |     100 |   96.33 | ...83-284,292-293 
  sideQuery.ts     |   86.82 |    86.66 |     100 |   86.82 | ...79-185,187-193 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   77.77 |    57.14 |     100 |   77.77 | 44,54-59          
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminal-env.ts  |      50 |      100 |       0 |      50 | 18-19             
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    95.65 |     100 |     100 | 99                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  ...error-type.ts |     100 |      100 |     100 |     100 |                   
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ultCleanup.ts |   54.62 |    35.71 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.83 |     92.7 |     100 |   96.83 | ...37-342,344-349 
  ...pt-records.ts |   87.61 |    86.23 |     100 |   87.61 | ...80-484,514-529 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...-directory.ts |    83.7 |    80.95 |    87.5 |    83.7 | ...37-238,252-253 
  ...ifact-path.ts |   94.11 |    92.85 |     100 |   94.11 | 32-33             
  ...aceContext.ts |   95.39 |    89.47 |     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.

LGTM, looks ready to ship — CI landed green after the review. ✅

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed — no blockers. Suggestions are inline.

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

  • R1-3 draft-gate pin names a job that does not exist (delayed-review) — already reported (comment 3883650503)
  • R1-4 retry loop pinned only by string presence, never executed — already reported (comment 3883650518)
  • R1-5 replay give-up / structural-refusal branches have no fixture coverage — already reported (comment 3883650522)

Not linted (tool limitation, not a blocker): the executable-script lint — .github/workflows/qwen-code-pr-review.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:

  • .github/workflows/qwen-code-pr-review.yml:383 — [review] retry gate's hand-enumerated transient wordings miss Go client-side failures
  • .github/workflows/qwen-code-pr-review.yml:2568 — [review] fork-pushability preflight also refuses dry_run dispatches, which never push
  • .github/workflows/qwen-code-pr-review.yml:3002 — [review] replay's merge-tree re-check passes by construction; the real base invariant is unstated
  • .github/workflows/qwen-code-pr-review.yml:3007 — [review] replay duplicates the four structural checks of 'Resolution check'
  • scripts/tests/qwen-resolve-workflow.test.js:1158 — [review] fork-guard test never pins the --json field list it reads from
中文说明

已审查——无阻断问题。 建议见行内评论。

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

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

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

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

Comment thread .github/workflows/qwen-code-pr-review.yml
Comment thread .github/workflows/qwen-code-pr-review.yml Outdated
Comment thread .github/workflows/qwen-code-pr-review.yml
@qwen-code-dev-bot

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

Copy link
Copy Markdown
Collaborator

⚠️ AutoFix round 4 ended without publishing a reportview run.

中文说明

⚠️ AutoFix 第 4 轮结束但未发布报告 —— 查看运行

The post-agent scrub landing in #10428 removes the workspace .git/config
— and with it the `origin` remote — before any credentialed step runs,
so the replay's `git fetch origin` would fail there. Fetch by URL, with
an env hook (empty in production) that the fixture test points at its
bare repository; a pin forbids `git fetch origin` in the replay.
@wenshao

wenshao commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 29, 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: 124 passed · 0 failed · 124 total

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

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

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

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

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

Verification report

PR 10429 deep verification (follow-up round) — fix(ci): recover /resolve requests lost to moved heads, fork pushes, 503s and drafts

Verdict: findings — 124/124 scripted assertions passed (0 unexpected failures); one new conditional finding (F3) about the interaction between the replay and the scrub the delta's own commit message cites.
Verified head: 9ab05c92f963203a23e62654270509990fb7ec08 (git rev-parse HEAD^2); base tip 48ec0083454200dbb0f76ff4c3251e6b4cf45bf2 (HEAD^1).
Artifact dir: tmp/pr10429-verify-20260829-034431/.

中文摘要

结论:findings(124/124 脚本化断言通过,无意外失败)。本轮为跟进轮:上轮验证后新增一个提交 9ab05c92f9(重放改为按 URL fetch,因为 #10428 的 post-agent scrub 会移除 .git/configorigin remote)。

  • A/B 结论(本轮核心 = delta 提交):见「A/B 表」。同一真实 git 电路上,scrub 移除 origin remote 后:旧实现(control = 上轮 head,git fetch origin)放弃重放、丢弃解决结果(exit 1,旧 "moved" 评论);新实现(按 URL + 生产默认地址形状)在新 head 上重放并推送正确树(exit 0)。control 在 origin 存在时仍然工作(证明翻转只归因于 scrub 状态)。全 .git/config 删除(带身份)下重放同样存活;无任何身份时 fail-closed(见 F3)。
  • 携带主张复测:authorize 重试(实测退避 5.01s/10.01s,base 臂第一次 503 即静默拒绝——翻转保留)、fork 预检与同仓防误伤、draft 门移除,均在新 head 复测通过(见「次要主张」表)。
  • 变异矩阵:10 个突变体全部被杀(新增 M0a 还原 git fetch origin、M0b 删 RESOLVE_ORIGIN_URL env),0 存活;未突变对照 37/37 绿。M0a 仅由新加的文本钉杀死——夹具测试因自带 origin remote 而保持绿(与 M1 的 BASE_REF 相同的掩盖模式),行为差异由 A/B 的 A3/A4 单元覆盖。
  • findings:F3(中,条件性)——按 delta 提交自己描述的 scrub 状态(无 .git/config、无身份),git merge --no-commit 本身先于冲突处理即失败,重放以误导性的 "changes nothing" 放弃;夹具用环境身份掩盖了这一点;附已实测的修复探针。F1(低,措辞夸大)原样保留;F2(低,.size-baseline 差距 220→744 B,容差内仍绿)扩大。
  • 未覆盖:合入后的真实 moved-head run;对真实已发布评论的校准(无 token);fix(ci): run /resolve without the container sandbox and pin its CLI version #10428 scrub 本体(不在本树,F3 以其行为为条件);双重移动交错;yamllint;前 4 个提交的逐提交执行(聚合验证覆盖)。

Previous-finding status (follow-up round)

Previous round verified head 3a00591246; new head 9ab05c92f9 adds exactly one commit (parent link and tree diff verified: workflow +9/−1, test +10). All carried measurements were re-run at the new head, not diffed from the old report.

# Finding Severity Status at new head
F1 Clean-merge replay comment overstates ("only files the new commits did not touch were taken from the agent's merge" — in that shape nothing is taken from it) low stands — re-measured in cell F1 (A/B table): wording unchanged, pushed tree correct (a.txt = main content). Cosmetic only
F2 .size-baseline lags the actual workflow size low stands, widened — gap 220 B → 744 B (recorded 176,564 vs measured 177,308). Gate still green via the 4,096-byte allowance, live-proven in both directions (see Targeted gates)
Corr-1 Description test-count off-by-one ("267 / 36 / 7 new") nit stands — the delta added no new it() blocks; measured remains 268 tests across the 3 files, 37 in the resolve file, 8 new (29 → 37 vs base)

Scope selection

This round's central claim (the delta): the replay fetches the moved head by URL (${RESOLVE_ORIGIN_URL:-https://github.com/${REPO}.git}), so it works after the post-agent scrub removes .git/config/the origin remote; the previous round's git fetch origin dies in that state. RESOLVE_ORIGIN_URL is '' in production → default URL https://github.com/QwenLM/qwen-code.git (job env REPO = ${{ github.repository }}, the base repo — where refs/pull/N/head is mirrored; verified correct).
Carried claims re-verified: the replay itself vs base (previous round's central claim, re-established on the moved base), authorize retry, fork preflight, draft gate.

Central claim — A/B table (delta: fetch by URL vs fetch by remote)

Harness: ab-fetch-harness.mjs drives the verbatim js-yaml-extracted Report result block from three workflow versions — base = HEAD^1 (no replay), head = HEAD (fetch by URL), control = 3a00591246 (previous head, git fetch origin; the exact reverse of the delta hunk) — under bash --noprofile --norc with the block's own set -euo pipefail, ${{ }} substituted exactly as Actions does. Real git wire: bare origin.git (main + refs/pull/1/head), bare fork.git (refs/heads/feature, push target), runner checkout holding the agent's resolution. Production URLs reached via url.insteadOf injected through GIT_CONFIG_* env vars (works with .git/config deleted — required for the scrub cells); only the comment API is simulated (gh stub captures the exact body). Scrub states: none; remote ([remote "origin"] removed, identity kept); full (.git/config deleted, identity via env); full-noid (deleted, identity nowhere). Witness: evidence/01-ab-fetch-matrix-head-vs-control.png; raw per-cell logs in raw/<cell>/.

Cell Arm · scrub · scenario Result
A1 base · none · unrelated move exit 1; old "Re-run /resolve." comment; fork stays at new head — resolution lost (carried-over broken cell re-established on the moved base)
A2 head · none · unrelated move exit 0; replay pushed — no regression while origin still exists
A3 head · remote-scrub · unrelated move · production URL shape (hook empty) exit 0; fetch-by-URL needs no remote; pushed tree keeps agent a.txt + contributor b.txt + base c.txt; parents [new head, origin/main]; scope guard a.txt,c.txt only; agent commit message reused
A3h head · remote-scrub · hook → fixture origin path exit 0 — hook form parity
A4 control · remote-scrub · unrelated move exit 1; Replay gave up: could not fetch the new head.; old moved comment; fork untouched; runner restored, clean tree — the load-bearing flip vs A3
A5 control · none · unrelated move exit 0 — the control is viable while the remote exists; the flip is attributable to the scrub state, not a phantom bug
A6 head · full-scrub · unrelated move exit 0 — replay survives outright .git/config deletion (local refs survive in packed-refs; identity via env)
A7 head · full-scrub-noid · unrelated move exit 1, fail-closed: give-up, moved comment, fork untouched, runner restored — see F3
B1 head · remote-scrub · move edits conflicted file exit 1; give-up names a.txt; restored (carried-over shape holds under scrub)
E1 head · remote-scrub · push declined, head NOT moved exit 1; "declined for another reason"; restored
F1 head · remote-scrub · moved head already resolved the conflict exit 0; clean merge replayed + pushed; F1 wording re-measured
C1 head · remote-scrub · permission-style refusal (rejecting pre-receive hook, 403-shaped) exit 1; classified permission; no replay attempted (moved ref never fetched, no -replay branch)

Counts: 12 cells, 59 scripted oracles, 59 pass (expected base/give-up failures are encoded as passing assertions). Guard fidelity and the rest of the replay were verified in the previous round and are byte-unchanged outside the fetch line + env entry (delta diff verified).

Secondary claims (re-measured at new head)

secondary-harness.mjs, witness evidence/02-authorize-preflight-head-vs-base.png, 27/27 oracles:

  • authorize retry (extracted head + base blocks, scripted gh api, real sleep): R1 503,503,write → head should_review=true in 3 calls, gaps 5.01s / 10.01s, retry messages name attempts 1–2 of 3; base: first 503 = silent denial in 1 call (the flip is preserved). R2 503×3 → fail closed after exactly 3, ::error:: + summary. R3 404 → denial in 1 call (no retry for non-transient). R4 write → both arms allow in 1 call. R5 read → deny, summary names permission is 'read'.
  • fork preflight + draft gate (extracted Prepare pull request branch, real jq + real git fixture): fork + edits OFF → unsupported, reason names fork + setting, no branch → no agent run (head) vs base runs it (the A/B pair); same-repo with maintainerCanModify=false still runs (false-positive guard holds); fork + edits ON runs; base refuses drafts ("PR pre-release: fix ci #1 is draft."), head runs them and no longer even fetches isDraft.

Mutation matrix — 10 mutants, 0 survivors

Scratch worktree at HEAD; unmutated control 37/37 green first. Witness evidence/03-mutation-matrix-10-mutants-killed.png; full vitest logs raw/mut-*.log.

Mutant Killed by Note
M0a revert delta: URL fetch → git fetch origin wires the replay into the push path… (the two new pins) fixture tests stayed green — the fixture checkout has an origin remote, so git fetch origin succeeds there; same masking pattern as M1. The behavioral difference is covered by A/B cells A3/A4 instead
M0b remove RESOLVE_ORIGIN_URL step env defines every uppercase variable… fixture injects its own — masked there too; the env scan catches it
M1 remove BASE_REF step env defines every uppercase variable… carried-over, re-confirmed at new head
M2 wiring → if false wires the replay…
M3 lease → --force keeps the authorization and scope guards… and wires the replay… lease pinned on both sides
M4 drop [ "$head_repo" != "$REPO" ] conjunct refuses fork PRs…
M5 replay branch pr-N/replay both fixture tests ("could not check out" — real git D/F refusal)
M6 delete HEAD_SHA="$new_sha" fixture SHA oracle + wires the replay… behavioral control in the same file
M7 reword Allow-edits prose refuses fork PRs… positive control
M8 plant undefined var in Show run artifacts defines every uppercase variable… env scan is job-wide

Reviewer Test Plan walkthrough (per step)

  1. vitest command → re-run at new head: 4 files green (see Targeted gates); counts differ from the description as in Corr-1.
  2. bash -n + js-yaml → re-run both arms + control: 9/9 blocks OK, 3/3 YAMLs parse (extraction is the witness).
  3. The three claimed mutation checks → all reproduced in the matrix: --force (M3, red in 2 tests), dropping the head_repo conjunct (M4, red), branch pr-N/replay (M5, fixture red).
  4. "After merge: live moved-head run" → still not performable in-container (needs the workflow on the default branch). The fixture-level wire evidence is the substitute.

Targeted gates

Gate Result
vitest head: resolve + autofix + ci-flaky-rerun + workflow-size 463/463 pass — witness evidence/04-targeted-gates-vitest-head.png
Same suites, base (HEAD^1) 455/455 pass → delta +8 tests, 0 changed, 0 lost (resolve file 29 → 37)
qwen-pr-review-workflow.test.js (the wider suite for this file, not run in the previous round) 179/179 both arms — no regression
bash -n (expressions stripped) on all 3 edited blocks × 3 arms 9/9 OK
js-yaml parse of head, base, control workflows 3/3 OK
actionlint (pinned binary; live-proven: planted needs: [nonexistent-job-xyz] → rc=1) PR workflow clean, rc=0
Size ratchet (check-workflow-size.sh, WORKFLOW_SIZE_BASE_SHA=HEAD^1) green: 177,308 ≤ 176,564 + 4,096. Live-proven both directions: tightening the allowance to 500 flags exactly "grew to 177308 bytes, 744 over its recorded 176564" (see F2)

Findings

F3 (medium, conditional) — the scrub state the delta cites also kills the replay's git identity; under it the replay gives up with a misleading reason before committing. The delta's commit message says the post-agent scrub "removes the workspace .git/config (and with it the origin remote)". The replay's merge/commit needs a committer identity, and that identity is the user.name/user.email the Prepare step writes into the same .git/config — so a scrub that removes the file (or one shaped like this repo's existing resanitize-git-config.sh, whose local allowlist keeps remote.*.url but unsets user.*) leaves the replay identity-less. Measured chain (cell A7, reproducing command: node tmp/pr10429-verify-20260829-034431/ab-fetch-harness.mjs): with .git/config gone and no identity anywhere, git merge --no-commit itself exits 128 "Committer identity unknown" before any conflict exists; the replay swallows that stderr by design, finds nothing unmerged, and reports Replay gave up: merging main into <sha> changes nothing. — misleading, since the merge never ran. The outcome is still fail-closed (exit 1, moved comment, fork untouched, runner restored — all asserted), and pre-scrub production (today) is unaffected; but once #10428's scrub lands, the replay the delta exists to save would die in exactly the state the delta targets. The PR's own fixture masks this: runReplay injects GIT_AUTHOR_NAME/GIT_COMMITTER_NAME env. This is conditional because #10428's scrub is not in this tree (see Not covered) and a runner-global fallback identity cannot be measured from here.

Measured fix probe (scratch, not part of the PR)

Restoring the bot identity at the top of replay_on_moved_head (the same two git config lines Prepare uses) converts the dead state into a working replay with zero collateral: fix-probe.mjs against scratch block extracted/report-result.headfix.sh, witness evidence/05-f3-identity-fix-probe.png — A7-fix: exit 0, replayed commit pushed on the new head with the agent's resolution kept; A3-fix (benign production shape): byte-equivalent tree and scope-guard outcome. 7/7 assertions. Note the PR's fixture suite cannot pin this axis either way — it supplies GIT_AUTHOR/COMMITTER env, the same masking as M0a — so if the patch lands it should ship with a fixture that runs the replay with .git/config removed and no identity env.

F1 (low, cosmetic, carried over — stands). Cell F1: the clean-merge replay pushes the correct tree while the comment still claims files "were taken from the agent's merge"; in that shape nothing is taken from it.

F2 (low, informational, carried over — widened). .size-baseline records 176,564 B; the file at the new head is 177,308 B — gap now 744 B (was 220), grown by this round's delta (+9/−1 workflow lines). Green via the documented 4,096 allowance; the next workflow PR touching this file pays it unless the ratchet is bumped in the same PR.

Not covered

  • Live moved-head run on the default branch (Reviewer Test Plan step 4) — requires the merged workflow. The double-move race (head advances again between the replay's fetch and its second push) was not interleaved; it reduces to a second lease decline → moved comment, fail-closed.
  • fix(ci): run /resolve without the container sandbox and pin its CLI version #10428's scrub itself — not in this tree; F3 is conditional on what it removes. Closest available evidence inspected: .github/scripts/resanitize-git-config.sh (the autofix lane's scrub), whose local allowlist keeps remote.*.url|fetch|pushurl but unsets user.* — i.e. under that shape the origin remote survives and the identity does not, the mirror image of the delta's assumption. Worth reconciling with fix(ci): run /resolve without the container sandbox and pin its CLI version #10428's author.
  • Replay calibration against a real emitted artifact — no GitHub token in this sandbox; the replay remains uncalibrated. Corroboration: the base arm's cell-A1 comment reproduces the description's quoted "Before" text verbatim.
  • Per-commit exercise of commits 1–4 — all six commit objects are present but the graph is grafted (depth 2); the aggregate HEAD^1..HEAD diff was verified, the previous round verified through commit 5, and commit 6 (9ab05c92f9) is individually attributed (recorded parent 3a00591246; tree diff matches its message; the A/B targets exactly it).
  • yamllint — still not installable (pip3: Permission denied); YAML well-formedness covered by js-yaml parse ×3 and live-proven actionlint.
  • Organisation-owned forks (declared out of scope by the PR), the loss statistics (author claims, no API), and the Show run artifacts / Upload run artifacts / Report skipped request steps beyond the env-scan probe.

Methodology

Container: the verify lane's own node:22-bookworm sample (node v22.23.2, git 2.39.5, jq, bash). All workflow code was extracted verbatim via js-yaml (extract-steps.mjs) from three YAML versions — head (HEAD), base (HEAD^1), delta-control (3a00591246) — never retyped, and driven under bash --noprofile --norc with each block's own set -euo pipefail, ${{ }} expressions substituted exactly as Actions substitutes them before bash runs. The unit under test was never stubbed: git seams are url.insteadOf rewrites of the two production URLs onto local bare repos, injected via GIT_CONFIG_COUNT/KEY/VALUE env vars so they apply even with .git/config deleted (the state under test); the API seams are a scripted gh (authorize plan + millisecond timestamps, real sleep) and a comment-capturing gh stub. Scrub states were applied to the runner checkout as: git config --local --remove-section remote.origin (remote only) and rm .git/config (full), with precondition assertions that the remote is gone while refs/remotes/origin/main survives. Harnesses (ab-fetch-harness.mjs, secondary-harness.mjs, run-mutations.mjs, fix-probe.mjs) and raw per-cell logs (raw/) live in the artifact dir; the base and mutation worktrees (tmp/base-tree, tmp/mut-tree, sharing the root node_modules — the PR touches no dependencies) were removed after use. Every number in assertions.json maps to an executed check: 59 A/B + 27 secondary + 11 mutation-matrix outcomes (control + 10 kills) + 7 fix probe + 9 bash -n + 3 YAML parses + 2 actionlint + 2 size-ratchet + 4 vitest gate runs = 124.

Flakiness gate log

rounds=5 files=1 skipped=0
file scripts/tests/qwen-resolve-workflow.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/qwen-resolve-workflow.test.js


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  scripts/tests/qwen-resolve-workflow.test.js: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 2 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 3 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 4 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 5 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)

Evidence images

01-ab-fetch-matrix-head-vs-control

02-authorize-preflight-head-vs-base

03-mutation-matrix-10-mutants-killed

04-targeted-gates-vitest-head

05-f3-identity-fix-probe

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

Qwen Code · sandboxed verification

…replay

Address the second-round review findings on the /resolve recovery paths:

- classify_push_failure now tests the lease-decline signature (stale
  info, force-with-lease, non-fast-forward, fetch first) BEFORE the
  permission patterns: git echoes the destination branch into the push
  log, so a moved head on a branch named e.g. fix/permission-prompt or
  fix-403-error matched the permission arm first and the replay never
  ran — the exact loss class this PR recovers.
- The replay handles resolutions that deleted the conflicted file
  (delete/modify conflicts): checkout fails on a path absent from the
  resolved commit, so take the deletion via git rm instead.
- The replay-success comment no longer claims files were taken from the
  agent's merge when the replay merged clean, and says that the run
  artifact describes the original resolution, not the pushed tree.
- Tests: behavioural coverage for the authorize retry loop against a
  scripted gh (3 attempts, 5s/10s backoff, fail-closed denial arms) and
  for the classifier against real push logs (branch-name echoes,
  re-classification after a failed replay push); fixture coverage for
  the empty-merge give-up and the deletion resolution; the draft-gate
  pin now names the real delay-automatic-review job without the silent
  whole-file fallback.
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

中文说明

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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed.

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

  • R13-1 size ratchet entry under-records the workflow by one byte (184442 vs measured 184443) — already reported (round-8 deferred list R8-1 for the same entry; triage stage-3 confidence comment names the one-byte baseline nit still open)
  • R13-2 replay hand-copies Resolution check's structural checks with no equivalence pin — already reported (round-2 deferred list yml:3007; round-5 deferred list; R6-3; R11-2)
  • R13-3 fork-refusal test does not pin the maintainerCanModify --json field list or jq site — already reported (round-2 deferred list test.js:1158; rounds 5 and 9; R11-7)
  • R13-4 authorize-retry alternates beyond the 503 shape have no behavioural pin — already reported (R6-6; rounds 3-5 deferred lists; R11-4)
  • R13-5 replay scope-guard and marker-guard rejection branches have no fixture on any lane — already reported (R6-2; R1-5, comment 3883650522; round-5 deferred list yml:3004; R11-9)
  • R13-8 retry classifier omits rate-limit (HTTP 429 / 403 rate limit) wordings — already reported (round-7 deferred list R7-1; round-9 deferred Critical restating it; R11-3)
  • R13-9 replay merge-tree re-check is structurally dead — already reported (round-2 deferred list yml:3002; round-5 deferred list; R6-3)

Not explored to full depth (tool budget reached): "agent 3c": none — all checks I started reached a conclusion..

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

中文说明

已审查。

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

未探索到全部深度(达到工具调用预算):"agent 3c"none — all checks I started reached a conclusion.

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

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

Autofix round: no changes needed

I triaged every feedback point newer than the last evaluation. Nothing this round requires a code change:

  • Automated reviews (rounds 11–13) posted zero new findings. Every item they list is a confirmation that an earlier Suggestion-level finding was already reported on this PR, and their deferred lists are explicitly recorded "not requested in this round". Nothing to implement, decline, or defer again.
  • Inline comments: none.
  • Maintainer review: the full diff was reviewed (replay logic, permission retry, fork/draft gates, push-failure classification, test suite) with no blocking issues found and no change requests — approval is pending green CI after the maintainer re-ran the failed jobs.
  • Sandboxed-verification status comment: informational only (the result artifact could not be retrieved); re-running /verify is a maintainer action, not a code change.

Failed checks — triaged as not caused by this PR

The four failing jobs are all defined in .github/workflows/ci.yml: Test (ubuntu-latest, Node 22.x) (~line 195), web-shell E2E Smoke (ubuntu-latest, Node 22.x) (~line 738), Post Coverage Comment (~line 1243), and Integration Tests (no-AK, No Sandbox) (~line 1301). This PR's diff touches only .github/workflows/qwen-code-pr-review.yml, .github/workflows/.size-baseline, and scripts/tests/qwen-resolve-workflow.test.js — a change to one workflow file cannot alter another workflow's jobs, so these failures are structurally independent of this PR. Supporting evidence:

  • The maintainer confirmed the earlier Test (ubuntu-latest) failure was cancelled at the run level (not a code failure) and re-ran the failed jobs.
  • The base-update record shows each of these red checks passing on current main (Test, web-shell E2E Smoke, and Post Coverage Comment were each verified green on main before main was merged in), which the same source tree on another branch passing rules out a code defect in this diff.
  • Main recently merged ci: stabilize tests under shared ECS host contention (#10552) for exactly this failure class, and that commit is already in this branch's history.

Local verification evidence

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/qwen-resolve-workflow.test.js48/48 passed (the focused suite covering the workflow behavior this PR changes).
  • Latest origin/main is already merged into this branch (origin/main is an ancestor of HEAD); --conflict false confirmed, no conflicts to resolve.
  • No commit was made this round; the working tree is untouched.
中文说明

Autofix 轮次:无需改动

我逐一分诊了上次评估之后的所有反馈。本轮没有任何需要修改代码的事项:

  • **自动评审(第 11–13 轮)**没有提出任何新发现。其中列出的每一项都只是确认某条早先的建议级发现已在该 PR 上报告过,且它们的延后列表明确标注"本轮不要求修改"。没有需要实现、拒绝或再次延后的内容。
  • 行内评论:无。
  • 维护者评审:已完整审阅全部 diff(replay 逻辑、权限重试、fork/draft 门禁、推送失败分类、测试套件),未发现阻断问题,也没有任何改动请求——待维护者重跑失败任务后 CI 变绿即批准。
  • 沙箱验证状态评论:仅为信息性说明(结果产物未能取回);重新运行 /verify 是维护者操作,不是代码改动。

失败检查项——分诊结论:与本 PR 无关

四个失败的 job 全部定义在 .github/workflows/ci.yml 中:Test (ubuntu-latest, Node 22.x)(约第 195 行)、web-shell E2E Smoke (ubuntu-latest, Node 22.x)(约第 738 行)、Post Coverage Comment(约第 1243 行)、Integration Tests (no-AK, No Sandbox)(约第 1301 行)。本 PR 的 diff 只改动了 .github/workflows/qwen-code-pr-review.yml.github/workflows/.size-baselinescripts/tests/qwen-resolve-workflow.test.js——对一个 workflow 文件的修改不可能改变另一个 workflow 的 job,因此这些失败在结构上就与本 PR 无关。佐证如下:

  • 维护者确认先前 Test (ubuntu-latest) 的失败是 run 级别被取消(并非代码失败),并且已重跑了失败的 job。
  • base 更新记录显示这些红色检查项在当前 main 上均通过Testweb-shell E2E SmokePost Coverage Comment 在合入 main 之前都已在 main 上验证为绿);同样的源码树在另一个分支上能通过,即可排除本 diff 存在代码缺陷。
  • main 分支最近合入了 ci: stabilize tests under shared ECS host contention (#10552),针对的正是这一类失败,且该提交已包含在本分支的历史中。

本地验证证据

  • npx vitest run --config ./scripts/tests/vitest.config.ts scripts/tests/qwen-resolve-workflow.test.js —— 48/48 全部通过(覆盖本 PR 所改动工作流行为的定向测试套件)。
  • 最新的 origin/main 已合入本分支(origin/main 是 HEAD 的祖先);--conflict false 已确认,无冲突需要解决。
  • 本轮未产生任何提交;工作区未做任何改动。

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


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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

Autofix review round: no action needed

This round's feedback contained no reviews, no inline comments, and no issue-level comments — only two failed CI checks. After evidence-based triage, neither represents a code defect that can or should be addressed by a change in this PR, so no commit was made.

Triage of the failed checks

1. Test (ubuntu-latest Node 22.x): CANCELLED — transient, not a test failure.
A cancelled run produces no failure evidence at all. The cancellation matches the repository's own by-design supersede behavior: ci.yml sets cancel-in-progress: true for every non-main ref (concurrency group in ci.yml), and this PR's current HEAD (a0ac4407) is a merge of main into the branch — a push that cancels the CI run that was in progress at that moment. The alternative cause, shared-ECS host contention stretching a lane to its ceiling, is the known class already stabilized by #10552, which is merged into this branch. Either way there is no failing test to diagnose and nothing to fix in code; the remedy is a CI re-run, which the workflow owns.

2. Post Coverage Comment (ubuntu-latest 22.x): FAILURE — non-blocking cascade of the cancelled test run.
This is the downstream post-job in ci.yml (continue-on-error: true by design), which downloads coverage artifacts produced by the test job and posts the summary comment. A cancelled/incomplete test job uploads no artifacts, so the post-job has nothing to consume. This PR's diff touches none of that machinery (ci.yml, the post-coverage-comment composite action, coverage tooling) — it only changes the /resolve replay logic in the PR-review workflow, its size baseline, and its tests. Modifying ci.yml is also out of bounds for this autofix round regardless.

Local verification (evidence the tree is healthy)

Every trusted runnable check passes on the current HEAD, confirming the cancellation hid no real failure:

  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed
  • npm run test:scripts -- scripts/tests/qwen-resolve-workflow.test.js (the only test file this PR touches) — 48/48 passed

No code changes were made this round; the branch stays at a0ac4407.

中文说明

Autofix 审查轮次:无需处理

本轮反馈中没有 review、没有行内评论、也没有 issue 级评论——只有两个失败的 CI 检查。经过基于证据的分类,二者均不代表本 PR 能够或应当通过代码变更解决的缺陷,因此本轮没有提交任何变更。

失败检查的分类

1. Test (ubuntu-latest Node 22.x): CANCELLED——瞬时性问题,并非测试失败。
被取消的运行不会产生任何失败证据。该取消与仓库自身设计上的"新推送取代旧运行"行为一致:ci.yml 对所有非 main 分支设置了 cancel-in-progress: true(见 ci.yml 的 concurrency 组),而本 PR 当前的 HEAD(a0ac4407)正是把 main 合并进分支的一次推送——这次推送会取消当时正在运行的 CI。另一种可能原因是共享 ECS 主机争用把运行时间拉到上限,而这正是 #10552 已经稳定处理的已知问题类别,该修复已合并进本分支。无论哪种情况,都没有失败的测试可供诊断,也没有任何代码可修;补救方式是重新运行 CI,这由工作流负责。

2. Post Coverage Comment (ubuntu-latest 22.x): FAILURE——被取消的测试运行的非阻塞级联结果。
这是 ci.yml 中的下游收尾任务(按设计为 continue-on-error: true),它下载 test 任务产出的覆盖率报告并发布汇总评论。被取消/未完成的 test 任务不会上传任何产物,因此该收尾任务无产物可用。本 PR 的 diff 完全没有触及这套机制(ci.ymlpost-coverage-comment 复合 action、覆盖率工具)——它只修改了 PR 审查工作流中的 /resolve 重放逻辑、对应的 size 基线及其测试。无论如何,修改 ci.yml 也超出了本轮 autofix 的权限边界。

本地验证(证明分支状态健康的证据)

当前 HEAD 上所有可信的可运行检查均通过,确认该取消并未掩盖真实失败:

  • npm run build —— 通过
  • npm run typecheck —— 通过
  • npm run lint —— 通过
  • npm run test:scripts -- scripts/tests/qwen-resolve-workflow.test.js(本 PR 唯一改动的测试文件)—— 48/48 通过

本轮没有做任何代码变更;分支保持在 a0ac4407

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


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

@wenshao

wenshao commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@wenshao
wenshao enabled auto-merge August 31, 2026 07:30
@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 31, 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: 214 passed · 2 failed · 216 total

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

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

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

脚本断言:214 通过 · 2 失败 · 216 总计

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

Verification report

PR 10429 deep verification (fourth follow-up round) — fix(ci): recover /resolve requests lost to moved heads, fork pushes, 503s and drafts

Verdict: findings — 214/216 scripted assertions passed. The two failures: (1) the re-measured size-baseline equality check — the entry was re-recorded to 184,442 but the file now measures 184,443, a 1-byte drift (severity nit; attributed below; one-character fix measured); (2) one 30 s timeout in the autofix suite's first batch run, proven environmental (unmodified file; two clean reruns green — see Environmental note). The central claim and every carried claim were re-proven at the new head; no blocking defect found. Advisory evidence for human reviewers — not a review, an approval, or a CI check.
Verified head: a0ac44077649f637b3b19aa30a64a0a106a21cd3 (git rev-parse HEAD^2); base tip 40889bad75935d5da3e29bff32a48b2044c5ad57 (HEAD^1). Effective diff = 3 files: .github/workflows/qwen-code-pr-review.yml, .github/workflows/.size-baseline, scripts/tests/qwen-resolve-workflow.test.js.
Artifact dir: tmp/pr10429-verify-20260831-074540/.

中文 — 判定:⚠️ 有发现(agent 判定)· 214/216 断言通过

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

本轮为第四次跟进轮:上轮 head 为 dc5a24b5,本轮唯一实质提交为 8b01a30f(重录工作流尺寸基线)加四次 main 合并。浅克隆下中间提交不可达,按聚合 diff HEAD^1..HEAD 验证,且 git diff HEAD^2..HEAD 为空(合并本身未改动任何文件)。所有结转测量均在新 head 上重新执行,无一沿用旧数据。

  • 上轮的 F2 复发(1,321 字节基线滞后)已修复:提交 8b01a30f 把基线重录为 184,442,与当时文件一致(上轮实测)。但其后的 main 合并带入了 1 字节:本轮实测文件 184,443,基线 184,442,差 1 字节(见 Findings F2-drift,nit 级)。归因:base 尖端(HEAD^1,纯 main)自身的文件就比自己的记录大 1 字节(173,140 vs 173,139)——main 侧先有未记录的 1 字节漂移,经合并流入本分支。棘轮门禁实测三个方向:按 CI 接线(无 BASE_SHA)绿且静默;换用 base 基线则准确报错(方向为活);基线改为 184,443 后零诊断(修复单元格已实测)。
  • 全部结转主张复测成立:中心 A/B(B1 base 丢失 + 校准逐字节复现;H1–H6 head 重放 + 推送树保存)51/51;分类器三臂真实推送日志矩阵 41/41;字面路径规格 A/B 18/18;authorize 重试 + prepare 预检 33/33。变异矩阵:未变异对照 48/48 绿,11 个突变体全杀、0 存活(含 PR 测试计划点名的 --force、fork 合取两个突变),阳性对照变红。
  • 门禁:4 套件 head 483/483(resolve 48、autofix 229、ci-flaky 8、size 198)、base 464/464(resolve 29 → +19 全部落在 resolve 文件);宽套件 181/181 双臂;bash -n 18/18、shellcheck(error 级)18/18、js-yaml 2/2、actionlint 干净且植入违规实测变红;尺寸棘轮见上;抖动门 5×48/48 无分歧。
  • 未覆盖:合入后的真实 moved-head run;对真实已发布评论的校准(无 token);逐提交执行(浅克隆不可达);fix(ci): run /resolve without the container sandbox and pin its CLI version #10428 scrub 本体(新 base 中仍不存在,按提交描述模拟);yamllint(pip3 权限拒绝)。

Previous-finding status (follow-up round)

Previous round verified head dc5a24b5; new head a0ac4407 adds one substantive commit (8b01a30f, the size re-record) plus four merges of main. Commits are not object-reachable in this depth-2 checkout (git rev-list HEAD^1..HEAD^2 returns 1 against the snapshot's 22 — treated as unreachable per the shallow-boundary rule); the delta is verified as the aggregate HEAD^1..HEAD diff, and git diff HEAD^2..HEAD is empty, proving the merge itself introduced no changes. Every carried measurement was rebuilt and re-run at the new head (the previous round's artifact dir does not persist in this container; harnesses were reconstructed from the skill spec — see Methodology).

# Finding Severity Status at new head
F2 .size-baseline lags the actual workflow size low fixed at the 1,321-byte scale; re-drifted to 1 byte. The re-record commit landed exactly as prescribed (184,442, matching the file as then measured); four subsequent merges of main brought in 1 byte. Gap re-measured: recorded 184,442 vs actual 184,443. Attribution: main itself carries the same unrecorded +1 byte at the base tip (173,140 vs 173,139, both frozen at HEAD^1). See Findings — severity downgraded to nit
F3 Under the scrub state, the replay died identity-less medium fixed — holds. Re-measured cell H1 (full-scrub-no-id): exit 0, replay pushed, committer qwen-code-dev-bot <qwen-code-dev-bot@users.noreply.github.com> (see 01-ab-pushed-base-vs-head.png)
F1 Clean-merge replay comment overstates low fixed — holds. Re-measured cell H5: conditional clause present in the archived comment (raw/h5-comment.txt); pushed.diff proves nothing came from the agent merge
Corr-1 Description test counts off nit stands. Re-measured at new head: description says "3 files, 267 tests (36 in resolve; 7 new)"; actual 3 files 285 (resolve 48, autofix 229, ci-flaky 8), resolve grew 29 → 48 = 19 new vs base
M-PAREN Parenthesised-lease guard unpinned nit fixed — holds. Mutant M-BAREWORD (parenthesised+anchored → bare words) killed by classifies a moved head by its lease decline…
L13 Branch named x(non-fast-forward) + genuine 403 classified moved nit fixed — holds. Three-arm matrix on real hook-decline logs: C6/C7 head permission, intermediate control (prev round's unanchored shape) moved, base permission

Scope selection

This round's delta (commit 8b01a30f): the size-baseline re-record closing round-3's F2-recurrence. Verified as the central claim below (ratchet cells in three directions + attribution of the residual byte).
Carried claims, all re-measured because the input closure changed (new base, workflow touched by merges of main): (1) the moved-head replay + pushed-tree preservation in Report result — the PR's central behavioural claim; (2) the classifier's moved-before-permission ordering with parenthesised, end-of-line-anchored reasons; (3) literal pathspecs in the replay's per-file git commands; (4) authorize retry, fork preflight + same-repo conjunction, draft-gate flip, deletion replay, clean-merge give-up shapes. Explicitly out of scope: the live moved-head run on the default branch, the loss statistics in the description (author claims, no API), org-owned forks (declared out of scope by the PR).

Central claim of this round — the size re-record (F2 status)

Measured at the verified head (gates-size.mjs; witness evidence/06-size-ratchet-cells.png; logs raw/size-gate-*.log):

Cell Result
actual file size (git cat-file -s) 184,443
recorded baseline entry 184,442 — gap 1 byte
gate as CI wires it (.github/scripts/check-workflow-size.sh, no WORKFLOW_SIZE_BASE_SHA; ci.yml:422) green, zero diagnostics for the file (gap ≤ 4,096 allowance; the gate is silent under the allowance by design — no branch reports small overruns)
failure direction (scratch tree with the BASE's entry, 173,139) exit 1, live: ::error … grew to 184443 bytes, 11304 over its recorded 173139
fix cell (entry := 184,443) green, zero diagnostics for the file
base tip itself file 173,140 vs its own recorded 173,139 — main carries the identical +1-byte drift at HEAD^1
PR's delta to .size-baseline exactly one line: -173139 / +184442 qwen-code-pr-review.yml

Attribution: the re-record was accurate when made (previous round measured the file at 184,442 at dc5a24b5; the commit recorded 184,442). The residual byte arrived with one of the four merges of main that followed, and matches main's own unrecorded +1 byte frozen at the base tip. Precise commit-level attribution is impossible at depth 2 (intermediate objects unreachable); the fix is the same either way — see Findings.

Carried central claim — replay + pushed-tree A/B (re-measured)

The entire Report result run block, js-yaml-extracted from head and base and ${{ }}-substituted exactly as Actions does, driven under bash --noprofile --norc with its own set -euo pipefail against a two-bare-repo wire (origin mirror holding refs/pull/1/head + fork push target reached through the production-shaped x-access-token URL via url.insteadOf env rewrites), a gh stub capturing the comment body, and the full scrub state (.git/config deleted, identity nowhere). Harness ab-pushed.mjs; witness evidence/01-ab-pushed-base-vs-head.png; per-cell logs raw/.

Cell Arm · scrub · scenario Result
B1 base · full-scrub · unrelated move exit 1 — calibration cell. The "moved" comment byte-matches the description's quoted "Before" sentence; fork untouched (still the moved head); no pushed/ record; no replay attempted; runner left on the original resolution
H1 head · full-scrub · unrelated move exit 0 — the claim. Fork branch = replay commit (parents [moved head, origin/main]); committer = bot identity; author + message reused from the agent commit; tree = agent a.txt + contributor b.txt + base c.txt; pushed.sha == pushed commit; pushed.diff byte-equals an independent recompute of origin/main...HEAD and carries the agent resolution; comment names the moved head, points at qwen-resolve-pr-1-pushed, carries the conditional clause and the original-artifact clarification; no token in stdout/stderr/comment
H2 head · full-scrub · head did NOT move exit 0 — direct push of the original resolution; no pushed/ record; plain comment
H3 head · full-scrub · move edits the conflicted file exit 1 — give-up names the file and the original head; fork NOT rewritten; no pushed/ record; moved comment; runner restored clean on the original resolution
H4 head · full-scrub · unrelated move · fork hook declines the replay push exit 1 — the stale first push never reached the hook (1 invocation total: stale lease declines client-side before pack transfer, measured); re-classified from the second log (reason=permission); permission comment; fork untouched; no pushed/ record
H5 head · full-scrub · clean-merge replay (move adopts base side) exit 0 — replay merged clean, took nothing from the agent's merge (pushed.diff proves it); conditional clause present (F1 holds)
H6 head · no scrub · unrelated move exit 0 — no regression while config is intact

Counts: 7 cells, 51 scripted oracles, 51 pass (expected base failure encoded as a passing assertion).

Secondary claim — classifier three-arm matrix on real logs

ab-classifier.mjs extracts classify_push_failure from head and base, plus the named intermediate control (the previous round's classifier: moved-first + parenthesised, anchor removed — a one-character surgical revert). Input bytes are real git push output — real stale --force-with-lease declines on branches named fix/permission-prompt / fix-403-error / fix/non-fast-forward-retry, a real non-FF (fetch first), real silent pre-receive-hook declines on branches named x(non-fast-forward) / x(non-fast-forward)y / fix/non-fast-forward-retry. The refusing-to-allow phrase (C9) is hook-produced — real transport bytes through the real protocol; only the HTTP-403 fatal line is synthetic, since no HTTP status exists locally — labeled where used. Witness evidence/02-classifier-three-arm-real-logs.png; logs archived at raw/real-push-logs.txt.

Check head intermediate (prev round) base Note
C1 stale · feature moved moved moved real
C2 stale · fix/permission-prompt moved moved permission base loses the request
C3 stale · fix-403-error moved moved permission base loses the request
C4 stale · fix/non-fast-forward-retry moved moved moved base saved by bare-word echo
C5 real (fetch first) moved moved moved real
C6 hook · x(non-fast-forward) + 403 permission moved permission the L13 shape
C7 hook · x(non-fast-forward)y + 403 permission moved permission mid-name parens
C8 hook · fix/non-fast-forward-retry + 403 permission permission permission bare-word echo, no parens
C9 hook phrase refusing to allow … workflow workflow_scope workflow_scope workflow_scope priority preserved
C10 pure 403 / C11 unknown / C12 scope-beats-moved permission / other / workflow_scope same same
C13 re-classification on head first=moved → second=permission real first log, 403 second

41/41 pass. (stale info)/(fetch first) can never appear verbatim in a branch name (spaces are illegal in refnames), so (non-fast-forward) is the only legally reachable anchor edge — C6/C7 cover exactly it.

Secondary claim — literal pathspecs, head vs one-line-revert control

ab-literal.mjs drives the full extracted block with a conflicted file named a[1].txt beside its wildcard sibling a1.txt; control = head with only export GIT_LITERAL_PATHSPECS=1 removed. Witness evidence/03-literal-pathspec-ab.png.

Cell Scenario head control
G1/G1c move touches ONLY the sibling exit 0 — agent resolution + sibling edit both intact exit 1 — spurious give-up, wrong reason (blames the untouched conflicted file); request lost
G2/G2c move edits the conflicted file exit 1 — correct reason exit 1 — correct outcome (union match still sees the change)
G3/G3c deletion resolution + sibling move exit 0 — file stays deleted, sibling alive exit 1 — gives up

18/18 pass. Blast radius bounded by construction: every control give-up fired before any commit/push — lost requests, never wrong trees.

Carried claims — authorize retry + prepare preflights (re-measured)

ab-secondary.mjs — witness evidence/04-carried-claims-secondary.png. 33/33 pass.

  • Authorize retry (scripted gh, sleep stubbed): head: 503,503,write → allowed, 3 calls, backoff 5s/10s; 503×3 → denied fail-closed after exactly 3; 404 → denied on the first call, no sleep; HTTP 500 and connection-reset both retried; non-writer denied. Base arm flip: first 503 denies immediately, 1 call — the loss this PR fixes.
  • Prepare preflights (whole extracted block, real origin): fork PR with edits off → unsupported before any agent work (context.md never written, resolution branch untouched, reason names the setting); same-repo PR with maintainerCanModify=false is NOT refused (conjunction holds, decision=run); draft same-repo PR → decision=run at head while base still refuses it ("is draft") — the flip; fork with edits on → runs; closed PR → skip; deleted head repo → unsupported; head's gh pr view asks for maintainerCanModify and no longer asks for isDraft, base's still asks for isDraft. Base lets the unpushable fork run (decision=run) — the wasted agent run this PR eliminates.

Mutation matrix — 11 mutants, 11 killed, 0 survivors

Scratch worktree at HEAD; unmutated control 48/48 green first; each mutant is ONE surgical YAML edit (occurrence-count asserted = 1), oracle the resolve suite. Witness evidence/05-mutation-matrix-11-killed.png; per-mutant logs raw/mutations/.

Mutant Outcome Killed by (intended assertion)
M-PUSHED-REC remove the pushed/ recording lines killed wiring pin wires the replay into the push path…
M-PUSHED-POS move Upload pushed tree before Report result killed wiring pin (position)
M-PUSHED-GATE drop always() from its gate killed wiring pin (gate string)
M-PUSHED-NAME drop the -pushed suffix killed wiring pin (name)
M-LITERAL remove export GIT_LITERAL_PATHSPECS=1 killed both glob-sibling fixture tests, behavioural — fail with the exact spurious give-up measured in G1c
M-ANCHOR drop the $ anchor killed branch-echo classifyLog case
M-BAREWORD parenthesised+anchored → bare words killed same classifyLog case (M-PAREN gap stays pinned)
M-COMMENT-PUSHED remove the pushed-artifact sentences killed wiring pin + comment pin (2 tests)
M-SLEEP backoff 5s → 7s (positive control) killed the retry tests (same file)
M-FORCE lease → --force (PR's Test-Plan mutant #1) killed wires the replay… + the scope-guard pin (2 tests)
M-FORKCHECK drop the $head_repo != $REPO half (Test-Plan mutant #2) killed refuses fork PRs the bot cannot push to before spending an agent run

The pushed-recording pins are text-level by construction; the E2E cell H1 supplies the behavioural proof that the pinned lines execute and produce the right bytes — neither half alone would hold the claim. Test-Plan mutant #3 (replay branch named pr-N/replay) was not re-driven as a mutant; the live branch name is exercised in every H/G replay cell.

Targeted gates

Witness evidence/07-vitest-gates-head-vs-base.png; logs raw/vitest-*.log, JSON counts raw/vitest-{head,base}-4suites.json.

Gate Result
vitest head: resolve + autofix + ci-flaky-rerun + workflow-size 483/483 pass (resolve 48, autofix 229, ci-flaky 8, size 198; JSON-reporter counts). First batch run hit one 30 s timeout in the autofix suite — see Environmental note
Same 4 suites at base (HEAD^1) 464/464 pass → delta +19, all in the resolve file (base 29 → head 48); the other three files byte-identical test counts on both arms
qwen-pr-review-workflow.test.js (wider suite for this file) 181/181 both arms (was 180 last round — main added one test; identical on both arms, no regression)
bash -n on all 9 extracted blocks × both arms 18/18 OK
shellcheck 0.11.0 (repo-pinned) -s bash --severity=error, same 18 blocks 18/18 OK
js-yaml parse of head + base workflows 2/2 OK
actionlint 1.7.12 (repo-pinned, via scripts/lint.js --setup) PR workflow clean rc=0; live-proven: planted zz-planted-job with needs: ['nonexistent-job-xyz'] → rc≠0 naming the job; restored → rc=0
Size ratchet see central-claim table (green as wired; failure direction live; fix cell live)
Flakiness: resolve suite × 5 identical rounds at head PPPPP — 5 × 48/48, no divergence
Reviewer Test Plan walkthrough step 1 (vitest): executed — counts differ from the claim, see Corr-1; step 2 (bash -n + YAML parse): pass; step 3 (mutation checks): all three named mutants executed and red (M-FORCE, M-FORKCHECK, branch-name shape covered by the live replay cells); step 4 (live moved-head run on the default branch): not executable here — see Not covered

Findings

F2-drift (nit, one-character fix). .github/workflows/.size-baseline records 184442 qwen-code-pr-review.yml; the measured file at the verified head is 184,443 bytes — gap 1 byte. Round-3's F2-recurrence (1,321 bytes) is fixed: the re-record commit matched the file as it then stood. The residual byte arrived with one of the four merges of main after the re-record, and main itself carries the same unrecorded +1 byte at the base tip (file 173,140 vs entry 173,139, both frozen at HEAD^1) — so this PR inherits the drift rather than originating it, and the ratchet's allowance (4,096) keeps the gate green and silent (the gate has no branch that reports sub-allowance overruns). Practical impact today: negligible (4,095 bytes of headroom remain). Suggested fix, measured: bump the entry to 184443 — applied in a scratch tree the gate reports zero diagnostics for the file (fix cell above), while the base-baseline cell proves the gate still bites on real growth. A maintainer merging through the GitHub UI could also fix the baseline in the merge commit.

Environmental note (not a finding, counted as an assertion failure for bookkeeping). The first head batch run of the 4 suites reported 1 failed | 482 passed: qwen-autofix-workflow.test.js > behaviorally replays the stale-duplicate revalidation… timed out at its 30 s testTimeout. Attribution: the file is not touched by this PR (diff covers 3 files, none of them autofix); the batch ran while the mutation runner held a concurrent vitest in a scratch worktree; an isolated rerun of the autofix suite passed 229/229 and the clean 4-suite batch passed 483/483 (both logs in raw/). This is load-induced harness contention, not PR behaviour — recorded here so the fail count stays sacred.

Corrections

Corr-1 (re-measured, stands). The description's test counts remain stale (written before later commits added tests): it says "3 files, 267 tests (36 in resolve; 7 new)"; measured at the verified head: 3 files 285 (resolve 48, autofix 229, ci-flaky 8), resolve grew 29 → 48 = 19 new vs base. This is a correction to the description — not a request to change the code.

Injection scan: no steering instructions found in the PR title, body, or commit messages (PR text is treated as untrusted input per the verification protocol).

Not covered

  • Live moved-head run on the default branch (Test Plan step 4) — requires the merged workflow. The fixture-level E2E (B1/H1–H6) is the substitute. A second stale-lease decline after replay reduces to the same re-classification path as H4 (classifier cells + code trace; the wiring attempts replay exactly once, no loop).
  • Calibration against a real emitted replay comment — no GitHub token in this sandbox; the replay-success comment remains uncalibrated. Substitute (same as previous rounds): cell B1's base comment reproduces the description's quoted "Before" text byte-for-byte.
  • Per-commit exercise — only 1 of the snapshot's 22 commits is object-reachable at depth 2; verified instead the aggregate HEAD^1..HEAD diff plus the empty git diff HEAD^2..HEAD.
  • fix(ci): run /resolve without the container sandbox and pin its CLI version #10428's scrub itself — still not in the new base's workflow (grep confirms no scrub step at HEAD^1 either); the scrub state was emulated exactly as the delta's commits describe (rm .git/config, no identity anywhere, GIT_CONFIG_GLOBAL=/dev/null).
  • yamllintpip3: Permission denied in this container (fourth round running into this); YAML well-formedness covered by js-yaml parse ×2 + live-proven actionlint. shellcheck run at error severity only.
  • upload-artifact SHA↔tag dereference (043fb46… as v7.0.1) — no network in the sandbox; byte-identical to the pin the two pre-existing uploads in the same file already use in production.
  • Round-3's observational probes not re-run this round: the degenerate replayed-tree-equals-base shape (empty pushed.diff) and the client-side-lease probe (the latter re-confirmed anyway by H4's hook-invocation count). The loss statistics in the description (author claims; no API to check) and the Show run artifacts / Report skipped request steps beyond bash -n/shellcheck and their suite pins.

Methodology

Container: the verify lane's own node:22-bookworm sample (node v22.23.2, git 2.39.5, jq, bash 5.2; vitest 3.2.7). All workflow code was extracted verbatim via js-yaml from the head and base YAMLs (never retyped); ${{ }} expressions substituted exactly as Actions substitutes them (a missing wiring throws in the harness). The unit under test was never stubbed: the git seams are two bare repos reached through url.insteadOf rewrites of the production push URL injected via GIT_CONFIG_* env (applies with .git/config deleted — the state under test), real --force-with-lease declines and real pre-receive hooks produce the classifier's input bytes, and a gh stub captures exact comment bodies / scripts API sequences. Two empirical git facts shaped the harness and are worth recording: (1) a stale --force-with-lease is declined client-side before pack transfer, so a target hook never sees it (H4 measured 1 hook invocation across two pushes); (2) git show <rev>:<path> glob-matches the path portion (sha:a[1].txt silently returns the sibling a1.txt when the literal is absent), while git cat-file is literal — the assertions use cat-file. Harnesses (lib/util.mjs, lib/world.mjs, lib/stubs.mjs, ab-pushed.mjs, ab-classifier.mjs, ab-literal.mjs, ab-secondary.mjs, run-mutations.mjs, gates-size.mjs, gates-syntax.mjs, gates-vitest.mjs) and raw per-cell logs live in the artifact dir (raw/). The base arm reused the root node_modules — a clean control because the five workflow-test files import only node builtins, yaml, and a local helper (no @qwen-code/* workspace links in the closure), and the PR touches no dependencies. Assertion totals: 51 pushed-A/B + 41 classifier + 18 literal + 33 secondary + 12 mutation outcomes + 9 size cells + 41 syntax checks + 11 vitest-gate checks = 216 (214 pass, 2 fail — see Findings).

Flakiness gate log

rounds=5 files=1 skipped=0
file scripts/tests/qwen-resolve-workflow.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/qwen-resolve-workflow.test.js


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  scripts/tests/qwen-resolve-workflow.test.js: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 2 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 3 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 4 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 5 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)

Evidence images

01-ab-pushed-base-vs-head

02-classifier-three-arm-real-logs

03-literal-pathspec-ab

04-carried-claims-secondary

05-mutation-matrix-11-killed

06-size-ratchet-cells

07-vitest-gates-head-vs-base

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

Qwen Code · sandboxed verification

@wenshao

wenshao commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /resolve

@qwen-code-ci-bot
qwen-code-ci-bot dismissed stale reviews from themself August 31, 2026 07:49

Stale bot review on a superseded commit — its blocking findings are resolved at head a0ac440 (BASE_REF added to the step env and pinned by test; size baseline re-recorded) or were recorded as non-blocking deferrals in later rounds. Dismissing my own outdated review so it does not contradict the approval pinned to a0ac440. / 针对已被取代提交的过期机器人评审——其阻断项已在 a0ac440 修复或记为非阻断延后项,予以撤销。

@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-dev-bot

Copy link
Copy Markdown
Collaborator

Qwen Code resolved the merge conflicts and pushed the branch update.

Root cause. main's #10428 (4123aa6fda) split /resolve into a token-less agent job (resolve-pr) and a credentialed publish-resolution job (bundle verify, push, comment). This PR's moved-head replay, push re-classification and pushed-tree upload assumed the old single-job layout; both sides edited the same 'Report result' env block and push command.

Semantic, not textual. The step now lives in publish-resolution, where steps.prepare/steps.resolve don't exist; refs come from job outputs (base_ref is one #10428 added; PR_NUMBER moved to the job env):

HEAD_REF: '${{ needs.resolve-pr.outputs.head_ref }}'
HEAD_SHA: '${{ needs.resolve-pr.outputs.head_sha }}'
HEAD_REPO: '${{ needs.resolve-pr.outputs.head_repo }}'
BASE_REF: '${{ needs.resolve-pr.outputs.base_ref }}'
RESOLVE_ORIGIN_URL: ''

The push keeps the PR's push_resolution() wrapper (the replay's second push reuses it), with main's --no-verify and extended SECURITY comment folded in:

push_resolution() {
  git push --no-verify \
    --force-with-lease="refs/heads/${HEAD_REF}:${HEAD_SHA}" \
    "https://x-access-token:${PUSH_TOKEN}@github.com/${HEAD_REPO}.git" \
    "HEAD:refs/heads/${HEAD_REF}" 2> "$push_log"
}

.size-baseline was re-recorded to the actual merged size (205562).

Load-bearing.

  • The replay stays in 'Report result' of publish-resolution: the only job with PUSH_TOKEN; 'Resolution check' sets up its prerequisites (qwen-resolve/pr-N branch, origin/${BASE_REF}).
  • classify_push_failure order workflow_scope → moved → permission gates the replay; the moved arm keeps parenthesised, end-of-line-anchored lease patterns so branch-name echoes can't match.
  • The replay's second push reuses the same lease line; the replay reassigns HEAD_SHA="$new_sha" first.
  • Replay comment and 'Upload pushed tree' cite the attempt-suffixed artifact name (fix(ci): run /resolve without the container sandbox and pin its CLI version #10428 renamed it); the upload gate is if: always() — the decision check moved to the job-level if.

Could not verify. No build/tests ran. The auto-merged, NON-conflicted scripts/tests/qwen-resolve-workflow.test.js is stale against this structure: the PR's appended block slices step(resolveJob, 'Report result') and step(resolveJob, 'Upload pushed tree'), but those steps moved to publish-resolution, so ~12 appended tests (replay fixtures, classify behaviour, wiring pins) will fail; its env scan also trips on main's ${RANDOM}. Follow-up: point them at publishJob; BASE_REF expectation → needs.resolve-pr.outputs.base_ref. Main-side pins spot-checked and hold (git push --no-verify, GIT_TERMINAL_PROMPT=0, lease strings publish-only).

中文说明

根因:main 的 #10428 把 /resolve 拆为无 token 的 resolve-pr 与持凭证的 publish-resolution;本 PR 的移动-head 重放、推送重分类与推送树上传基于旧的单作业结构,双方同改 'Report result' 的 env 块与推送命令。

处理:语义冲突。env 改从 needs.resolve-pr.outputs.* 取值(见代码块);推送保留 push_resolution() 包装(重放第二次推送复用它),并入 main 的 --no-verify 与扩展 SECURITY 注释;.size-baseline 重记为合并后实际大小 205562。

关键点:重放须留在 publish-resolution 的 'Report result'(唯一有 PUSH_TOKEN 的作业);分类顺序 workflow_scope → moved → permission 是重放触发门;第二次推送复用同一租约行(重放先更新 HEAD_SHA);上传步骤 if: always()(decision 判断已移到作业级 if)。

未验证:未跑构建/测试。未冲突的测试文件仍从 resolveJob 切取已移入 publish-resolution 的 'Report result' 与 'Upload pushed tree',约 12 个追加测试会失败;后续需改指向 publishJob,BASE_REF 期望改为 needs.resolve-pr.outputs.base_ref。main 侧锚点已抽查通过。

…e split re-home

The conflict resolution in cde150c re-homed the replay into
publish-resolution in the workflow but left the 'recovering requests that
used to be lost' test block sourcing `reportStep` (and the pushed-tree
upload, and the env-coverage walk) from resolve-pr, where 'Report result'
no longer exists — so reportStep was '' and every replay assertion and
fixture in that block failed.

Source the replay/push/upload assertions from publish-resolution, keep
prepare/authorize on resolve-pr, walk both jobs in the uppercase-variable
env-coverage test (the replay's BASE_REF lives in publish now, from
needs.resolve-pr.outputs), and match the pushed-tree artifact name
(needs.resolve-pr.outputs.pr_number) and its always() gate regardless of
quote style. 53 pass; mutation-checked (breaking the lease move or the
untouched-file guard in replay_on_moved_head reds the fixtures).
@wenshao

wenshao commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 31, 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: 282 passed · 0 failed · 282 total

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

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

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

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

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

Verification report

PR 10429 deep verification (fifth follow-up round) — fix(ci): recover /resolve requests lost to moved heads, fork pushes, 503s and drafts

Verdict: merge-ready — 282 passed · 0 failed · 282 total scripted assertions. The central claim (the moved-head replay, now re-homed into the new publish-resolution job) and every carried claim were re-proven at the new head: base A/B cell loses the request byte-for-byte as the description quotes, head cells replay, re-check, push with a lease on the new head, and preserve the pushed tree; classifier, literal-pathspec, retry, and preflight matrices all green; 13/13 mutants killed with a green unmutated control; all targeted gates pass. No blocking defect found; the previous round's one-byte size-baseline drift is fixed (gap now 0). Advisory evidence for human reviewers — not a review, an approval, or a CI check.
Verified head: 987d90c44a24b43eafda1bc7857866bed774a36a (git rev-parse HEAD^2); base tip be5f00eb807d85e40acf19005e8cb1ed239311f1 (HEAD^1). Effective diff = 3 files: .github/workflows/qwen-code-pr-review.yml (282 changed lines), .github/workflows/.size-baseline (one line), scripts/tests/qwen-resolve-workflow.test.js (881 changed lines); 1,106 insertions, 59 deletions in total.
Artifact dir: tmp/pr10429-verify-20260831-091600/.

中文 — 判定:✅ 通过(agent 判定)· 282/282 断言通过

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

本轮为第五次跟进轮:上轮 head 为 a0ac4407,本轮新增两个实质提交——cde150c9(把 moved-head 重放适配到 main 上新的 publish-resolution job 拆分)与 987d90c4(把重放测试改指向 publish job)。base 尖端已包含该拆分。浅克隆下中间提交不可达(git rev-list HEAD^1..HEAD^2 返回 1,快照为 23 个提交),按聚合 diff HEAD^1..HEAD 验证;git diff HEAD^2..HEAD 非空但恰为 base 侧提交 #10615(两个测试文件的时序加固),合并本身干净。所有结转测量均在新 head 上重新执行,无一沿用旧数据。

  • 中心主张复测成立(下表 A/B,见证图 01-ab-pushed-base-vs-head.png):B1 base 单元格字节级复现描述引用的 "moved" 措辞并丢失请求;H1–H6 head 单元格在新 publish-resolution 结构内完成重放(新 head 为第一父、bot committer、agent author/message 复用、结构守卫全过、pushed.sha/pushed.diff 保存、评论指向 -pushed artifact),60 条 oracle 全过。
  • 结转主张全部复测:分类器三臂真实推送日志矩阵 15/15(base 在 C2/C3 丢请求、中间对照在 C6/C7 误判,印证锚定修复);字面路径规格 A/B 15/15;authorize 重试 + prepare 预检 39/39(含 draft 门翻转与 fork 合取)。
  • 变异矩阵:未变异对照 53/53 绿,13 个突变体全杀、0 存活(含 PR 测试计划点名的三个突变:--force、fork 合取、重放分支命名 pr-N/replay;注释句突变经整句删除升级后亦被杀;新增 M-BASE-REF 证明重定位后的 BASE_REF 接线被 env 覆盖测试钉住)。
  • 门禁:4 套件 head 488/488(resolve 53、autofix 229、ci-flaky 8、size 198)、base 469/469(resolve 34 → +19 全部落在 resolve 文件);宽套件 181/181 双臂;bash -n 60/60、shellcheck(error 级)60/60、js-yaml 2/2、actionlint 干净且植入违规实测变红;尺寸棘轮 head 差值 0(上轮 1 字节漂移已修复,见 F2 状态行);抖动门 5×53/53 无分歧。
  • 未覆盖:合入后的真实 moved-head run;对真实已发布重放评论的校准(无 token);逐提交执行(浅克隆不可达);yamllint(pip3 权限拒绝)。

Previous-finding status (follow-up round)

Previous round verified head a0ac4407; new head 987d90c4 adds two substantive commits (cde150c9, the re-home of the replay into the publish-resolution job split, and 987d90c4, the matching test re-home) plus the base tip moving to be5f00e, which already contains that split. Commits are not object-reachable in this depth-2 checkout (git rev-list HEAD^1..HEAD^2 returns 1 against the snapshot's 23 — treated as unreachable per the shallow-boundary rule); the delta is verified as the aggregate HEAD^1..HEAD diff. git diff HEAD^2..HEAD is not empty this round: it is exactly the base-side commit #10615 (two timing-hardened test files, untouched by this PR's diff) — the merge is clean and introduced no PR-adjacent changes. Every carried measurement was rebuilt and re-run at the new head (harnesses reconstructed from the skill spec; the previous round's artifact dir does not persist in this container).

# Finding Severity Status at new head
F2 / F2-drift .size-baseline lags the actual workflow size (1,321 B, then re-drifted 1 B) low / nit fixed. Re-recorded entry now matches exactly: actual 205,562 = recorded 205,562, gap 0 (witness 06-size-ratchet-cells.png). The baseline diff is one line, 193208 → 205562, matching the merged file. Note: the base tip itself carries pre-existing unrecorded growth (see Findings)
F3 Under the scrub state, the replay died identity-less medium fixed — holds. Cell H1 runs the full block on a credential-free, identity-free publish-shaped checkout (the new job's persist-credentials: false shape): exit 0, replay pushed, committer qwen-code-dev-bot <qwen-code-dev-bot@users.noreply.github.com>
F1 Clean-merge replay comment overstates low fixed — holds. Cell H5: conditional clause present in the archived comment; pushed.diff proves nothing came from the agent merge
Corr-1 Description test counts off nit stands. Re-measured at the new head — see Corrections
M-PAREN Parenthesised-lease guard unpinned nit fixed — holds. Mutant M-BAREWORD (parenthesised+anchored → bare words) killed by classifies a moved head by its lease decline…
L13 Branch named x(non-fast-forward) + genuine 403 classified moved nit fixed — holds. Three-arm matrix on real hook-decline logs: C6/C7 head permission, intermediate control (anchor removed) moved, base permission

Scope selection

This round's delta (commits cde150c9 + 987d90c4): the moved-head replay re-homed from resolve-pr > Report result (old structure) into publish-resolution > Report result after #10428's job split landed on main — BASE_REF rewired through needs.resolve-pr.outputs.base_ref, fetch-by-URL via the RESOLVE_ORIGIN_URL hook, committer identity exported inside the replay, Upload pushed tree step added. Verified as the central claim below (A/B cells B1/H1–H6 against the extracted publish-resolution block).
Carried claims, all re-measured because the input closure changed (workflow re-structured, tests re-homed, new base): (1) classifier moved-before-permission ordering with parenthesised, end-of-line-anchored reasons; (2) literal pathspecs in the replay's per-file git commands; (3) authorize retry + fork preflight conjunction + draft-gate flip + deletion replay + clean-merge give-up shapes. Explicitly out of scope: the live moved-head run on the default branch, the loss statistics in the description (author claims, no API), org-owned forks (declared out of scope by the PR).

Central claim — the re-homed moved-head replay (A/B, re-measured)

The entire publish-resolution > Report result run block, js-yaml-extracted from head and base and ${{ }}-substituted exactly as Actions substitutes it, driven under bash --noprofile --norc with its own set -euo pipefail against a two-bare-repo wire (origin holding refs/pull/1/head, fork push target reached through the production-shaped x-access-token URL via url.insteadOf env rewrites), a gh stub capturing the comment body, and the publish-job checkout shape (persist-credentials: false analogue: origin remote, no credentials, no identity anywhere). The fixture seeds address-summary.md into WORKDIR exactly as the real artifact download does (Resolution check admits outcome=fixed only with it). Harness ab-pushed.mjs; witness evidence/01-ab-pushed-base-vs-head.png; per-cell logs raw/cells/.

Cell Arm · scenario Result
B1 base · unrelated move exit 1 — calibration cell. Comment line byte-matches the description's quoted "Before" sentence plus the artifact pointer; fork untouched (still the moved head); no pushed/ record; no replay branch; runner left on the original resolution
H1 head · unrelated move exit 0 — the claim. Fork branch = replay commit, parents [moved head, origin/main]; committer = bot identity; author + message reused from the agent commit; tree = agent a.txt + contributor b.txt + base c.txt; pushed.sha == pushed commit; pushed.diff byte-equals an independent two-dot recompute and carries the agent resolution; comment names the moved head, points at qwen-resolve-pr-1-pushed, carries the conditional clause and the original-artifact clarification; no token in stdout/stderr/comment; fetch-by-URL hook honored (rc 0 is itself the proof — no insteadOf exists for the default github.com URL)
H2 head · head did NOT move exit 0 — direct push of the original resolution; comment byte-exact plain wording; no pushed/ record
H3 head · move edits the conflicted file exit 1 — give-up names a.txt and the original head; fork NOT rewritten; no pushed/ record; moved comment byte-exact; runner restored clean on qwen-resolve/pr-1 at the original resolution
H4 head · unrelated move · fork hook declines the replay push exit 1 — exactly 1 hook invocation (the stale first push is declined client-side before pack transfer, measured); re-classified from the replay push log (reason=permission); permission comment; fork untouched; no pushed/ record
H5 head · clean-merge replay (move adopts the base side) exit 0 — replay merged clean, took nothing from the agent's merge (pushed.diff proves it); conditional clause present (F1 holds)
H6 head · identity present in .git/config exit 0 — replay works with config intact; committer still the exported bot identity

Counts: 7 cells, 60 scripted oracles, 60 pass (expected base failure encoded as a passing assertion).

Secondary claim — classifier three-arm matrix on real logs

ab-classifier.mjs extracts classify_push_failure from head, the inline chain from base, and the named intermediate control (head minus the end-of-line anchor — a one-character surgical revert). Input bytes are real git push output — real stale --force-with-lease declines (remote advanced out-of-band so the lease is genuinely stale), a real (fetch first) through a second clone the first client has never fetched, real silent pre-receive-hook declines on branches named x(non-fast-forward) / x(non-fast-forward)y / fix/non-fast-forward-retry — with branch names chosen to echo classifier keywords. Only the HTTP-403 fatal line is synthetic (no HTTP status exists locally); labeled. Witness evidence/02-classifier-three-arm-real-logs.png; logs archived at raw/real-push-logs/.

Check head intermediate (no anchor) base Note
C1 stale · feature moved moved moved real
C2 stale · fix/permission-prompt moved moved permission base loses the request
C3 stale · fix-403-error moved moved permission base loses the request
C4 stale · fix/non-fast-forward-retry moved moved moved base saved by bare-word echo
C5 real (fetch first) moved moved moved real
C6 hook · x(non-fast-forward) + 403 permission moved permission the L13 shape
C7 hook · x(non-fast-forward)y + 403 permission moved permission mid-name parens
C8 hook · fix/non-fast-forward-retry + 403 permission permission permission bare-word echo, no parens
C9 hook phrase refusing to allow … workflow workflow_scope workflow_scope workflow_scope priority preserved
C10 pure 403 / C11 unknown / C12 scope-beats-moved permission / other / workflow_scope same same
C13 re-classification on head first=moved → second=permission real first log, 403 second

15/15 pass.

Secondary claim — literal pathspecs, head vs one-line-revert control

ab-literal.mjs drives the full extracted block with a conflicted file named a[1].txt beside its wildcard sibling a1.txt; control = head with only export GIT_LITERAL_PATHSPECS=1 removed. Witness evidence/03-literal-pathspec-ab.png.

Cell Scenario head control
G1/G1c move touches ONLY the sibling exit 0 — agent resolution + sibling edit both intact in the pushed tree exit 1 — spurious give-up, wrong reason (blames the untouched conflicted file); request lost
G2/G2c move edits the conflicted file exit 1 — correct reason exit 1 — correct outcome (union match still sees the change)
G3/G3c deletion resolution + sibling move exit 0 — file stays deleted, sibling alive exit 1 — gives up

15/15 pass. Blast radius bounded by construction: every control give-up fired before any commit/push — lost requests, never wrong trees.

Carried claims — authorize retry + prepare preflights (re-measured)

ab-secondary.mjs — witness evidence/04-carried-claims-secondary.png. 39/39 pass.

  • Authorize retry (scripted gh, sleep stubbed): head: 503,503,write → allowed, 3 calls, backoff 5s/10s; 503×3 → denied fail-closed after exactly 3, sleeps [5,10]; 404 → denied on the first call, no sleep; connection-reset ×2 → retried then allowed; HTTP 500 → retried (2 calls, one 5s sleep); read denied, admin allowed. Base arm flip: first 503 denies immediately, 1 call — the loss this PR fixes.
  • Prepare preflights (whole extracted block, real bare origin): fork PR with edits off → unsupported before any agent work (context.md never written; reason names the setting) while base lets the same PR through with decision=run and starts writing context.md — the wasted agent run this PR eliminates; same-repo PR with maintainerCanModify=false is NOT refused (conjunction holds); draft same-repo PR → decision=run at head while base still refuses it ("is draft") — the flip; fork with edits on runs; closed skips; deleted head repo → unsupported; head's gh pr view asks for maintainerCanModify and no longer asks for isDraft (base: the opposite); base_ref/head_sha outputs written for the publish job.

Mutation matrix — 13 mutants, 13 killed, 0 survivors

Scratch worktree at HEAD; unmutated control 53/53 green first; each mutant is ONE surgical YAML edit (occurrence-count asserted), oracle the resolve suite. Witness evidence/05-mutation-matrix-13-killed.png; per-mutant logs raw/mutations/.

Mutant Outcome Killed by (intended assertion)
M-PUSHED-REC remove the pushed/ recording lines killed wiring pin wires the replay into the push path…
M-PUSHED-POS move Upload pushed tree before Report result killed wiring pin (position)
M-PUSHED-GATE drop always() from its gate killed wiring pin (gate string)
M-PUSHED-NAME drop the -pushed suffix killed wiring pin (name)
M-LITERAL remove export GIT_LITERAL_PATHSPECS=1 killed both glob-sibling fixture tests, behavioural — the exact spurious give-up measured in G1c
M-ANCHOR drop the $ anchor killed branch-echo classifyLog case
M-BAREWORD parenthesised+anchored → bare words killed same classifyLog case (M-PAREN gap stays pinned)
M-COMMENT-PUSHED-V2 delete the whole pushed-artifact sentence of the replay comment killed wiring pin + says in the replay comment what the run artifact does and does not describe (2 tests). Its weaker first variant (rewording the sentence opener only) survived correctly: the edit kept both substrings the pins grep — an invalid mutant, not a coverage gap; escalated and killed
M-SLEEP backoff 5s → 7s (positive control) killed the retry tests (same file)
M-FORCE lease → --force (PR's Test-Plan mutant #1) killed wires the replay… + the scope-guard pin (3 tests)
M-FORKCHECK drop the $head_repo != $REPO half (Test-Plan mutant #2) killed refuses fork PRs the bot cannot push to before spending an agent run
M-BRANCHNAME replay branch pr-N/replay (Test-Plan mutant #3) killed fixture tests fail with exactly Replay gave up: could not check out … — git refuses a ref under the existing qwen-resolve/pr-N branch (6 tests)
M-BASE-REF drop the BASE_REF env wiring from publish Report result killed defines every uppercase variable the resolve-pr and publish run blocks expand — the re-homed wiring is pinned

The pushed-recording pins are text-level by construction; the E2E cell H1 supplies the behavioural proof that the pinned lines execute and produce the right bytes — neither half alone would hold the claim.

Targeted gates

Witness evidence/07-vitest-gates-head-vs-base.png and evidence/08-syntax-gates-and-actionlint-live.png; logs raw/vitest-*.log, JSON counts raw/vitest-gates.json.

Gate Result
vitest head: resolve + autofix + ci-flaky-rerun + workflow-size 488/488 pass (resolve 53, autofix 229, ci-flaky 8, size 198; JSON-reporter counts)
Same 4 suites at base (HEAD^1) 469/469 pass → delta +19, all in the resolve file (base 34 → head 53); the other three files byte-identical test counts on both arms
qwen-pr-review-workflow.test.js (wider suite for this file) 181/181 both arms — no regression on the wider surface
bash -n on all 30 extracted run blocks × both arms 60/60 OK
shellcheck 0.11.0 (repo-pinned) -s bash --severity=error, same 60 blocks 60/60 OK
js-yaml parse of head + base workflows 2/2 OK
actionlint (repo-pinned, via scripts/lint.js --setup) all workflows clean rc=0; live-proven: planted zz-planted-job with needs: [nonexistent-job-xyz] → rc=1 naming the job at line 3556; restored → rc=0
Size ratchet actual = recorded = 205,562, gap 0; gate as CI wires it (no WORKFLOW_SIZE_BASE_SHA) green and silent; failure direction live (scratch tree with the base entry 193,208 → exit 1, grew to 205562 bytes, 12354 over its recorded 193208); fix cell green
Flakiness: resolve suite × 5 identical rounds at head PPPPP — 5 × 53/53, no divergence
Reviewer Test Plan walkthrough step 1 (vitest): executed — counts differ from the claim, see Corr-1; step 2 (bash -n + YAML parse): pass; step 3 (mutation checks): all three named mutants executed and red (M-FORCE, M-FORKCHECK, M-BRANCHNAME with the exact predicted could not check out); step 4 (live moved-head run on the default branch): not executable here — see Not covered

Findings

No blocking defect and no new defect in the PR's code were found this round; every executed assertion passed. Two informational items, both outside the PR's changeset:

  1. (nit, pre-existing on main, NOT introduced by this PR) The base tip HEAD^1 itself carries unrecorded workflow growth: the file measures 194,395 bytes there against its recorded 193,208 — gap 1,187 bytes, inside the ratchet's 4,096 allowance, so the gate is green and silent (it has no branch that reports sub-allowance overruns). This is main-side drift the fix(ci): run /resolve without the container sandbox and pin its CLI version #10428 split left behind; this PR's own re-record is exact (gap 0 at the verified head), so the PR inherits nothing and leaves nothing. A maintainer may want to re-record the baseline on main at some point; nothing in this PR needs to change.
  2. (note) The fix(ci): run /resolve without the container sandbox and pin its CLI version #10428 post-agent scrub step is still not present in this base's workflow (grep confirms no scrub step at HEAD^1); the job split supersedes most of its purpose for the publish path — publish-resolution starts from a fresh actions/checkout with persist-credentials: false, so the replay's credential-free assumptions hold by construction. The replay's defensive measures (fetch-by-URL, exported committer identity) were exercised in exactly that state (cell H1) and remain valid if a scrub lands later.

Corrections

Corr-1 (re-measured, stands). The description's test counts remain stale: it says "3 files, 267 tests (36 in resolve; 7 new)"; measured at the verified head: 3 files 290 (resolve 53, autofix 229, ci-flaky 8), resolve grew 34 → 53 = 19 new vs base. This is a correction to the description — not a request to change the code.

Injection scan: no steering instructions found in the PR title, body, or commit messages (PR text is treated as untrusted input per the verification protocol).

Not covered

  • Live moved-head run on the default branch (Test Plan step 4) — requires the merged workflow. The fixture-level E2E (B1/H1–H6) is the substitute. A second stale-lease decline after replay reduces to the same re-classification path as H4 (classifier cells C13 + code trace; the wiring attempts replay exactly once, no loop). This round additionally reproduces the wire shape, not the trigger: the decline/replay bytes are real git output produced locally, not a recording of a production decline.
  • Calibration against a real emitted replay comment — no GitHub token in this sandbox; the replay-success comment remains uncalibrated against production. Substitute (same as previous rounds): cell B1's base comment reproduces the description's quoted "Before" text byte-for-byte.
  • Per-commit exercise — only 1 of the snapshot's 23 commits is object-reachable at depth 2; verified instead the aggregate HEAD^1..HEAD diff, and confirmed the non-empty git diff HEAD^2..HEAD is exactly the base-side test: harden release timing-sensitive waits #10615 change (two test files untouched by this PR), so the merge introduced nothing PR-adjacent.
  • yamllintpip3: Permission denied in this container (fifth round running into this); YAML well-formedness covered by js-yaml parse ×2 + live-proven actionlint. shellcheck run at error severity only.
  • upload-artifact SHA↔tag dereference (043fb46… as v7.0.1) — no network in the sandbox; byte-identical to the pin the two pre-existing uploads in the same file already use at base in production.
  • The loss statistics in the description (294 resolutions, 17 lost to moved heads, 10 fork runs, 182 draft skips — author claims; no API to check) and the Show run artifacts / Report skipped request steps beyond bash -n/shellcheck and their suite pins.

Methodology

Container: the verify lane's own node:22-bookworm sample (node v22.23.2, git 2.39.5, bash 5.2, vitest 3.2.7). All workflow code was extracted verbatim via js-yaml from the head and base YAMLs (never retyped); ${{ }} expressions substituted exactly as Actions substitutes them (a missing wiring throws in the harness). The unit under test was never stubbed: the git seams are two bare repos reached through url.insteadOf rewrites of the production push URL injected via GIT_CONFIG_* env (applies with no credentials in .git/config — the state under test), real --force-with-lease declines and real pre-receive hooks produce the classifier's input bytes, and a gh stub captures exact comment bodies. Three empirical git facts shaped the harness and are worth recording: (1) a stale --force-with-lease is declined client-side before pack transfer, so a target hook never sees it (H4 measured 1 hook invocation across two pushes); (2) git cat-file treats rev:path literally while git show glob-matches the path portion — assertions use cat-file; (3) in this container's identity-free environment git merge validates the committer before computing conflicts, so the fixture-side resolution merge carries an identity while the state under test stays identity-free. Harnesses (lib/util.mjs, lib/world.mjs, lib/stubs.mjs, ab-pushed.mjs, ab-classifier.mjs, ab-literal.mjs, ab-secondary.mjs, run-mutations.mjs, run-mutation-v2.mjs, run-mutation-branchname.mjs, run-mutation-baseref.mjs, gates-size.mjs, gates-syntax.mjs, gates-vitest.mjs) and raw per-cell logs live in the artifact dir (raw/). The base arm reused the root node_modules — a clean control because the workflow-test files import only node builtins, yaml, and a local helper (no @qwen-code/* workspace links in the closure), and the PR touches no dependencies. Assertion totals: 60 pushed-A/B + 15 classifier + 15 literal + 39 secondary + 14 mutation-matrix (control + 13 mutants) + 10 vitest + 122 syntax + 3 actionlint + 4 size-ratchet = 282 pass, 0 fail — every number maps to a scripted check that ran.

Flakiness gate log

rounds=5 files=1 skipped=0
file scripts/tests/qwen-resolve-workflow.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/qwen-resolve-workflow.test.js


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  scripts/tests/qwen-resolve-workflow.test.js: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 2 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 3 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 4 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)
round 5 · scripts/tests/qwen-resolve-workflow.test.js: P (exit 0)

Evidence images

01-ab-pushed-base-vs-head

02-classifier-three-arm-real-logs

03-literal-pathspec-ab

04-carried-claims-secondary

05-mutation-matrix-13-killed

06-size-ratchet-cells

07-vitest-gates-head-vs-base

08-syntax-gates-and-actionlint-live

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

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.

LGTM, looks ready to ship. ✅

@wenshao
wenshao added this pull request to the merge queue Aug 31, 2026
Merged via the queue into main with commit d6878a8 Aug 31, 2026
60 of 61 checks passed
wenshao added a commit that referenced this pull request Aug 31, 2026
Same conflict as 76acdcd, same resolution: both sides re-recorded
qwen-code-pr-review.yml in .size-baseline (branch 198946 after the
previous merge, main 205562 after #10429's replay machinery); the
entry is the merged file's actual size (210113), verified with
check-workflow-size.sh on the merged tree.
qwen-code-dev-bot added a commit that referenced this pull request Aug 31, 2026
Main split the /resolve lane into resolve-pr and publish-resolution
(#10428, #10429). Resolve the HELPER_TESTS conflict as the union of both
new entries, extend the health watch's producer pins to both jobs, and
classify the lane's new lost-artifact report sentence as infra_failed
instead of letting it fall through to unknown.

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

Copy link
Copy Markdown
Collaborator

Released in v0.23.0.

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

Labels

autofix/takeover Summon the autofix loop to manage this PR (remove to release; needs triage+)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants