Skip to content

ci(autofix): recover from generated-artifact CI gates and stop silent stalls - #6998

Merged
wenshao merged 15 commits into
mainfrom
feat/autofix-generated-artifact-loop
Jul 17, 2026
Merged

ci(autofix): recover from generated-artifact CI gates and stop silent stalls#6998
wenshao merged 15 commits into
mainfrom
feat/autofix-generated-artifact-loop

Conversation

@wenshao

@wenshao wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Hardens the autonomous autofix loop (qwen-code-dev-bot) so it can recover from a class of CI failures it currently gets permanently stuck on: a source edit whose committed generated artifact was not regenerated. The concrete trigger is a change to the settings schema source that leaves settings.schema.json stale — CI's "Check settings schema is up-to-date" step fails, but that failure is invisible to build/typecheck/lint/Vitest, so the bot could neither run the fix, catch it, nor avoid going silent. Four coordinated changes close that loop: the agent is now given the tool and the instruction to regenerate committed artifacts; the deterministic verify gate mirrors CI's freshness check so a stale artifact fails locally before push; the "have I already considered this feedback?" watermark no longer advances on unrelated base-sync merges (so a maintainer comment can't get buried); and a failed run always leaves a visible handoff + marker instead of stalling silently. A stuck pending check can also no longer strand a PR forever.

Why it's needed

The autofix bot stalled on a real PR: it edited the settings schema source without regenerating settings.schema.json, CI's freshness guard went red, and the bot (1) could not have fixed it even given the exact instructions, because npm run generate:settings-schema was in neither the agent tool allowlist nor the verify gate; (2) after a maintainer commented the fix, a manual "Update branch" merge bumped the push-watermark past that comment, burying it so every subsequent scan reported "nothing new"; and (3) any run that failed before writing a handoff file left no comment and no eval marker at all, so the loop went silent and a human had to take over by hand. This is a recurring failure mode for any source with a committed generated artifact, so it is worth fixing structurally rather than per-PR.

Scope note: this PR deliberately stays within two existing, tested design decisions — it does NOT add a comment-triggered run path (the workflow intentionally triggers only on pull_request_review:submitted), and it does NOT inject raw CI logs into the model's feedback (that feedback is deliberately sanitized). Autonomous diagnosis from failing-step logs is left as a possible follow-up pending a prompt-injection review.

Reviewer Test Plan

How to verify

The change is to a GitHub Actions workflow (.github/workflows/qwen-autofix.yml) and the agent prompt (.qwen/skills/autofix/SKILL.md), verified by the workflow's own unit test plus replaying the affected shell/jq logic under bash against live data.

  1. Workflow contract testnpx vitest run scripts/tests/qwen-autofix-workflow.test.js passes 48/48, including the assertions this PR updates for the watermark, pending-check, and handoff changes, and the pre-existing guards that forbid comment triggers and raw-log/URL injection (which this PR respects).
  2. Watermark un-burial (change D) — replay the scan watermark math against the real motivating PR: the last eval marker is 2026-07-15T18:25:04Z, the head commit (a base-sync "Update branch" merge) is 2026-07-16T01:58:46Z, and the maintainer's two comments are at 23:50 and 00:12. Old logic (EFF_WM = max(pushDate, evalMarker)) → 01:58:46 → both comments buried. New logic (EFF_WM = evalMarker, PR createdAt as the pre-first-eval floor) → 18:25:04 → both comments picked up.
  3. Schema gate idempotency (change A)npm run generate:settings-schema on a clean tree produces zero diff, so the new verify-gate check fails only on a genuinely stale artifact, never falsely.
  4. Static validation — the workflow parses as valid YAML, all run: blocks pass bash -n, and CI's own actionlint / shellcheck / yamllint / schema-freshness steps pass on this branch.

Expected vs observed: for the motivating PR, the loop would now re-target the PR (D), be able to run the generator and be told to (C), have the stale artifact caught locally before push (A), and never go silent on failure (E). Observed: all replays above produce the expected outputs and the contract test is green.

Evidence (Before & After)

Non-UI change (CI workflow + agent prompt). No screenshots. Concrete before/after of the watermark change, replayed on the motivating PR's live data:

D (watermark)  maintainer comment 2026-07-15T23:50:38Z :  BEFORE=buried   AFTER=picked-up
D (watermark)  maintainer comment 2026-07-16T00:12:24Z :  BEFORE=buried   AFTER=picked-up

Tested on

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

Environment (optional)

The workflow runs only on ubuntu-latest GitHub-hosted runners. Verified locally under bash: scripts/tests/qwen-autofix-workflow.test.js (48/48), YAML parse, bash -n on every run: block, npm run generate:settings-schema idempotency on a clean tree, and replay of the watermark math against the live motivating PR.

Risk & Scope

  • Main risk or tradeoff: the verify-gate schema check adds one npm run generate:settings-schema per verify (idempotent, no diff on clean trees). The watermark change is strictly safer — a real bot fix still advances the watermark via its eval marker; only unrelated base-sync commits stop advancing it.
  • Not validated / out of scope: not run end-to-end on a live Linux runner (no bot PR in flight to trigger it); the fixes are exercised by the contract test and deterministic replay. Comment-triggered runs and raw-log-to-model injection are intentionally excluded to respect existing design decisions.
  • Breaking changes / migration notes: none. No behavior change for PRs without stale artifacts.

Linked Issues

Motivated by the autofix stall on #6984 (references, does not close).

中文说明

本 PR 做了什么

强化自动修复回路(qwen-code-dev-bot),让它能从一类目前会永久卡死的 CI 失败中恢复:改了源码但没有重新生成已提交的产物。具体触发点是改动 settings schema 源码却让 settings.schema.json 过期——CI 的 "Check settings schema is up-to-date" 步骤会失败,但该失败对 build/typecheck/lint/Vitest 都是隐形的,于是 bot 既跑不了修复命令、也抓不到它、还会静默失联。四处协同改动闭合这个回路:给 agent 重新生成产物的工具和指令;让确定性 verify gate 镜像 CI 的新鲜度校验,使过期产物在推送前本地就失败;"这条反馈我是否处理过" 的水位线不再因无关的基线同步合并而前移(维护者评论不会被埋);失败的运行一律留下可见的交接说明 + 标记而不是静默。卡住的 pending 检查也不会再永久阻塞 PR。

为什么需要

autofix bot 在一个真实 PR 上卡死:它改了 settings schema 源码却没重新生成 settings.schema.json,CI 新鲜度校验变红,而 bot(1)即便给了它精确指令也修不了,因为 npm run generate:settings-schema 既不在 agent 工具白名单、也不在 verify gate 里;(2)维护者评论了修复方法后,一次手动 "Update branch" 合并把 push 水位线推过了那条评论,把它埋掉,于是之后每次扫描都报 "nothing new";(3)任何在写交接文件之前就失败的运行,既不发评论也不写 eval 标记,回路就此静默,只能人工接管。这对任何"有已提交生成产物的源码"都是复发性失败模式,值得结构性修复而非逐 PR 打补丁。

范围说明:本 PR 刻意守住两个既有的、有测试的设计决定——不新增评论触发的运行路径(工作流有意只在 pull_request_review:submitted 触发),也不把原始 CI 日志注入模型的反馈(该反馈刻意做了净化)。基于失败 step 日志的自主诊断留作后续,待做一次 prompt-injection 评审。

评审验证方案

如何验证

改动是 GitHub Actions 工作流(.github/workflows/qwen-autofix.yml)和 agent prompt(.qwen/skills/autofix/SKILL.md),通过工作流自身的单测 + 在 bash 下用真实数据回放受影响的 shell/jq 逻辑来验证。

  1. 工作流契约测试——npx vitest run scripts/tests/qwen-autofix-workflow.test.js 48/48 通过,包括本 PR 为水位线/pending/交接改动更新的断言,以及禁止评论触发、禁止原始日志/URL 注入的既有守卫(本 PR 遵守它们)。
  2. 水位线解埋(改动 D)——用真实触发 PR 的数据回放:最后一次 eval 标记 2026-07-15T18:25:04Z,head commit(基线同步 "Update branch" 合并)2026-07-16T01:58:46Z,维护者两条评论在 23:5000:12。旧逻辑(max(push, eval))→ 01:58:46 → 两条被埋;新逻辑(EFF_WM = eval,首评前地板用 PR createdAt)→ 18:25:04 → 两条被拾起
  3. schema gate 幂等(改动 A)——干净树上 npm run generate:settings-schema 零 diff,新检查只对真正过期的产物失败。
  4. 静态校验——工作流 YAML 解析有效,全部 run: 块通过 bash -n,CI 自身的 actionlint/shellcheck/yamllint/schema 新鲜度步骤在本分支均通过。

预期 vs 实测:对触发 PR,回路现在会重新盯上该 PR(D)、能跑生成命令并被要求这么做(C)、在推送前本地就抓到过期产物(A)、失败时不再静默(E)。实测:回放均产出预期结果,契约测试全绿。

证据(前后对比)

非 UI 改动(CI 工作流 + agent prompt),无截图。水位线改动在触发 PR 真实数据上的前后对比:

D(水位线)  维护者评论 2026-07-15T23:50:38Z :  前=被埋   后=被拾起
D(水位线)  维护者评论 2026-07-16T00:12:24Z :  前=被埋   后=被拾起

测试情况

OS Status
🍏 macOS N/A
🪟 Windows N/A
🐧 Linux ✅ 已测试

环境(可选)

工作流仅在 ubuntu-latest GitHub 托管 runner 上运行。本地在 bash 下验证:scripts/tests/qwen-autofix-workflow.test.js(48/48)、YAML 解析、对每个 run:bash -n、干净树上 npm run generate:settings-schema 幂等性、以及针对真实触发 PR 回放水位线计算。

风险与范围

  • 主要风险/权衡:verify-gate 的 schema 检查每次 verify 增加一次 npm run generate:settings-schema(幂等,干净树零 diff)。水位线改动严格更安全——真正的 bot 修复仍通过其 eval 标记推进水位线,只有无关的基线同步 commit 不再推进它。
  • 未验证/不在范围内:未在真实 Linux runner 上端到端跑(当前没有进行中的 bot PR 可触发);修复通过契约测试 + 确定性回放验证。评论触发的运行、以及把原始日志注入模型,均刻意排除以遵守既有设计决定。
  • 破坏性变更/迁移:无。对没有过期产物的 PR 行为不变。

关联 Issue

#6984 上的 autofix 卡死触发(引用,不关闭)。

… stop silent stalls

The autofix bot stalled on PRs that edit settingsSchema.ts without
regenerating settings.schema.json (e.g. #6984): a CI-only freshness gate
it could neither run, see, nor recover from.

- Give the agent the tool and the instruction to regenerate: add
  `npm run generate:settings-schema` to the develop-issue and address-review
  coreTools allowlists, and a SKILL rule to regenerate + commit a source's
  generated artifact.
- Mirror CI's "Check settings schema is up-to-date" step in both verify
  gates so a stale artifact fails locally instead of red-on-CI after push.
- Inject the actual failing STEP name + a log excerpt into feedback.md so
  the agent diagnoses from the real failure instead of guessing from local
  test runs. SKILL now forbids "pre-existing"/environment excuses without
  evidence.
- Decouple the feedback watermark from base-sync pushes: use the last eval
  marker (what the agent evaluated), not the head commit date, so an
  "Update branch" merge can no longer bury unaddressed maintainer feedback.
  Use PR createdAt as the pre-first-eval floor.
- Bound the pending-check skip so a check wedged pending can't strand a PR
  forever; always post a handoff comment + eval marker on failure so the
  loop never goes silent; add an issue_comment trigger so an @-mention from
  a trusted maintainer re-triggers the review pass promptly.
@qwen-code-ci-bot

qwen-code-ci-bot commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Thanks for the PR, @wenshao!

Template looks good ✓ — all required sections present with bilingual content.

Problem: Observed bug with concrete evidence. The autofix bot stalled on #6984 when a settings schema source edit left settings.schema.json stale. CI's freshness guard failed, but the bot had no tool to regenerate it, no verify-gate check to catch it, and a watermark bug that buried the maintainer's fix instructions under a base-sync merge. Three distinct failure modes, all real.

Direction: Aligned. This is CI infrastructure hardening — closing gaps in the autonomous loop that currently require human intervention when they shouldn't. No product-direction concerns.

Size: Not applicable — no core modules touched. Changes are confined to .github/workflows/, .qwen/skills/autofix/, and scripts/tests/.

Approach: The five coordinated changes feel right-sized for the problem. Each addresses a specific failure mode identified in the motivating incident, and the scope note explicitly respects existing design decisions (no comment-trigger path, no raw-log injection). No scope creep. The verify-gate schema check adds one npm run generate:settings-schema per run — acceptable cost for catching a class of failures invisible to all other checks.

Moving on to code review. 🔍

中文说明

感谢贡献,@wenshao

模板完整 ✓ — 所有必要章节齐全,含双语内容。

问题: 已观测到的 bug,有具体证据。autofix bot 在 #6984 上卡死:settings schema 源码改动导致 settings.schema.json 过期,CI 新鲜度校验失败,而 bot 既没有重新生成的工具、也没有 verify gate 来捕获它,加上水位线 bug 把维护者的修复指令埋在了 base-sync 合并之下。三种不同的失败模式,均为真实发生。

方向: 对齐。这是 CI 基础设施加固——闭合自主循环中本不该需要人工介入的缺口。无产品方向顾虑。

规模: 不适用——未触及核心模块。改动限于 .github/workflows/.qwen/skills/autofix/scripts/tests/

方案: 五处协同改动与问题匹配。每处针对触发事件中的具体失败模式,范围说明明确遵守既有设计决定(不新增评论触发路径、不注入原始日志)。无范围蔓延。verify gate 的 schema 检查每次运行增加一次 npm run generate:settings-schema——对于捕获其他所有检查都隐形的失败类别,这是可接受的代价。

进入代码审查 🔍

Qwen Code · qwen3.7-max

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

@qwen-code-ci-bot

qwen-code-ci-bot commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Code Review

Independent proposal: before reading the diff, my approach would have been:

  1. Add npm run generate:settings-schema to the agent's tool allowlist and the verify gate
  2. Fix the watermark so base-sync merges don't bury maintainer comments — decouple it from the head commit date
  3. Add a staleness timeout for pending checks so a wedged check can't strand a PR
  4. Ensure every failure path (including pre-verify crashes) posts a visible handoff + eval marker

The PR's solution matches all four points and goes further with the (.name // .workflowName) improvement for more precise check-name display and the JOB_STATUS env var for catching job-level failures even when no step set OUTCOME.

Correctness: No issues found. The key changes are well-reasoned:

  • Schema verify gate — idempotent, fast on clean trees, catches a failure class invisible to build/typecheck/lint/vitest. Applied consistently in both issue-fix and review-address verify jobs.
  • Watermark fix — the most impactful change. EFF_WM = EVAL_WM (with CREATED_WM as pre-first-eval floor) is the correct model: the watermark should reflect what the agent has evaluated, not when the branch was last pushed. The motivating replay data demonstrates the fix clearly.
  • Pending staleness (30 min) — pragmatic. The date -u -d comparison with startedAt // completedAt // updatedAt handles edge cases where timestamps are missing.
  • Handoff always — closes the silent-stall gap. POST_HANDOFF logic correctly fires on both OUTCOME==failed and JOB_STATUS==failure. The fallback chain (handoff.md → failure.md → generic message) handles all crash scenarios.
  • Round advancement on failure — writing NEXT_ROUND in the failure marker prevents infinite respin on deterministic failures.

Reuse: No new utilities or abstractions. The schema check reuses the existing npm run generate:settings-schema command and standard git status --porcelain. Clean.

Style: Follows the workflow's existing patterns — consistent comment prefixes, ::error:: annotations, ${WORKDIR} conventions, jq formatting. Comments explain the why without over-narrating.

Verification

$ npx vitest run scripts/tests/qwen-autofix-workflow.test.js
 ✓ scripts/tests/qwen-autofix-workflow.test.js (48 tests) 1131ms
 Test Files  1 passed (1)
      Tests  48 passed (48)

$ YAML validation: valid, 4 jobs
$ bash -n: 32 run blocks passed syntax check

Real-scenario testing: This is a non-UI CI workflow change — tmux testing is not applicable. The contract test suite (48 assertions) is the appropriate verification mechanism: it validates the workflow YAML structure, watermark logic, handoff behavior, and all the behavioral contracts this PR changes. All pass.

No Critical or blocking findings. The implementation is clean, well-tested, and addresses a real gap.

中文说明

代码审查

独立方案: 在读 diff 之前,我的方案是:

  1. npm run generate:settings-schema 加入 agent 工具白名单和 verify gate
  2. 修复水位线,使 base-sync 合并不会埋掉维护者评论——与 head commit 日期解耦
  3. 为 pending 检查添加超时,避免卡住的检查永久阻塞 PR
  4. 确保每条失败路径(包括 verify 前的崩溃)都留下可见的交接说明 + eval 标记

PR 的方案覆盖了以上四点,还额外做了 (.name // .workflowName) 改进(更精确的检查名称显示)和 JOB_STATUS 环境变量(即使没有 step 设置 OUTCOME 也能捕获 job 级别失败)。

正确性: 未发现问题。关键改动均有理有据:

  • Schema verify gate——幂等、干净树上快、捕获 build/typecheck/lint/vitest 均隐形的失败类别。在 issue-fix 和 review-address 两个 verify job 中一致应用。
  • 水位线修复——影响最大的改动。EFF_WM = EVAL_WM(首评前地板用 CREATED_WM)是正确的模型:水位线应反映 agent 已评估的内容,而非分支最后一次推送的时间。动机中的回放数据清晰展示了修复效果。
  • Pending 超时(30 分钟)——务实。date -u -d 配合 startedAt // completedAt // updatedAt 处理了时间戳缺失的边界情况。
  • 交接必达——闭合了静默卡死的缺口。POST_HANDOFF 逻辑在 OUTCOME==failedJOB_STATUS==failure 时均正确触发。回退链(handoff.md → failure.md → 通用通知)覆盖所有崩溃场景。
  • 失败时推进 round——在失败标记中写入 NEXT_ROUND,防止确定性失败时无限重转。

复用: 无新工具或抽象。schema 检查复用了现有的 npm run generate:settings-schema 命令和标准的 git status --porcelain。干净。

风格: 遵循工作流既有模式——一致的评论前缀、::error:: 注解、${WORKDIR} 约定、jq 格式。注释解释了为什么而没有过度叙述。

验证

$ npx vitest run scripts/tests/qwen-autofix-workflow.test.js
 ✓ 48 tests passed
$ YAML 校验:有效,4 个 jobs
$ bash -n:32 个 run 块语法检查通过

真实场景测试: 这是非 UI 的 CI 工作流改动——tmux 测试不适用。契约测试套件(48 条断言)是合适的验证方式:验证了工作流 YAML 结构、水位线逻辑、交接行为以及本 PR 改动的所有行为契约。全部通过。

无 Critical 或阻塞性问题。实现干净、测试充分、解决了真实缺口。

Qwen Code · qwen3.7-max

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

@qwen-code-ci-bot

qwen-code-ci-bot commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Confidence: 5/5

Self-audit: re-read the full diff twice. The watermark change is the linchpin — it correctly decouples "what the agent has seen" from "when the branch was last touched," and the motivating replay data proves the fix. The four other changes are each independently sound and mutually reinforcing. Tests cover every behavioral change. No gaps found.

Approving. ✅

中文说明

置信度:5/5

自审:完整 diff 通读两遍。水位线改动是关键——正确地将"agent 已看到的内容"与"分支最后被触碰的时间"解耦,动机中的回放数据证明了修复效果。其余四处改动各自独立可靠且相互增强。测试覆盖了所有行为变更。未发现缺口。

通过 ✅

Qwen Code · qwen3.7-max

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

LGTM, looks ready to ship. ✅

@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 81.73% 81.73% 87.58% 82.01%
Core 86.52% 86.52% 87.95% 85.71%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   81.73 |    82.01 |   87.58 |   81.73 |                   
 src               |   81.14 |    78.63 |   86.74 |   81.14 |                   
  cli.ts           |   94.31 |    82.35 |     100 |   94.31 | ...67-468,478-479 
  gemini.tsx       |   72.55 |     75.5 |   81.81 |   72.55 | ...1102-1106,1227 
  ...ractiveCli.ts |   78.94 |    76.87 |   81.25 |   78.94 | ...2238-2240,2277 
  ...liCommands.ts |   88.34 |    83.87 |      90 |   88.34 | ...63,480,514,635 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   64.66 |    68.67 |   86.69 |   64.66 |                   
  acpAgent.ts      |   64.16 |    68.39 |    86.6 |   64.16 | ...9498,9503-9505 
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  errorCodes.ts    |       0 |        0 |       0 |       0 | 1-22              
  ...ion-skills.ts |     100 |    88.23 |     100 |     100 | 17,32             
  generation.ts    |    97.1 |    81.25 |     100 |    97.1 | 109,112           
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
 ...ration/service |   97.04 |    95.71 |   93.33 |   97.04 |                   
  filesystem.ts    |   97.04 |    95.71 |   93.33 |   97.04 | ...21-122,238-239 
 ...ration/session |   88.82 |    82.27 |   93.26 |   88.82 |                   
  Session.ts       |    88.8 |    81.22 |    92.8 |    88.8 | ...6417,6444-6448 
  ...entTracker.ts |   91.53 |    89.47 |   88.88 |   91.53 | ...32,196,270-279 
  ...eplay-page.ts |   98.31 |    88.33 |     100 |   98.31 | 68,89,164         
  ...y-replayer.ts |    82.5 |    85.54 |   93.33 |    82.5 | ...27-428,451-452 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |      85 |    84.84 |     100 |      85 | ...49-165,221-223 
  tasksSnapshot.ts |   94.21 |     87.5 |     100 |   94.21 | 65-71             
  ...on-tracker.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ssion/emitters |   97.16 |    95.85 |   97.05 |   97.16 |                   
  ...ageEmitter.ts |   95.91 |    98.14 |     100 |   95.91 | 49-56             
  PlanEmitter.ts   |     100 |      100 |     100 |     100 |                   
  base-emitter.ts  |     100 |    83.33 |     100 |     100 | 23,27             
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
  ...ll-emitter.ts |   98.77 |    95.96 |     100 |   98.77 | 402-403,504,512   
 ...ession/rewrite |    91.8 |    89.13 |   94.44 |    91.8 |                   
  LlmRewriter.ts   |    82.4 |     86.2 |     100 |    82.4 | ...,88-89,166-170 
  ...Middleware.ts |   96.96 |    88.09 |     100 |   96.96 | 144,152-154       
  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/commands      |   88.74 |    73.52 |   64.51 |   88.74 |                   
  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        |   97.77 |      100 |      50 |   97.77 | 56                
  serve.ts         |   86.42 |    67.64 |     100 |   86.42 | ...98-601,615-619 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.11 |    94.44 |   66.66 |   98.11 | 81-82             
 ...mmands/channel |   83.94 |    87.03 |   85.43 |   83.94 |                   
  channel-cwd.ts   |     100 |      100 |     100 |     100 |                   
  ...l-registry.ts |    6.52 |      100 |       0 |    6.52 | 6-33,36-54        
  ...entry-path.ts |      75 |       50 |     100 |      75 | 8-9               
  config-utils.ts  |   95.85 |    96.29 |     100 |   95.85 | ...08-213,271-274 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   94.58 |    85.58 |   97.56 |   94.58 | ...64-965,969-970 
  ...classifier.ts |   98.93 |    97.29 |     100 |   98.93 | 120-121           
  pairing.ts       |   26.31 |      100 |       0 |   26.31 | ...30,40-50,52-65 
  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       |   78.24 |    86.95 |     100 |   78.24 | ...55-159,189-191 
  set.ts           |   75.72 |    85.71 |      50 |   75.72 | 65-83,111-116     
  start.ts         |   75.37 |    75.28 |   66.66 |   75.37 | ...44,550-553,565 
  ...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.82 |    87.64 |   87.09 |   88.82 |                   
  consent.ts       |   72.53 |       90 |   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 |    53.84 |     100 |      75 | ...27-131,133-137 
 ...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  |   90.15 |    84.39 |   83.33 |   90.15 |                   
  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.59 |    83.87 |      80 |   92.59 | ...62-164,180-181 
  reconnect.ts     |   78.73 |    66.66 |   85.71 |   78.73 | 42-55,168-190     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   75.49 |    86.54 |   75.63 |   75.49 |                   
  agent-prompt.ts  |   90.95 |    92.27 |   94.44 |   90.95 | ...1156,1221-1266 
  capture-local.ts |   72.16 |     90.9 |      75 |   72.16 | 101-105,152-174   
  ...k-coverage.ts |   10.43 |      100 |       0 |   10.43 | ...04-214,216-217 
  cleanup.ts       |   17.72 |      100 |       0 |   17.72 | ...27-132,134-135 
  ...ose-review.ts |   92.89 |    93.61 |   88.88 |   92.89 | ...70,281,554-562 
  fetch-pr.ts      |   25.44 |      100 |    12.5 |   25.44 | ...15-304,345-347 
  load-rules.ts    |   26.41 |      100 |   16.66 |   26.41 | ...41-153,155-156 
  parse-args.ts    |   99.25 |       96 |     100 |   99.25 | 341,413           
  plan-diff.ts     |   73.43 |      100 |   66.66 |   73.43 | 95-111            
  pr-context.ts    |   84.02 |    76.37 |   91.66 |   84.02 | ...22-903,932-934 
  presubmit.ts     |    73.2 |    78.57 |   83.33 |    73.2 | ...12-313,365-395 
  ...ve-anchors.ts |   77.02 |    88.46 |      75 |   77.02 | ...70-175,187-204 
  submit.ts        |   74.44 |    81.33 |      80 |   74.44 | ...42-578,580-581 
  test-efficacy.ts |   80.68 |    69.41 |    92.3 |   80.68 | ...93-594,602-622 
 ...nds/review/lib |   93.97 |    91.96 |    91.3 |   93.97 |                   
  agent-briefs.ts  |   98.26 |      100 |       0 |   98.26 | 439-440           
  anchors.ts       |     100 |    94.79 |     100 |     100 | ...33,169,178,225 
  coverage.ts      |   96.44 |    93.22 |     100 |   96.44 | ...02,229,247,256 
  diff-flags.ts    |     100 |        0 |     100 |     100 | 63                
  diff-plan.ts     |    98.7 |    92.65 |     100 |    98.7 | ...21,244,270-271 
  gh.ts            |   52.87 |      100 |      30 |   52.87 | ...81-182,190-197 
  git.ts           |   97.64 |    95.65 |     100 |   97.64 | 180-181           
  heavy.ts         |     100 |      100 |     100 |     100 |                   
  local-diff.ts    |    84.4 |    88.46 |     100 |    84.4 | ...63-473,475-483 
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   84.61 |       80 |   66.66 |   84.61 | 42-43,76-77       
  prompt-record.ts |   91.56 |       80 |     100 |   91.56 | ...17,128-129,133 
  report.ts        |   92.13 |    86.66 |     100 |   92.13 | 170-171,173-177   
  roster.ts        |     100 |    85.36 |     100 |     100 | ...98,103,117,154 
  transcripts.ts   |   96.27 |    93.18 |     100 |   96.27 | ...83,269-270,294 
  workspaces.ts    |   97.76 |     91.3 |     100 |   97.76 | 186-187,212-213   
 ...mands/sessions |   91.56 |    86.95 |   83.33 |   91.56 |                   
  common.ts        |     100 |      100 |     100 |     100 |                   
  list.ts          |   90.96 |    86.66 |   81.81 |   90.96 | 208-219,221-222   
 src/config        |    94.4 |    88.08 |   95.47 |    94.4 |                   
  auth.ts          |   89.35 |    83.56 |     100 |   89.35 | ...97-298,314-315 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  config.ts        |   87.98 |    86.57 |   84.37 |   87.98 | ...2313,2315-2323 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  environment.ts   |   94.18 |     89.4 |   94.73 |   94.18 | ...22-626,642-643 
  ...le-watcher.ts |   90.76 |    83.33 |   95.83 |   90.76 | ...23-325,370,409 
  ...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.74 |     100 |     100 | 47,160,220        
  keyBindings.ts   |    97.1 |       50 |     100 |    97.1 | 214-217           
  ...ngsAdapter.ts |     100 |    94.11 |     100 |     100 | 64                
  ...ig-watcher.ts |   95.17 |    83.05 |     100 |   95.17 | ...78,200,292-293 
  ...er-secrets.ts |   98.97 |    96.87 |     100 |   98.97 | 85                
  mcpApprovals.ts  |   96.55 |    95.65 |     100 |   96.55 | 223-224,229-231   
  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.75 |     100 |   99.15 | 63                
  sandboxConfig.ts |   61.64 |    71.87 |   66.66 |   61.64 | ...54-68,73,77-89 
  ...ings-cache.ts |   96.52 |    93.93 |     100 |   96.52 | 90-91,201-202     
  settings.ts      |    90.6 |    91.84 |   89.65 |    90.6 | ...61,963,965-966 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...ngsWatcher.ts |   95.54 |    88.34 |     100 |   95.54 | ...28,277-278,293 
  ...d-env-keys.ts |     100 |      100 |     100 |     100 |                   
  ...paths-lite.ts |   89.47 |       88 |     100 |   89.47 | 43-44,53-54,56-57 
  ...tedFolders.ts |   94.46 |    95.72 |     100 |   94.46 | ...53-354,390-401 
 ...nfig/migration |   95.23 |    77.77 |   83.33 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |    77.77 |     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    |   71.61 |    70.31 |   66.66 |   71.61 |                   
  ...tputBridge.ts |   71.76 |    70.96 |   68.42 |   71.76 | ...05-406,414-417 
  ...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/i18n          |    86.9 |    80.45 |    93.1 |    86.9 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  languages.ts     |   96.92 |    86.66 |     100 |   96.92 | 134-135,167,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 |   79.44 |    75.82 |   81.35 |   79.44 |                   
  session.ts       |   83.56 |    74.71 |   93.61 |   83.56 | ...4-985,994-1004 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...24-625,628-629 
 ...active/control |   76.11 |    89.09 |      80 |   76.11 |                   
  ...rolContext.ts |    6.45 |        0 |       0 |    6.45 | 56-95             
  ...Dispatcher.ts |   91.79 |    92.45 |   88.88 |   91.79 | ...49-367,387,390 
  ...rolService.ts |     7.4 |        0 |       0 |     7.4 | 46-185            
 ...ol/controllers |   39.26 |     58.4 |   47.22 |   39.26 |                   
  ...Controller.ts |   39.49 |      100 |      80 |   39.49 | 88-92,127-210     
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   46.62 |    52.94 |   54.54 |   46.62 | ...24-633,648-653 
  ...Controller.ts |   14.06 |      100 |       0 |   14.06 | ...82-117,130-133 
  ...Controller.ts |    37.8 |       60 |   46.66 |    37.8 | ...40-652,661-690 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   97.52 |       94 |   95.23 |   97.52 |                   
  ...putAdapter.ts |   97.19 |    93.13 |   98.07 |   97.19 | ...1317,1420-1421 
  ...putAdapter.ts |      96 |    91.66 |   85.71 |      96 | 51-52             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.38 |      100 |   90.47 |   98.38 | 84-85,125-126     
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 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/serve         |   88.63 |    85.13 |   89.96 |   88.63 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |    93.4 |    92.95 |     100 |    93.4 | ...16-317,320-322 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    97.61 |     100 |     100 | 567               
  ...cp-command.ts |     100 |      100 |     100 |     100 |                   
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ebhook-ipc.ts |    98.5 |    86.66 |     100 |    98.5 | 47                
  ...iagnostics.ts |     100 |      100 |     100 |     100 |                   
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   90.97 |    85.34 |     100 |   90.97 | ...80-684,690-694 
  ...er-manager.ts |   95.12 |    88.82 |   94.28 |   95.12 | ...68,492,503-505 
  ...tartup-ipc.ts |   97.72 |    96.66 |     100 |   97.72 | 82-83             
  ...supervisor.ts |   96.57 |     86.9 |   96.49 |   96.57 | ...1026,1134-1138 
  ...e-grouping.ts |     100 |    94.11 |     100 |     100 | 69,132            
  ...ub-session.ts |   92.04 |    77.77 |     100 |   92.04 | ...36-445,470,508 
  daemon-logger.ts |   98.31 |    88.73 |   96.55 |   98.31 | 119-120,205       
  ...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.19 |       89 |     100 |   98.19 | ...-998,1000-1001 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  demo.ts          |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |    91.3 |       80 |     100 |    91.3 | ...24-127,205-212 
  ...-scheduler.ts |   87.34 |    83.87 |     100 |   87.34 | 33-36,48-50,79-81 
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  ...h-settings.ts |   94.39 |    88.75 |     100 |   94.39 | ...22,700,716,726 
  fast-path.ts     |   91.28 |    81.98 |   95.45 |   91.28 | ...64-473,539-540 
  health-query.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-143             
  ...e-observer.ts |   89.89 |    83.24 |      96 |   89.89 | ...11-512,541-543 
  ...back-binds.ts |     100 |    88.88 |     100 |     100 | 32                
  ...iders-edit.ts |     100 |    82.14 |     100 |     100 | 58-60,65,81       
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  rate-limit.ts    |   92.77 |    88.42 |     100 |   92.77 | ...93-295,307-309 
  ...qwen-serve.ts |   84.63 |    80.66 |   71.94 |   84.63 | ...5384,5389-5390 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  ...-keepalive.ts |   96.03 |    91.57 |     100 |   96.03 | ...36,498-500,540 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  server.ts        |   95.26 |    92.61 |   78.18 |   95.26 | ...1717,1737-1740 
  ...on-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...t-event-id.ts |     100 |    91.66 |     100 |     100 | 12                
  ...-admission.ts |   98.71 |    89.65 |     100 |   98.71 | 68                
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...erver-name.ts |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   91.07 |     86.2 |     100 |   91.07 | ...79-182,216-219 
  ...ace-agents.ts |   57.15 |    67.61 |   86.66 |   57.15 | ...1821,1831-1841 
  ...-git-state.ts |     100 |    95.65 |    87.5 |     100 | 77                
  ...ace-inputs.ts |     100 |      100 |     100 |     100 |                   
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...-summaries.ts |   86.66 |       50 |     100 |   86.66 | 11,19             
  ...ace-memory.ts |   82.19 |    75.28 |     100 |   82.19 | ...82-489,549-556 
  ...ers-status.ts |   98.52 |       79 |     100 |   98.52 | 94,122,162,165    
  ...tion-store.ts |    85.6 |    85.98 |   90.47 |    85.6 | ...82-291,302-305 
  ...e-registry.ts |   91.26 |    90.69 |     100 |   91.26 | ...91-292,298-299 
  ...ber-errors.ts |     100 |    95.32 |     100 |     100 | 53,93-94,172,192  
  ...e-remember.ts |   97.94 |    94.33 |     100 |   97.94 | ...00,304-309,350 
  ...te-runtime.ts |   93.14 |    87.71 |     100 |   93.14 | ...-88,92,145-150 
  ...ls-mapping.ts |     100 |      100 |     100 |     100 |                   
  ...lls-status.ts |     100 |    94.44 |     100 |     100 | 102               
 ...serve/acp-http |    75.6 |     78.2 |   93.75 |    75.6 |                   
  ...r-registry.ts |     100 |    95.45 |     100 |     100 | 191               
  client-mcp-ws.ts |   54.85 |    58.62 |   72.72 |   54.85 | ...99-300,304-305 
  ...n-registry.ts |   98.19 |    88.55 |     100 |   98.19 | 1015,1037-1048    
  dispatch.ts      |   68.88 |    74.47 |     100 |   68.88 | ...4442,4490-4496 
  index.ts         |   81.96 |    78.69 |   89.58 |   81.96 | ...2180,2211-2213 
  json-rpc.ts      |     100 |    96.96 |     100 |     100 | 92                
  safe-ws-send.ts  |   52.94 |    71.42 |     100 |   52.94 | 33-42,47-55       
  sse-stream.ts    |   93.96 |    88.57 |   84.61 |   93.96 | ...57-159,161-163 
  ...ort-stream.ts |       0 |        0 |       0 |       0 | 1                 
  ws-stream.ts     |   91.86 |       80 |     100 |   91.86 | 45,50,96,100-103  
 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 |   85.73 |    73.17 |    97.5 |   85.73 |                   
  ...r-emulator.ts |   88.57 |    63.63 |     100 |   88.57 | ...72-175,194-195 
  ...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 |       0 |        0 |       0 |       0 |                   
  ...mcp-smoke.mjs |       0 |        0 |       0 |       0 | 1-119             
  ...cceptance.mjs |       0 |        0 |       0 |       0 | 1-473             
  real-tab.mjs     |       0 |        0 |       0 |       0 | 1-218             
 src/serve/fs      |   85.68 |    80.06 |     100 |   85.68 |                   
  audit.ts         |     100 |    96.15 |     100 |     100 | 204               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...x-registry.ts |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.64 |     73.6 |     100 |   77.64 | ...65,594-598,611 
  policy.ts        |   90.32 |    89.18 |     100 |   90.32 | 142-150           
  ...ile-system.ts |   85.19 |     78.6 |     100 |   85.19 | ...2094,2104-2105 
 src/serve/routes  |   85.96 |    79.47 |   95.52 |   85.96 |                   
  a2ui-action.ts   |   99.49 |    94.52 |    87.5 |   99.49 | 250               
  capabilities.ts  |     100 |      100 |     100 |     100 |                   
  ...l-webhooks.ts |   93.56 |    84.09 |     100 |   93.56 | ...42,292,332,334 
  daemon-status.ts |   85.45 |    83.33 |     100 |   85.45 | 98-105            
  health-demo.ts   |   94.17 |    83.33 |     100 |   94.17 | 62-66,143         
  permission.ts    |     100 |     92.3 |     100 |     100 | 50,98             
  ...uled-tasks.ts |    84.2 |    83.18 |     100 |    84.2 | ...55-863,980-981 
  ...on-runtime.ts |     100 |    86.66 |     100 |     100 | 39,75             
  session.ts       |   88.57 |    84.05 |   94.73 |   88.57 | ...3210,3212-3213 
  sse-events.ts    |   86.25 |     88.6 |   77.77 |   86.25 | ...81,387,404-407 
  usage-stats.ts   |     100 |    95.65 |     100 |     100 | 116               
  ...space-auth.ts |    83.7 |       75 |     100 |    83.7 | ...23,328,340-344 
  ...el-control.ts |   86.26 |    78.94 |     100 |   86.26 | ...17-318,339-347 
  ...controller.ts |   81.71 |    77.09 |   89.65 |   81.71 | ...73,975,981,984 
  ...extensions.ts |   87.44 |    72.76 |   95.74 |   87.44 | ...1788,1830-1831 
  ...-file-read.ts |   92.32 |       80 |     100 |   92.32 | ...94-595,598-599 
  ...file-write.ts |   84.44 |    64.13 |     100 |   84.44 | ...73-275,355-357 
  workspace-git.ts |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   96.85 |       75 |     100 |   96.85 | 130-131,161-162   
  ...management.ts |    86.5 |    83.87 |     100 |    86.5 | ...05,909,929-934 
  ...cp-control.ts |   70.14 |    63.21 |     100 |   70.14 | ...14-520,529-530 
  ...ace-models.ts |   95.87 |    92.42 |     100 |   95.87 | 38-39,136-141     
  ...ermissions.ts |   74.66 |    69.23 |     100 |   74.66 | ...25-233,254-271 
  ...e-settings.ts |   72.81 |     69.9 |     100 |   72.81 | ...85-589,594-604 
  ...tup-github.ts |   77.58 |    70.27 |   84.21 |   77.58 | ...88,310,354-355 
  ...ace-skills.ts |   94.44 |    92.59 |     100 |   94.44 | 41-46             
  ...ace-status.ts |   75.33 |    61.97 |     100 |   75.33 | ...34-335,359-360 
  ...pace-tools.ts |   74.82 |    69.23 |     100 |   74.82 | ...41-146,175-176 
  ...pace-trust.ts |   76.08 |       50 |   66.66 |   76.08 | ...01-206,214-215 
  ...pace-voice.ts |   91.45 |    82.35 |     100 |   91.45 | ...21-624,627-629 
 src/serve/server  |   89.59 |    89.21 |   94.54 |   89.59 |                   
  access-log.ts    |   97.72 |    95.45 |     100 |   97.72 | 51                
  ...er-helpers.ts |   63.82 |    77.96 |   81.81 |   63.82 | ...16,330,332-347 
  ...w-registry.ts |    98.8 |    86.95 |     100 |    98.8 | 107               
  ...r-handlers.ts |   97.14 |    71.42 |     100 |   97.14 | 16                
  ...r-response.ts |   85.48 |    76.72 |     100 |   85.48 | ...28,650,713-722 
  fs-factory.ts    |     100 |    92.59 |     100 |     100 | 33,41,100,156     
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |      65 |    73.33 |   33.33 |      65 | 30-35,38-43,47-48 
  ...st-helpers.ts |   95.09 |    95.09 |     100 |   95.09 | ...59-161,416-421 
  self-origin.ts   |   76.19 |       80 |     100 |   76.19 | 45-54             
  ...e-features.ts |   93.96 |       92 |     100 |   93.96 | 149-155           
  ...on-archive.ts |   89.61 |    90.38 |   88.23 |   89.61 | ...36-441,513-523 
  ...ion-export.ts |     100 |    94.44 |     100 |     100 | 64                
  session-list.ts  |   94.87 |    91.88 |     100 |   94.87 | ...93-608,610-616 
  telemetry.ts     |   97.44 |    96.85 |     100 |   97.44 | ...03-305,420-422 
 src/serve/voice   |   85.15 |     93.1 |   90.47 |   85.15 |                   
  ...ice-config.ts |   96.77 |       30 |     100 |   96.77 | 85-86             
  voice-ws.ts      |   77.97 |    96.39 |   83.33 |   77.97 | ...55,470,508-510 
  ...oordinator.ts |     100 |    98.11 |     100 |     100 | 171               
 ...kspace-service |   94.05 |    81.65 |   97.14 |   94.05 |                   
  index.ts         |   93.75 |    81.08 |   96.66 |   93.75 | ...1053-1057,1060 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |   92.18 |    88.36 |   97.65 |   92.18 |                   
  ...mandLoader.ts |     100 |    88.88 |     100 |     100 | 104-117           
  ...killLoader.ts |   97.14 |    87.87 |     100 |   97.14 | 140,151-152       
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   86.83 |    83.87 |     100 |   86.83 | ...30-335,340-345 
  ...omptLoader.ts |   77.17 |    83.82 |   83.33 |   77.17 | ...43,168,210-211 
  ...mandLoader.ts |   97.36 |    92.68 |     100 |   97.36 | 153,160-161       
  ...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.72 |     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 |    93.75 |     100 |   96.66 | 34-35             
  ...low-loader.ts |     100 |    96.15 |     100 |     100 | 88                
  setup-github.ts  |    90.5 |    81.81 |     100 |    90.5 | ...35-436,443-444 
  ...-args-file.ts |   93.54 |    90.47 |    87.5 |   93.54 | 201-203,217-223   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |   98.64 |    95.71 |     100 |   98.64 | 116,142-143       
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  voice-service.ts |   88.14 |    87.69 |     100 |   88.14 | ...80,287,352-357 
  ...e-settings.ts |     100 |    95.23 |     100 |     100 | 19                
  ...ranscriber.ts |   90.46 |    82.11 |      96 |   90.46 | ...66-668,671-673 
 ...ght/generators |   88.86 |    85.78 |   96.29 |   88.86 |                   
  DataProcessor.ts |   88.23 |    85.71 |      95 |   88.23 | ...1348,1352-1359 
  ...tGenerator.ts |   98.21 |    85.71 |     100 |   98.21 | 46                
  ...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.04 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |    84.21 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.65 |     100 |   97.41 | 95-98             
  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.86 |    83.33 |      90 |   88.86 |                   
  ...p-prefetch.ts |   98.04 |    94.11 |   85.71 |   98.04 | 50,201,217-218    
  ...reeStartup.ts |   80.53 |     74.6 |     100 |   80.53 | ...94,403,409-412 
 src/test-utils    |   94.04 |    83.33 |      80 |   94.04 |                   
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   70.69 |    72.52 |   67.08 |   70.69 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   71.79 |    68.95 |   66.66 |   71.79 | ...3973,3977-3981 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |   29.23 |      100 |       0 |   29.23 | 25-75             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |      60 |      100 |   35.29 |      60 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...ractiveUI.tsx |   64.39 |    48.38 |      80 |   64.39 | ...29,244,268-273 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   58.45 |    66.18 |   51.06 |   58.45 |                   
  AuthDialog.tsx   |   59.01 |     42.1 |   16.66 |   59.01 | ...25,332-354,358 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  ...etupSteps.tsx |   60.03 |    70.73 |   57.69 |   60.03 | ...87,791,800,803 
  useAuth.ts       |    94.6 |    73.52 |     100 |    94.6 | ...21-222,241-247 
  ...rSetupFlow.ts |   43.18 |    33.33 |      50 |   43.18 | ...78-399,416-459 
 src/ui/commands   |   80.61 |    82.98 |   88.83 |   80.61 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |   89.47 |    81.25 |     100 |   89.47 | 92-93,95-100      
  arenaCommand.ts  |   62.81 |    58.73 |   65.21 |   62.81 | ...90-595,680-688 
  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 | 27,61             
  cdCommand.ts     |    92.1 |     84.9 |     100 |    92.1 | ...4-69,94-99,178 
  clearCommand.ts  |    80.9 |    70.83 |     100 |    80.9 | ...24-125,133-142 
  ...essCommand.ts |   67.95 |    55.88 |      75 |   67.95 | ...86-187,201-204 
  ...astCommand.ts |   84.17 |       75 |     100 |   84.17 | ...,91-97,125-130 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   67.46 |    69.69 |   84.61 |   67.46 | ...53-586,597-598 
  copyCommand.ts   |   98.49 |    95.78 |     100 |   98.49 | ...80,280,321,327 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |     87.5 |     100 |     100 | ...61,224-225,238 
  ...ryCommand.tsx |   81.43 |     88.4 |    90.9 |   81.43 | ...59-264,311-318 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 25                
  doctorCommand.ts |   65.37 |    81.88 |   94.11 |   65.37 | ...85-535,538-672 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...rt-command.ts |   82.97 |    78.57 |     100 |   82.97 | 47-52,67-70,91-96 
  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 | 96,147            
  goalCommand.ts   |   91.13 |    83.72 |      90 |   91.13 | ...78-181,193-196 
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.13 |    65.71 |   85.71 |   81.13 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |   52.83 |    81.25 |      70 |   52.83 | ...74-319,321-330 
  initCommand.ts   |   84.33 |    72.72 |     100 |   84.33 | 68,82-87,89-94    
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   93.18 |    85.48 |     100 |   93.18 | ...69,189,198-208 
  learn-command.ts |     100 |      100 |     100 |     100 |                   
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,101-102        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |    81.1 |     89.5 |   88.23 |    81.1 | ...80-793,827-832 
  ...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.06 |    88.37 |     100 |   89.06 | ...72-176,202-209 
  ...oreCommand.ts |    90.9 |    86.04 |     100 |    90.9 | ...41-146,176-177 
  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.6 |    77.95 |     100 |    90.6 | ...91-694,785-792 
  ...ineCommand.ts |     100 |      100 |     100 |     100 |                   
  ...aryCommand.ts |    6.43 |      100 |      50 |    6.43 | 31-330            
  tasksCommand.ts  |   77.22 |    72.13 |     100 |   77.22 | ...46-150,172-177 
  ...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 | 73,147            
  vimCommand.ts    |   54.54 |      100 |      50 |   54.54 | 19-29             
  voice-command.ts |   93.57 |       88 |     100 |   93.57 | 35,97-102         
  ...owsCommand.ts |   91.82 |    78.87 |   66.66 |   91.82 | ...59-160,169-174 
 src/ui/components |   68.56 |    78.48 |   74.71 |   68.56 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  ...ateScreen.tsx |   97.29 |     87.5 |   66.66 |   97.29 | 49                
  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 |   86.72 |    86.66 |     100 |   86.72 | ...00-302,355-359 
  Composer.tsx     |   94.49 |    66.66 |     100 |   94.49 | ...-72,84,139,153 
  ...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 | 18                
  ...ification.tsx |      84 |       60 |     100 |      84 | 23-24,40-42       
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |       0 |        0 |       0 |       0 | 1-596             
  DiffDialog.tsx   |   31.17 |    19.51 |   30.76 |   31.17 | ...07-712,722-735 
  ...ngsDialog.tsx |       0 |        0 |       0 |       0 | 1-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          
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |    77.6 |    61.11 |     100 |    77.6 | ...17-222,240-244 
  ...ngSpinner.tsx |   68.42 |    85.71 |      50 |   68.42 | 35-52,73,80-81    
  GoalPill.tsx     |   83.33 |    76.92 |     100 |   83.33 | 24-30             
  Header.tsx       |   98.65 |    94.73 |     100 |   98.65 | 173,175           
  Help.tsx         |   98.32 |       90 |     100 |   98.32 | ...24,381,447-448 
  ...emDisplay.tsx |   74.49 |    62.19 |      75 |   74.49 | ...71,474,477-483 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   82.17 |    79.92 |      80 |   82.17 | ...2141,2167,2227 
  ...Shortcuts.tsx |   20.87 |      100 |       0 |   20.87 | ...6,49-51,67-125 
  ...Indicator.tsx |   98.18 |    97.82 |     100 |   98.18 | 161-162           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   96.75 |    93.22 |   66.66 |   96.75 | ...05,182-186,492 
  MemoryDialog.tsx |   86.59 |    80.15 |     100 |   86.59 | ...34-435,485,553 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   86.41 |       73 |     100 |   86.41 | ...74,876,881-897 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |       0 |        0 |       0 |       0 | 1-58              
  ...onsDialog.tsx |       0 |        0 |       0 |       0 | 1-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 |       0 |        0 |       0 |       0 | 1-134             
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |       0 |        0 |       0 |       0 | 1-39              
  ...hProgress.tsx |   85.25 |    88.46 |     100 |   85.25 | 121-147           
  ...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 |    84.21 |     100 |   93.58 | ...,70-71,195-197 
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   72.56 |       80 |      40 |   72.56 | ...06-109,114-117 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   71.27 |    73.89 |   69.23 |   71.27 | ...1240,1246-1247 
  ...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 |       0 |        0 |       0 |       0 | 1-40              
  ...iewDialog.tsx |   97.78 |    87.67 |     100 |   97.78 | ...97,305-307,324 
  ...tsDisplay.tsx |   95.86 |       75 |     100 |   95.86 | 67-71             
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-172             
  ...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 |    5.46 |      100 |       0 |    5.46 | 24-215            
  ...ineDialog.tsx |    93.5 |    85.18 |     100 |    93.5 | ...05,267,287-289 
  ...yTodoList.tsx |   96.33 |    88.23 |     100 |   96.33 | 137-140           
  ...nsDisplay.tsx |    92.9 |       85 |     100 |    92.9 | ...04,207,234-236 
  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             
  ...criptView.tsx |   98.27 |    84.21 |     100 |   98.27 | 45,53             
  TrustDialog.tsx  |     100 |    81.81 |     100 |     100 | 71-86             
  ...ification.tsx |       0 |        0 |       0 |       0 | 1-22              
  ...Indicator.tsx |    92.5 |     87.5 |     100 |    92.5 | 50-53             
  ...ackDialog.tsx |       0 |        0 |       0 |       0 | 1-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 |   53.72 |    70.87 |   42.85 |   53.72 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |   21.05 |      100 |       0 |   21.05 | 21-39             
  ...tComposer.tsx |   64.78 |    29.41 |   33.33 |   64.78 | ...51,269,277-279 
  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 |   42.38 |    68.69 |   73.68 |   42.38 |                   
  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 |       0 |        0 |       0 |       0 | 1-164             
  ...tusDialog.tsx |       0 |        0 |       0 |       0 | 1-288             
  ...topDialog.tsx |       0 |        0 |       0 |       0 | 1-213             
 ...ackground-view |   82.06 |    81.23 |   90.74 |   82.06 |                   
  ...sksDialog.tsx |   77.53 |     76.9 |   80.76 |   77.53 | ...1781,1803-1809 
  ...TasksPill.tsx |   67.03 |     86.2 |     100 |   67.03 | ...02-122,130-138 
  ...gentPanel.tsx |   97.08 |    86.31 |     100 |   97.08 | 132,442-446,520   
  agent-forest.ts  |    99.2 |    93.93 |     100 |    99.2 | 256               
  ...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.86 |    68.14 |   70.83 |   71.86 |                   
  DiscoverTab.tsx  |   68.22 |    67.66 |   55.55 |   68.22 | ...93,656-660,664 
  InstalledTab.tsx |   75.45 |    67.28 |   83.33 |   75.45 | ...76,781-782,819 
  SourcesTab.tsx   |   71.52 |    70.47 |   77.77 |   71.52 | ...27,546,618-630 
 ...tensions/views |   50.97 |    52.38 |   20.83 |   50.97 |                   
  ...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.56 |      100 |       0 |    9.56 | 40-67,70-158      
 ...mponents/hooks |   86.99 |    81.37 |   91.89 |   86.99 |                   
  ...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.04 |    61.53 |   70.58 |   40.04 |                   
  ...ealthPill.tsx |   68.42 |    85.71 |     100 |   68.42 | 40-46             
  ...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.9 |    73.51 |   57.14 |    53.9 |                   
  ...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.46 |    81.25 |     100 |   88.46 | ...63,169,174-179 
  ...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 |   88.11 |    84.85 |   81.91 |   88.11 |                   
  ...ionDialog.tsx |   86.88 |    81.25 |      80 |   86.88 | ...21,539,557-559 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |     90.9 |     100 |     100 | ...46,282,330,336 
  ...onMessage.tsx |   91.93 |    82.35 |     100 |   91.93 | 57-59,61,63       
  ...nMessages.tsx |   92.16 |    92.68 |   91.66 |   92.16 | ...82-286,304-310 
  DiffRenderer.tsx |   93.19 |    86.17 |     100 |   93.19 | ...09,237-238,304 
  ...tsDisplay.tsx |   97.82 |    77.27 |     100 |   97.82 | 87,89             
  ...usMessage.tsx |   76.31 |     42.1 |   66.66 |   76.31 | ...99,101,124,155 
  ...tsDisplay.tsx |    95.5 |    88.31 |     100 |    95.5 | ...39,141,174-179 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   16.66 |      100 |       0 |   16.66 | 22-38             
  ...sMessages.tsx |   58.65 |       50 |    37.5 |   58.65 | ...20-125,146-158 
  ...ryMessage.tsx |   14.28 |      100 |       0 |   14.28 | 23-62             
  ...onMessage.tsx |   82.35 |    74.02 |   33.33 |   82.35 | ...76-478,485-487 
  ...upMessage.tsx |   98.32 |    95.16 |     100 |   98.32 | 183-186,413       
  ToolMessage.tsx  |   92.31 |    85.12 |   93.33 |   92.31 | ...40-945,972-974 
 ...ponents/shared |   85.62 |    81.94 |   94.89 |   85.62 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  ...rBoundary.tsx |     100 |      100 |     100 |     100 |                   
  MaxSizedBox.tsx  |   83.01 |    86.25 |   88.88 |   83.01 | ...12-513,618-619 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |    83.33 |     100 |     100 | 73,93-95          
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |    82.7 |    84.84 |     100 |    82.7 | 46-64,71-74       
  StaticRender.tsx |   72.72 |      100 |     100 |   72.72 | 31-33             
  TextInput.tsx    |    80.8 |    67.24 |      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 |   88.57 |    85.11 |      90 |   88.57 | ...15,745-773,875 
  text-buffer.ts   |   85.94 |    81.73 |   97.91 |   85.94 | ...2651,2749-2750 
  ...er-actions.ts |   73.93 |    67.22 |     100 |   73.93 | ...32-733,934-936 
 ...ponents/skills |       0 |        0 |       0 |       0 |                   
  ...gerDialog.tsx |       0 |        0 |       0 |       0 | 1-678             
 ...ents/subagents |       0 |        0 |       0 |       0 |                   
  constants.ts     |       0 |        0 |       0 |       0 | 1-71              
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
  reducers.tsx     |       0 |        0 |       0 |       0 | 1-190             
  types.ts         |       0 |        0 |       0 |       0 | 1-125             
  utils.ts         |       0 |        0 |       0 |       0 | 1-102             
 ...bagents/create |       0 |        0 |       0 |       0 |                   
  ...ionWizard.tsx |       0 |        0 |       0 |       0 | 1-299             
  ...rSelector.tsx |       0 |        0 |       0 |       0 | 1-85              
  ...onSummary.tsx |       0 |        0 |       0 |       0 | 1-331             
  ...tionInput.tsx |       0 |        0 |       0 |       0 | 1-177             
  ...dSelector.tsx |       0 |        0 |       0 |       0 | 1-63              
  ...nSelector.tsx |       0 |        0 |       0 |       0 | 1-58              
  ...EntryStep.tsx |       0 |        0 |       0 |       0 | 1-78              
  ToolSelector.tsx |       0 |        0 |       0 |       0 | 1-253             
 ...bagents/manage |   14.04 |    53.19 |    37.5 |   14.04 |                   
  ...ctionStep.tsx |       0 |        0 |       0 |       0 | 1-103             
  ...eleteStep.tsx |       0 |        0 |       0 |       0 | 1-62              
  ...tEditStep.tsx |       0 |        0 |       0 |       0 | 1-124             
  ...ctionStep.tsx |   35.42 |    59.52 |     100 |   35.42 | ...20-432,437-439 
  ...iewerStep.tsx |       0 |        0 |       0 |       0 | 1-73              
  ...gerDialog.tsx |       0 |        0 |       0 |       0 | 1-341             
 ...mponents/views |   69.81 |    72.64 |   61.11 |   69.81 |                   
  ContextUsage.tsx |   70.88 |    63.88 |      80 |   70.88 | ...20-426,463-557 
  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    |     100 |      100 |     100 |     100 |                   
 src/ui/contexts   |   82.17 |    79.32 |   84.37 |   82.17 |                   
  ...ewContext.tsx |   64.83 |    88.88 |      50 |   64.83 | ...16-219,225-235 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   92.45 |    62.79 |      50 |   92.45 | ...69-270,272-276 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   83.18 |     83.4 |     100 |   83.18 | ...1289,1297-1299 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   78.68 |    73.77 |   91.66 |   78.68 | ...86-389,398-401 
  ...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 | 147-148           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 233-234           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
 src/ui/daemon     |   88.35 |    73.51 |   95.45 |   88.35 |                   
  ...ui-adapter.ts |   88.35 |    73.51 |   95.45 |   88.35 | ...74,792-793,879 
 src/ui/editors    |       0 |        0 |       0 |       0 |                   
  ...ngsManager.ts |       0 |        0 |       0 |       0 | 1-67              
 src/ui/hooks      |   83.74 |     81.9 |   88.34 |   83.74 |                   
  ...dProcessor.ts |   81.49 |    80.95 |     100 |   81.49 | ...33-734,740-745 
  ...ention-ref.ts |   97.67 |       84 |     100 |   97.67 | 63                
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...esourceRef.ts |     100 |      100 |     100 |     100 |                   
  ...dProcessor.ts |   94.62 |    73.58 |     100 |   94.62 | ...86-287,292-293 
  ...dProcessor.ts |   85.14 |    66.27 |   81.81 |   85.14 | ...1400,1421-1425 
  ...rt-command.ts |     100 |      100 |     100 |     100 |                   
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...oice-input.ts |   92.36 |    81.95 |   66.66 |   92.36 | ...00,502-503,658 
  ...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 |   89.83 |    88.97 |     100 |   89.83 | ...49-456,496-505 
  ...ifications.ts |   87.82 |    96.77 |     100 |   87.82 | 138-152           
  ...tIndicator.ts |   88.28 |    81.08 |     100 |   88.28 | ...66,175,179-187 
  ...waySummary.ts |   96.22 |    69.69 |     100 |   96.22 | 125-127,169       
  ...ndTaskView.ts |   94.73 |    76.59 |     100 |   94.73 | 162-166,255,261   
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |    94.4 |       80 |     100 |    94.4 | ...36,210,273-276 
  ...ompletion.tsx |   96.75 |    81.81 |     100 |   96.75 | ...78-279,289-290 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   94.11 |    89.65 |     100 |   94.11 | ...32-133,137-138 
  ...nitMessage.ts |     100 |      100 |     100 |     100 |                   
  ...extualTips.ts |   78.26 |       50 |     100 |   78.26 | ...2,75-79,96-104 
  ...eteCommand.ts |   78.53 |    88.57 |     100 |   78.53 | ...96-104,112-113 
  ...ialogClose.ts |   36.11 |       10 |     100 |   36.11 | ...89-195,202-207 
  useDiffData.ts   |       0 |        0 |       0 |       0 | 1-87              
  ...oublePress.ts |   53.12 |       75 |     100 |   53.12 | 33-35,41-54       
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   99.12 |     97.7 |     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 |      100 |     100 |     100 |                   
  ...ggestions.tsx |   96.47 |    78.94 |     100 |   96.47 | 121,155-156       
  ...miniStream.ts |    83.3 |    80.33 |   95.45 |    83.3 | ...3564,3649-3657 
  ...BranchName.ts |     100 |    91.66 |     100 |     100 | 30                
  ...oryManager.ts |   98.01 |    98.36 |     100 |   98.01 | 139-142           
  ...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    
  ...storyStore.ts |     100 |    94.11 |     100 |     100 | 69                
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |       0 |        0 |       0 |       0 | 1-90              
  ...gIndicator.ts |     100 |    96.66 |     100 |     100 | 109               
  useLogger.ts     |      16 |      100 |       0 |      16 | 15-45             
  useMCPHealth.ts  |   63.15 |       80 |      50 |   63.15 | 42-52,64-67       
  ...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 |      100 |     100 |     100 |                   
  ...delCommand.ts |     100 |    92.85 |     100 |     100 | 48                
  ...ouseEvents.ts |   94.31 |     97.5 |   83.33 |   94.31 | 76-80             
  ...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 |   86.95 |    77.41 |   91.66 |   86.95 | ...70,311-323,371 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   89.59 |    92.72 |     100 |   89.59 | ...84-287,402-412 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...tleRepaint.ts |     100 |      100 |     100 |     100 |                   
  ...umeCommand.ts |   94.33 |    72.72 |     100 |   94.33 | ...18,173,214-219 
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.22 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.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 |       0 |        0 |       0 |       0 | 1-73              
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   82.85 |    85.13 |   94.73 |   82.85 | ...78-680,688-724 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |   97.13 |    93.33 |     100 |   97.13 | ...78-382,478-485 
  ...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 |   53.06 |       50 |   66.66 |   53.06 | ...53,61-68,79-85 
  ...rminalSize.ts |   76.19 |      100 |      50 |   76.19 | 21-25             
  ...emeCommand.ts |   67.01 |    29.41 |     100 |   67.01 | ...10-111,115-116 
  useTimer.ts      |   97.59 |    94.73 |     100 |   97.59 | 17-18             
  ...lMigration.ts |       0 |        0 |       0 |       0 |                   
  ...rustModify.ts |     100 |      100 |     100 |     100 |                   
  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    |    90.9 |    90.62 |     100 |    90.9 |                   
  ...AppLayout.tsx |   90.72 |       90 |     100 |   90.72 | 57-59,101-106     
  ...AppLayout.tsx |   91.17 |    91.66 |     100 |   91.17 | 70-75             
 src/ui/models     |   80.24 |    79.16 |   71.42 |   80.24 |                   
  ...ableModels.ts |   80.24 |    79.16 |   71.42 |   80.24 | ...,61-71,123-125 
 ...noninteractive |     100 |      100 |    6.66 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |    6.66 |     100 |                   
 src/ui/state      |      95 |    81.81 |     100 |      95 |                   
  extensions.ts    |      95 |    81.81 |     100 |      95 | 69-70,89          
 src/ui/themes     |    98.5 |    73.17 |     100 |    98.5 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |   99.23 |    97.05 |     100 |   99.23 | 277-278           
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  ...inal-theme.ts |   88.59 |    85.96 |     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.52 |     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      |   84.99 |    84.11 |   93.76 |   84.99 |                   
  ...Colorizer.tsx |   80.42 |    85.41 |     100 |   80.42 | ...00-201,298-324 
  ...nRenderer.tsx |   68.83 |    70.14 |      50 |   68.83 | ...52-254,274-293 
  ...wnDisplay.tsx |   92.69 |    93.03 |     100 |   92.69 | ...4,944,991-1009 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   92.68 |    82.35 |   95.23 |   92.68 | ...34-737,790-795 
  ...odeDisplay.ts |   94.28 |    85.71 |     100 |   94.28 | 23,40             
  asciiCharts.ts   |   96.77 |    87.62 |     100 |   96.77 | 173-180,281       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |   52.52 |    73.25 |   91.66 |   52.52 | ...23,626-635,638 
  commandUtils.ts  |    96.1 |    88.77 |     100 |    96.1 | ...73,175-176,320 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   90.38 |    73.91 |     100 |   90.38 | 23,25,29,31,33    
  formatters.ts    |    95.4 |    98.41 |     100 |    95.4 | 123-126           
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...gap-notice.ts |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |       95 |     100 |     100 | 44,103            
  historyUtils.ts  |    95.4 |    95.08 |     100 |    95.4 | 96-99             
  input-mouse.ts   |     100 |    85.71 |     100 |     100 | 48,93             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |    8.23 |      100 |       0 |    8.23 | ...31-132,135-136 
  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 |   95.72 |    94.23 |     100 |   95.72 | 90-92,137-138     
  ...t-position.ts |     100 |     87.5 |     100 |     100 | 85                
  ...geRenderer.ts |   86.23 |    69.06 |   95.12 |   86.23 | ...1284,1324-1330 
  ...alRenderer.ts |   86.69 |     71.9 |     100 |   86.69 | ...1476,1513-1519 
  ...lsBySource.ts |     100 |    95.23 |     100 |     100 | 84                
  mouse.ts         |   92.85 |    73.77 |     100 |   92.85 | ...38,145,149-152 
  osc8.ts          |   94.84 |    88.74 |     100 |   94.84 | ...57,442,446-447 
  ...red-height.ts |   96.85 |    95.45 |     100 |   96.85 | 71-73,201-203     
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |   99.02 |    97.56 |     100 |   99.02 | 106               
  ...storyUtils.ts |   71.02 |    78.86 |   93.75 |   71.02 | ...03-525,655-656 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...evel-label.ts |   77.77 |    66.66 |     100 |   77.77 | 18,22-24          
  ...are-cursor.ts |   89.47 |    85.71 |     100 |   89.47 | 39-44             
  ...ataService.ts |   93.17 |     79.1 |     100 |   93.17 | ...14,227,254-256 
  ...izedOutput.ts |   94.94 |      100 |   88.88 |   94.94 | 112-117           
  ...wOptimizer.ts |     100 |    96.77 |     100 |     100 | 69                
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   94.27 |    90.82 |   94.11 |   94.27 | ...89-290,450-451 
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   89.33 |    93.47 |     100 |   89.33 | ...,66-78,180-181 
  ...isplay-map.ts |     100 |      100 |     100 |     100 |                   
  updateCheck.ts   |     100 |    81.81 |     100 |     100 | 34,81-93,184      
  ...ow-keyword.ts |     100 |      100 |     100 |     100 |                   
 ...i/utils/export |      75 |    58.51 |   94.59 |      75 |                   
  collect.ts       |   71.21 |    63.71 |      96 |   71.21 | ...88-631,653-654 
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |   80.42 |    50.68 |     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      |   80.94 |    72.69 |   80.55 |   80.94 |                   
  ...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 |   89.72 |    65.33 |   93.75 |   89.72 | ...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 |    68.42 |     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         |   76.78 |    88.34 |   89.92 |   76.78 |                   
  acpModelUtils.ts |    97.3 |    95.09 |     100 |    97.3 | ...04-205,209-210 
  apiPreconnect.ts |   96.72 |    97.05 |     100 |   96.72 | 165-168           
  ...ol-call-id.ts |    92.3 |    83.33 |     100 |    92.3 | 26-27             
  ...ng-failure.ts |     100 |       95 |     100 |     100 | 72                
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   82.53 |    93.33 |      80 |   82.53 | 74,105-115        
  commands.ts      |   96.96 |    97.95 |     100 |   96.96 | 123-125           
  commentJson.ts   |   90.51 |     92.1 |     100 |   90.51 | 67-76,116         
  ...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 | 41-43,49          
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  ...putCapture.ts |   90.65 |    86.31 |     100 |   90.65 | ...72,370,372-373 
  ...arResolver.ts |   97.14 |    96.55 |     100 |   97.14 | 125-126           
  errors.ts        |   97.56 |    94.73 |     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.7 |    84.09 |     100 |    92.7 | ...07-110,158-161 
  ...AutoUpdate.ts |   92.89 |    94.59 |   88.88 |   92.89 | 148-159           
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.45 |       94 |     100 |   97.45 | ...17,334-335,380 
  languageUtils.ts |   98.47 |    97.72 |     100 |   98.47 | 153-154           
  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.25 |    91.17 |     100 |   94.25 | ...30,436,439-443 
  ...iveHelpers.ts |   95.13 |    91.79 |     100 |   95.13 | ...53-454,552,565 
  osc.ts           |    97.5 |      100 |   88.88 |    97.5 | 195-196           
  package.ts       |   88.88 |    85.71 |     100 |   88.88 | 31-32             
  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.55 |    88.46 |     100 |   95.55 | 95-97,123         
  resolvePath.ts   |     100 |      100 |     100 |     100 |                   
  runBudget.ts     |   99.35 |    96.77 |     100 |   99.35 | 119               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |    13.1 |    38.09 |   23.07 |    13.1 | ...7-775,782-1059 
  ...xImageName.ts |     100 |    77.77 |     100 |     100 | 10,18             
  sandboxMounts.ts |     100 |      100 |     100 |     100 |                   
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  settingsUtils.ts |   82.14 |    88.27 |      90 |   82.14 | ...25-743,750-758 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.85 |    77.44 |   62.16 |   39.85 | ...1190,1193-1212 
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |       60 |     100 |     100 | 23,32             
  systemInfo.ts    |   95.12 |    90.27 |     100 |   95.12 | ...54-255,260-264 
  ...InfoFields.ts |    87.5 |    65.85 |     100 |    87.5 | ...24-125,146-147 
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   94.11 |    83.33 |     100 |   94.11 | 13                
  ...e-relaunch.ts |   88.46 |    81.25 |   66.66 |   88.46 | 55-60,71,84-85    
  ...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 |                   
  windowTitle.ts   |   95.45 |    93.33 |     100 |   95.45 | 54-55             
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   91.63 |    91.02 |      95 |   91.63 |                   
  cleanup.ts       |   95.77 |    95.83 |     100 |   95.77 | 70-72             
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  scheduler.ts     |   91.91 |    90.47 |    87.5 |   91.91 | 58-62,73,131-135  
  throttledOnce.ts |   86.66 |     86.2 |     100 |   86.66 | ...99,105,137-138 
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   86.52 |    85.71 |   87.95 |   86.52 |                   
 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.37 |    83.44 |   95.36 |   90.37 |                   
  ...transcript.ts |    92.6 |     87.5 |     100 |    92.6 | ...46,365-366,497 
  ...ent-resume.ts |   83.52 |    72.79 |   79.41 |   83.52 | ...1284-1288,1291 
  ...ound-tasks.ts |   96.53 |     90.4 |     100 |   96.53 | ...1359,1379-1382 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   95.65 |    89.28 |     100 |   95.65 | ...12-413,485-489 
  ...w-snapshot.ts |   91.86 |       75 |     100 |   91.86 | ...54,178,185-187 
 src/agents/arena  |   76.25 |     67.5 |   78.94 |   76.25 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |   75.01 |    64.22 |   78.57 |   75.01 | ...1874,1880-1881 
  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.89 |    84.85 |   76.28 |   77.89 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   90.17 |    84.12 |   93.33 |   90.17 | ...71,673,675-676 
  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 |   88.43 |    85.84 |   83.54 |   88.43 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |   79.81 |    76.22 |      68 |   79.81 | ...2036,2063-2110 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   87.93 |    79.06 |   63.63 |   87.93 | ...00-401,404-405 
  ...nteractive.ts |   81.01 |    82.35 |   76.66 |   81.01 | ...33,535-538,541 
  ...statistics.ts |   98.19 |    82.35 |     100 |   98.19 | 127,151,192,225   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ool-policy.ts |   98.34 |      100 |    92.3 |   98.34 | 81-82             
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...ow-journal.ts |   91.76 |    75.86 |     100 |   91.76 | ...38-139,179-181 
  ...chestrator.ts |   91.79 |    87.79 |   82.35 |   91.79 | ...1774,1823-1826 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...ow-sandbox.ts |   96.87 |    94.51 |     100 |   96.87 | ...24-325,330-331 
  ...flow-saved.ts |   96.51 |    94.36 |     100 |   96.51 | 134-135,234-237   
  ...flow-stall.ts |    97.9 |    83.33 |     100 |    97.9 | 138-139,236       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   81.86 |    84.09 |    87.4 |   81.86 |                   
  TeamManager.ts   |    72.1 |     79.6 |   78.84 |    72.1 | ...1628,1651-1652 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   94.76 |    86.36 |   92.85 |   94.76 | 86-87,348-354     
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   88.85 |    82.56 |   96.29 |   88.85 | ...-990,1034-1035 
  team-events.ts   |   60.52 |      100 |      50 |   60.52 | ...37-141,148-152 
  teamHelpers.ts   |   92.02 |    94.91 |   95.23 |   92.02 | ...31-332,368-378 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   94.39 |    94.26 |   98.21 |   94.39 |                   
  ...on-harness.ts |   96.49 |    84.21 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |   98.49 |    95.08 |     100 |   98.49 | 201-203           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |   83.37 |    86.14 |   71.17 |   83.37 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   82.39 |    85.68 |    68.6 |   82.39 | ...6824,6828-6829 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   94.63 |    91.86 |   89.58 |   94.63 | ...15-416,419-420 
 ...nfirmation-bus |   98.29 |    97.14 |     100 |   98.29 |                   
  message-bus.ts   |   98.14 |    97.05 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   91.05 |    86.31 |   93.01 |   91.05 |                   
  baseLlmClient.ts |   87.19 |     80.3 |      80 |   87.19 | ...18,631,685-687 
  client.ts        |   89.98 |    84.15 |   91.04 |   89.98 | ...2921,3017-3018 
  ...tGenerator.ts |   88.07 |       75 |     100 |   88.07 | ...89-393,401-405 
  ...lScheduler.ts |   90.26 |    84.88 |   95.78 |   90.26 | ...5008,5036-5047 
  geminiChat.ts    |   91.33 |    88.18 |    95.6 |   91.33 | ...3935,3977-3978 
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  ...MediaLimit.ts |     100 |    95.83 |     100 |     100 | 96                
  ...htProtocol.ts |    9.09 |      100 |       0 |    9.09 | ...9,62-66,69-110 
  ...ream-error.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 |   92.59 |       75 |      50 |   92.59 | 41-42             
  ...on-helpers.ts |   87.61 |    76.92 |     100 |   87.61 | ...00-201,215-224 
  ...issionFlow.ts |   98.79 |       96 |     100 |   98.79 | 97                
  prompts.ts       |   88.93 |    87.87 |   72.72 |   88.93 | ...-918,1121-1122 
  ...ing-effort.ts |     100 |      100 |     100 |     100 |                   
  ...n-recovery.ts |   95.13 |       80 |     100 |   95.13 | ...06-107,142-144 
  ...t-profiler.ts |   96.89 |    80.88 |   88.23 |   96.89 | ...10,117-118,123 
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |     92.1 |     100 |     100 | 87,122-123        
  ...reparation.ts |     100 |      100 |     100 |     100 |                   
  ...allIdUtils.ts |   98.41 |    93.02 |     100 |   98.41 | 36,45             
  ...okTriggers.ts |   99.45 |    92.43 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   98.49 |    91.17 |     100 |   98.49 | ...93,621-622,668 
 ...ntentGenerator |   96.16 |    86.88 |   95.23 |   96.16 |                   
  ...tGenerator.ts |   97.48 |    87.37 |   94.11 |   97.48 | ...1200-1204,1244 
  converter.ts     |   95.77 |    86.45 |     100 |   95.77 | ...,928,1083-1085 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   89.93 |    71.83 |   93.33 |   89.93 |                   
  ...tGenerator.ts |    88.3 |    71.21 |   92.85 |    88.3 | ...19-325,343-344 
  index.ts         |     100 |       80 |     100 |     100 | 50                
 ...ntentGenerator |   94.69 |    85.61 |    92.1 |   94.69 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   94.58 |    84.44 |   91.66 |   94.58 | ...1126-1127,1155 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   91.03 |    88.86 |      95 |   91.03 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   89.84 |    86.93 |   96.66 |   89.84 | ...1791,1960-1975 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   60.31 |       75 |      50 |   60.31 | ...71,74-78,90-94 
  ...tGenerator.ts |    66.4 |    70.58 |   88.88 |    66.4 | ...51-157,168-169 
  pipeline.ts      |   97.33 |    90.04 |     100 |   97.33 | ...1007,1015,1083 
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |    92.2 |     92.4 |     100 |    92.2 | ...15-516,536-539 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   96.47 |    89.51 |   96.49 |   96.47 |                   
  dashscope.ts     |   97.43 |    91.72 |   94.73 |   97.43 | ...70-371,513-514 
  deepseek.ts      |   94.91 |    89.36 |     100 |   94.91 | ...31-132,145-146 
  default.ts       |    97.5 |    96.55 |   88.88 |    97.5 | 123-124,198       
  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 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
  zai.ts           |   92.13 |    82.14 |     100 |   92.13 | ...,39-40,135-137 
 src/extension     |   86.05 |    82.95 |   92.19 |   86.05 |                   
  ...ive-safety.ts |     100 |      100 |     100 |     100 |                   
  ...-converter.ts |   78.32 |    71.83 |     100 |   78.32 | ...1122,1168-1169 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |   80.39 |     87.5 |     100 |   80.39 | 50-59             
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   90.69 |    85.42 |   97.82 |   90.69 | ...1189-1195,1239 
  ...ionManager.ts |   80.55 |    77.97 |   80.23 |   80.55 | ...2576,2598-2599 
  ...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 |    75.9 |    84.61 |   85.71 |    75.9 | ...98,202,214-248 
  github.ts        |   88.35 |    82.13 |     100 |   88.35 | ...42,932-933,943 
  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 |     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.33 |     100 |   94.11 | 63-64,81-82       
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-107,141-146    
  ...ceRegistry.ts |   94.01 |    83.14 |     100 |   94.01 | ...38-344,365-366 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.95 |    83.78 |     100 |   88.95 | ...32-235,238-241 
  ...extraction.ts |   85.77 |    80.61 |   89.47 |   85.77 | ...02-205,260-261 
 src/followup      |   77.94 |    79.45 |    90.9 |   77.94 |                   
  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   |      66 |    60.46 |   71.42 |      66 | ...87-588,595-596 
  ...onToolGate.ts |     100 |    96.55 |     100 |     100 | 96                
  ...nGenerator.ts |   72.03 |    81.15 |   83.33 |   72.03 | ...68-219,331-333 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   92.14 |    86.66 |   95.12 |   92.14 |                   
  ...eGoalStore.ts |   87.61 |    89.28 |   86.66 |   87.61 | ...85-188,196-204 
  goalHook.ts      |   96.59 |    92.72 |     100 |   96.59 | 99-104,205-206    
  goalJudge.ts     |   90.07 |     81.7 |     100 |   90.07 | ...35-336,379-380 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/hooks         |   87.49 |    86.21 |   88.69 |   87.49 |                   
  ...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.43 |    84.53 |   94.59 |   95.43 | ...1010-1011,1021 
  hookPlanner.ts   |    87.5 |    85.18 |   86.66 |    87.5 | ...21-225,232-243 
  hookRegistry.ts  |   92.53 |    85.43 |     100 |   92.53 | ...39,458,462,466 
  hookRunner.ts    |   62.42 |    72.04 |   66.66 |   62.42 | ...64-765,774-775 
  hookSystem.ts    |    87.5 |      100 |   70.21 |    87.5 | ...43-744,750-751 
  ...HookRunner.ts |   75.51 |     61.9 |      80 |   75.51 | ...05-406,424-425 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...edCallback.ts |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   96.37 |     90.9 |      90 |   96.37 | 342-350,424-425   
  ...SkillHooks.ts |   78.75 |       75 |   66.66 |   78.75 | 62-66,137-152     
  ...oksManager.ts |   94.87 |    88.88 |     100 |   94.87 | ...84,325,327-329 
  ssrfGuard.ts     |   77.22 |    86.74 |     100 |   77.22 | ...57,261-267,273 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   94.24 |    96.09 |   88.88 |   94.24 | ...42-543,628-632 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
 src/ide           |   76.87 |    84.98 |   79.03 |   76.87 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   68.92 |    84.57 |   68.29 |   68.92 | ...1057,1086-1094 
  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/lsp           |   58.96 |    70.57 |   66.14 |   58.96 |                   
  ...nfigLoader.ts |   80.55 |       72 |   95.45 |   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 |       80 |   16.66 |   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.39 |    77.81 |   78.33 |   82.39 |                   
  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.52 |    58.06 |     100 |   79.52 | ...33-940,947-949 
  ...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.19 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.03 |   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        |   86.82 |    82.66 |   89.89 |   86.82 |                   
  ...y-document.ts |   89.52 |    84.61 |     100 |   89.52 | ...24-325,329-330 
  ...nel-memory.ts |   97.31 |    96.22 |   95.83 |   97.31 | ...29-230,275-277 
  const.ts         |   94.28 |     92.3 |     100 |   94.28 | 66-67             
  dream.ts         |    64.6 |    72.22 |      50 |    64.6 | ...04-109,124-165 
  ...entPlanner.ts |     100 |    81.81 |     100 |     100 | 126,136           
  entries.ts       |   75.59 |    84.84 |   83.33 |   75.59 | ...56-157,172-180 
  extract.ts       |   91.48 |    75.75 |     100 |   91.48 | ...99,118-121,189 
  ...entPlanner.ts |   91.51 |    76.19 |     100 |   91.51 | ...04,113-116,290 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   81.83 |       75 |   83.33 |   81.83 | ...51,474,478-507 
  indexer.ts       |   94.14 |       84 |     100 |   94.14 | ...32-233,334,337 
  ...kill-agent.ts |     100 |      100 |     100 |     100 |                   
  manager.ts       |   78.44 |    82.29 |   77.77 |   78.44 | ...1482,1495-1497 
  ...ent-config.ts |   81.98 |    79.72 |   82.35 |   81.98 | ...25,244,251-257 
  memoryAge.ts     |   90.47 |       80 |     100 |   90.47 | 50-51             
  paths.ts         |   94.61 |    95.77 |     100 |   94.61 | ...16-317,338-339 
  ...ing-skills.ts |     100 |       72 |     100 |     100 | 31-35,73-78,97    
  prompt.ts        |   96.96 |     86.2 |     100 |   96.96 | ...22,225,560-561 
  recall.ts        |   82.06 |       75 |    90.9 |   82.06 | ...59-364,395-406 
  refresh.ts       |   89.85 |    82.92 |     100 |   89.85 | ...54-155,162-163 
  ...ceSelector.ts |    93.1 |    81.81 |     100 |    93.1 | ...25,127-128,136 
  remember.ts      |   98.89 |    89.79 |     100 |   98.89 | 50,70             
  scan.ts          |   93.12 |    77.41 |     100 |   93.12 | ...08-109,154,157 
  ...et-scanner.ts |     100 |      100 |     100 |     100 |                   
  ...entPlanner.ts |   71.68 |    65.51 |   68.75 |   71.68 | ...90-394,397,403 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   93.33 |    81.25 |     100 |   93.33 | ...,94-95,119-120 
  ...git-status.ts |     100 |     87.5 |     100 |     100 | 30                
  ...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 |   79.38 |    81.03 |   81.81 |   79.38 | ...58-272,286-291 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   91.82 |    88.72 |   91.13 |   91.82 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   90.55 |    91.66 |     100 |   90.55 | 146,152,155-164   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   74.22 |    47.82 |   84.61 |   74.22 | ...,67-74,106-117 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.97 |     100 |     100 | 177               
  modelsConfig.ts  |   89.23 |    86.49 |   88.09 |   89.23 | ...1393,1422-1423 
  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   |   83.03 |    91.28 |   69.95 |   83.03 |                   
  autoMode.ts      |   97.78 |    94.14 |     100 |   97.78 | ...42,570-577,686 
  ...transcript.ts |      98 |    84.61 |     100 |      98 | 200-201           
  classifier.ts    |      94 |    94.54 |     100 |      94 | 158-165,385-389   
  ...erousRules.ts |     100 |    89.36 |     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 |   85.13 |    89.24 |      80 |   85.13 | ...1035,1141-1145 
  rule-parser.ts   |   94.36 |    92.63 |     100 |   94.36 | ...1211,1245-1247 
  ...-semantics.ts |   70.36 |    91.07 |   46.66 |   70.36 | ...2237,2300-2303 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   99.04 |    95.23 |     100 |   99.04 |                   
  system-prompt.ts |   99.04 |    95.23 |     100 |   99.04 | 220               
 src/plan-gate     |   76.16 |    91.42 |      80 |   76.16 |                   
  ...viewAgents.ts |   52.28 |    88.46 |   66.66 |   52.28 | ...24-220,242-243 
  ...provalGate.ts |   92.47 |    92.85 |   85.71 |   92.47 | ...86-187,268-274 
  state.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 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     |   81.91 |    76.58 |   78.12 |   81.91 |                   
  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 
  ...der-config.ts |    72.6 |       70 |   73.91 |    72.6 | ...94-495,502-511 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   97.67 |    89.28 |   55.55 |   97.67 |                   
  ...oding-plan.ts |   87.34 |      100 |       0 |   87.34 | 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 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |    85.3 |    78.57 |   95.89 |    85.3 |                   
  ...tGenerator.ts |   98.64 |    98.18 |     100 |   98.64 | 105-106           
  qwenOAuth2.ts    |   82.55 |    73.24 |   90.62 |   82.55 | ...1183-1199,1229 
  ...kenManager.ts |   85.36 |    76.61 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |   90.39 |    85.24 |   96.53 |   90.39 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   97.35 |    85.21 |     100 |   97.35 | ...94,117,417-418 
  ...ionService.ts |   96.71 |    95.79 |     100 |   96.71 | ...83,699,832-840 
  ...ingService.ts |   91.71 |    85.44 |   90.19 |   91.71 | ...1677,1692-1693 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |   99.54 |    96.51 |     100 |   99.54 | 98                
  cronScheduler.ts |   94.29 |    91.06 |   97.91 |   94.29 | ...1274,1673-1674 
  cronTasksFile.ts |   95.71 |    91.01 |     100 |   95.71 | ...93,318-319,437 
  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 |     100 |      100 |     100 |     100 |                   
  ...temService.ts |   92.07 |    85.93 |    90.9 |   92.07 | ...09,211,323-330 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |   74.05 |       69 |   95.74 |   74.05 | ...2170,2198-2199 
  ...references.ts |   98.39 |    88.88 |     100 |   98.39 | 154-155,215-216   
  ...ionService.ts |   98.09 |    97.17 |     100 |   98.09 | ...00-601,648-649 
  ...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.27 |    91.22 |     100 |   97.27 | ...50-451,606-607 
  ...ttachments.ts |   97.74 |     90.8 |     100 |   97.74 | 298-308,646       
  ...ersistence.ts |   91.01 |    78.75 |     100 |   91.01 | ...6,971-972,1000 
  ...on-service.ts |   94.49 |    92.26 |   97.14 |   94.49 | ...98-600,656-664 
  ...ipt-reader.ts |   92.81 |    83.61 |   97.95 |   92.81 | ...74-876,979-984 
  sessionRecap.ts  |   67.56 |    43.47 |     100 |   67.56 | ...60,178,180-183 
  ...ionService.ts |   88.01 |    81.56 |   95.52 |   88.01 | ...2334,2404-2424 
  sessionTitle.ts  |   94.19 |    73.21 |     100 |   94.19 | ...43-246,277-278 
  ...ionService.ts |    84.2 |    78.16 |   97.14 |    84.2 | ...2451,2457-2462 
  ...pInhibitor.ts |   97.42 |    92.77 |     100 |   97.42 | ...30,169,369-370 
  ...Estimation.ts |     100 |    86.66 |     100 |     100 | 96-97             
  ...ageService.ts |   97.76 |    91.59 |   93.75 |   97.76 | ...61-262,366,567 
  ...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 |   92.07 |    84.69 |     100 |   92.07 | ...47-450,502-503 
  ...reeCleanup.ts |   14.56 |      100 |   33.33 |   14.56 | 58-185            
  ...ionService.ts |   87.98 |    86.84 |     100 |   87.98 | ...38-439,455-456 
 ...icrocompaction |   99.41 |    96.06 |     100 |   99.41 |                   
  microcompact.ts  |   99.41 |    96.06 |     100 |   99.41 | 243-244,676       
 ...s/visionBridge |   98.62 |       94 |     100 |   98.62 |                   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...ge-service.ts |    98.3 |    92.24 |     100 |    98.3 | ...45,569,582-583 
 src/skills        |   88.22 |    87.05 |   90.16 |   88.22 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |    93.33 |     100 |     100 | 93,112            
  skill-load.ts    |   94.84 |     87.5 |     100 |   94.84 | ...03,223,235-237 
  skill-manager.ts |   83.44 |    82.16 |   82.35 |   83.44 | ...1202,1209-1213 
  skill-paths.ts   |   89.65 |    86.95 |     100 |   89.65 | ...11-112,117-118 
  symlinkScope.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |   97.91 |       98 |     100 |   97.91 | 277-278           
 ...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     |   87.28 |    87.17 |   96.42 |   87.28 |                   
  ...ter-schema.ts |     100 |    98.07 |     100 |     100 | 99                
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   83.48 |    82.81 |   94.59 |   83.48 | ...1480,1557-1558 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 47-52,63-68,71-76 
 src/telemetry     |    80.1 |    88.13 |   82.36 |    80.1 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...on-metrics.ts |   99.07 |    80.95 |     100 |   99.07 | 183,197           
  ...on-tracing.ts |   76.09 |    76.56 |   72.22 |   76.09 | ...19,378-380,396 
  ...attributes.ts |   97.47 |    93.15 |     100 |   97.47 | 39-44             
  ...ag-metrics.ts |     100 |    77.77 |     100 |     100 | 21,40             
  ...t-loop-lag.ts |     100 |    90.47 |     100 |     100 | 49,76             
  ...-exporters.ts |   65.78 |    83.33 |   55.55 |   65.78 | ...04-105,108-109 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...-processor.ts |   99.09 |    95.61 |      95 |   99.09 | 141,365-366       
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |   54.12 |    71.13 |   62.74 |   54.12 | ...1347,1364-1384 
  metrics.ts       |   76.07 |    78.57 |   78.94 |   76.07 | ...1021,1024-1035 
  ...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       
  sdk.ts           |   86.75 |     88.4 |   66.66 |   86.75 | ...17-621,659-681 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   89.89 |    88.03 |   96.55 |   89.89 | ...1550,1581-1584 
  ...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         |   81.64 |    94.21 |   85.36 |   81.64 | ...1328,1332-1339 
  uiTelemetry.ts   |   93.07 |    92.85 |   83.33 |   93.07 | ...62,290,410-411 
 ...ry/qwen-logger |   73.62 |    81.25 |   69.49 |   73.62 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   73.62 |    81.08 |   68.96 |   73.62 | ...1095,1133-1134 
 src/test-utils    |   93.85 |    98.14 |   77.77 |   93.85 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   94.11 |       90 |     100 |   94.11 | 69-70             
  index.ts         |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |    92.3 |      100 |   74.19 |    92.3 | ...54,218-219,232 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |    84.5 |    83.87 |   87.83 |    84.5 |                   
  ...erQuestion.ts |   90.74 |    82.43 |    92.3 |   90.74 | ...23-424,431-432 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  ...ub-session.ts |   89.67 |     91.3 |   81.81 |   89.67 | ...03-304,315-322 
  cron-create.ts   |   90.64 |    92.85 |   72.72 |   90.64 | ...,73-74,223-231 
  cron-delete.ts   |   97.56 |      100 |   83.33 |   97.56 | 31-32             
  cron-list.ts     |   98.23 |    95.34 |    87.5 |   98.23 | 57-58             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  edit.ts          |    82.7 |    86.77 |   81.25 |    82.7 | ...43-744,863-913 
  ...r-worktree.ts |   83.14 |    67.56 |    87.5 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |   84.89 |    81.81 |   85.71 |   84.89 | ...27-132,165-179 
  exit-worktree.ts |   83.29 |    83.65 |   94.44 |   83.29 | ...14-515,537-538 
  exitPlanMode.ts  |    81.7 |    73.41 |     100 |    81.7 | ...28-531,561-564 
  glob.ts          |   94.42 |    88.23 |   93.33 |   94.42 | ...19-220,368,371 
  grep.ts          |   83.09 |    86.66 |   80.95 |   83.09 | ...60-661,711-712 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  loop-wakeup.ts   |   99.24 |    92.85 |     100 |   99.24 | 44                
  ls.ts            |   96.74 |    90.27 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.71 |     59.5 |   90.32 |   72.71 | ...1212,1214-1215 
  ...nt-manager.ts |   81.62 |    78.82 |   85.41 |   81.62 | ...3192,3194-3195 
  mcp-client.ts    |   79.35 |    84.71 |   88.67 |   79.35 | ...2167,2171-2174 
  ...ry-timeout.ts |     100 |      100 |     100 |     100 |                   
  mcp-errors.ts    |     100 |      100 |     100 |     100 |                   
  ...pool-entry.ts |   77.56 |    84.11 |   77.14 |   77.56 | ...1291,1299-1300 
  ...ool-events.ts |       8 |        0 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |   97.46 |    93.93 |     100 |   97.46 | 175-176           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-retry.ts     |   97.67 |    95.65 |     100 |   97.67 | 131-132           
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |   91.99 |    93.04 |   96.77 |   91.99 | ...15-716,766-767 
  ...sport-pool.ts |   83.49 |    80.15 |   84.61 |   83.49 | ...1409,1416-1420 
  ...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.72 |    84.28 |   88.46 |   91.72 | ...92,605,803-808 
  notebook-edit.ts |   85.55 |    77.39 |   81.25 |   85.55 | ...86-902,948-949 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   82.57 |    88.88 |     100 |   82.57 | 174-185,234-247   
  read-file.ts     |   95.64 |    88.88 |   86.66 |   95.64 | ...74,489,561-562 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  ...d-artifact.ts |    90.9 |    86.71 |    87.5 |    90.9 | ...13-414,428-440 
  ripGrep.ts       |   95.87 |     88.4 |   94.73 |   95.87 | ...56-657,663-664 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |    82.3 |    89.65 |    62.5 |    82.3 | ...37-243,326-334 
  ...n-mcp-view.ts |   93.57 |     92.3 |      90 |   93.57 | 122-130           
  shell.ts         |   78.37 |    83.35 |   91.75 |   78.37 | ...4947,5010-5011 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   91.06 |    93.33 |   89.47 |   91.06 | ...71,475,520-542 
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |    94.4 |    93.33 |   81.81 |    94.4 | 45-49,63-64,95    
  task-list.ts     |   73.38 |    77.77 |   83.33 |   73.38 | ...02,105,109-116 
  task-stop.ts     |   93.14 |    96.15 |   85.71 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.89 |    83.92 |    92.3 |   82.89 | ...14-422,454-465 
  team-create.ts   |   97.22 |    85.71 |   83.33 |   97.22 | 48-49,129-130     
  team-delete.ts   |   86.74 |    83.33 |   83.33 |   86.74 | 37-38,42-48,72-73 
  ...n-approval.ts |   92.14 |    96.77 |   77.77 |   92.14 | 38-39,42-43,93-99 
  todoWrite.ts     |   89.27 |    82.05 |   92.85 |   89.27 | ...50-555,577-578 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   76.78 |    74.59 |   82.22 |   76.78 | ...96-897,905-906 
  tool-search.ts   |   96.19 |    89.72 |   93.33 |   96.19 | ...09,259-264,426 
  tools.ts         |   94.18 |    91.52 |   95.45 |   94.18 | ...37-538,554-560 
  web-fetch.ts     |   90.12 |    85.71 |   92.85 |   90.12 | ...11-312,326-327 
  write-file.ts    |   84.28 |    82.79 |   84.61 |   84.28 | ...87-690,727-762 
 src/tools/agent   |   84.45 |    84.84 |   86.31 |   84.45 |                   
  agent.ts         |    84.5 |    84.94 |    86.2 |    84.5 | ...3697,3719-3729 
  fork-subagent.ts |   83.14 |       80 |    87.5 |   83.14 | 83-101,133-134    
 ...tools/artifact |   95.78 |    92.51 |   88.63 |   95.78 |                   
  artifact-tool.ts |   91.46 |    88.46 |   71.42 |   91.46 | ...13-314,322-325 
  ...-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 |                   
 ...s/computer-use |   90.21 |    82.17 |   78.08 |   90.21 |                   
  bootstrap.ts     |   59.42 |    80.95 |   41.66 |   59.42 | ...35-339,341-345 
  client.ts        |   80.11 |       90 |   77.77 |   80.11 | ...97,242-243,274 
  constants.ts     |     100 |    94.73 |     100 |     100 | 129,256           
  downloader.ts    |   65.29 |    52.77 |   58.33 |   65.29 | ...99-300,316-355 
  index.ts         |     100 |      100 |     100 |     100 |                   
  install-state.ts |   94.44 |    72.72 |     100 |   94.44 | 44-45             
  ...n-detector.ts |     100 |     87.5 |     100 |     100 | 50                
  schemas.ts       |     100 |      100 |     100 |     100 |                   
  tool.ts          |    96.3 |    85.71 |     100 |    96.3 | 75-76,184,252-258 
 ...tools/workflow |   87.46 |    79.41 |   85.71 |   87.46 |                   
  workflow.ts      |   87.46 |    79.41 |   85.71 |   87.46 | ...51-652,664-667 
 src/utils         |    91.6 |    89.35 |   95.81 |    91.6 |                   
  LruCache.ts      |     100 |      100 |     100 |     100 |                   
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |   94.76 |    93.26 |     100 |   94.76 | ...30-531,634-638 
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  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 |                   
  ...ncyLimiter.ts |   94.64 |    95.23 |     100 |   94.64 | 64-66             
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.11 |    89.47 |     100 |   91.11 | ...46-147,154-155 
  ...tion-chain.ts |     100 |    96.15 |     100 |     100 | 91                
  cronDisplay.ts   |     100 |    91.66 |     100 |     100 | 15,43,57          
  cronParser.ts    |   95.34 |    93.33 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   96.66 |    96.61 |   88.88 |   96.66 | 192-196           
  editHelper.ts    |   93.63 |     83.9 |     100 |   93.63 | ...28-429,463-464 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |   96.55 |       88 |   96.77 |   96.55 | ...74,476-477,544 
  errorParsing.ts  |    97.7 |    97.05 |     100 |    97.7 | 72-73             
  ...rReporting.ts |   95.65 |    93.33 |     100 |   95.65 | 37-38             
  errors.ts        |   81.73 |    90.55 |   57.89 |   81.73 | ...08-324,328-334 
  fetch.ts         |   72.45 |    81.81 |   71.42 |   72.45 | ...31,142-143,162 
  fileUtils.ts     |   95.33 |    91.99 |   96.15 |   95.33 | ...1747,1772-1773 
  forkedAgent.ts   |   92.45 |    82.35 |   93.75 |   92.45 | ...34,642,647-654 
  formatters.ts    |   81.81 |       75 |     100 |   81.81 | 15-16             
  ...eUtilities.ts |    92.4 |    86.95 |     100 |    92.4 | ...52-158,168-169 
  ...rStructure.ts |   94.36 |    94.28 |     100 |   94.36 | ...17-120,330-335 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  gitDiff.ts       |   92.36 |    80.09 |     100 |   92.36 | ...55-856,928-929 
  gitDirect.ts     |   98.46 |    90.17 |     100 |   98.46 | 148,268,352       
  ...noreParser.ts |   94.59 |    92.59 |     100 |   94.59 | ...05-106,140-141 
  gitUtils.ts      |      75 |    88.88 |   83.33 |      75 | ...,78-79,103-154 
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   95.27 |    92.94 |     100 |   95.27 | ...16-317,356-359 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...yDiscovery.ts |    92.4 |    89.01 |     100 |    92.4 | ...28,331,522-525 
  ...tProcessor.ts |   93.77 |    89.15 |     100 |   93.77 | ...13-319,406-407 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.14 |     100 |   98.96 | 153               
  ...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 
  partUtils.ts     |     100 |    98.61 |     100 |     100 | 206               
  pathReader.ts    |   97.77 |       90 |     100 |   97.77 | 93,121            
  paths.ts         |   93.72 |    92.59 |     100 |   93.72 | ...47-448,450-452 
  pdf.ts           |   92.59 |    86.66 |     100 |   92.59 | ...54-555,596-601 
  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 |   59.15 |    76.92 |     100 |   59.15 | ...5,89-90,96-101 
  ...noreParser.ts |   92.63 |    91.52 |     100 |   92.63 | ...72-173,192-193 
  rateLimit.ts     |   93.75 |    89.62 |     100 |   93.75 | ...13,218-219,262 
  ...text-range.ts |   97.73 |    93.24 |     100 |   97.73 | 85-86,107,262-263 
  readManyFiles.ts |   96.29 |     87.5 |     100 |   96.29 | 225,275,286-290   
  retry.ts         |   95.93 |    92.23 |     100 |   95.93 | ...33,524-525,543 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.65 |    96.96 |     100 |   97.65 | ...00,250-251,277 
  retryPolicy.ts   |   97.72 |    90.56 |     100 |   97.72 | 130-131           
  ripgrepUtils.ts  |   50.94 |    85.71 |      70 |   50.94 | ...54-255,268-346 
  ...sDiscovery.ts |   97.46 |    93.05 |     100 |   97.46 | ...04,182-183,202 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   83.09 |    86.77 |   95.45 |   83.09 | ...70,595,624-633 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |    97.5 |    89.74 |     100 |    97.5 | 162-163           
  safe-mode.ts     |     100 |      100 |     100 |     100 |                   
  safeJsonParse.ts |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   91.13 |    89.47 |     100 |   91.13 | ...41-42,96,98-99 
  ...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.72 |    92.12 |     100 |   91.72 | ...36-539,615-616 
  ...nIdContext.ts |     100 |      100 |     100 |     100 |                   
  ...orageUtils.ts |   95.98 |    83.65 |     100 |   95.98 | ...70,386,466,485 
  ...-pager-env.ts |     100 |      100 |     100 |     100 |                   
  shell-utils.ts   |   85.76 |     88.2 |     100 |   85.76 | ...2179,2186-2190 
  ...lAstParser.ts |   96.39 |    88.06 |     100 |   96.39 | ...1071-1073,1083 
  ...ContextEnv.ts |     100 |      100 |     100 |     100 |                   
  ...nlyChecker.ts |   95.08 |    91.75 |     100 |   95.08 | ...15-316,324-325 
  sideQuery.ts     |   86.82 |    86.66 |     100 |   86.82 | ...81-187,189-195 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   77.77 |       50 |     100 |   77.77 | 44,54-59          
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  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             
  tool-utils.ts    |    95.2 |    93.61 |     100 |    95.2 | ...58-159,162-163 
  ...ultCleanup.ts |   54.62 |       64 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.11 |    96.33 |     100 |   96.11 | ...22-327,329-334 
  truncation.ts    |   75.55 |    86.02 |   71.42 |   75.55 | ...44-449,453-477 
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...aceContext.ts |   95.81 |    89.39 |     100 |   95.81 | ...74-275,299-301 
  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.68 |    80.38 |   94.69 |   83.68 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |   82.47 |    76.22 |      95 |   82.47 | ...1525,1559-1560 
  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.43 |   89.47 |   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 |   69.01 |     74.5 |   84.37 |   69.01 |                   
  ...eTokenizer.ts |   65.72 |    74.02 |    92.3 |   65.72 | ...65-466,479-533 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tTokenizer.ts |   68.39 |    69.49 |    90.9 |   68.39 | ...24-325,327-328 
  ...ageFormats.ts |   76.92 |      100 |   33.33 |   76.92 | 46-49,56-57       
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
-------------------|---------|----------|---------|---------|-------------------

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

…thin existing safety guards

Respects two deliberate, tested design decisions that the first cut collided
with (caught by scripts/tests/qwen-autofix-workflow.test.js):

- Drop the issue_comment @-mention trigger and its route branch: the workflow
  intentionally does not expose comment-triggered autofix (only
  pull_request_review:submitted) to avoid redundant runs and comment-command
  surface. The scheduled scan plus the watermark fix already re-target a PR
  after maintainer feedback.
- Drop the raw CI-log injection into feedback.md: feedback fed to the model is
  deliberately sanitized and must not pull in URLs / raw context (a
  prompt-injection surface). Keep only the sanitized check-name rendering
  (.name // .workflowName, still gsub+truncated).

Update the assertions that the retained improvements (watermark decoupling,
pending-check staleness bound, always-post-handoff-on-failure) legitimately
changed. Workflow test: 48/48 green.
@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM, looks ready to ship. ✅

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. Suggestions are inline.

— qwen3.7-max via Qwen Code /review

Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread scripts/tests/qwen-autofix-workflow.test.js Outdated
…over schema commands

Addresses the three inline /review suggestions on the PR:

- Handoff on any non-success end, not just "failure". A 120-minute job-timeout
  cancellation sets job.status = "cancelled", which the "== failure" check
  missed — leaving no marker and no comment, so the next scan re-targeted the
  same feedback with the same round (an invisible loop). Use "!= success";
  the step only runs on failure()/cancelled()/dry-run and dry-run is excluded.
- Fold the createdAt fetch into the existing statusCheckRollup gh pr view call
  (statusCheckRollup,createdAt), removing one GitHub API round-trip per PR
  scanned.
- Add test coverage the earlier diff lacked: assert generate:settings-schema is
  in both agent allowlists and that both verify gates run the schema-freshness
  check, so a future edit can't silently drop the guard this PR adds.
@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks — all three suggestions addressed in 789611a95:

  1. Cancellation handoff (good catch — real gap): the 120-min job-timeout sets job.status = "cancelled", which the == "failure" check missed, leaving a silent same-round loop. Changed to != "success". Safe because this step only runs on failure()/cancelled()/dry-run and dry-run is already excluded.
  2. Folded the createdAt fetch into the existing gh pr view … --json statusCheckRollup,createdAt call — one fewer API round-trip per PR scanned.
  3. Added the missing test coverage: assertions now pin generate:settings-schema in both agent allowlists and the schema-freshness check in both verify gates, so the guard this PR adds can't be silently dropped later.

Workflow contract test stays green (48/48).

qqqys
qqqys previously requested changes Jul 16, 2026

@qqqys qqqys left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Not reviewed: coverage — could not read the agents' transcripts (the CLI did not export QWEN_CODE_PROJECT_DIR / QWEN_CODE_SESSION_ID, so this run cannot find the harness's record of what its agents did), so this run cannot show that any of the diff was read.

— GPT-5 via Qwen Code /review

Comment thread .github/workflows/qwen-autofix.yml
Comment thread .github/workflows/qwen-autofix.yml
Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread scripts/tests/qwen-autofix-workflow.test.js
…al + 2 suggestions)

Addresses the CHANGES_REQUESTED review of the handoff (E-4) and pending-check
staleness (E-3) logic:

- Suppress the handoff once a run published a result (OUTCOME fixed/noop), so a
  later always() step failing the job (e.g. artifact upload) can no longer post
  a contradictory acted=false handoff over a reported success.
- Bound the agent step at 80m, well under the 120m job timeout, so a runaway
  agent fails the STEP (not the job) and the always() report step still runs and
  hands off — a job-level timeout would cancel that step too and go silent.
- On a pre-prepare crash (empty NEWEST) the watermark can't advance, so write a
  terminal marker (round = MAX_ROUNDS) and skip on the highest marker round
  (not last-by-ts), so the scan stops re-handing-off instead of repeating until
  MAX_ROUNDS.
- Raise the pending-staleness bound from 30m to 240m so an active check
  (review-pr ~50m, review-address up to 120m) is never aged out mid-flight and
  the same feedback double-processed; only truly-dead checks are ignored.
- Prefer the agent's detailed failure.md over the generic handoff.md wrapper.

Adds a bash-replay test that extracts the actual POST_HANDOFF decision and
MARK_ROUND logic from the workflow and exercises the state transitions
(published+late-failure, dry-run, verify failure, pre-verify crash,
cancellation; terminal vs incremental round). Workflow test: 49/49.
@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks @qqqys — all four Critical findings and both suggestions addressed in 414d12c3f. These were real; the handoff/staleness logic was under-designed.

Critical

  1. Contradictory handoff after successPOST_HANDOFF is now suppressed whenever the run published a result (OUTCOME is fixed/noop), so a later always() step failing the job (e.g. artifact upload) can no longer post an acted=false handoff over the reported success.
  2. Job timeout — bounded the agent step at timeout-minutes: 80, well under the 120m job timeout, so a runaway agent fails the step (not the job) and the always() report step still runs and hands off. (Chose the step-timeout route over a dependent job to avoid duplicating the reporting/credential logic.)
  3. Empty NEWEST → repeated handoffs — a pre-prepare crash now writes a terminal marker (round = MAX_ROUNDS) and the scan reads the max round across markers (not last-by-ts), so it skips the PR instead of re-handing-off every tick — without stamping unread feedback as evaluated.
  4. 30-min staleness aged out healthy checks — raised to 240m, comfortably above review-pr (~50m) and review-address (≤120m), so an active run is never aged out mid-flight; only genuinely dead checks are ignored.

Suggestions

  • Now prefer failure.md over the generic handoff.md wrapper so the public handoff shows the actionable diagnosis.
  • Added a bash-replay test that extracts the actual POST_HANDOFF and MARK_ROUND logic from the workflow and exercises the transitions (published+late-failure → no handoff; dry-run → no handoff; verify failure / pre-verify crash / cancellation → handoff; terminal vs incremental round).

Workflow contract test now 49/49.

@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Review — verified against the PR-head contract test and live GitHub data

Overview. Four coordinated fixes to the autofix loop, and the PR body describes them accurately: (A) a deterministic settings-schema freshness gate in both verify steps, (C) the generator added to both agent allowlists plus SKILL.md rules, (D) eval-marker-only watermark with a PR-creation floor, (E) always-visible failure handoff with terminal-round parking — plus stale-pending-check aging and a step-level 80-minute timeout that keeps the always() report path alive.

How I verified

  • Ran the contract test at the PR head in a worktree: 49/49 pass. The new test executes the extracted POST_HANDOFF / MARK_ROUND snippets under real bash, so the state transitions are exercised, not string-matched — nice pattern. (Body says 48/48; the branch runs 49.)
  • Replayed change D against live feat(agents): support per-model sub-agent concurrency limits #6984 data: marker ts=2026-07-15T18:25:04Z, base-sync head commit 2026-07-16T01:58:46Z, maintainer comments 23:50:38Z / 00:12:24Z. Old max(push, eval) buries both; new EVAL_WM picks both up. The body's numbers check out exactly.
  • Cross-read the full workflow at head: the allowlist + gate land in both jobs (the only two agent-settings blocks); npm run build precedes the generator (its documented prerequisite); the generator's inputs are exactly the two files SKILL.md names (settingsSchema.ts, and settings.ts for SETTINGS_VERSION); ci.yml's full-profile gate continuously proves clean-tree idempotency; the missing outcome=failed in the issue-job gate matches that job's existing style (none of its verify exits write an outcome).
  • The invariant behind D holds going forward: prepare's NEWEST is the max over exactly the four feedback sets it renders into feedback.md, so a marker can never advance past feedback the agent didn't see. And ROUND = max(...) is required by the MARK_TS=WATERMARK terminal marker (its ts can be older than an earlier marker's; last-by-ts would resurrect a parked PR) — good internal consistency, and the test documents it.
  • The suppression matrix checks out: every verify exit-1 path stamps outcome=failed; fixed/noop suppress the handoff even when a later always() step fails the job; push-succeeded-but-comment-failed self-heals (no marker → next scan retries → agent noops → marker lands). cancel-in-progress: false on both worker jobs rules out concurrency-cancel as a spurious JOB_STATUS source.
  • Probed this PR's live statusCheckRollup for the field shapes the new staleness filter depends on (findings 2 below).

Findings, ranked

  1. [Important] One transient pre-prepare failure permanently parks a PR, with no recovery path. If anything before prepare writes newest fails once — an npm ci flake that survives its 3 retries, a single gh-api 5xx in prepare (those four calls have no retry), or a red main inherited at checkout — NEWEST is empty and the handoff stamps round=MAX_ROUNDS. That is terminal: the scan's round guard continues, and it applies to workflow_dispatch pr_number forced runs too (same candidate loop), so the only way to un-park is deleting the bot's marker comment — undocumented and non-obvious. Note the asymmetry vs main: today a transient pre-prepare crash silently retries next tick and self-heals; with this PR it gives up permanently on the first flake. Concrete scenario: main is red for an hour → each 10-minute scan tick terminally parks another bot PR, and they stay parked after main is fixed. Suggest MARK_ROUND="$(( ROUND + 1 ))" in the empty-NEWEST branch as well: the watermark still doesn't advance (ts=WATERMARK, nothing is pretended evaluated), transients self-heal on the next tick, persistent faults park after MAX_ROUNDS consecutive failures, and handoff-comment spam is bounded at MAX_ROUNDS per PR instead of 1. Related cosmetic point: the current text "(round 5/5)" reports rounds that were never actually consumed.

  2. [Suggestion] Pending-staleness filter has no StatusContext timestamp in its chain. .startedAt // .completedAt // .updatedAt are CheckRun fields; legacy commit statuses (StatusContext) expose none of them in gh's rollup, so a pending external status is now instantly "stale" and never blocks (before this PR it always blocked). No impact today — every item in this repo's live rollup is a CheckRun — but adding .createdAt (the one timestamp gh emits for StatusContext) future-proofs it. Also worth knowing for whoever edits this next: gh serializes missing CheckRun timestamps as 0001-01-01T00:00:00Z, not null — a queued-never-started run ages out via the zero-time comparison rather than the // $cut fallback the comment describes; same outcome, different mechanism.

  3. [Suggestion] Unparseable marker in the double-fault corner. If the scan's metadata calls fail (PR_META='{}'CREATED_WM='') on a PR with no prior markers, the target carries watermark=''; if that run then crashes before prepare, MARK_TS='' produces <!-- autofix-eval ts= acted=false round=5 -->, which ts=([^ ]+) cannot parse — the terminal round is invisible and the loop posts a fresh handoff every 10-minute tick while the fault persists. One-line hardening: MARK_TS="${NEWEST:-${WATERMARK:-1970-01-01T00:00:00Z}}".

  4. [Note] feat(agents): support per-model sub-agent concurrency limits #6984 itself stays buried after this merges. A noop run at 2026-07-16T05:00:41Z (old scan logic, floor 01:58:46Z) already stamped ts=2026-07-16T04:02:07Z, which outranks both motivating comments under the new EFF_WM = EVAL_WM. The fix is correct going forward (per the invariant above) but does not retroactively re-target the motivating PR — nobody should wait for the bot there, and the body's "AFTER=picked-up" replay is accurate against the 18:25:04 marker it cites but stale against the live marker state.

  5. [Nano, pre-existing] Marker spoof-stripping has a theoretical gap that parking now leans on. The scan accepts ts=([^ ]+), which admits > inside ts, and such a marker survives the report steps' sed 's/<!--[^>]*-->//g'. The trust gates (bot-authored markers only, maintainer-only feedback) make this thin, but since round= parsing is now load-bearing for parking, tightening the scan regex to ts=([^ >]+) makes the strip provably sufficient.

  6. [Nano] Test (ubuntu-latest) was still in flight when I reviewed; everything else green or intentionally skipped.

Verdict: the four fixes are real, mutually consistent, and each is backed by an executed test or a live-data replay; every analyzed scenario strictly improves on main except the transient-failure case in finding 1, which trades main's silent-but-self-healing retry for a visible-but-permanent stop. I'd decide finding 1 before merge (a one-line change if accepted); 2, 3, and 5 are cheap hardening; nothing else blocking.

中文版

评审 — 已对照 PR 分支契约测试与 GitHub 线上数据验证

概述。 对 autofix 回路的四处协同修复,PR 描述准确:(A)两个 verify 步骤中的确定性 schema 新鲜度门禁;(C)两处 agent 白名单加入生成命令 + SKILL.md 规则;(D)水位线改为仅用 eval 标记、以 PR 创建时间为地板;(E)失败必留可见交接 + 终局轮次停靠;另有 pending 检查的过期老化和 80 分钟步级超时(保证 always() 报告步骤有机会运行)。

验证方式

  • 在 worktree 中运行 PR 分支的契约测试:49/49 通过。新测试把 POST_HANDOFF / MARK_ROUND 片段提取出来在真实 bash 下执行,是状态迁移的实际运行而非字符串匹配。(描述写 48/48,分支实际 49 个。)
  • feat(agents): support per-model sub-agent concurrency limits #6984 线上数据回放改动 D:标记 ts=2026-07-15T18:25:04Z、基线同步 head commit 2026-07-16T01:58:46Z、维护者评论 23:50:38Z / 00:12:24Z。旧 max(push, eval) 两条全埋;新 EVAL_WM 两条全拾起。与描述完全一致。
  • 通读 PR 分支完整工作流:白名单 + 门禁覆盖两个 job(仅有的两处 agent 配置块);npm run build 先于生成器(其文档要求);生成器输入恰为 SKILL.md 点名的两个文件;ci.yml full-profile 门禁持续证明干净树幂等;issue job 门禁不写 outcome=failed 与该 job 既有风格一致。
  • 改动 D 的不变式向前成立:prepare 的 NEWEST 恰是它渲染进 feedback.md 的四类反馈的最大时间戳,标记永远不会越过 agent 未见过的反馈。ROUND = max(...)MARK_TS=WATERMARK 终局标记的必要配套(其 ts 可能比更早标记还旧,按时间取最后会让已停靠 PR 复活)——内部自洽,测试也写明了。
  • 抑制矩阵成立:verify 所有 exit-1 路径都写 outcome=failed;fixed/noop 即使后续 always() 步骤失败也不发交接;push 成功但评论失败可自愈(无标记 → 下轮重试 → noop → 落标记)。两个 worker job 的 cancel-in-progress: false 排除了并发取消造成的假 JOB_STATUS
  • 实测本 PR 的 statusCheckRollup 字段形态(见发现 2)。

发现(按严重度)

  1. 【重要】一次瞬态的 prepare 前失败会永久停靠该 PR,且无恢复路径。 prepare 写出 newest 之前任何一步失败一次——npm ci 三次重试后仍抖动、prepare 中四个无重试的 gh api 调用碰上一次 5xx、或 checkout 到的 main 本身是红的——NEWEST 为空,交接标记写 round=MAX_ROUNDS,即终局:scan 轮次守卫直接 continue,且对 workflow_dispatch pr_number 强制运行同样生效(同一候选循环),唯一解除办法是删掉 bot 的标记评论——未文档化也不直观。与 main 对比的不对称:今天瞬态失败会在下个 tick 静默重试并自愈;本 PR 则首次抖动就永久放弃。具体场景:main 红一小时 → 每 10 分钟一个 tick 逐个终局停靠 bot PR,main 修好后它们仍停着。建议空 NEWEST 分支也用 MARK_ROUND="$(( ROUND + 1 ))":水位线仍不前移(ts=WATERMARK,没有假装评估),瞬态下个 tick 自愈,持续性故障连续 MAX_ROUNDS 次后停靠,评论刷屏上限为每 PR MAX_ROUNDS 条。附带一点:现在的 "(round 5/5)" 文案报告了并未实际消耗的轮次。

  2. 【建议】pending 过期过滤链缺 StatusContext 时间戳。 .startedAt // .completedAt // .updatedAt 都是 CheckRun 字段;旧式 commit status(StatusContext)在 gh 输出里三者皆无,于是 pending 的外部 status 现在会被立即当作"过期"而不再阻塞(本 PR 之前是一律阻塞)。当下无影响——本仓库线上 rollup 全是 CheckRun——但补上 .createdAt(gh 为 StatusContext 输出的唯一时间戳)可保未来。另供后来者参考:gh 把 CheckRun 缺失的时间戳序列化为 0001-01-01T00:00:00Z 而非 null——"排队未启动"的运行是经零值时间比较被老化的,不是注释描述的 // $cut 兜底;结果相同,机制不同。

  3. 【建议】双重故障角落里标记不可解析。 若 scan 的元数据调用失败(PR_META='{}'CREATED_WM='')且该 PR 无历史标记,target 带 watermark='';该运行又在 prepare 前崩溃,则 MARK_TS='' 产出 <!-- autofix-eval ts= acted=false round=5 -->,ts=([^ ]+) 无法解析——终局轮次不可见,故障持续期间每 10 分钟发一条新交接。一行加固:MARK_TS="${NEWEST:-${WATERMARK:-1970-01-01T00:00:00Z}}"

  4. 【说明】合并后 feat(agents): support per-model sub-agent concurrency limits #6984 本身仍是被埋状态。 2026-07-16T05:00:41Z 的一次 noop 运行(旧 scan 逻辑,地板 01:58:46Z)已写下 ts=2026-07-16T04:02:07Z 的标记,在新 EFF_WM = EVAL_WM 下仍压过两条动机评论。修复向前正确(见上不变式),但不会追溯性地重新盯上动机 PR——别在那里等 bot;描述里的 "AFTER=picked-up" 回放对它引用的 18:25:04 标记是准确的,但相对线上最新标记已过时。

  5. 【微小,先前已存在】标记防伪清洗有一个理论缺口,而停靠现在依赖它。 scan 接受 ts=([^ ]+),允许 ts 内含 >,这样的标记能穿过报告步骤的 sed 's/<!--[^>]*-->//g'。信任门(仅 bot 评论中的标记、仅维护者反馈)使其很难利用,但既然 round= 解析现在承担停靠职责,把 scan 正则收紧为 ts=([^ >]+) 可让清洗在证明意义上充分。

  6. 【微小】 评审时 Test (ubuntu-latest) 仍在运行;其余绿或按设计跳过。

结论: 四处修复真实、相互自洽,均有已执行的测试或线上数据回放背书;所有分析场景相对 main 严格更优,唯一例外是发现 1 的瞬态失败情形——用"可见但永久的停止"换掉了 main"静默但可自愈的重试"。建议合并前对发现 1 做个决定(若采纳是一行改动);2、3、5 是廉价加固;其余不阻塞。

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

The follow-up commits look solid — PENDING_STALE_MIN=240, the max(.round) calculation, the handoff guard for fixed/noop outcomes, and the step-level timeout-minutes: 80 all close real gaps. Two non-blocking suggestions inline.

Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .qwen/skills/autofix/SKILL.md Outdated
…ter SKILL wording

Two non-blocking review suggestions:

- The issue-phase verify gate's schema-freshness check now writes
  outcome=failed before exit 1, matching the address-review gate, so the
  issue-phase step summary shows outcome=failed instead of outcome=unknown.
- Reword the SKILL rule from "do not invent environment excuses" to "do not
  skip a failing check by attributing it to the environment without evidence,"
  which keeps the intent (no hand-waving a real failure as an env issue)
  without discouraging the agent from reporting a genuine infra failure.
@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks @yiliang114 — both applied in 84b2ffb32:

  1. The issue-phase verify gate's schema check now writes outcome=failed before exit 1, matching the address-review gate, so the issue-phase step summary reads outcome=failed rather than outcome=unknown.
  2. Softened the SKILL wording to "Do not skip a failing check by attributing it to the environment without evidence" — keeps the intent (no hand-waving a real failure as an env issue) without discouraging the agent from reporting a genuine infra failure. Good call on the suppress-risk.

@yiliang114 yiliang114 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 reviewed: coverage — could not read the agents' transcripts (the CLI did not export QWEN_CODE_PROJECT_DIR / QWEN_CODE_SESSION_ID, so this run cannot find the harness's record of what its agents did), so this run cannot show that any of the diff was read.

— GPT-5 via Qwen Code /review

Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml Outdated

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. Suggestions are inline. Unresolved, please confirm: [Critical] .github/workflows/qwen-autofix.yml:1497 — whether the schema freshness check should run before the no-op early return (design tradeoff: agent judgment vs. structural guard) [Critical] .github/workflows/qwen-autofix.yml:1039 — whether the head-commit-date fallback when createdAt is unavailable recreates the watermark-burial bug in a narrow API failure scenario

— qwen3.7-max via Qwen Code /review

Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml
…ble floor, robust handoff

Review round 3 (2 critical + 3 suggestions):

- Run the review gate's settings-schema freshness check BEFORE the no-op/
  unchanged return, so a stale-schema PR the agent wrongly no-ops fails
  (outcome=failed) instead of being reported as evaluated while CI stays red —
  the exact motivating bug. Single check now covers every path; ordering is
  asserted in the test.
- Never fall back to the mutable head commit date for the pre-first-eval
  watermark floor: if the PR metadata query fails, use an empty (over-inclusive,
  never-buries) floor. A base-sync HEAD as the floor would recreate the burial
  bug. Removes the now-unused HEAD_SHA lookup.
- Guard the terminal handoff marker's timestamp (MARK_TS=${NEWEST:-${WATERMARK:-unknown}})
  so a cascading API failure that blanks WATERMARK can't emit an unparseable
  `ts=` that the scan regex skips, defeating the terminal-round guard.
- Truncate failure.md through `iconv -f utf-8 -t utf-8 -c` so a byte-level
  head -c can't split a multi-byte sequence and corrupt the comment body.
- A pre-prepare crash (empty NEWEST) now says "could not start evaluation"
  instead of "round 5/5", which would imply MAX_ROUNDS attempts were made.

Workflow test: 49/49.
@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks — all addressed in 14dae37f4. These were genuinely good edge-case catches.

Critical

  • Schema check before the no-op return — moved the review gate's freshness check to run before the unchanged-branch/no-action return, so a stale-schema PR the agent wrongly no-actions now fails (outcome=failed) instead of being stamped as evaluated while CI stays red. Single check now covers every path; the ordering is asserted in the test.
  • No head-commit-date fallback — if the PR metadata query fails, the floor is now an empty (over-inclusive, never-buries) floor rather than the mutable head commit date, which as a base-sync HEAD would recreate the burial bug. Removed the now-unused HEAD_SHA lookup.

Suggestions

  • Guarded the terminal marker timestamp: MARK_TS="${NEWEST:-${WATERMARK:-unknown}}", so a cascading API failure can't emit an unparseable ts= that the scan regex skips (which would defeat the terminal-round guard).
  • head -c 1500 | iconv -f utf-8 -t utf-8 -c so a split multi-byte sequence can't corrupt the handoff body.
  • A pre-prepare crash now says "AutoFix could not start evaluation…" instead of "round 5/5", which wrongly implied MAX_ROUNDS attempts.

Workflow test now 49/49 with the added ordering + invariant assertions.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. Suggestions are inline.

— qwen3.7-max via Qwen Code /review

Comment thread scripts/tests/qwen-autofix-workflow.test.js
Comment thread scripts/tests/qwen-autofix-workflow.test.js
Comment thread scripts/tests/qwen-autofix-workflow.test.js
Comment thread .github/workflows/qwen-autofix.yml
Four review suggestions, test-only: assert the else-branch floor
(EFF_WM=${CREATED_WM}, not the old PUSH_WM), the staleness jq filter
(.startedAt // ... // $cut), the JOB_STATUS env declaration (else it is always
empty → over-eager handoffs), and the .name // .workflowName feedback format —
so a regression on any of these is caught rather than passing silently.
@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks — all four test-coverage gaps closed in 43e470737 (test-only):

  • Assert the else-branch floor EFF_WM="${CREATED_WM}" (not just the if-branch), so a regression restoring the old mutable PUSH_WM fallback is caught.
  • Assert the staleness jq filter .startedAt // .completedAt // .updatedAt // $cut, not just the PENDING_STALE_MIN=240 constant.
  • Assert the JOB_STATUS: '${{ job.status }}' env declaration, so its accidental removal (which would make JOB_STATUS always empty → always-true != success → over-eager handoffs) is caught.
  • Assert the .name // .workflowName failed-check format.

Test now 49/49 with these invariants pinned.

@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Review

Overview

Four coordinated changes to the autofix loop, all correctly aimed at the #6984 stall class: (A) the deterministic verify gates now mirror CI's settings-schema freshness check, (C) the agent gets the regeneration command in its allowlist plus explicit prompt guidance, (D) the scan watermark becomes eval-marker-based with the immutable PR createdAt as the pre-first-eval floor (so base-sync merges can't bury feedback), and (E) a failed review-address run always leaves a visible handoff + eval marker. Plus a 240-minute staleness bound so a dead pending check can't strand a PR, and an 80-minute step-level cap on the agent so the always() report step survives a runaway run.

Verification performed

  • Ran scripts/tests/qwen-autofix-workflow.test.js at the PR head: 49/49 pass (the body says 48 — the last commit added one more).
  • Replayed the watermark logic against the code: EFF_WM = EVAL_WM || CREATED_WM with no head-commit fallback matches the stated un-burial semantics; ROUND = max(.round) is coherent with terminal handoff markers, and the noop path still writes round=${ROUND} (unchanged), so redundant re-evaluations don't burn rounds.
  • Checked the env plumbing: ROUND/WATERMARK are job-level env from the matrix target and MAX_ROUNDS is workflow env, so the new report-step references all resolve; JOB_STATUS is declared (and the test asserts it, guarding the always-empty → always-handoff failure mode).
  • Confirmed the verify-gate check is byte-for-byte the same shape as CI's "Check settings schema is up-to-date" step, and that scripts/generate-settings-schema.ts really does read settingsSchema.ts/settings.ts via tsx, so the SKILL.md file references are accurate.
  • Inspected live gh pr view --json statusCheckRollup output for this repo (see finding 2).

Findings (none blocking)

1. MARK_TS fallback unknown can silently poison the watermark if MAX_ROUNDS is ever raised.
In the handoff marker, MARK_TS="${NEWEST:-${WATERMARK:-unknown}}"ts=unknown sorts lexicographically after every ISO date, so map(.ts) | max in the scan returns unknown and all future feedback compares > "unknown" = false → buried. Today this is masked because ts=unknown is always paired with round=MAX_ROUNDS and the round guard skips first. But if MAX_ROUNDS is ever bumped (5 → 10), those old terminal markers stop being terminal and the poisoned ts silently buries everything — exactly the failure mode this PR is eliminating. Suggest an epoch floor instead, e.g. 0001-01-01T00:00:00Z: it still matches the scan's ts=([^ ]+) regex, but errs over-inclusive (re-evaluate once) rather than burying, consistent with the PR's own "never bury" principle, and makes a future MAX_ROUNDS bump self-healing.

2. The pending-check // fallback chain is dead code — gh serializes unstarted times as 0001-01-01T00:00:00Z, not null.
Verified live on this repo: CheckRun entries always carry startedAt/completedAt, with the Go zero value (0001-01-01T00:00:00Z) when unstarted/incomplete, and there is no updatedAt field at all. So (.startedAt // .completedAt // .updatedAt // $cut) never falls through — the filter is effectively select(.startedAt > $cut), and every QUEUED/REQUESTED/WAITING check compares epoch < cutoff → never blocks, including a check queued 10 seconds ago. The net behavior matches the comment's intent for zombie checks, but two notes: (a) the comment says "a check with no startedAt" — that case never occurs; worth rewording so nobody "fixes" the chain later, and (b) this is a small behavior change vs. the old code (any pending blocked): a scan landing in the queue→start window can target a PR whose CI is about to report. The per-PR concurrency group prevents corruption, but a duplicate evaluation/comment is possible; worth acknowledging in the comment as an accepted tradeoff.

3. Review-gate schema regen can false-fail against a stale core dist.
In the review-address verify gate the regen runs right after git checkout "${BRANCH}", before any npm run build — the core dist present is the one built from the trusted base in the install step. tsx compiles the branch's settingsSchema.ts fresh, but its @qwen-code/qwen-code-core imports resolve to base-built dist. A branch that changes core exports consumed by settingsSchema.ts, combined with a no-op agent run (agent never rebuilt), makes the generator crash → step fails with no outcome → a handoff is posted for a healthy PR. It fails loud, not silent, so it's noise rather than a stall — but consider either running npm run build before the regen on that gate (costs minutes per no-op verify) or noting the edge in the comment. (The develop-fix gate is fine: it builds first.)

4. The timeout arithmetic is plausible but unproven.
80m agent cap + unbounded setup (checkout + npm ci + build + bundle, ~10–15m typical, more on cache miss) + unbounded verify (build, typecheck, lint, regen, changed vitest, ~10–20m) must fit under the 120m job timeout — a job-level timeout kills the always() report step, which is the silence being fixed. Worst-case it's ~118m. A timeout-minutes on the verify step (or a modest job-timeout bump) would make the headroom claim in the comment structural instead of statistical.

5. Pre-existing, follow-up material: the marker-spoof strip is bypassable.
sed 's/<!--[^>]*-->//g' doesn't strip a marker with > embedded in the ts field — verified: <!-- autofix-eval ts=2099>x acted=false round=99 --> survives the sed and still matches the scan's scan("<!-- autofix-eval ts=([^ ]+) …") (yields ["2099>x","false","99"]). Since the handoff comment is posted by the bot account, the scan trusts it: an injected failure.md could retire a PR (round=99) or bury future feedback. This predates the PR (and the success path cats address-summary.md into bot comments with no stripping at all), so not a blocker here — but since this PR hardens loop integrity, a follow-up that strips residual <!-- from everything cat'd into bot comments (e.g. sed 's/<!--[^>]*-->//g; s/<!--//g') would close it.

Quality notes

  • The contract test extracting the actual POST_HANDOFF / MARK_ROUND bash from the workflow and replaying it under real bash is a genuinely good pattern — the truth table (fixed/noop suppression under job failure, dry-run, pre-prepare crash → terminal round) is exercised, not string-matched.
  • The NEWEST=${WATERMARK} fallback inside prepare means an empty NEWEST in the report step really does identify "crashed before prepare", so the terminal-round branch fires only when intended.
  • head -c 1500 | iconv -f utf-8 -t utf-8 -c for UTF-8-safe truncation is correct, and preferring failure.md over the handoff.md wrapper puts the actionable diagnosis in front of the maintainer.
  • .name // .workflowName in the failed-check rendering directly serves the "a check named Test can fail on a non-test step" guidance in SKILL.md.
  • Known tradeoff worth stating for the record: with EFF_WM = EVAL_WM, feedback a human already addressed by pushing their own fix gets one redundant bot evaluation (old code buried it under the push watermark). That's the right direction — it's a no-op round and doesn't increment the round counter.

Verdict: solid, carefully reasoned fix for a real operational failure mode; the four changes compose coherently and the test coverage is unusually strong for CI shell logic. Findings above are suggestions and hardening follow-ups, not blockers.

Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread scripts/tests/qwen-autofix-workflow.test.js Outdated
@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Re-review at 6e39e43 (follow-up to round 1 and round 2)

The blocker is resolved, and every open finding is now either fixed or explicitly pinned in tests. LGTM.

Blocker resolution — verified

The schema gates are back on the version-agnostic regenerate + git status --porcelain compare (option A). I verified at 6e39e43:

  • Both gate invocations are plain npm run generate:settings-schema; --check survives only inside comments — as the documented thing not to use, naming revert: remove local PR verification gate #7031 and the fail-open failure mode. Post-merge behavior no longer depends on which generator version main ships.
  • The contract test now carries the negative guard expect(step).not.toContain('generate:settings-schema -- --check'), so the reverted-flag dependency can't be reintroduced without a red test — exactly the drift-guard round 2 asked for.
  • Nice touch beyond the original round-1 gate: git checkout -- "${SCHEMA_FILE}" || true restores the tree on the failure path before exit 1, so a failed gate doesn't leave a dirty regenerated artifact behind.

Previous findings — final status

# Finding Status
Blocker --check reverted from main → gates fail-open after merge Fixed — version-agnostic gate + in-file rationale + negative test assertion.
2 No-startedAt pending checks never block Pinned in tests — the new jq behavioral replay executes the actual extracted filter with three labeled cases (recent start → blocks; stale start → aged out; queued/no startedAt → does not block). The trade-off is now executable documentation, which is better than the comment I asked for.
3 Terminal-marker recovery undocumented ✅ Fixed in 1acbd08, unchanged here.
4 Misleading "crashed or timed out" fallback ✅ Fixed in 1acbd08, unchanged here.
1 Review-address gate regenerates against the base-built core dist Accepted residual — still not named in the gate comment, but it's a narrow edge (only bites when a bot PR changes a core export that feeds the schema and the agent never ran npm run build), and it fails toward a handoff, not a silent pass. Fine to ship as-is; no further action requested.

New-code check (this delta)

I looked for fresh issues in the round-3 changes and found none worth raising: the jq-replay extraction regex anchors on the only --arg cut call site (and a wrong extraction would fail the toBe assertions rather than pass vacuously); execFileSync('jq', …) is safe on every environment that already runs this file's bash replays (GitHub-hosted runners ship jq); the restore-on-failure git checkout -- is correctly scoped to the tracked schema file.

Verification performed

  • Contract test at 6e39e43 in a clean detached worktree: 49/49 pass.
  • Grepped the head workflow for --check/generate:settings-schema: all invocations plain, references to --check are comment-only.
  • Confirmed the delta touches exactly .github/workflows/qwen-autofix.yml and scripts/tests/qwen-autofix-workflow.test.js; gates match CI's ci.yml step semantics plus the restore.

Verdict

Approve. The loop-hardening design from round 1 stands, the round-2 regression is cleanly reverted with a guard against recurrence, and the pending-staleness semantics are now behaviorally tested. One housekeeping note: the PR body still says the contract test passes 48/48 — it's 49/49 at head.

中文版(Chinese translation)

6e39e43 上的重审(接续第 1、2 轮)

阻塞项已解决,所有遗留发现均已修复或以测试形式钉住。LGTM。

阻塞项解决 — 已验证

schema gate 回到了与版本无关的 regenerate + git status --porcelain 对比(选项 A)。在 6e39e43 上验证:

  • 两处 gate 调用均为普通 npm run generate:settings-schema;--check 只出现在注释中——作为被记录的不可使用项,并写明 revert: remove local PR verification gate #7031 与 fail-open 失效模式。合并后的行为不再依赖 main 上 generator 的版本。
  • 契约测试新增负向断言 not.toContain('generate:settings-schema -- --check'),被 revert 的参数依赖若再被引入会直接红测——正是第 2 轮要求的防漂移守卫。
  • 比第 1 轮原始 gate 更进一步:失败路径上 git checkout -- "${SCHEMA_FILE}" || trueexit 1 前恢复工作树,gate 失败不再留下脏的再生成产物。

此前发现 — 最终状态

# 发现 状态
阻塞 --check 已从 main revert → 合并后 gate fail-open 已修复——版本无关的 gate + 文件内说明 + 负向测试断言。
2 startedAt 的 pending 检查不再阻塞 已在测试中钉住——新的 jq 行为回放执行真实提取的过滤器,覆盖三种情形(新近启动→阻塞;超期→老化剔除;排队未启动→不阻塞)。该权衡现在是可执行的文档,比我要求的注释更好。
3 终局标记恢复方式未写明 1acbd08 已修复,本轮无变化。
4 误报"崩溃或超时"的兜底文案 1acbd08 已修复,本轮无变化。
1 review-address gate 用 base 构建的 core dist 再生成 接受为残留——gate 注释仍未点名,但这是窄边缘(仅当 bot PR 改动影响 schema 的 core 导出 agent 从未跑过 npm run build 时才触发),且失败方向是交接而非静默放行。可按现状合并,不再要求处理。

本轮新代码检查

对第 3 轮改动查找新问题,无值得提出的:jq 回放的提取正则锚定唯一的 --arg cut 调用点(提取错误会使 toBe 断言失败而非空过);execFileSync('jq', …) 在所有已运行本文件 bash 回放的环境上都可用(GitHub 托管 runner 自带 jq);失败恢复的 git checkout -- 正确限定在被跟踪的 schema 文件上。

已执行的验证

  • 6e39e43 干净 detached worktree 中契约测试 49/49 通过
  • grep head 工作流中的 --check/generate:settings-schema:所有调用均为普通形式,--check 仅存在于注释。
  • 确认 delta 仅涉及 .github/workflows/qwen-autofix.ymlscripts/tests/qwen-autofix-workflow.test.js;gate 语义与 ci.yml 步骤一致并附恢复逻辑。

结论

批准。第 1 轮的回路加固设计成立,第 2 轮的回归被干净回退并加了防复发守卫,pending-staleness 语义现有行为级测试。一条整理性备注:PR 描述仍写契约测试 48/48,head 实际为 49/49。

Comment thread .github/workflows/qwen-autofix.yml Outdated
Comment thread .github/workflows/qwen-autofix.yml Outdated
…ashes

Both verify gates ran the generator unguarded: if it crashes (e.g. a type error
the agent introduced in the schema source), set -eo pipefail aborts the step
before outcome=failed is written, leaving OUTCOME unset (the handoff still fires
via job.status, but the outcome is inferred rather than explicit). Wrap the
generator in `if ! ...; then outcome=failed; exit 1; fi` so the failure is
explicit and does not depend on the job.status fallback. Test asserts the guard.
@wenshao

wenshao commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks — both gates hardened in the latest commit:

Wrapped the generator in if ! npm run generate:settings-schema; then echo "outcome=failed" >> "$GITHUB_OUTPUT"; exit 1; fi in both verify gates. If the generator itself crashes (e.g. a type error the agent introduced in the schema source), set -eo pipefail no longer aborts the step before outcome=failed is written — so the outcome is explicit rather than inferred from job.status. Test asserts the guard in both gates.

49/49.

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

— qwen3.7-max via Qwen Code /review

Comment thread .github/workflows/qwen-autofix.yml Outdated
@wenshao

wenshao commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

doudouOUC
doudouOUC previously approved these changes Jul 17, 2026

@doudouOUC doudouOUC 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✅

Address review: the 16-line schema-freshness gate (generator crash
guard, porcelain check, restore, outcome=failed) was duplicated verbatim
between the issue-fix verify step and the triage-and-address verify
step, so an edit to either copy could silently diverge from the other.
Move it to .github/scripts/check-settings-schema.sh and call it from
both sites; the site-specific rationale comments stay at the call sites,
the shared mechanics and the crash-guard rationale live in the script.

The script preserves the exact step contract, verified with a PATH-shim
harness over a temp git repo: generator ok + fresh schema exits 0 with
no output written; a generator crash writes outcome=failed to
GITHUB_OUTPUT and exits 1; a stale schema prints the diff, restores the
file, writes outcome=failed, and exits 1.
wenshao and others added 2 commits July 17, 2026 09:31
…-check script

The main-merge extracted the inline schema-freshness block into the shared
.github/scripts/check-settings-schema.sh (both verify gates now invoke it), which
broke the test that asserted the inline generate/porcelain strings in the step.
Assert the step invokes the script and that the SCRIPT holds the logic
(regenerate, crash guard, git status --porcelain, no --check, outcome=failed),
and that the review gate's script call precedes the no-op return.
@wenshao

wenshao commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

No issues found. LGTM! ✅

— qwen3.7-max via Qwen Code /review

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Thanks for the PR!

Template looks good ✓

Problem: observed bug — the autofix bot stalled on #6984 with clear evidence: settings schema source was edited without regenerating the committed artifact, CI's freshness gate went red, and the bot could neither fix it (command not in allowlist), detect it (invisible to build/typecheck/lint/vitest), nor report it (went silent). A maintainer's follow-up comments were also buried by a base-sync merge advancing the watermark past them.

Direction: aligned — autofix loop reliability is core to the bot's mission. Closing these silent-stall failure modes directly improves the autonomous repair cycle that maintainers depend on.

Size: ~267 production logic lines (additions + deletions across .github/scripts/check-settings-schema.sh, .github/workflows/qwen-autofix.yml, .qwen/skills/autofix/SKILL.md) + 199 test lines (scripts/tests/qwen-autofix-workflow.test.js). No core module paths touched — all changes are in CI workflow, agent prompt, and contract tests.

Approach: the four coordinated changes each close a specific, named gap in the failure loop — agent tooling (C), deterministic verify gate (A), watermark redesign (D), and handoff guarantee (E). The extracted check-settings-schema.sh shared script is a nice touch that prevents the two verify gates from drifting apart. Scope feels right — nothing here that isn't needed for the stated goal.

Moving on to code review. 🔍

中文说明

感谢贡献!

模板完整 ✓

问题:已观测到的 bug——autofix bot 在 #6984 上卡死,证据清晰:修改了 settings schema 源码却没有重新生成已提交产物,CI 新鲜度 gate 变红,而 bot 既修不了(命令不在白名单)、也检测不到(对 build/typecheck/lint/vitest 隐形)、也无法报告(静默失联)。维护者的后续评论还被基线同步合并推进水位线而埋掉。

方向:对齐——autofix 回路可靠性是 bot 使命的核心。闭合这些静默卡死的失败模式直接改善了维护者依赖的自主修复循环。

规模:约 267 行生产逻辑代码(.github/scripts/check-settings-schema.sh.github/workflows/qwen-autofix.yml.qwen/skills/autofix/SKILL.md 的增删)+ 199 行测试代码(scripts/tests/qwen-autofix-workflow.test.js)。未触及核心模块路径——全部改动在 CI 工作流、agent prompt 和契约测试中。

方案:四处协同改动各自闭合失败回路中一个具体的、已命名的缺口——agent 工具(C)、确定性 verify gate(A)、水位线重设计(D)、交接保证(E)。提取的 check-settings-schema.sh 共享脚本防止两个 verify gate 漂移,是个好设计。范围合理——没有多余的东西。

进入代码审查 🔍

Qwen Code · qwen3.7-max

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Code Review

Independent proposal before reading the diff: I'd have added generate:settings-schema to the agent's tool allowlist and both verify gates, used regenerate + git diff to mirror CI's freshness check, switched the watermark to rely on the bot's eval marker timestamp instead of push dates, and ensured every exit path writes a visible handoff comment.

The PR matches and exceeds that proposal. The extracted check-settings-schema.sh shared script is better than duplicating the gate inline — it structurally prevents the two verify gates from drifting apart. The version-agnostic approach (regenerate + git status --porcelain, not --check) is correct: the --check flag was reverted from main by #7031, and this PR's gates work with any generator version. The generator crash guard (if ! npm run generate:settings-schema; then ... fail; fi) catches a class of silent failures that set -eo pipefail in the caller would otherwise turn into an unset OUTCOME.

The watermark redesign is clean: EFF_WM = EVAL_WM (what the bot actually evaluated) with CREATED_WM as the pre-first-eval floor. The immutable createdAt is the right choice — a base-sync merge can never bury maintainer comments. The failed-metadata-fetch path correctly skips the candidate instead of falling through to git checkout -B "" origin/.

The handoff decision matrix (POST_HANDOFF) correctly suppresses contradictory handoffs when OUTCOME is already fixed or noop — a late always() step failure (e.g., artifact upload) can't contradict a published result. The terminal-marker design with MARK_ROUND=MAX_ROUNDS + sentinel timestamp 9999-12-31T23:59:59Z prevents both the scan re-targeting and the regex-mismatch edge cases.

The SKILL.md additions are well-scoped: generated-artifact rule, CI failure diagnosis from evidence, and no environment-attribution-without-evidence rule. Each directly addresses the failure mode from #6984.

No critical findings. No AGENTS.md violations. The code is straightforward, well-commented where the why is non-obvious (the --check revert rationale, the iconv -c || true necessity under set -eo pipefail), and the contract test provides behavioral coverage beyond string matching — jq filter replay, bash handoff-decision replay, and terminal-round transitions are all exercised under real interpreters.

Verification

Contract test at a187d00: 49/49 pass (ran in clean detached worktree). YAML parses clean. bash -n passes on check-settings-schema.sh.

One housekeeping nit: the PR body still says the contract test passes 48/48 — it's 49/49 at head.

中文说明

代码审查

读 diff 前的独立方案:把 generate:settings-schema 加入 agent 工具白名单和两个 verify gate,用 regenerate + git diff 镜像 CI 的新鲜度检查,把水位线改为依赖 bot 的 eval 标记时间戳而非 push 日期,确保每条退出路径都写可见交接评论。

PR 匹配并超越了该方案。提取的 check-settings-schema.sh 共享脚本优于内联复制——结构性地防止两个 verify gate 漂移。版本无关的做法(regenerate + git status --porcelain,而非 --check)是正确的:--check 已被 #7031 从 main revert,本 PR 的 gate 对任何版本的 generator 都成立。generator 崩溃守卫捕获了调用方 set -eo pipefail 下 OUTCOME 未设置的静默失败。

水位线重设计干净:EFF_WM = EVAL_WM(bot 实际评估过的),CREATED_WM 作为首评前地板。不可变的 createdAt 是正确选择——基线同步合并永远不会埋掉维护者评论。元数据获取失败路径正确跳过候选项,而非落入 git checkout -B "" origin/

交接决策矩阵在 OUTCOME 已为 fixed/noop 时正确抑制矛盾交接。终局标记设计用 MARK_ROUND=MAX_ROUNDS + 哨兵时间戳同时防止扫描重新定位和正则不匹配边缘情况。

SKILL.md 新增内容范围合理,每条都直接对应 #6984 的失败模式。

无阻塞性发现。无 AGENTS.md 违规。代码简洁,在 why 非显而易见的地方注释充分(--check revert 原因、iconv -c || trueset -eo pipefail 下的必要性),契约测试提供了超越字符串匹配的行为级覆盖。

验证

a187d00 上契约测试:49/49 通过(干净 detached worktree 中运行)。YAML 解析正确。bash -n 通过。

一条整理性备注:PR 描述仍写契约测试 48/48,head 实际为 49/49。

Qwen Code · qwen3.7-max

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Confidence: 5/5 — clean across every stage, would merge without hesitation.

This is a well-reasoned hardening of the autofix loop, motivated by a real stall incident (#6984) and backed by unusually strong test coverage for a workflow file. The four changes form a coherent fix: each closes a specific gap in the failure loop, and together they make the bot resilient to an entire class of silent-stall failures (stale generated artifacts) rather than just the one instance that triggered it.

The PR went through three rounds of iterative review before this triage run, and every finding — including a blocking --check dependency issue caught in round 2 — was resolved cleanly with tests. The final check-settings-schema.sh extraction in the latest commit is a clean improvement: two verify gates can no longer drift apart, the generator crash guard makes failures explicit, and the script documents the --check revert rationale for future maintainers.

The watermark redesign is the standout change — switching from mutable push dates to the bot's own eval markers (with immutable createdAt as the floor) is both correct and elegant. It directly fixes the buried-feedback problem without introducing new complexity.

Approval guardrail check: not a fork PR, not a refactor — no block.

Approving.

中文说明

Confidence: 5/5 — 各阶段均通过,毫不犹豫批准。

这是一次论证充分的 autofix 回路加固,由真实的卡死事件(#6984)驱动,对一个 workflow 文件而言测试覆盖异常强。四处改动构成一个连贯的修复:各自闭合失败回路中的一个具体缺口,合在一起让 bot 对一整类静默卡死失败(过期的生成产物)具备韧性,而不仅仅是触发它的那一个实例。

PR 在本次 triage 之前经历了三轮迭代审查,每一个发现——包括第 2 轮捕获的阻塞性 --check 依赖问题——都被干净地解决并附了测试。最新 commit 中提取的 check-settings-schema.sh 是干净的改进:两个 verify gate 不再可能漂移,generator 崩溃守卫使失败显式化,脚本为未来的维护者记录了 --check revert 的原因。

水位线重设计是亮点——从可变的 push 日期切换到 bot 自己的 eval 标记(以不可变的 createdAt 作为地板),既正确又优雅。直接修复了反馈被埋的问题而不引入新的复杂度。

批准守卫检查:非 fork PR,非 refactor——无阻塞。

批准。

Qwen Code · qwen3.7-max

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

LGTM, looks ready to ship. ✅

@doudouOUC
doudouOUC requested a review from Copilot July 17, 2026 03:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

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

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants