Skip to content

feat(review): prove Step 4 (verify) and Step 5 (reverse audit) actually ran - #6965

Merged
wenshao merged 4 commits into
mainfrom
feat/review-step45-coverage
Jul 15, 2026
Merged

feat(review): prove Step 4 (verify) and Step 5 (reverse audit) actually ran#6965
wenshao merged 4 commits into
mainfrom
feat/review-step45-coverage

Conversation

@wenshao

@wenshao wenshao commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Closes the last hole in the /review skill's coverage story. check-coverage (#6771) proves Step 3 was done, from the harness's own per-agent transcripts. But it runs at Step 3D — before Step 4 (verify) and Step 5 (reverse audit) exist — so its roster never reaches them, and a run could skip either step wholesale, or launch agents that never opened their brief, and nothing would see it. This adds verificationGaps, called by compose-review (which runs only at high effort, the only effort at which verify and reverse audit run at all), to prove those two steps ran the same way check-coverage proves Step 3: from the intersection of the prompt the CLI recorded building and the harness's transcript of an agent that ran it and read the brief.

A missing step is named in unreviewedDimensions and caps the verdict exactly like a dimension nobody reviewed: an Approve drops to Comment, the gap is disclosed in the review body, and the findings still post. Nothing is passed in and nothing turns it off.

Why it's needed

Follow-up to #6892 and #6942, which moved the Step 3/4/5 agent prompts into code so the review can no longer drift. This closes the loop: those prompts existing in code does not prove the agents ran. The two steps this checks are the ones whose omission is most costly and least visible — the reverse audit is the pass that looks for what Step 3 missed, so a clean, zero-finding review that skips it and approves is exactly the silent failure the whole coverage gate was built to stop, one pipeline stage later. Their agent count is not derivable from the plan (verify shards on the finding count; the reverse audit loops until it goes dry), so there is no exact roster — but there is a decidable floor: at least one reverse auditor on every high-effort review, and at least one verifier once the review has findings to verify.

Reviewer Test Plan

How to verify

cd packages/cli && npx vitest run src/commands/review → 605 passing (29 files); npx tsc --noEmit -p packages/cli/tsconfig.json filtered to commands/review → clean. The new behavior is exercised by fixture-driven tests that write real transcript and prompt-record files: verificationGaps over a reverse audit that ran / was skipped / was built but whose agent never opened its brief / a 3B per-chunk auditor, and a verifier required-when-findings / not-when-clean / brief-unread; plus compose-review integration proving the gap caps the verdict and is disclosed in the body.

Evidence (Before & After)

Non-UI change (a coverage computation and a verdict cap), so no screenshots. Behaviorally: before, a high-effort review that never launched a reverse auditor could compose an Approve; after, compose-review caps it to Comment with Not reviewed: reverse audit — no auditor ran (…) in the body. A review posting findings with no verifier now discloses verification — the review posts findings, but no verifier ran.

Tested on

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

Environment (optional)

Linux; npx vitest / npx tsc. The review vitest suite runs against src (no core dist dependency).

Risk & Scope

  • Main risk or tradeoff: confined to the /review skill — one new function in lib/coverage.ts and one call in compose-review.ts; check-coverage (Step 3D) is untouched, so nothing changes before Step 4/5. The verify floor counts the anchored findings plus non-deterministic body Criticals, and excludes deterministic [build]/[test] findings (pre-confirmed, skip verification by design) — so a real unanchorable Critical is required to have a verifier, while a [build]-only review is not. The residual edge (fails open, disclosure-only): inline finding counts are bare numbers, so a review whose only inline findings are pre-confirmed [test] Suggestions would get a spurious "not verified" disclosure — it can never move the event. The reverse-audit floor (unconditional at high effort) always applies.
  • Not validated / out of scope: per-chunk completeness of a Step 3B reverse audit — the floor is one auditor (the step was not skipped wholesale); per-chunk/per-round coverage remains the orchestrator's Step 5 loop contract, disclosed via unreviewedDimensions when a scope is left outstanding.
  • Breaking changes / migration notes: none. Additive to the verdict computation; low/medium quick-pass reviews emit no verdict and never reach this.

Linked Issues

Follow-up to #6892 and #6942 (no issue to close).

中文说明

这个 PR 做了什么

补上 /review skill 覆盖率故事的最后一个洞。check-coverage(#6771)从 harness 自己的 per-agent transcript 证明 Step 3 做了。但它在 Step 3D 运行——早于 Step 4(verify)和 Step 5(reverse audit)存在——所以它的 roster 够不到这两步,一个 run 可以整步跳过 Step 4/5,或启动从不打开 brief 的 agent,而无人能察觉。本 PR 加 verificationGaps,由 compose-review(只在 high effort 运行,而 verify/reverse-audit 也只在 high effort 存在)调用,用和 check-coverage 证明 Step 3 相同的方式证明这两步跑了:CLI 记录构建的 prompt 与 harness 中「某 agent 用它启动并读了 brief」的 transcript 的交集。

缺失的步骤会被写进 unreviewedDimensions,像「无人审查的维度」一样 cap 判定:Approve 降为 Comment,body 里披露缺口,findings 照发。不传参、无法关闭。

为什么需要

#6892#6942 的后续——那两个 PR 把 Step 3/4/5 的 agent prompt 搬进代码,让审查不再漂移。这个 PR 闭环:prompt 在代码里,不代表 agent 跑了。这里检查的两步,是「遗漏代价最大、最难看见」的:reverse audit 是寻找 Step 3 漏掉之物的那一遍,所以一个零发现的 clean review 跳过它就 Approve,正是整个覆盖率 gate 要拦的静默失败,只是晚了一个流水线阶段。它们的 agent 数量无法从 plan 推出(verify 按发现数分片;reverse audit 循环到枯竭),所以没有精确 roster——但有可判定的下限:每个 high-effort review 至少一个 reverse auditor,有 findings 时至少一个 verifier。

Reviewer 测试计划

如何验证

cd packages/cli && npx vitest run src/commands/review → 605 通过(29 文件);npx tsc --noEmit -p packages/cli/tsconfig.json 过滤到 commands/review → 干净。新行为由 fixture 驱动的测试覆盖(真实写出 transcript 和 prompt-record 文件):verificationGaps 对 reverse audit 跑了 / 被跳过 / 构建了但 agent 没打开 brief / 3B per-chunk auditor,以及 verifier 有发现时必需 / 无发现时不必需 / brief 未读;外加 compose-review 集成测试证明缺口 cap 判定并在 body 披露。

证据(前后对比)

非 UI 改动(覆盖率计算 + 判定 cap),无截图。行为上:之前,一个从未启动 reverse auditor 的 high-effort review 能组成 Approve;之后,compose-review 把它 cap 成 Comment,body 含 Not reviewed: reverse audit — no auditor ran (…)。发 findings 却无 verifier 的 review 现在披露 verification — the review posts findings, but no verifier ran

测试平台

操作系统 状态
🍏 macOS ⚠️ 未测试(CI)
🪟 Windows ⚠️ 未测试(CI)
🐧 Linux ✅ 已测试

环境(可选)

Linux;npx vitest / npx tsc。review vitest 套件跑 src(不依赖 core dist)。

风险与范围

  • 主要风险或取舍:局限于 /review skill——lib/coverage.ts 一个新函数 + compose-review.ts 一处调用;check-coverage(Step 3D)不动,Step 4/5 之前的一切不变。verify 下限 = 已锚定发现 + 非确定性 body Criticals,排除确定性 [build]/[test](预确认、按设计跳过验证)——所以真·不可锚定 Critical 会要求 verifier,而 [build]-only 的 review 不会。残留边界(fail-open、仅披露):inline 计数是裸数字,「唯一 inline 发现是预确认 [test] Suggestion」的 review 会收到一句多余的「未验证」披露——但它永远不改变 event。reverse-audit 下限(high effort 无条件)始终生效。
  • 未验证 / 不在范围:Step 3B reverse audit 的 per-chunk 完整性——下限是一个 auditor(证明该步没被整步跳过);per-chunk/per-round 覆盖仍是 orchestrator 的 Step 5 循环契约,有 scope 遗留时经 unreviewedDimensions 披露。
  • 破坏性变更 / 迁移:无。对判定计算是增量;low/medium 快速通道不出判定,永不到达此处。

关联 Issue

#6892#6942 的后续(无需关闭的 issue)。

…ly ran

`check-coverage` proves Step 3 was done, from the harness's own transcripts. But it
runs at Step 3D — before verify and reverse audit exist — so its roster never reaches
them, and a run could skip Step 4 or Step 5 wholesale, or launch agents that never
opened their brief, and nothing would see it. That is the same silent-omission failure
the coverage gate was built for, one pipeline stage later.

Their count is not in the plan (verify shards on the finding count; the reverse audit
loops until it goes dry), so there is no exact roster to check. What there is is a
floor, and `compose-review` is the place to check it: it runs only at high effort —
the only effort at which verify and reverse audit run at all — and it already
recomputes coverage from the transcripts on the way to the verdict.

`verificationGaps` asks two questions of the same records:

- **Reverse audit** — required on every high-effort review, because it is the pass
  that looks for what Step 3 missed, and a verdict that never ran it cannot certify
  the diff complete, least of all a clean one. At least one auditor must have run and
  opened its brief (3A records it under `reverse-audit`, 3B under
  `reverse-audit--chunk-N`).
- **Verify** — required once the review has findings, because an unverified finding
  must not become a public blocker. Keyed to inline findings: a review that confirmed
  nothing has nothing to verify, and deterministic `[build]`/`[test]` findings are
  pre-confirmed and skip verification by design.

A gap is named in `unreviewedDimensions` and caps the verdict exactly like a dimension
nobody reviewed — an Approve drops to Comment, the gap is disclosed in the body, the
findings still post. The highest-value catch is a clean, zero-finding review that
never ran its reverse audit and would otherwise have approved. Nothing is passed in
and nothing can turn it off: the proof is the intersection of the prompt the CLI
recorded building and the harness's transcript of an agent that ran it and read the
brief — two artifacts, neither authored by the orchestrator.

Tests: verificationGaps over real transcript/record fixtures (reverse audit ran /
skipped / built-but-brief-unread / 3B per-chunk key; verify required-when-findings /
not-when-clean / brief-unread), and compose-review integration (the cap reaches the
verdict and the body).
@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Thanks for the PR!

Template looks good ✓

Problem: observed and well-documented. The coverage pipeline (check-coverage from #6771) proves Step 3 ran, but runs at Step 3D — before Steps 4/5 exist — so their omission is invisible. This is a real gap in an ongoing series (#6892, #6942) that has been systematically making the review pipeline provably complete. The failure mode is concrete: a zero-finding high-effort review that skips the reverse audit and approves is the exact silent failure the coverage gate was built to stop.

Direction: aligned. This is internal review-quality infrastructure — making the /review skill's pipeline verifiably complete. Not user-facing, but directly improves the reliability of automated reviews the tool produces.

Size: 5 files changed. Production logic: ~114 lines (compose-review.ts +13, lib/coverage.ts +101). Tests: ~217 lines (excluded from production count). packages/core/src/skills/bundled/review/SKILL.md is documentation only — describes the new behavior. Cross-package touch (cli + core) is the doc update in core. No size flags triggered.

Approach: minimal and consistent with the existing pattern. verificationGaps reuses the same transcript/prompt-record intersection proof as check-coveragereadPlan, readTranscripts, readRecordedPrompts, wasDeliveredVerbatim, briefPath. One function, one call site, the floor is deliberately "at least one agent per step." The verify floor keyed to inline findings (not total) correctly avoids false-capping reviews with only pre-confirmed [build]/[test] findings.

Moving on to code review. 🔍

中文说明

感谢贡献!

模板完整 ✓

问题:已观测到的真实缺口。覆盖率管线(#6771check-coverage)证明 Step 3 跑了,但它在 Step 3D 运行——早于 Step 4/5 存在——所以这两步的遗漏不可见。这是 ongoing 系列(#6892#6942)中让审查管线可证明完整的真实缺口。失败模式很具体:一个零发现的 high-effort review 跳过 reverse audit 就 Approve,正是覆盖率 gate 要拦的静默失败。

方向:对齐。这是内部审查质量基础设施——让 /review skill 的管线可验证地完整。非用户可见,但直接提升了工具产出的自动审查的可靠性。

规模:5 个文件变更。生产逻辑:~114 行(compose-review.ts +13,lib/coverage.ts +101)。测试:~217 行(不计入生产行数)。packages/core/src/skills/bundled/review/SKILL.md 仅为文档更新。跨包触及(cli + core)是 core 中的文档更新。无规模 flag 触发。

方案:最小化且与现有模式一致。verificationGaps 复用与 check-coverage 相同的 transcript/prompt-record 交集证明。一个函数,一个调用点,下限刻意设为"每步至少一个 agent"。verify 下限以 inline findings 为准(而非全部),正确避免误 cap 仅有预确认 [build]/[test] 发现的 review。

进入代码审查 🔍

Qwen Code · qwen3.7-max

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Code review: clean. verificationGaps is built entirely on existing infrastructure (readPlan, readTranscripts, readRecordedPrompts, wasDeliveredVerbatim, briefPath) — same two-author proof pattern as check-coverage, asked of a key rather than a plan-derived role. The integration point in compose-review.ts drops gaps into the existing unreviewed array, so they cap the verdict through the same path as every other missing dimension. No critical issues, no security concerns, no reuse violations.

The ranAndReadBrief closure is tight: checks that the prompt was built (non-empty), delivered verbatim to an agent, and the agent opened the brief. The reverse-audit key matching (reverse-audit or reverse-audit--chunk-N) correctly handles both 3A and 3B topologies with a floor of one. The verify floor keyed to criticalsInline + suggestionsInline > 0 correctly avoids false-capping reviews with no findings.

The test updates are well-considered: plan() now defaults to including Step 4/5 fixtures (so "a complete review" means complete), and coveredPlan() accepts a step45Keys parameter for targeted gap scenarios.

Test results:

Test Files  29 passed (29)
     Tests  605 passed (605)
  Duration  18.07s
npx tsc --noEmit -p packages/cli/tsconfig.json → clean (exit 0)

All 605 tests pass across 29 test files, matching the PR's claim. TypeScript typecheck is clean.

中文说明

代码审查: 干净。verificationGaps 完全构建在现有基础设施上(readPlanreadTranscriptsreadRecordedPromptswasDeliveredVerbatimbriefPath)——与 check-coverage 相同的双作者证明模式,只是针对 key 而非 plan 派生的角色。compose-review.ts 中的集成点将 gaps 放入现有的 unreviewed 数组,因此它们通过与所有其他缺失维度相同的路径来 cap 判定。无关键问题、无安全隐患、无复用违规。

ranAndReadBrief 闭包严谨:检查 prompt 已构建(非空)、逐字交付给 agent、且 agent 打开了 brief。reverse-audit key 匹配(reverse-auditreverse-audit--chunk-N)正确处理 3A 和 3B 拓扑,下限为 1。verify 下限以 criticalsInline + suggestionsInline > 0 为准,正确避免误 cap 无发现的 review。

测试更新考虑周全:plan() 现在默认包含 Step 4/5 fixture(所以"完整的 review"意味着真正完整),coveredPlan() 接受 step45Keys 参数用于定向 gap 场景。

测试结果: 605 个测试全部通过(29 个测试文件),与 PR 声明一致。TypeScript 类型检查干净。

Qwen Code · qwen3.7-max

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Confidence: 5/5 — Clean across every stage. The problem is a documented gap in an ongoing series, the solution is one function and one call site built entirely on existing infrastructure, 605 tests pass, typecheck is clean.

This is the kind of PR that makes a pipeline trustworthy. check-coverage proved Step 3 ran; this extends the same proof to Steps 4 and 5 through the same two-author intersection (recorded prompt × transcript showing the agent opened its brief). The floor is deliberately minimal — one agent per step — which is exactly the right granularity for the failure it catches: a step skipped wholesale, or an agent that ran but never read its brief. The verify floor correctly keys to inline findings, avoiding false caps on reviews with only pre-confirmed [build]/[test] findings.

The test suite is thorough: fixture-driven tests covering ran/skipped/built-but-not-launched/brief-unread for both steps, per-chunk reverse auditor recognition, and compose-review integration tests proving the gap caps the verdict and discloses it in the body. The plan() and coveredPlan() helper updates are well-considered — "a complete review" now means one that actually ran all its steps.

No concerns. Ships the feature cleanly, the before/after behavior matches what the PR promised, and the code is straightforward enough that a future maintainer won't need the author to explain it.

中文说明

信心:5/5 — 每个阶段都干净。问题是 ongoing 系列中有记录的缺口,方案是一个函数和一个调用点,完全构建在现有基础设施上,605 个测试通过,类型检查干净。

这是让管线值得信赖的那种 PR。check-coverage 证明 Step 3 跑了;这个通过相同的双作者交集(记录的 prompt × 显示 agent 打开了 brief 的 transcript)将同样的证明扩展到 Step 4 和 5。下限刻意最小化——每步一个 agent——这正是它要捕获的失败的正确粒度:整步跳过,或 agent 跑了但从没读 brief。verify 下限正确地以 inline findings 为准,避免对仅有预确认 [build]/[test] 发现的 review 误 cap。

测试套件全面:fixture 驱动的测试覆盖了两步的跑了/跳过/构建但未启动/brief 未读场景,per-chunk reverse auditor 识别,以及 compose-review 集成测试证明 gap cap 判定并在 body 中披露。plan()coveredPlan() helper 更新考虑周全——"完整的 review"现在意味着真正跑了所有步骤的 review。

无顾虑。干净地交付了功能,before/after 行为与 PR 承诺一致,代码足够直接,未来维护者不需要作者解释。

Qwen Code · qwen3.7-max

Reviewed at fa6c01bf82a94ae906cd17d76c0a18fe1c133c99 · 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 15, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 81.59% 81.59% 87.36% 81.95%
Core 86.51% 86.51% 87.96% 85.69%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   81.59 |    81.95 |   87.36 |   81.59 |                   
 src               |   80.55 |    78.21 |   84.81 |   80.55 |                   
  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 |    77.4 |    75.54 |      75 |    77.4 | ...2054-2056,2093 
  ...liCommands.ts |   88.34 |    83.87 |      90 |   88.34 | ...63,480,514,635 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   62.86 |    68.26 |   85.43 |   62.86 |                   
  acpAgent.ts      |    62.6 |    68.08 |   85.35 |    62.6 | ...8913-8915,8931 
  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             
  ...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.77 |    82.18 |   93.26 |   88.77 |                   
  Session.ts       |   88.74 |    81.06 |    92.8 |   88.74 | ...6373,6400-6404 
  ...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.33 |    86.25 |   93.33 |   82.33 | ...24-425,448-449 
  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.71 |    73.52 |   64.51 |   88.71 |                   
  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.67 |      100 |      50 |   97.67 | 54                
  serve.ts         |   86.42 |    67.64 |     100 |   86.42 | ...00-603,617-621 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.11 |    94.44 |   66.66 |   98.11 | 81-82             
 ...mmands/channel |   82.33 |    86.84 |    83.2 |   82.33 |                   
  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 |   95.91 |    87.95 |   96.87 |   95.91 | ...12-813,817-818 
  ...classifier.ts |   97.59 |    92.85 |     100 |   97.59 | 47-48             
  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        |   72.97 |    80.95 |      75 |   72.97 | 64-76,85-91       
  runtime.ts       |   78.24 |    86.95 |     100 |   78.24 | ...55-159,189-191 
  set.ts           |   69.56 |    83.33 |      50 |   69.56 | 57-75,103-110,123 
  start.ts         |   75.37 |    75.28 |   66.66 |   75.37 | ...44,550-553,565 
  status.ts        |   77.68 |    57.14 |   66.66 |   77.68 | ...26-127,140-151 
  stop.ts          |   57.83 |    82.35 |      50 |   57.83 | ...3,74-76,85-111 
 ...nds/extensions |   88.82 |    87.82 |   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 |     90.9 |     100 |     100 | 18                
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   99.15 |      100 |   83.33 |   99.15 | 151               
  sources.ts       |   93.42 |    87.09 |   92.85 |   93.42 | ...4-66,96-98,167 
  uninstall.ts     |   74.57 |       40 |   66.66 |   74.57 | 45-47,60-67,70-73 
  update.ts        |   96.71 |    97.05 |     100 |   96.71 | 114-118           
  utils.ts         |      75 |    55.55 |     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.12 |    86.12 |   75.83 |   75.12 |                   
  agent-prompt.ts  |   90.43 |    90.69 |   94.11 |   90.43 | ...1024,1066-1103 
  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 |   81.81 |    72.34 |   93.33 |   81.81 | ...26-627,635-655 
 ...nds/review/lib |   93.59 |    92.05 |   90.47 |   93.59 |                   
  agent-briefs.ts  |   98.23 |      100 |       0 |   98.23 | 440-441           
  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 
 ...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.35 |    87.92 |   95.34 |   94.35 |                   
  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.97 |    86.57 |   84.37 |   87.97 | ...2312,2314-2322 
  ...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 
  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.02 |   95.23 |   97.52 |                   
  ...putAdapter.ts |   97.19 |    93.17 |   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.46 |    84.92 |   89.86 |   88.46 |                   
  ...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.56 |     100 |     100 | 559               
  ...cp-command.ts |     100 |      100 |     100 |     100 |                   
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ebhook-ipc.ts |    98.5 |    86.66 |     100 |    98.5 | 47                
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   91.56 |    85.79 |     100 |   91.56 | ...44-648,654-658 
  ...er-manager.ts |   92.85 |    86.66 |   94.11 |   92.85 | ...28,447,458-460 
  ...supervisor.ts |   96.99 |    88.23 |   96.42 |   96.99 | ...-945,1053-1057 
  ...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 
  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.53 |    80.45 |   71.94 |   84.53 | ...5360,5365-5366 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  ...-keepalive.ts |   96.03 |    89.58 |     100 |   96.03 | ...36,498-500,540 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  server.ts        |   95.21 |     92.5 |   77.77 |   95.21 | ...1702,1722-1725 
  ...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 |   97.32 |    81.19 |     100 |   97.32 | ...61,164,297-303 
  ...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.47 |    77.88 |   93.71 |   75.47 |                   
  ...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.78 |    74.05 |     100 |   68.78 | ...4446,4494-4500 
  index.ts         |   81.78 |    78.37 |   89.36 |   81.78 | ...2159,2190-2192 
  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 |    78.78 |     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.94 |    79.55 |   95.65 |   85.94 |                   
  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   |    92.3 |    83.33 |     100 |    92.3 | 55-59             
  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.91 |    84.54 |   96.15 |   88.91 | ...3049,3051-3052 
  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 |    82.9 |    81.92 |     100 |    82.9 | ...01-202,223-231 
  ...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 |   69.87 |     61.9 |     100 |   69.87 | ...46-452,461-462 
  ...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 |   66.18 |    60.93 |     100 |   66.18 | ...22-427,436-446 
  ...tup-github.ts |   77.52 |    70.27 |   84.21 |   77.52 | ...87,309,352-353 
  ...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.42 |     89.1 |   94.39 |   89.42 |                   
  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 |   94.82 |       95 |     100 |   94.82 | ...32-134,389-394 
  self-origin.ts   |   76.19 |       80 |     100 |   76.19 | 45-54             
  ...e-features.ts |   93.85 |       92 |     100 |   93.85 | 146-152           
  ...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.7 |     91.7 |     100 |    94.7 | ...58-573,575-581 
  telemetry.ts     |   97.35 |    96.78 |     100 |   97.35 | ...02-304,406-408 
 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.55 |    72.48 |   65.82 |   70.55 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   71.61 |    68.89 |   62.96 |   71.61 | ...3971,3975-3979 
  ...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.91 |   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 |    72.72 |     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.32 |    88.22 |   89.57 |   76.32 |                   
  acpModelUtils.ts |   95.49 |    94.23 |     100 |   95.49 | 44,68-69,73-74    
  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        |   90.85 |    96.36 |    92.3 |   90.85 | 69-70,298-310     
  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.19 |    90.97 |     100 |   94.19 | ...28,434,437-441 
  ...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.37 |    88.75 |      90 |   82.37 | ...20-738,745-753 
  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.51 |    85.69 |   87.96 |   86.51 |                   
 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.4 |    86.14 |   71.35 |    83.4 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   82.42 |    85.68 |    68.8 |   82.42 | ...6817,6821-6822 
  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.03 |    86.25 |   92.97 |   91.03 |                   
  baseLlmClient.ts |   87.19 |     80.3 |      80 |   87.19 | ...18,631,685-687 
  client.ts        |   89.97 |    84.15 |   91.04 |   89.97 | ...2919,3015-3016 
  ...tGenerator.ts |   88.07 |       75 |     100 |   88.07 | ...89-393,401-405 
  ...lScheduler.ts |   90.21 |    84.67 |   95.69 |   90.21 | ...4960,4988-4999 
  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.82 |     80.3 |   88.23 |   96.82 | ...08,115-116,121 
  ...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.61 |    84.69 |    92.1 |   94.61 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   94.51 |    83.39 |   91.66 |   94.51 | ...1113-1114,1142 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   91.07 |    88.87 |      95 |   91.07 |                   
  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.38 |    90.08 |     100 |   97.38 | ...1027,1035,1103 
  ...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.65 |   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 |    85.96 |     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.64 |    88.81 |   91.02 |   91.64 |                   
  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.92 |     100 |     100 | 177               
  modelsConfig.ts  |   88.81 |    86.84 |    87.8 |   88.81 | ...1358,1387-1388 
  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.48 |    85.27 |   96.65 |   90.48 |                   
  ...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.49 |   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 |    96.2 |     91.8 |     100 |    96.2 | ...1228,1627-1628 
  cronTasksFile.ts |   94.76 |    89.77 |     100 |   94.76 | ...19,328-329,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.04 |    88.05 |   82.32 |   80.04 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...on-metrics.ts |   99.06 |    80.48 |     100 |   99.06 | 183,197           
  ...on-tracing.ts |   74.55 |    73.21 |   70.58 |   74.55 | ...95,354-356,372 
  ...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 |     80.9 |   69.49 |   73.62 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   73.62 |    80.73 |   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.41 |    83.81 |   87.78 |   84.41 |                   
  ...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.54 |    78.86 |    85.1 |   81.54 | ...3182,3184-3185 
  mcp-client.ts    |   78.48 |    83.66 |   88.46 |   78.48 | ...2140,2144-2147 
  ...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.02 |    83.31 |   91.57 |   78.02 | ...4877,4940-4941 
  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 |     93.1 |     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 |    85.71 |   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.

@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

// review; verify is required once the review has findings to verify.
const verification = verificationGaps(
input.planPath,
{ postsFindings: criticalsInline + suggestionsInline > 0 },

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.

[Suggestion] postsFindings excludes bodyCriticals — a review whose only confirmed findings are body Criticals (unanchorable or 422-relocated) skips the verifier requirement while still posting REQUEST_CHANGES with unverified findings.

Failure scenario: A Critical cannot be anchored → becomes a body Critical. criticalsInline=0, suggestionsInline=0postsFindings=false → no verifier required → REQUEST_CHANGES with unverified findings. The PR description acknowledges this as "the known edge this floor does not catch."

Suggested change
{ postsFindings: criticalsInline + suggestionsInline > 0 },
{ postsFindings: criticalsInline + suggestionsInline + bodyCriticals.length > 0 },

— qwen3.7-max via Qwen Code /review

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in dfdba1c — good catch, this closes the edge the description flagged. postsFindings now counts body Criticals too, minus the deterministic [build]/[test] ones (pre-confirmed, skip verification by design, and they carry their source tag so they are recognisable). Since any body Critical makes the event REQUEST_CHANGES and caps never soften an RC, this only ever affects the disclosure: a real unanchorable Critical is now told it was unverified; a [build]-only review is not (that disclosure would be false). Two compose-review tests pin both directions.

Comment on lines +278 to +282
const verification = verificationGaps(
input.planPath,
{ postsFindings: criticalsInline + suggestionsInline > 0 },
input.env,
);

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.

[Suggestion] verificationGaps() re-reads the plan, transcripts, and recorded prompts that coverageFromTranscripts() already loaded ~70 lines earlier in the same try block. This doubles filesystem I/O on every high-effort review (plan JSON parse, transcript directory scan + JSON parse of each agent's JSONL, prompt record directory scan).

Concrete cost: each transcript is read from disk and every line JSON-parsed twice. With 23+ chunk agents on real PRs, each with multi-KB JSONL transcripts, this scales linearly. Also, if the second read throws after the first succeeded, the shared catch block appends a contradictory "cannot show that any of the diff was read" message alongside the specific coverage data already pushed.

Suggested change
const verification = verificationGaps(
input.planPath,
{ postsFindings: criticalsInline + suggestionsInline > 0 },
input.env,
);
const verification = verificationGaps(
input.planPath,
{ postsFindings: criticalsInline + suggestionsInline > 0 },
input.env,
{ records: cov.records, built: cov.built },
);

— qwen3.7-max via Qwen Code /review

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The contradictory-catch half is fixed in dfdba1c: verificationGaps now runs in its own try/catch, so a read failure there reports itself instead of wearing the coverage block's "cannot show the diff was read" over a coverage result that just succeeded. On the double read: I kept it deliberately. coverageFromTranscripts returns the computed report, not the raw records, and threading the raw {records, built} out of it (and an optional param into both functions) trades a clean standalone verificationGaps for an optimisation of a few KB-sized file reads that run twice per review — this file's stated preference is clarity over that. Happy to do the sharing refactor if you'd rather.

return records.some(
(r) =>
wasDeliveredVerbatim(r.launchPrompt, b) &&
r.successfulCallArgs.some((a) => a.includes(brief)),

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.

[Suggestion] Brief-path check uses bare a.includes(brief) substring match, but the diff-path check in parseTranscript already learned to use JSON.stringify: a bare substring credits …/diff.txt.bak for …/diff.txt. The brief check did not apply the same lesson.

Failure scenario: a sibling file whose path has the brief path as a strict prefix (e.g. reverse-audit.brief.md.bak) exists, and an agent opens that file instead of the brief. a.includes(brief) still matches, ranAndReadBrief returns true, the verification gap clears, and composeReview approves a review whose agent never opened its brief.

Suggested change
r.successfulCallArgs.some((a) => a.includes(brief)),
r.successfulCallArgs.some((a) => a.includes(JSON.stringify(brief))),

— qwen3.7-max via Qwen Code /review

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in dfdba1c — applied the parseTranscript diff-path lesson here. Both brief-open checks in this file (this Step 4/5 one and the roster's unreadBriefs) now match the whole quoted JSON value (JSON.stringify(brief)), so …/x.brief.md.bak no longer counts as …/x.brief.md.

// `reverse-audit--chunk-N`, one per chunk. The floor is one: at least one auditor
// ran and read its brief.
const reverseKeys = [...built.keys()].filter(
(k) => k === 'reverse-audit' || /^reverse-audit--chunk-\d+$/.test(k),

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.

[Suggestion] The regex /^reverse-audit--chunk-\d+$/ is a hand-duplicated mirror of the key-construction logic in agent-prompt.ts (${role}--chunk-${args.chunk}). No shared constant or type links them.

Concrete cost: someone refactors the key format in agent-prompt.ts (changes separator, renames chunk). The regex silently stops matching per-chunk keys. A review that ran a full per-chunk reverse audit fails the floor check with "no auditor ran", capping a correct review to COMMENT. No test fails because coverage tests use hardcoded key strings.

Suggested fix: export the key-format logic as a shared function or extract the separator --chunk- into a constant both sites import.

— qwen3.7-max via Qwen Code /review

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in dfdba1c. The match now keys off the role name and the universal -- key separator (k === "reverse-audit" || k.startsWith("reverse-audit--")) instead of the exact --chunk-<n> shape, so a change to how the chunk suffix is spelled no longer silently drops every per-chunk key and caps a correct review. A shared key-format module across agent-prompt/roster/prompt-record would be the fuller fix, but that is a wider refactor than this PR.

`You are review agent \`${key}\`.\n` +
`read_file(file_path="${brief}")\n` +
`read_file(file_path="${DIFF}")`;
writeFileSync(join(d, `${key}.txt`), launch);

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.

[Suggestion] This test helper writes prompt records as ${key}.txt (raw), while the sibling check-coverage.test.ts correctly uses ${encodeURIComponent(key)}.txt matching production code in prompt-record.ts.

Concrete cost: for current keys (verify, reverse-audit) this is a no-op since hyphens are not percent-encoded. But if a future role name with a character that encodeURIComponent transforms is added, this writes my role.txt while production reads my%20role.txt, causing a silent test mismatch. The inconsistency between the two test files means a copy-paste from the wrong one propagates the bug.

Suggested change
writeFileSync(join(d, `${key}.txt`), launch);
writeFileSync(join(d, `${encodeURIComponent(key)}.txt`), launch);

— qwen3.7-max via Qwen Code /review

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in dfdba1c — the fixture now records under encodeURIComponent(key), matching prompt-record.ts. A no-op for todays keys, but it stops a future role name from being written to a file the reader never looks for.

expect(r.gaps.join(' ')).not.toMatch(/verification/);
});

it('flags a verifier built but whose agent never opened its brief', () => {

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.

[Suggestion] The verify side tests opensBrief: false but not launch: false, unlike the reverse-audit side which tests both failure modes symmetrically.

Concrete cost: launch: false exercises a different intersection in ranAndReadBriefbuilt.get('verify') returns content, but records.some(…) finds zero matching transcripts because none were written. Both produce the same gap message, but they fail at different points in the boolean expression. A regression in the transcript-matching half would go undetected.

Suggested fix: add a test mirroring the reverse-audit launch: false case:

it('flags a verifier whose prompt was built but never launched', () => {
  const p = plan();
  step45(p, 'reverse-audit');
  step45(p, 'verify', { launch: false });
  const r = verificationGaps(p, { postsFindings: true }, ENV);
  expect(r.gaps.join(' ')).toMatch(/verification  its prompt was built/);
});

— qwen3.7-max via Qwen Code /review

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed in dfdba1c — added the launch: false verify case, mirroring the reverse-audit side. It exercises the transcript-matching term of ranAndReadBrief (built record present, no matching transcript), which opensBrief: false does not reach.

Six findings from the /review skill's pass over this PR, all addressed.

The verify floor keyed on inline findings alone, so a non-deterministic Critical
that could not be anchored — a body Critical — posted under REQUEST_CHANGES without
ever demanding a verifier. It now counts body Criticals too, minus the deterministic
`[build]`/`[test]` ones, which are pre-confirmed and skip verification by design (and
carry their source tag, so they are recognisable). A review whose only finding is a
real unanchorable Critical is now told it was not verified; one whose only finding is
a build failure is not — that disclosure would be false.

The brief-open check matched the brief path as a bare substring, the trap
`parseTranscript` already learned to avoid for the diff path: `…/x.brief.md.bak`
would have counted as `…/x.brief.md`. Both this file's brief checks — the Step 4/5
one and the roster's — now match the whole quoted JSON value.

The per-chunk reverse-audit key was recognised by a regex hardcoding the
`--chunk-<n>` shape; it now keys off the role name and the universal `--` separator,
so a change to how the suffix is spelled does not silently drop every per-chunk key
and cap a correct review.

`verificationGaps` now runs in its own try, so a read failure there reports itself
rather than wearing the coverage block's "cannot show the diff was read" message
over a coverage result that succeeded a line above it.

Tests: the fixture helper records prompts under the percent-encoded key, matching
production; a `launch: false` verify case covers the transcript-matching half of the
floor that the `opensBrief: false` case does not; and two compose-review cases pin
the body-Critical verify rule (a non-deterministic one demands a verifier, a
`[build]` one does not).

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.

@wenshao

wenshao commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks for the review — the bot approved, and all six inline Suggestions are addressed in dfdba1c.

# Finding Resolution
1 postsFindings excludes body Criticals → unverified body Critical posts without a verifier Fixed. Counts body Criticals minus deterministic [build]/[test] ones (pre-confirmed, skip verify). Real unanchorable Critical → disclosed unverified; [build]-only → not.
2 verificationGaps re-reads transcripts; shared catch can contradict Catch fixed (own try/catch, own message). Double-read kept as a deliberate clarity-over-perf tradeoff (KB reads; standalone function) — happy to share the raw records if preferred.
3 Brief-open check used a bare substring (x.brief.md.bak trap) Fixed. Both brief checks in the file now match the whole quoted JSON value, per parseTranscript's diff-path lesson.
4 Per-chunk key regex hardcodes --chunk-<n> Fixed. Keys off the role name + universal -- separator, robust to suffix-format changes.
5 Test wrote raw ${key}.txt vs production's encodeURIComponent Fixed. Fixture now matches prompt-record.ts.
6 Verify side lacked a launch: false test Fixed. Added, mirroring reverse-audit — covers the transcript-matching half of the floor.

608 review tests pass (605→608), review tsc clean.

@wenshao

wenshao commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator Author

Review

Verdict: LGTM with minor notes. The gate closes the hole it names, the keys it floors on are exactly what production records, every failure path I could construct fails closed, and the new tests have teeth (mutation-checked below). The notes are doc-staleness and one missing regression test — nothing blocking.

What I verified (ran, not just read)

  • Key fidelity. agent-prompt.ts records --role verify under verify — the role takes no --chunk/--file (acceptsChunk is only on reverse-audit), so there is no key shape the floor misses — and the reverse audit under reverse-audit / reverse-audit--chunk-<id>, which is precisely what verificationGaps matches. SKILL.md Steps 4/5 build prompts through those roles, and the per-shard findings / per-round cumulative lists are prepended above the printed prompt, which wasDeliveredVerbatim (add-only, ordered) accepts — so any one shard or round satisfies the floor, and multi-round reruns overwrite the same record idempotently.
  • Rendering & caps. Every gap string carries , so it lands in explainedDimensions and renders verbatim as Not reviewed: …; it trips the unreviewed-dimension cap, blocks canCertify (no "Reviewed — no blockers." over a skipped audit), and discloses on REQUEST_CHANGES without softening it. All asserted by the new tests.
  • Stale-state probe. A second review in one session that leaves run‑1's verify.txt / reverse-audit--chunk-N.txt behind fails closed: the fresh-transcript requirement (mtime < planMtime filter) can't be satisfied by run‑1's agents, so a skipped step is still flagged — with the "built, but no agent was launched" wording rather than "none was recorded". Imprecise message, right conclusion, same characteristic the roster check already has.
  • Suite & types. 608/608 pass across 29 files on the PR head (the description's 605 predates the tighten-up commit); tsc --noEmit is clean for commands/review.
  • Mutation check. Disabling the reverse-audit floor → 4 tests fail. Severing the unreviewed.push(gap) wiring in compose-review.ts → 3 fail. Dropping the [build]/[test] carve-out → 1 fails. No mutation survived.
  • Fixture realism. The new helpers write harness-shaped JSONL (anonymous FIFO call/response pairing, serialized args), so the tests exercise the real parseTranscript path, not a mock of it.

Notes

  1. The PR description (and one comment) are stale relative to the head commit (Suggestion). The Risk section still says a review posting only an unmappable body Critical without a verifier is "the known edge this floor does not catch" — but compose-review.ts now counts non-[build]/[test] body Criticals into findingsToVerify, and the requires a verifier for a body Critical that is not pre-confirmed test proves that edge is caught. Likewise coverage.ts's "Keyed to INLINE findings" sentence undersells its own caller. Worth updating both so the next reader doesn't distrust the code. The actual remaining edge is the inline one: counts carry no source tags, so a review whose only inline finding is a pre-confirmed [build]/[test] one gets a false "findings were not verified" disclosure — event unchanged, fail-closed, and fixing it would mean trusting model-authored tags on counts. Fine as designed; just make the prose point at the right edge.
  2. The verify floor is sloppiness-proof, not adversary-proof (note, accepted). bodyCriticals text is model-authored, so tagging a body Critical [build] exempts it from the verifier demand. The reverse-audit floor has no such text channel — unconditional, proven from harness-authored transcripts — so the headline catch (a clean review that skipped its audit cannot Approve) is not dodgeable this way. Matches the existing threat model (the counts are model-authored too); a half-sentence in the coverage.ts comment acknowledging the asymmetry would spare the next auditor re-deriving it.
  3. The drive-by needle-tightening in coverageFromTranscripts has no regression test (Suggestion). Matching the brief as a quoted JSON value is a behavior change to the Step 3D unread-briefs check, shipped inside a Step 4/5 PR. It's the right change — it aligns with parseTranscript's diff-path precedent and incidentally fixes Windows, where the raw-backslash needle could never match JSON-escaped args. But nothing pins it: no test that a ${brief}.bak open is not credited, and it quietly de-credits an agent that opened its brief through a shell command (cat …/brief.md embeds the path mid-string, no leading quote) — fail-closed, and launch prompts do say read_file(…), but that's exactly the kind of tightening that deserves its two small tests next to the existing unread-briefs ones.
  4. Double read per compose (nit). verificationGaps re-reads the plan, every transcript, and the prompt records immediately after coverageFromTranscripts did. Once (twice on 422 recovery) per review, so negligible today; if a third derived check ever joins these two, share the parsed records behind the public entry points rather than tripling the walk.

Test plan

Reproduced as claimed: npx vitest run src/commands/review → 608 passing (29 files); tsc --noEmit clean for the review tree; CI green on the required jobs (macOS/Windows Test are classify-gated skips, consistent with the description).

@wenshao

wenshao commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator Author

Review — verified on Linux at head dfdba1c49

Verdict: LGTM. The gate does what the PR claims, fails closed on every skip shape I could construct, and cannot fire on a complete run. All notes below are non-blocking.

What I verified

  • Tests: npx vitest run src/commands/review608 passed, 29 files (the PR body says 605 — the merge from main added a few; all green). npx tsc --noEmit -p packages/cli/tsconfig.json0 errors package-wide, better than the filtered claim. eslint + prettier on all five changed files: clean.
  • Before/after (non-vacuous tests): swapped main's coverage.ts + compose-review.ts under the new test file → the three behavior tests fail on main, and the headline one fails the right way: "caps a clean APPROVE to COMMENT when the reverse audit never ran" composes an APPROVE on main. That is exactly the silent failure this PR closes. The three negative-control tests (no verifier needed when clean / [build]-tagged body Critical exempt / complete run approves) pass on both, as they should.
  • Production writer → new reader E2E (the coupling the unit fixtures hand-model): drove the real agent-prompt handler with --role verify, --role reverse-audit, and --role reverse-audit --chunk 1 against a real plan, then wrote only what the harness would write. 9/9 probes pass:
    • record keys land as verify.txt / reverse-audit.txt / reverse-audit--chunk-1.txt — exactly what verificationGaps looks for;
    • a shard-style verify launch (findings list prepended above the verbatim prompt, per Step 4's documented flow) is credited — wasDeliveredVerbatim's add-only contract carries this;
    • a 3B per-chunk auditor alone satisfies the Step 5 floor;
    • an agent that opened <brief>.bak is not credited (the quoted-JSON needle works), and the gap message names the launched-but-unread shape;
    • composeReview end-to-end on the completed run emits no reverse-audit/verification line.
  • Premises: roster.ts contains neither role, so check-coverage's roster genuinely cannot reach Step 4/5 — the floor is not redundant with it. SKILL.md Step 4 sends all non-pre-confirmed findings (Suggestions included) to verification, so counting suggestionsInline toward findingsToVerify matches the contract; Step 5 is unconditional at high effort; low/medium never call compose-review. The Step 8 incremental-cache path re-runs the full pipeline over the incremental diff with a fresh plan, so no false cap there.
  • Fail-closed edges: empty/partial verify.txt record → ranAndReadBrief fails on b.trim() === ''; leftover records from a prior run at the same plan path can't false-pass (stale transcripts are mtime-filtered, and no other role's launch prompt embeds the reverse-audit prompt's first line, so wasDeliveredVerbatim can't cross-credit).

Non-blocking notes

  1. The PR description is one commit behind the code. Risk & Scope says the verify floor is keyed to inline findings and that "a review posting only an unmappable body Critical without a verifier is the known edge this floor does not catch" — but dfdba1c49 added exactly that: untagged body Criticals now count toward findingsToVerify, and the test "requires a verifier for a body Critical that is not pre-confirmed" proves it. Worth updating the description so the record matches the shipped behavior. Same one-commit lag in the verificationGaps doc comment: coverage.ts:541 still says "Keyed to INLINE findings".
  2. Acknowledged edge, quantified: inline counts are bare numbers, so a review whose only inline findings are pre-confirmed [test] efficacy Suggestions (which skip Step 4 by design) gets a false "verification — the review posts findings, but no verifier ran" disclosure. It can never move the event (Suggestions already make the base event COMMENT; the cap only moves APPROVE→COMMENT), so the blast radius is one wrong sentence of public disclosure on a rare shape. Fine for a floor; if it ever bites, per-source inline counts would fix it.
  3. /\[(?:build|test)\]/i matches anywhere in a body Critical's free text — a genuine blocker whose prose merely quotes [test] would be exempted from the verifier demand. This fails open (no false cap; the floor just doesn't fire on an exotic shape), so it's the right direction for a mistake, but anchoring on the leading source-tag position would be stricter.
  4. Double disclosure on unavailable transcripts: the coverage catch and the verification catch both fire on the same underlying failure, so the body carries two "Not reviewed" lines for one cause. Deliberate per the comment (own try, own message), both lines true, fails closed — cosmetic only.
  5. Second full transcript parse: verificationGaps re-reads and re-parses every session transcript immediately after coverageFromTranscripts did. compose-review runs once per review, so the cost is bounded; an overload accepting pre-read records would remove it if session dirs ever get large.
  6. The drive-by tightening of the Step 3 brief check is a real behavior change and I think it's right: bare a.includes(brief) → quoted JSON.stringify(brief) means a brief opened via a shell command line (path embedded in a larger string) is no longer credited. Precedent says safe — the diff-path check has always required the quoted form and production runs pass it, launch prompts instruct read_file(file_path=…), and exact-value args (a grep's path) still match — and it closes the .bak false-credit for real (proved in my E2E). One tiny gap: check-coverage.test.ts has no dedicated .bak regression test for this Step 3 arm (my E2E covered the verificationGaps arm); worth two lines if you touch the file again.

中文版

审查 — 已在 Linux 上对 head dfdba1c49 验证

结论:LGTM。 这个 gate 做到了 PR 声称的事:我能构造的每种"跳步"形态都 fail-closed,而完整的 run 不会误触发。以下所有条目均不阻塞合并。

验证内容

  • 测试:npx vitest run src/commands/review608 通过,29 文件(PR 写 605,merge main 后多了几个,全绿)。npx tsc --noEmit -p packages/cli/tsconfig.json整包 0 错误,比 PR 里"过滤到 review 目录干净"的说法更强。五个改动文件 eslint + prettier 干净。
  • 前后对比(测试非空洞):把 main 的 coverage.ts + compose-review.ts 换进来跑新测试 → 三个行为测试在 main 上失败,且头号那个以正确的方式失败:"reverse audit 从未运行时把干净的 APPROVE cap 成 COMMENT" 在 main 上组出的是 APPROVE —— 正是本 PR 要堵的静默失败。三个反向对照(无发现不要求 verifier / [build] 标签的 body Critical 豁免 / 完整 run 照常 Approve)在两边都通过,符合预期。
  • 生产端写入方 → 新读取方 E2E(单元测试里手写 fixture 所模拟的耦合,这里用真代码验证):用真实的 agent-prompt handler 跑 --role verify--role reverse-audit--role reverse-audit --chunk 1,只伪造 harness 本来要写的 transcript。9/9 探针通过:
    • record key 恰好是 verify.txt / reverse-audit.txt / reverse-audit--chunk-1.txt,与 verificationGaps 查找的完全一致;
    • 分片式 verify 启动(按 Step 4 文档流程,把 findings 列表加在逐字 prompt 上方)被正确记入 —— wasDeliveredVerbatim 的"只许加不许删"契约撑住了这点;
    • 单个 3B per-chunk auditor 即满足 Step 5 下限;
    • 打开 <brief>.bak 的 agent 被记入(带引号的 JSON needle 生效),且 gap 文案正确指向"启动了但没读 brief"的形态;
    • 补齐两步后 composeReview 端到端不再输出 reverse-audit/verification 行。
  • 前提核实:roster.ts 完全不含这两个角色,check-coverage 的 roster 确实够不到 Step 4/5 —— 这个下限检查不与其重复。SKILL.md Step 4 把所有非预确认发现(含 Suggestion)送去验证,所以 suggestionsInline 计入 findingsToVerify 符合契约;Step 5 在 high effort 无条件运行;low/medium 不调用 compose-review。Step 8 增量缓存路径会对增量 diff 重跑全流程(新 plan),不会误 cap。
  • fail-closed 边界:空/半写的 verify.txtranAndReadBriefb.trim() === '' 处失败;同一 plan 路径上一轮 run 留下的旧 record 无法造成误通过(旧 transcript 被 mtime 过滤,且其他角色的 launch prompt 不含 reverse-audit prompt 的首行,wasDeliveredVerbatim 无法串位记账)。

非阻塞事项

  1. PR 描述落后代码一个 commit。《风险与范围》说 verify 下限以 inline findings 为准、"只发不可锚定 body Critical 的 review 是已知不覆盖的边界" —— 但 dfdba1c49 恰好补上了这点:无标签 body Critical 现在计入 findingsToVerify,测试 "requires a verifier for a body Critical that is not pre-confirmed" 可证。建议更新描述,让记录与实际行为一致。coverage.ts:541verificationGaps 注释同样落后一拍("Keyed to INLINE findings")。
  2. 已承认的边界,量化一下:inline 计数只是数字,所以"唯一发现是预确认 [test] 效能 Suggestion(按设计跳过 Step 4)"的 review 会收到一句错误的 "verification — the review posts findings, but no verifier ran" 披露。它永远不会改变 event(有 Suggestion 时 base 已是 COMMENT,cap 只作用于 APPROVE→COMMENT),爆炸半径 = 罕见形态下 body 里一句错误披露。作为下限可接受;真踩到时按 source 细分 inline 计数即可修。
  3. /\[(?:build|test)\]/i 在 body Critical 全文任意位置匹配 —— 一个正文恰好引用了 [test] 字样的真 blocker 会被豁免 verifier 要求。方向是 fail-open(不会误 cap,只是下限对奇异形态不触发),错的方向是对的;锚定行首 source-tag 位置会更严格。
  4. transcript 不可用时双重披露:coverage 的 catch 和 verification 的 catch 对同一底层失败各发一行,body 里同因两条 "Not reviewed"。注释说明是有意的(独立 try、独立文案),两句都为真且 fail-closed —— 仅外观问题。
  5. transcript 二次全量解析:verificationGapscoverageFromTranscripts 刚读完后再读一遍全部 session transcript。compose-review 每次 review 只跑一次,代价有界;若 session 目录变大,可加一个接受已读 records 的重载。
  6. 顺手收紧 Step 3 brief 检查是真实行为变更,我认为是对的:裸 a.includes(brief) → 带引号 JSON.stringify(brief),意味着通过 shell 命令行(路径嵌在长字符串里)打开 brief 不再被记入。先例说明安全 —— diff 路径检查一直用带引号形式且生产运行通过,launch prompt 明确指示 read_file(file_path=…),精确值参数(如 grep 的 path)仍匹配 —— 且它真堵住了 .bak 误记账(我的 E2E 已证)。一个小缺口:check-coverage.test.ts 没有针对 Step 3 这一臂的 .bak 回归测试(我的 E2E 只覆盖了 verificationGaps 一臂);下次改这个文件时补两行即可。

@wenshao

wenshao commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

…ef arm

Two non-blocking notes from the verification review.

The `verificationGaps` doc comment still said the verify floor was "keyed to INLINE
findings" — one commit stale. It is `opts.postsFindings`, decided by the caller,
which now counts non-deterministic body Criticals and excludes deterministic
`[build]`/`[test]` ones. The comment now says that.

The `.bak` tightening of the brief-open check had a regression test for the Step 4/5
arm but not the Step 3 roster arm they share. Added one: a roster agent that opened
`<brief>.bak` is not credited with opening the brief.
@wenshao
wenshao requested a review from Copilot July 15, 2026 15:47

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.

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Thanks for the PR!

Template looks good ✓

Problem: observed and concrete. The PR names the silent failure precisely — a zero-finding high-effort review could skip the reverse-audit pass wholesale and still certify the diff clean. The "before" behavior is reproducible from the existing harness (swap main's coverage.ts + compose-review.ts under the new test file, and the headline test composes an APPROVE that should have been capped to COMMENT). This isn't theoretical hardening — it's the exact failure the coverage-gate story was built to stop, one pipeline stage later.

Direction: aligned. This is the natural closure of the #6892/#6942 work that moved Step 3/4/5 prompts into code. Prompts existing in code ≠ agents ran; this PR closes that gap for the two steps whose omission is most costly and least visible. Follows the existing coverage-gate pattern (check-coverage for Step 3) rather than inventing a new mechanism.

Size: 5 files, ~386 production lines (compose-review.ts +30, lib/coverage.ts +115/-1, two test files +244/-4, one bundled SKILL.md doc +3/-1). Confined to packages/cli/src/commands/review/ except for a doc-only update to the bundled review SKILL.md. No core module production code touched. Well under the 500-line threshold.

Approach: minimal. One new function (verificationGaps) in lib/coverage.ts, one call site in compose-review.ts, tests, doc update. Reuses the same two-author proof (wasDeliveredVerbatimsuccessfulCallArgs brief-open) that check-coverage already uses for Step 3 — no new mechanism. The floor is deliberately one agent per step (catching a step skipped wholesale, the failure it exists to stop); per-chunk completeness of Step 3B remains the orchestrator's loop contract, disclosed through unreviewedDimensions. The [build]/[test] pre-confirmed carve-out is the same one Step 4 already applies by design, and a follow-up commit (fa65f8d) tightened the Step 4 comment and added the .bak regression test both reviewers called out.

One acknowledged edge the PR is transparent about: inline counts are bare numbers, so a review whose only inline findings are pre-confirmed [test] Suggestions (which skip Step 4 by design) gets a false "verification — no verifier ran" disclosure. Blast radius is one wrong sentence of public disclosure on a rare shape (never moves the event, since Suggestions already make the base COMMENT). Fail-closed, fixable later with per-source inline counts if it ever bites. Fine as designed.

Moving on to code review. 🔍

中文说明

感谢贡献!

模板完整 ✓

问题: 已观测到且可复现。PR 精确地命名了这个静默失败——一个零发现的 high-effort review 可以整步跳过 reverse audit,仍然判定 diff 为 clean。"之前"行为可以从现有 harness 复现(把 main 的 coverage.ts + compose-review.ts 换进新测试,头号测试会组成一个本应被 cap 成 COMMENTAPPROVE)。这不是理论性加固,而是整个覆盖率 gate 故事本要拦截的失败,只是晚了一个流水线阶段。

方向: 对齐。这是 #6892/#6942 (把 Step 3/4/5 prompt 搬进代码) 的自然闭环。prompt 存在于代码 ≠ agent 跑了;本 PR 为「遗漏代价最大、最难看见」的两步补上这个缺口。沿用 check-coverage (Step 3) 的现有覆盖率 gate 模式,不发明新机制。

规模: 5 文件,约 386 生产行 (compose-review.ts +30、lib/coverage.ts +115/-1、两个测试文件 +244/-4、一个 bundled SKILL.md 文档 +3/-1)。除了一条纯文档更新到 bundled review SKILL.md 外,全部局限在 packages/cli/src/commands/review/。未触及 core 模块生产代码。远低于 500 行阈值。

方案: 最小。lib/coverage.ts 新增一个函数 (verificationGaps),compose-review.ts 一处调用,加测试和文档更新。复用 check-coverage 已用于 Step 3 的同一两方证明 (wasDeliveredVerbatimsuccessfulCallArgs 的 brief 打开检查)——无新机制。下限有意设为每步一个 agent(捕捉整步跳过,也就是它存在的目的);Step 3B 的 per-chunk 完整性仍是 orchestrator 的循环契约,经 unreviewedDimensions 披露。[build]/[test] 预确认豁免与 Step 4 设计上已有的相同;后续 commit (fa65f8d) 已按两位 reviewer 的意见收紧了 Step 4 注释并补上 .bak 回归测试。

PR 坦诚承认一个边界:inline 计数只是数字,所以「唯一 inline 发现是预确认 [test] Suggestion(按设计跳过 Step 4)」的 review 会收到错误的「verification — no verifier ran」披露。爆炸半径 = 罕见形态下一句错误披露(不会改 event,Suggestion 已把 base 定为 COMMENT)。Fail-closed,真踩到再用 per-source inline 计数修。设计可接受。

进入代码审查 🔍

Qwen Code · qwen3.7-max

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

@wenshao

wenshao commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator Author

Thanks for the deep verify — the before/after swap and the production-writer→reader E2E are exactly the checks I'd want on this. All six notes handled:

  1. Stale record — fixed (fa65f8d). coverage.ts's verify-floor comment no longer says "keyed to INLINE findings", and the PR description's Risk & Scope now describes the shipped behavior (non-deterministic body Criticals count; [build]/[test] excluded).
  2. Pre-confirmed [test] Suggestion disclosure — acknowledged, left as-is. Fails open, disclosure-only, never moves the event; per-source inline counts are the fix if it ever bites. Noted in the description's residual-edge line.
  3. /\[(?:build|test)\]/i matches anywhere — left as-is deliberately. It fails open (no false cap; a real blocker quoting [test] just doesn't get the verifier-demand disclosure), so a mistake here is the safe direction. Anchoring on the tag position would be stricter, but body Criticals are free-form and I can't rely on a fixed tag position without risking a fail-closed miss on a legitimately-tagged deterministic finding.
  4. Double disclosure on unavailable transcripts — cosmetic, deliberate (own try, own message), both lines true, fails closed. Left.
  5. Second transcript parse — bounded (one compose-review per review), kept for a clean standalone verificationGaps; a pre-read-records overload is the escape hatch if session dirs grow.
  6. No .bak regression for the Step 3 arm — fixed (fa65f8d). Added does not credit a brief opened as a \.bak` siblingincheck-coverage.test.ts, covering the roster unreadBriefs` arm your E2E didn't reach.

609 review tests pass (+1 for the .bak case), tsc clean.

@wenshao

wenshao commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Code review: clean. verificationGaps is built entirely on existing infrastructure (readPlan, readTranscripts, readRecordedPrompts, wasDeliveredVerbatim, briefPath) — no new utilities, no parallel abstractions. The ranAndReadBrief closure captures the two-author proof pattern once and reuses it for both steps, which is exactly right.

Two things worth noting:

1. The .bak sibling fix is a genuine correctness improvement. coverageFromTranscripts now matches JSON.stringify(brief) instead of a bare substring, and the new test (does not credit a brief opened as a .bak sibling) proves the old code would have credited ${brief}.bak for the brief. This tightens both the existing Step 3 check and the new Step 4/5 check — same trap parseTranscript already avoids for the diff path. Good catch to fix it in both places.

2. The findingsToVerify calculation in compose-review.ts is precise. It counts inline findings plus non-deterministic body Criticals (filtering out [build]/[test] which skip verification by design). The try/catch around verificationGaps keeps a transcript-read failure from wearing the coverage message — its own block, its own disclosure. Clean separation.

The reverse-audit key matching (k === 'reverse-audit' || k.startsWith('reverse-audit--')) handles both 3A and 3B topologies without overfitting to the chunk suffix format. The floor of one auditor is exactly the right question — catching a step skipped wholesale, not per-chunk completeness which remains the orchestrator's contract.

No critical issues found. No AGENTS.md violations.

Testing

Non-UI change (coverage computation + verdict cap) — tested via the fixture-driven test suite. The new tests exercise real transcript and prompt-record files, not mocks:

 ✓ src/commands/review/check-coverage.test.ts (38 tests) 51ms
 ✓ src/commands/review/compose-review.test.ts (55 tests) 80ms

 Test Files  2 passed (2)
      Tests  93 passed (93)
   Duration  4.66s

Full review suite: 609 tests across 29 files, all passing. npx tsc --noEmit filtered to commands/review — clean.

中文说明

代码审查: 干净。verificationGaps 完全基于现有基础设施 (readPlanreadTranscriptsreadRecordedPromptswasDeliveredVerbatimbriefPath)——无新工具函数、无平行抽象。ranAndReadBrief 闭包一次捕获两方证明模式并在两步中复用,完全正确。

两个值得注意的点:

1. .bak 兄弟文件修复是一个真正的正确性改进。 coverageFromTranscripts 现在匹配 JSON.stringify(brief) 而非裸子串,新测试证明了旧代码会把 ${brief}.bak 误认为打开了 brief。这同时收紧了 Step 3 检查和新的 Step 4/5 检查——与 parseTranscript 对 diff 路径已有的防线相同。

2. compose-review.ts 中的 findingsToVerify 计算精确。 它计数 inline 发现 + 非确定性 body Criticals(过滤掉按设计跳过验证的 [build]/[test])。verificationGaps 外的 try/catch 让 transcript 读取失败不会伪装成覆盖率消息——独立的块、独立的披露。分离干净。

未发现 Critical 问题。未违反 AGENTS.md。

测试: 非 UI 改动(覆盖率计算 + 判定 cap),通过 fixture 驱动的测试套件验证。新测试使用真实 transcript 和 prompt-record 文件,非 mock。完整 review 套件:29 文件 609 测试全部通过。tsc 过滤到 commands/review 干净。

Qwen Code · qwen3.7-max

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Confidence: 5/5 — Clean across every stage. The problem is a documented gap in an ongoing series (#6892, #6942), the solution is one function and one call site built entirely on existing infrastructure, every failure path I tested fails closed, and the tests cover every shape the PR describes.

The PR does exactly what it says: closes the last hole in the /review skill's coverage story. check-coverage proves Step 3 ran; this adds the same proof for Steps 4 and 5. The implementation reuses the two-author proof pattern (CLI-recorded prompt ∩ harness transcript with brief-open) rather than inventing anything new. The .bak sibling fix is a bonus correctness improvement that both the old and new checks benefit from.

What I'd want as a maintainer: the function is testable in isolation (and is, with 11 new verificationGaps tests + 6 compose-review integration tests), the cap behaves exactly like unreviewedDimensions (drops into the same slot, same rendering), and nothing is passed in or configurable — a run cannot opt out. The one acknowledged edge (spurious "not verified" disclosure on a [test]-only Suggestion review) is rare, harmless, and fail-open. Fine as designed.

Approving. ✅

中文说明

信心: 5/5 — 各阶段均干净。问题是已有系列 (#6892#6942) 中已记录的缺口,方案是一个函数加一处调用点,完全基于现有基础设施,我测试的每条失败路径均 fail closed,测试覆盖了 PR 描述的每种形态。

PR 完全做到了它声称的事:补上 /review skill 覆盖率故事的最后一个洞。check-coverage 证明 Step 3 跑了;这个 PR 为 Step 4 和 5 补上同样的证明。实现复用了两方证明模式(CLI 记录的 prompt ∩ harness transcript 的 brief 打开检查),没有发明任何新东西。.bak 兄弟文件修复是一个额外的正确性改进,新旧检查都受益。

作为 maintainer 我想看到的:函数可独立测试(也确实是,11 个新 verificationGaps 测试 + 6 个 compose-review 集成测试),cap 行为与 unreviewedDimensions 完全一致(落入同一位置、同一渲染方式),不传参、不可配置——run 无法选择退出。唯一已承认的边界(仅含 [test] Suggestion 的 review 收到虚假的"未验证"披露)罕见、无害、且 fail-open。设计可接受。

批准 ✅

Qwen Code · qwen3.7-max

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

Approve. Reviewed the full diff, ran the changed test files locally, and traced the load-bearing assumptions through the codebase.

Correctness — verified

  • Not a dead switch: agent-prompt records the verify / reverse-audit / reverse-audit--chunk-N keys and writes their briefs, so verificationGaps has real, differently-authored artifacts to intersect.
  • The gap is real: requiredAgents() never emits these roles, so the Step-3D coverage roster genuinely cannot reach them — this closes an actual hole rather than duplicating an existing check.
  • The unconditional reverse-audit cap is safe: compose-review runs high-effort-only (SKILL.md gates Step 4/5 and the verdict to high effort; low/medium passes emit no verdict and never call it).
  • Fail-open: whenever postsFindings is true, c>=1/s>=1, so baseEvent is already non-APPROVE — the verify gap can only add a disclosure, never flip a real blocker into an approval.
  • No false-negative on the real reverse-audit flow: wasDeliveredVerbatim permits the prepended cumulative finding list Step 5 adds above the pasted prompt.
  • Step 6 / Step 7 stay consistent: submit calls the same composeReview with the full state including planPath, so the printed verdict and the posted one are the same computation.
  • The .bak fix mirrors parseTranscript's diff-path JSON.stringify pattern and is now applied to both brief-open checks (Step 4/5 and the roster's unreadBriefs).

Tests / CI

The two changed test files pass 93/93 locally (check-coverage 38, compose-review 55). The unrelated test-efficacy symlink failure reproduces on main (a macOS rmSync symlink behavior), and the unquoteCStylePath tsc error is a stale core dist/.d.ts in an untouched file (diff-plan.ts) — the symbol is exported from source and clears on a core rebuild. The six findings from the PR's own /review pass were all addressed in dfdba1c49.

Non-blocking nits (optional follow-ups)

  1. The [build]/[test] exclusion regex is unanchored, so a real non-deterministic Critical whose prose contains the literal tag would be misclassified as pre-confirmed. Cosmetic only — it suppresses the "unverified" disclosure while the finding still posts as REQUEST_CHANGES; it can never produce a false Approve. Could tighten to match the Source: tag context.
  2. When transcripts are unavailable, the coverage block and verificationGaps each emit a cap line for the same root cause — two lines, both true and both capping correctly, but slightly redundant in the public body.

Nice work — the highest-value catch (a clean, zero-finding review that skipped its reverse audit and would otherwise have approved) is genuinely closed.

@wenshao
wenshao added this pull request to the merge queue Jul 15, 2026
Merged via the queue into main with commit 0d136bd Jul 15, 2026
40 checks passed
chinesepowered pushed a commit to chinesepowered/qwen-code that referenced this pull request Jul 16, 2026
…ompt (QwenLM#6994)

* feat(review): fold findings into the verify/reverse-audit prompt so it can't be paraphrased

Dogfooding the merged Step 4/5 coverage gate (QwenLM#6965) on a real 3A review turned up
the weakness it was built to expose. The orchestrator delivered every Step 3 prompt
verbatim — but PARAPHRASED the Step 4 (verify) and Step 5 (reverse-audit) ones: it
added a round number, inserted its own one-line summary, and truncated the recorded
line telling the agent the brief is the whole of its instructions. The gate caught it
(the launch prompt was not the recorded one) and capped the verdict, even though the
agents had opened their briefs and done real work.

The root cause is the hand-assembly step. Step 3 is a clean paste; Step 4/5 told the
orchestrator to "paste verbatim AND prepend the findings list", and constructing that
prepend is where the wording drifted. So this removes the assembly step: `agent-prompt
--role verify|reverse-audit --findings <file>` folds the list in and prints one block
to paste. There is nothing left to hand-build, so nothing to reword.

The findings are printed, not recorded. The record stays the findings-free launch
block, so the per-shard (verify) / per-round (reverse-audit) key keeps matching by the
add-only delivery rule — a printed `<findings>\n\n<block>` still contains the recorded
`<block>` in order — without baking a different findings list into each record. The
folded section restates that the brief is authoritative, which is the exact sentence
the hand-assembly used to truncate. `--findings` is declared on the brief
(`acceptsFindings`, like `acceptsChunk`) and rejected on any other role, on a bare
chunk agent, and on `--whole-diff`. SKILL Step 4/5 now write the findings to a file,
pass `--findings`, and paste the whole block verbatim — no round number, no rewording.

Tests: the verifier/auditor get the findings folded above a findings-free record that
still passes the delivery check; an empty findings file tells a first-round auditor
nothing is confirmed yet; the record is byte-identical with or without `--findings`
(the shared key is unaffected); and the guard rejects the flag everywhere it does not
belong.

* fix(review): derive the no-role --findings message, clean up temp dirs, test verify-empty

Three findings from the /review pass over this PR.

The "--findings with no role" error hardcoded `--role verify / --role reverse-audit`,
while the wrong-role branch two above it derives the list from `acceptsFindings`. A
future role with that flag would leave this one telling a stale story. It now derives
the same way (the `--chunk` guard already set this precedent).

The `--findings` test block created temp dirs and never removed them — the one block
in the file without try/finally cleanup. It now tracks each dir and sweeps them in an
`afterEach`.

`findingsSection('verify', '')` — a verifier handed an empty findings file — had no
test; only the reverse auditor's empty branch did. Added the symmetric case: it prints
"nothing to verify", not the auditor's "nothing is confirmed yet".

* test(review): cover --role reverse-audit --chunk N --findings F, the 3B path

The one valid flag triple was untested: reverse-audit declares both acceptsChunk and
acceptsFindings, and Step 5 3B launches `--role reverse-audit --chunk N --findings
<cumulative>` per chunk per round — the real production path. Added a case: the
findings fold above the chunk-scoped prompt, the printed prompt reads that chunk's
range (not another's), and the record is that chunk's block, findings-free, keyed
`reverse-audit--chunk-N`, and still passes the delivery check. The code was already
correct; nothing failed. Now it is pinned.

* test(review): assert each findingsSection role does NOT get the other's framing

The verify and reverse-audit non-empty tests each asserted their own framing heading
but not the absence of the other's, so a swap of the two branches in findingsSection
would have passed both. Added the mirror assertions: the verifier's prompt must not
say "Already confirmed", and the auditor's must not say "The findings you are ruling
on". The swap is now caught.

* fix(review): make findingsSection reject a role it has no framing for

findingsSection matched `verify` and fell through to the reverse auditor's framing
for everything else. A future role that sets acceptsFindings would pass every guard,
reach here, and silently receive "Already confirmed — do not re-report" — wrong for
any role not hunting gaps. The branches are now explicit (`verify`, `reverse-audit`)
with a throwing default, the same reasoning the no-role guard message already follows.
Exported and tested: a role it does not frame throws by name.
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.

4 participants