Skip to content

feat(review): swap re-review rounds to a fix-audit shape under the critical posture - #10136

Merged
wenshao merged 72 commits into
mainfrom
feat/review-critical-round-shape
Sep 21, 2026
Merged

wenshao merged 72 commits into
mainfrom
feat/review-critical-round-shape

Conversation

@wenshao

@wenshao wenshao commented Aug 26, 2026 •

Copy link
Copy Markdown
Collaborator

What this PR does

When a multi-round /review re-review is knowably headed for the critical-only posting posture and a usable incremental anchor exists, the round now runs a narrowed fix-audit shape instead of round 1's full shape:

  • Plan-time posture prediction. fetch-pr predicts the compose-time floor resolution from the side file pr-context persisted (the round schedule round+1 >= 6, or the latched flatRounds streak — monotone arms only) or from the CLI-recorded explicit floor (recovered with the same resolveGhHost host formula the compose/submit boundary uses), and records incremental.posture: "critical" with its postureCause in the plan. Every doubt state reads as "no posture" — the ordinary full round.
  • The fix-audit fan-out. The topology gate (isTerritoryFanOut) reads the posture, so a fix-audit round is a territory fan-out whatever its narrowed sizes say — the roster (chunk agents, no Agent 0; 1b/1c/7/test-matrix and heavy-file invariant agents stay), the round-cap tier (the 3B tier of 5, read beside sizeTier so the plan's default wall stays the one the delta's own size earns), the review: --all-chunks fans out per chunk without checking the plan's topology #9242 note and check-coverage all follow from the one shared predicate. Chunk briefs carry a fix-audit frame ("what did each fix change, what could that change break"); severities are unchanged — the floor governs posting, never finding.
  • Narrowed reverse-audit waves, not a lower cap. From wave 3, a chunk holding no delta file leaves the schedule after one substantive dry audit (counted per launch, with rounds 1 and 2, the convergence pair, as one launch, and never read off the findings list's rendering) and takes no cold checks; the wave re-launches the delta territories and every non-delta chunk the previous waves could not certify dry (a yield, an uncertified receipt, no history, a stale dry receipt). A plan whose scope record leaves a chunk unclassified restores the ordinary schedule. Recall stays where the measured fix-induced Criticals surfaced — waves up to the same cap — over a shrinking front; a round that converges through narrowing names the narrowed chunks in its CONVERGED exit.
  • Shape/posting alignment by construction. The plan's posture record is itself an arm of the floor resolution (floorResolvesCritical), so a round that ran the narrow shape defers sub-Critical findings even where the auto arms cannot re-derive it at compose time (a context-unavailable compose, a side file rewritten between capture and compose). An explicit --severity-floor suggestion still wins over a stale plan record, and the body then states the floor resolved open — and, beside a deferral list, that the deferrals carry no posture licence. The capture reads the operator's recorded floor through the same host evidence chain submit uses (flag, else the remote under review, else the gh fallback).
  • Every reduction is disclosed: the plan record (posture, cause), the chunk briefs, a posture narrowing: note beside the retirement note, and a "Round shape" paragraph compose-review renders into the posted body.

Why it's needed

Once a multi-round review settles into the critical-only posting posture (floor: c), the re-review round still ran round 1's full shape: the whole territory fan-out plus up to five full-width reverse-audit waves, while everything found below Critical was deferred anyway. Measured on PR #9729 round 15 (3h13m, ~131M input tokens): the entire 18-agent finder fan-out contributed nothing postable, all three posted Criticals first surfaced in the reverse-audit waves, and the one-hop import widening re-entered 89% of the diff because every fix commit touches hub files the rest of the PR imports. Sixteen such rounds cost ~50 runner-hours without converging. The signal on these rounds lives in the fix commits and their import seams; the shape should match it.

Reviewer Test Plan

How to verify

Non-UI change; everything is covered by deterministic unit and real-handler tests. From packages/cli:

npx vitest run src/commands/review            # 123 files, 6546 passed
npx vitest run src/commands/review/lib/posture.test.ts src/commands/review/lib/retirement.test.ts src/commands/review/lib/budget.test.ts src/commands/review/lib/roster.test.ts

and from packages/core: npx vitest run src/skills/bundled/review/SKILL.test.ts (69 passed). tsc --noEmit is clean for the review tree and eslint --max-warnings 0 is clean on every touched file.

What the new tests pin, end to end: the posture prediction's arms and clamps against compose's own resolution (posture.test.ts); the fix-audit roster and tier stamping (roster.test.ts, budget.test.ts); wave narrowing vs plain retirement (retirement.test.ts); the real fetch-pr handler wiring side file → posture → header-only publication → recorded budget tier (fetch-pr.test.ts); briefs and the round's narrowing note through the real builder (agent-prompt.test.ts); and the body disclosure with both floor branches, including the context-unavailable alignment arm and the explicit-suggestion override (compose-review.test.ts).

Twenty-five review rounds have run over this diff. Every reported finding is addressed here and every review thread is answered; all are resolved except one human design thread on the plan file's trust boundary, which is waiting on the reviewer. The last takeover closed ten carried Criticals (the seam oracle's uncovered binding shapes, the continuity stamp's round identity and its channel, the staleness arms' round-level folds and unanchored entry regex, the clamped pure-deletion hunk, and the format gate) and then reverse-audited its own delta over six further rounds, which added the fail-closed reading of an uncomparable sibling list, the base's own shed rung, the end-to-end wiring test, and the disclosures the deletion-hunk keep made inaccurate. Round 24's two Criticals are closed as well. An anonymously adopted round counter now carries its own provenance stamp, which the posture prediction refuses. And the reverse-audit narrowing no longer reads the model-edited findings list at all: it rules on launch order, so the class R20-3 filed across five rounds goes away with the parse it lived in. The branch is also merged with main's explicit-deadline change (#11686): a fix-audit round keeps the 3B round cap, while its default wall stays sized by the delta. Round 25's Critical is closed as well: a launch the scheduler cannot tie to a prompt record still counts, through the brief it names or its agent opened, or the rest of its block it delivered, as a member of the round it ran in, and both the posture narrowing and the ordinary retirement rule read it, so a lost record no longer turns a stale dry launch or a lost cold check into a clean convergence, apart from the residuals listed in DESIGN.md. A return that was not dry, written after a dry launch was built, now holds the narrowing too. Every behavioural change here has a test that goes red when the change alone is reverted.

Evidence (Before & After)

N/A (no UI change). Behavioral delta in one line: a critical-posture re-review that previously ran 13 territory chunks + Agent 0/1b/1c/7 + 5 full-width audit waves over 89% of the diff now runs chunk agents over the delta and its import-seam interaction files only, no Agent 0, and audit waves that shed provably-dry non-delta territories — with the reduction disclosed in the plan, the briefs, the round notes, and the posted body.

Tested on

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

Environment (optional)

Unit tests only (vitest aliases to src; no build needed).

Risk & Scope

  • Main risk or tradeoff: the fix-audit round deliberately trades recall it has priced — an interaction-only territory leaves the reverse-audit wave after one round the record certifies dry in every member (the issue's own stated rule). The trade is documented in DESIGN.md and disclosed per round. The third lever the issue proposed, a seam-bounded republication of interaction files, was implemented and then removed: its premise is per-file while the only gate that could vouch it is per-base, and closing that needs publication state the marker has no channel for. Interaction files re-enter with their full-range sections, as on any other incremental round.
  • Not validated / out of scope: no live multi-round dogfood run on a real long-lived PR yet (the shape only engages from round 6 or a latched flat streak); wave-cap tiers, floor semantics, standing-blocker re-check, and verdict semantics are unchanged by design.
  • Breaking changes / migration notes: none. The plan fields are additive (incremental.posture, postureCause); plans without them behave exactly as before, and every reader fails toward the full round on malformed input.

Linked Issues

Closes #10104. Related: #9790 (continuous agent-budget scaling), #9783 / #9919 (model-side scaffolding reduction), #9578 (fix-induced defect measurement).

中文说明

本 PR 做了什么

当多轮 /review re-review 可预知进入 critical-only 发布姿态且存在可用增量锚点时,该轮不再跑第 1 轮的全量形态,改跑收窄的 fix-audit 形态:

  • plan 期姿态预测:fetch-pr 从 pr-context 持久化的 side file(轮次日程 round+1 >= 6,或已锁存的 flatRounds 信号——只取单调臂)或 CLI 记录的显式下限(用与 compose/submit 边界相同的 resolveGhHost host 公式恢复)预测 compose 期的下限决议,并在 plan 里记录 incremental.posture: "critical" 与 postureCause。一切疑态都读作"无姿态"——普通全量轮。
  • fix-audit 扇出:拓扑门(isTerritoryFanOut)读取姿态,fix-audit 轮无论收窄后的尺寸如何都走领地扇出——roster(chunk agents、去掉 Agent 0;1b/1c/7/test-matrix 与 heavy 文件 invariant agents 保留)、round-cap tier(3B 档的 5;它在 sizeTier 之外读取姿态,所以 plan 的默认 wall 仍按 delta 自身尺寸定)、review: --all-chunks fans out per chunk without checking the plan's topology #9242 提示与 check-coverage 全部从这一个共享谓词得出。chunk brief 带 fix-audit 框架("每个修复改了什么、改动可能破坏什么");严重度语义不变——下限只管发布,不管发现。
  • 反审收面而非降波数上限:第 3 波起,不含 delta 文件的 chunk 在一次实质性干燥审计(按启动计:第 1、2 轮的收敛对算作一次启动;从不读取发现清单的渲染)后退出调度、不占冷检;每一波重发 delta 领地与此前各波未能证实干燥的每个非 delta chunk(出过发现、收据未认证、无历史、过时的干燥收据)。scope 记录未对某个 chunk 分类的 plan 会恢复普通调度。召回保持在测得 fix-induced Critical 出现的位置——同一上限内的后期波次——只是覆盖面收缩;经收窄收敛的轮次在 CONVERGED 出口点名被收窄的 chunk。
  • 形态与发布口径构造性对齐:plan 的姿态记录本身是下限决议(floorResolvesCritical)的一个证据臂,因此跑了收窄形态的轮次即使 compose 期无法重推(context-unavailable、side file 在 capture 与 compose 之间被改写)也照样延后 sub-Critical 发现。本轮显式 --severity-floor suggestion 仍胜过陈旧的 plan 记录,此时正文如实声明下限实际为开放——并在延后清单旁说明这些延后没有姿态授权。capture 用与 submit 相同的 host 证据链(flag,否则被审远端,否则 gh 回退)读取操作者记录的下限。
  • 所有收窄均披露:plan 记录(posture、cause)、chunk brief、posture narrowing: note、以及 compose-review 渲染进发布正文的"轮次形态"段落。

为什么需要

多轮评审进入 critical-only 发布姿态(floor: c)后,re-review 轮仍然跑第 1 轮的全量形态:全量领地扇出加最多五波全宽反向审计,而所有低于 Critical 的发现最终都进 deferral。在 PR #9729 第 15 轮(3h13m、约 1.31 亿 input tokens)上的测量:整个 18-agent finder 扇出没有产出任何可发布内容,该轮发布的全部三条 Critical 均首现于反审波,import 一跳加宽把 89% 的 diff 拉回范围(每个修复 commit 都会碰被全 PR import 的枢纽文件)。这样的轮次跑了 16 轮、约 50 runner 小时仍未收敛。这类轮次的信号在修复 commit 及其 import 接缝上;形态应当与之匹配。

Reviewer Test Plan

如何验证

非 UI 改动;全部行为由确定性单元测试与真实 handler 测试覆盖。在 packages/cli 下:

npx vitest run src/commands/review            # 123 个文件,6546 例通过
npx vitest run src/commands/review/lib/posture.test.ts src/commands/review/lib/retirement.test.ts src/commands/review/lib/budget.test.ts src/commands/review/lib/roster.test.ts

在 packages/core 下:npx vitest run src/skills/bundled/review/SKILL.test.ts(69 例通过)。review 目录 tsc --noEmit 干净;触及文件 eslint --max-warnings 0 干净。

新增测试端到端钉住:姿态预测各臂与钳制对 compose 决议的对齐(posture.test.ts);fix-audit roster 与 tier 落章(roster.test.ts、budget.test.ts);波次收窄对比普通退役(retirement.test.ts);真实 fetch-pr handler 的 side file → posture → header-only 发布 → 预算档位接线(fetch-pr.test.ts);真实 builder 的 brief 与轮次收窄 note(agent-prompt.test.ts);正文披露的两个下限分支,含 context-unavailable 对齐臂与显式 suggestion 优先(compose-review.test.ts)。

本 diff 已历经 25 轮评审。所报发现全部在本 PR 内解决,全部评审线程均已答复;除一条关于 plan 文件信任边界、正在等待评审者回复的人工设计线程外,其余均已关闭。最近一次接管关闭了 10 条沿用的 Critical(接缝 oracle 未覆盖的绑定形状、连续性落章的轮次身份与通道、过时判定分支的轮级折叠与未锚定条目正则、被钳位的纯删除 hunk、格式门),随后对自身增量又做了 6 轮反向审计,补上了「无法比较的兄弟清单按 fail-closed 读取」「base 自己的字节脱落档位」「端到端接线测试」以及删除 hunk 保留所导致的披露口径修正。第 24 轮的两条 Critical 也已关闭。匿名采纳的轮次计数器现在带有独立的来源戳记,姿态预测据此拒绝。反审收窄不再读取模型编辑的发现清单,改按启动顺序判定;R20-3 连续五轮所报的那一类问题随这层解析一起消失。分支还合并了 main 的显式 deadline 改动(#11686):fix-audit 轮保持 3B 轮次上限,默认 wall 仍按 delta 尺寸定。第 25 轮的 Critical 也已关闭:调度器没法对上 prompt 记录的启动,仍会凭它点名或其 agent 打开过的 brief、或它投递到位的其余块内容,计为它所在轮次的成员;姿态收窄和普通退役规则都读取这一点,所以丢失一条记录不再让过时的干燥启动或丢失的冷检变成一次干净收敛,DESIGN.md 列出的遗留情形除外。写在干燥启动构建之后的非干燥返回,现在同样会拦住收窄。此处每一处行为变更都有一个「单独回退即变红」的测试。

证据(Before & After)

N/A(无 UI 改动)。行为差一句话:critical 姿态的 re-review 从"13 个领地 chunk + Agent 0/1b/1c/7 + 5 波全宽反审覆盖 89% diff"变为"chunk agents 只覆盖 delta 及其 import 接缝 interaction 文件、无 Agent 0、反审波次剔除已证干燥的非 delta 领地"——且全部收窄在 plan、brief、轮次 note 与发布正文中披露。

测试环境

OS 状态
🍏 macOS ⚠️
🪟 Windows ⚠️
🐧 Linux ✅

环境(可选)

仅单元测试(vitest 直连 src,无需构建)。

风险与范围

  • 主要风险/取舍:fix-audit 轮刻意换取了已计价的召回——interaction-only 领地在「该轮每个成员都被认证为干燥」后即退出反审波(issue 原文的规则)。该取舍记录在 DESIGN.md 并逐轮披露。issue 提出的第三档「interaction 文件按接缝限宽重发」曾实现后移除:其前提是按文件的,而唯一能为其背书的闸门是按 base 的,要补上需要 marker 没有通道承载的发布状态。interaction 文件恢复为全量 section 重发,与其它增量轮一致。
  • 未验证/范围外:尚未在真实长寿 PR 上做多轮 dogfood(形态仅从第 6 轮或 flat 信号锁存后触发);波数上限档位、下限语义、standing-blocker 复核、判定语义均按设计不变。
  • 破坏性变更/迁移说明:无。plan 字段为增量式(incremental.posture、postureCause);不带这些字段的 plan 行为与之前完全一致,所有读取端对畸形输入一律回退到全量轮。

关联 Issue

Closes #10104。相关:#9790(agent 预算随 diff 连续伸缩)、#9783 / #9919(模型侧脚手架精简)、#9578(fix-induced 缺陷测量)。

…itical posture

Once a multi-round review settles into the critical-only posting posture
(floor: c), the re-review round still ran round 1's full shape: the whole
territory fan-out plus up to five full-width reverse-audit waves, while
everything found below Critical was deferred anyway. Measured on PR #9729
round 15, the 3h13m / 131M-token round's entire finder fan-out contributed
nothing postable, all three posted Criticals first surfaced in the
reverse-audit waves, and the one-hop import widening re-entered 89% of the
diff.

When the posture is knowable at capture time and a usable anchor exists,
the round now changes shape:

- fetch-pr predicts the compose-time floor resolution from the side file
  pr-context persisted (round schedule and latched flatRounds — monotone
  arms only) or the CLI-recorded explicit floor, and records
  incremental.posture: "critical" with its postureCause in the plan.
- The topology gate reads the posture: a fix-audit round is a territory
  fan-out whatever its narrowed sizes say, so the roster (chunk agents, no
  Agent 0), the round-cap tier and the #9242 note all follow from the one
  shared predicate. Chunk briefs carry a fix-audit frame; severities are
  unchanged (the floor governs posting, never finding).
- Interaction files re-enter seam-bounded: only the hunks displaying a
  line that imports or uses what changed republish, with a
  seam: {kept, total} census per entry; a file with no seam hunk publishes
  header-only and still lands in a chunk so its brief asks the seam
  question from the worktree. Every doubt state republishes in full.
- Reverse-audit waves narrow instead of the cap lowering: from round 3 a
  chunk holding no delta file leaves the schedule after one substantive
  dry audit and takes no cold checks, while delta territories keep the
  full retirement rules — recall stays where the measured fix-induced
  Criticals surfaced (waves up to the cap), over a shrinking front.
- Every reduction is disclosed: the plan record, the briefs' seam census,
  a posture-narrowing note beside the retirement note, and a round-shape
  paragraph compose-review renders into the posted body.

Closes #10104
@github-actions github-actions Bot added the review/self-reported The linked issue was opened by the PR author (self-reported) label Aug 26, 2026
@github-actions

github-actions Bot commented Aug 26, 2026 •

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 85.85% 85.85% 91.05% 84.69%
Core 88.92% 88.92% 90.58% 87.34%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   85.85 |    84.69 |   91.05 |   85.85 |                   
 src               |   86.53 |    82.86 |   88.88 |   86.53 |                   
  cli.ts           |   95.92 |    88.23 |     100 |   95.92 | ...00-701,705-706 
  llm.tsx          |   73.22 |    77.73 |   80.76 |   73.22 | ...1345-1349,1476 
  ...ractiveCli.ts |   89.27 |    83.13 |   89.06 |   89.27 | ...3157,3163,3229 
  ...liCommands.ts |   89.71 |    84.17 |   81.81 |   89.71 | ...31-633,650,757 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   75.37 |    77.84 |   93.83 |   75.37 |                   
  acpAgent.ts      |   74.58 |    77.79 |   93.18 |   74.58 | ...99,13777-13778 
  ...k-reporter.ts |     100 |       80 |     100 |     100 | 81,84,119,141     
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  ...heap-probe.ts |   97.39 |    96.66 |     100 |   97.39 | 243,264-265       
  errorCodes.ts    |     100 |      100 |     100 |     100 |                   
  ...ion-skills.ts |     100 |     87.5 |     100 |     100 | 17,28             
  generation.ts    |    97.1 |    81.25 |     100 |    97.1 | 109,112           
  ...figuration.ts |     100 |    89.65 |     100 |     100 | 79,125,142        
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
  ...ersistence.ts |   94.95 |    92.24 |     100 |   94.95 | ...13-118,227-228 
  ...management.ts |   74.75 |     66.3 |     100 |   74.75 | ...92-496,505-509 
  ...e-download.ts |    64.7 |    62.24 |    87.5 |    64.7 | ...08-609,615-619 
 ...tegration/live |   97.53 |    88.23 |   92.85 |   97.53 |                   
  ...en-context.ts |   95.89 |    82.85 |     100 |   95.89 | ...,72-73,105-106 
  ...structions.ts |     100 |      100 |     100 |     100 |                   
  ...ak-to-user.ts |   96.66 |      100 |    87.5 |   96.66 | 37-38             
  ...task-tools.ts |   98.97 |      100 |   88.88 |   98.97 | 201-202           
 ...ration/service |    97.1 |    95.89 |   93.75 |    97.1 |                   
  filesystem.ts    |    97.1 |    95.89 |   93.75 |    97.1 | ...22-123,246-247 
 ...ration/session |   91.03 |     86.2 |   95.86 |   91.03 |                   
  Session.ts       |   90.38 |    85.15 |    95.3 |   90.38 | ...81,13808-13812 
  ...entTracker.ts |   96.88 |    89.36 |      90 |   96.88 | 139-145,224       
  ...projection.ts |   98.85 |    91.59 |     100 |   98.85 | 234,250,262       
  ...stop-guard.ts |     100 |    98.07 |     100 |     100 | 37,127            
  ...eplay-page.ts |   94.19 |    86.53 |     100 |   94.19 | ...53,357,437,441 
  ...y-replayer.ts |   83.41 |    93.33 |   94.11 |   83.41 | ...30-148,266-268 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   89.19 |     87.8 |     100 |   89.19 | ...85-304,363-365 
  ...oal-update.ts |   98.61 |    97.29 |     100 |   98.61 | 64                
  ...lure-guard.ts |   98.32 |    97.72 |     100 |   98.32 | 294-295,340-341   
  tasksSnapshot.ts |   95.85 |    71.11 |     100 |   95.85 | 68-74,190-191     
  ...on-tracker.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ssion/emitters |   95.65 |    92.34 |   97.14 |   95.65 |                   
  ...ageEmitter.ts |   95.36 |    92.42 |     100 |   95.36 | ...16,129-130,223 
  PlanEmitter.ts   |     100 |       90 |     100 |     100 | 66                
  base-emitter.ts  |   78.26 |    77.77 |     100 |   78.26 | 23-24,26-28       
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
  ...ll-emitter.ts |   98.57 |    94.84 |     100 |   98.57 | 75-76,394-395     
 ...ession/rewrite |   96.03 |    89.79 |   94.44 |   96.03 |                   
  LlmRewriter.ts   |   94.01 |    88.23 |     100 |   94.01 | 101-102,179-183   
  ...Middleware.ts |   96.99 |    88.37 |     100 |   96.99 | 145,153-155       
  TurnBuffer.ts    |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/agent-view    |   86.88 |    81.08 |   94.01 |   86.88 |                   
  attach-lease.ts  |     100 |    97.05 |     100 |     100 | 173               
  ...t-cli-argv.ts |     100 |     92.3 |     100 |     100 | 15                
  ...ged-detach.ts |     100 |     90.9 |     100 |     100 | 40,64             
  presentation.ts  |   94.13 |    88.72 |   94.73 |   94.13 | ...57-358,382-384 
  protocol.ts      |     100 |      100 |     100 |     100 |                   
  pty-host-env.ts  |     100 |      100 |     100 |     100 |                   
  ...st-process.ts |   88.52 |    78.91 |   94.44 |   88.52 | ...1305,1395-1397 
  pty-host.ts      |   85.25 |    87.03 |   90.69 |   85.25 | ...22-524,539-540 
  ...sor-client.ts |   80.38 |    72.54 |   77.41 |   80.38 | ...22-626,652-656 
  ...r-dispatch.ts |      98 |    85.18 |     100 |      98 | 117,173,190       
  ...or-process.ts |   83.86 |    77.59 |   98.72 |   83.86 | ...4479-4482,4485 
  ...sor-runner.ts |   82.43 |    76.82 |   80.95 |   82.43 | ...69,493,496-506 
  ...sor-server.ts |   84.39 |    83.67 |    93.1 |   84.39 | ...67-568,571-588 
  ...isor-store.ts |   95.56 |    86.38 |     100 |   95.56 | ...,966,1008,1023 
  ...nal-bridge.ts |   93.98 |    91.54 |   83.33 |   93.98 | 228-238           
  ...r-sideband.ts |   94.91 |    89.36 |     100 |   94.91 | ...75-276,299-304 
 src/commands      |   90.73 |    78.53 |   65.62 |   90.73 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  channel.ts       |   55.55 |      100 |       0 |   55.55 | 18-22,30-40       
  extensions.tsx   |   96.77 |      100 |      50 |   96.77 | 39                
  hooks.tsx        |   66.66 |      100 |       0 |   66.66 | 20-24             
  mcp.ts           |   95.45 |      100 |      50 |   95.45 | 31                
  review.ts        |   98.94 |      100 |      50 |   98.94 | 106               
  serve.ts         |   89.46 |    76.02 |     100 |   89.46 | ...12-915,927,938 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.13 |    94.44 |   66.66 |   98.13 | 82-83             
 ...mmands/channel |   89.46 |    88.72 |   90.68 |   89.46 |                   
  channel-cwd.ts   |     100 |      100 |     100 |     100 |                   
  ...l-registry.ts |   94.78 |    94.59 |      90 |   94.78 | ...32-335,380-383 
  ...entry-path.ts |      75 |       50 |     100 |      75 | 8-9               
  config-utils.ts  |   96.84 |    96.22 |     100 |   96.84 | ...40-245,303-306 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   93.72 |    85.81 |   94.33 |   93.72 | ...1305,1312-1313 
  loop-runtime.ts  |   91.66 |      100 |      50 |   91.66 | 15,22             
  ...classifier.ts |   98.53 |    96.66 |     100 |   98.53 | 115-116,161       
  ...tact-store.ts |   93.51 |    87.65 |     100 |   93.51 | ...71,288-289,337 
  pairing.ts       |      75 |      100 |      50 |      75 | 22-28,59-70       
  pidfile.ts       |   95.55 |       90 |     100 |   95.55 | ...50-251,315-316 
  proxy.ts         |     100 |      100 |     100 |     100 |                   
  reload.ts        |    77.5 |    86.95 |      75 |    77.5 | 72-84,93-97       
  runtime.ts       |   82.43 |    86.44 |     100 |   82.43 | ...87-191,251-253 
  set.ts           |   75.72 |    85.71 |      50 |   75.72 | 65-83,111-116     
  start.ts         |    87.7 |    83.63 |      88 |    87.7 | ...95,601-604,616 
  ...ure-format.ts |   93.65 |    82.45 |     100 |   93.65 | ...42,48-49,74-75 
  status.ts        |   78.57 |    59.25 |   66.66 |   78.57 | ...36-137,150-161 
  stop.ts          |   57.83 |    82.35 |      50 |   57.83 | ...3,74-76,85-111 
 ...nds/extensions |   88.85 |    87.91 |   87.09 |   88.85 |                   
  consent.ts       |   72.53 |    90.32 |   42.85 |   72.53 | ...86-142,157-163 
  disable.ts       |     100 |       90 |     100 |     100 | 30                
  enable.ts        |     100 |    91.66 |     100 |     100 | 38                
  install.ts       |   82.95 |    81.57 |      75 |   82.95 | ...96-199,202-211 
  link.ts          |     100 |      100 |     100 |     100 |                   
  list.ts          |     100 |     90.9 |     100 |     100 | 18                
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   99.15 |      100 |   83.33 |   99.15 | 151               
  sources.ts       |   93.42 |    87.09 |   92.85 |   93.42 | ...4-66,96-98,167 
  uninstall.ts     |   74.57 |       40 |   66.66 |   74.57 | 45-47,60-67,70-73 
  update.ts        |   96.71 |    97.05 |     100 |   96.71 | 114-118           
  utils.ts         |   75.63 |    57.14 |     100 |   75.63 | ...30-134,136-140 
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-60              
 ...amples/starter |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-64              
 src/commands/mcp  |   91.19 |    88.76 |   85.71 |   91.19 |                   
  add.ts           |    99.3 |    96.07 |     100 |    99.3 | 154-155           
  approve.ts       |   76.19 |     87.5 |   66.66 |   76.19 | ...,89-99,114-124 
  list.ts          |    92.9 |    84.84 |      80 |    92.9 | ...79-181,199-200 
  reconnect.ts     |   85.54 |    86.76 |    90.9 |   85.54 | 45-58,337-359     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   92.05 |    90.56 |   93.56 |   92.05 |                   
  ab-drive.ts      |   85.22 |    90.47 |   94.11 |   85.22 | ...50-926,969-972 
  agent-prompt.ts  |   94.89 |     92.8 |      98 |   94.89 | ...3413,3748-3828 
  base-tree.ts     |   77.02 |    80.76 |   77.77 |   77.02 | ...63-384,386-399 
  capture-local.ts |   94.68 |     97.6 |   94.11 |   94.68 | 269,1334-1372     
  ...k-coverage.ts |   50.71 |       35 |   66.66 |   50.71 | ...40-245,279-289 
  cleanup.ts       |   92.34 |     89.5 |    90.9 |   92.34 | ...1107,1109-1110 
  comment-body.ts  |   67.85 |    87.09 |   66.66 |   67.85 | ...30,157,159-164 
  ...ent-status.ts |   94.22 |    87.32 |    90.9 |   94.22 | ...96,462,738-758 
  ...ose-review.ts |   97.42 |    93.96 |   98.75 |   97.42 | ...6793-6837,7097 
  cost-ledger.ts   |   94.58 |     94.4 |   81.25 |   94.58 | ...53-654,694-704 
  ...candidates.ts |   93.12 |    93.95 |   84.61 |   93.12 | ...49-660,662-674 
  drive.ts         |   97.12 |    89.85 |     100 |   97.12 | ...83-985,990-992 
  emit-workflow.ts |   90.57 |     93.1 |   83.33 |   90.57 | 154,176,285-295   
  extract-step.ts  |   91.36 |    90.62 |   88.88 |   91.36 | ...90-707,714-729 
  fetch-diff.ts    |   73.75 |      100 |   66.66 |   73.75 | 77-97             
  fetch-pr.ts      |    98.1 |     92.4 |     100 |    98.1 | ...1149,1419,1641 
  findings.ts      |    96.3 |    93.68 |     100 |    96.3 | ...1418,1427-1428 
  issue-context.ts |   88.15 |     93.1 |   85.71 |   88.15 | 249-276           
  load-rules.ts    |   26.41 |      100 |   16.66 |   26.41 | ...41-153,155-156 
  match-remote.ts  |   85.55 |     92.3 |   66.66 |   85.55 | 74-79,144-150     
  meta.ts          |   79.43 |    93.75 |   66.66 |   79.43 | 123-128,147-162   
  mock-provider.ts |   95.44 |    90.25 |   89.47 |   95.44 | 145,690-709       
  parse-args.ts    |   99.48 |    95.74 |     100 |   99.48 | 665,990,1046,1082 
  plan-diff.ts     |   71.42 |      100 |   66.66 |   71.42 | 162-197           
  pr-context.ts    |   96.22 |    88.86 |     100 |   96.22 | ...2580,2681-2697 
  presubmit.ts     |   94.32 |    90.83 |   94.11 |   94.32 | ...1219,1254-1285 
  ...ish-assets.ts |    81.3 |    82.22 |   85.71 |    81.3 | ...75-479,506-552 
  ...r-findings.ts |   90.74 |    83.75 |     100 |   90.74 | ...17-422,429-430 
  repo-context.ts  |   94.62 |    90.75 |     100 |   94.62 | ...66-467,482-487 
  ...ve-anchors.ts |   78.34 |    89.28 |      75 |   78.34 | ...83-188,200-217 
  revert-hunk.ts   |   91.48 |    87.94 |     100 |   91.48 | ...1189,1236-1239 
  run.ts           |   84.47 |    87.58 |   95.45 |   84.47 | ...00,816-870,884 
  save-artifact.ts |    94.2 |    92.46 |   94.11 |    94.2 | ...14-617,710-713 
  scratch-tree.ts  |   95.93 |       86 |     100 |   95.93 | ...91-392,461-464 
  script-lint.ts   |   81.27 |    80.45 |   88.88 |   81.27 | ...69-783,785-807 
  submit.ts        |   94.21 |       89 |   94.44 |   94.21 | ...1710,1738-1775 
  test-delta.ts    |   95.75 |     92.3 |      75 |   95.75 | 470-478           
  test-efficacy.ts |   84.03 |    80.48 |   96.07 |   84.03 | ...3249,3257-3277 
  test-plan.ts     |   94.61 |    91.79 |      95 |   94.61 | ...29-832,873-874 
  ...low-script.ts |     100 |      100 |     100 |     100 |                   
 ...w/__fixtures__ |     100 |      100 |     100 |     100 |                   
  ...r-default.mjs |     100 |      100 |     100 |     100 |                   
  ...der-empty.mjs |     100 |      100 |     100 |     100 |                   
  ...der-named.mjs |     100 |      100 |     100 |     100 |                   
 ...nds/review/lib |   97.38 |    94.59 |   98.71 |   97.38 |                   
  agent-briefs.ts  |   99.08 |      100 |      50 |   99.08 | 841-842           
  ...t-identity.ts |     100 |      100 |     100 |     100 |                   
  anchors.ts       |     100 |    97.04 |     100 |     100 | ...39,175,184,231 
  assets.ts        |     100 |      100 |     100 |     100 |                   
  audit-layers.ts  |   98.67 |    96.15 |     100 |   98.67 | 288-290           
  authorization.ts |    96.5 |    95.65 |     100 |    96.5 | ...54-255,629-630 
  budget.ts        |     100 |    98.31 |     100 |     100 | 968,1021          
  build-budget.ts  |     100 |      100 |     100 |     100 |                   
  certification.ts |     100 |      100 |     100 |     100 |                   
  convergence.ts   |     100 |    97.94 |    92.3 |     100 | 52,515,620,716    
  coverage.ts      |   98.97 |    95.12 |     100 |   98.97 | ...1103,1648-1649 
  deadline.ts      |   98.03 |    91.66 |     100 |   98.03 | ...20,752,820,837 
  diff-flags.ts    |     100 |        0 |     100 |     100 | 75                
  diff-plan.ts     |   99.29 |    95.79 |     100 |   99.29 | 295-296,319       
  disk.ts          |     100 |      100 |     100 |     100 |                   
  effort.ts        |     100 |      100 |     100 |     100 |                   
  failing-files.ts |     100 |    93.33 |     100 |     100 | 41                
  gh.ts            |   89.53 |    95.52 |   78.94 |   89.53 | ...47,384-385,412 
  git.ts           |   96.92 |    94.11 |     100 |   96.92 | 264-265,302-303   
  heavy.ts         |     100 |      100 |     100 |     100 |                   
  import-graph.ts  |   97.57 |       90 |     100 |   97.57 | ...11-212,501-503 
  ...ntal-scope.ts |   98.68 |    93.33 |     100 |   98.68 | 166               
  inline-counts.ts |     100 |      100 |     100 |     100 |                   
  ...audit-gate.ts |     100 |     97.5 |     100 |     100 | 135               
  ledger.ts        |     100 |    99.47 |     100 |     100 | 884               
  local-anchor.ts  |   94.36 |    89.24 |     100 |   94.36 | ...36,669-670,818 
  local-diff.ts    |   86.77 |    94.28 |     100 |   86.77 | ...54-564,566-574 
  ...ry-context.ts |   96.61 |    95.48 |     100 |   96.61 | ...47-450,496-499 
  md-field.ts      |     100 |      100 |     100 |     100 |                   
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  narrow-diff.ts   |     100 |      100 |     100 |     100 |                   
  npm-toolchain.ts |   98.23 |    95.29 |     100 |   98.23 | ...,822,1203,1220 
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |    95.6 |    88.67 |     100 |    95.6 | 40-41,168-173     
  posture.ts       |     100 |      100 |     100 |     100 |                   
  prompt-record.ts |   98.03 |    94.23 |     100 |   98.03 | 293-294,300       
  receipt.ts       |     100 |      100 |     100 |     100 |                   
  remote-match.ts  |   98.03 |    94.73 |     100 |   98.03 | 109-110           
  report.ts        |   92.92 |    86.66 |     100 |   92.92 | 213-214,216-220   
  ...ry-context.ts |     100 |    98.66 |     100 |     100 | 187               
  resume.ts        |     100 |      100 |     100 |     100 |                   
  retirement.ts    |     100 |    94.66 |     100 |     100 | ...68-569,784,987 
  review-footer.ts |   99.55 |    98.09 |     100 |   99.55 | 548-549           
  ...w-settings.ts |     100 |    96.42 |     100 |     100 | 99                
  roster.ts        |     100 |    97.14 |     100 |     100 | 183,240           
  round-model.ts   |     100 |      100 |     100 |     100 |                   
  run-ledger.ts    |    98.2 |    93.87 |     100 |    98.2 | ...23,541,647,670 
  same-file.ts     |     100 |       95 |     100 |     100 | 46                
  ...boxed-exec.ts |   94.26 |    89.32 |   95.65 |   94.26 | ...49-550,728-729 
  shell-quote.ts   |     100 |      100 |     100 |     100 |                   
  stale-bundle.ts  |   98.18 |    94.38 |     100 |   98.18 | 431,472,512-513   
  test-utils.ts    |   99.04 |    91.66 |     100 |   99.04 | 75                
  toolchain.ts     |     100 |      100 |     100 |     100 |                   
  transcripts.ts   |   98.09 |    95.07 |     100 |   98.09 | ...92,438,707-708 
  ...pace-scope.ts |     100 |    96.96 |     100 |     100 | 186               
  workspaces.ts    |     100 |    96.85 |     100 |     100 | 222,452,499,512   
  ...ree-reader.ts |     100 |      100 |     100 |     100 |                   
  worktree.ts      |   89.39 |    81.78 |     100 |   89.39 | ...1813-1814,1827 
 ...w/lib/platform |   94.71 |    87.89 |   97.05 |   94.71 |                   
  aone-client.ts   |   94.94 |     87.3 |     100 |   94.94 | ...92-293,299-302 
  aone.ts          |   93.06 |    89.86 |   94.73 |   93.06 | ...34,598-603,655 
  github.ts        |   99.08 |     75.8 |     100 |   99.08 | 249-250           
  registry.ts      |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...mands/sessions |   94.11 |    89.06 |   89.47 |   94.11 |                   
  common.ts        |     100 |      100 |     100 |     100 |                   
  list.ts          |   90.96 |    86.66 |   81.81 |   90.96 | 208-219,221-222   
  ps.ts            |     100 |    94.44 |     100 |     100 | 58                
 src/config        |   94.37 |    90.46 |    95.3 |   94.37 |                   
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.36 |    88.37 |     100 |   93.36 | ...06-307,330-331 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  compile-cache.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |    88.2 |    90.75 |   86.11 |    88.2 | ...2314,2316-2324 
  ...cy-monitor.ts |      90 |    77.27 |     100 |      90 | ...72-73,90-92,98 
  ...ust-policy.ts |   83.02 |    88.88 |     100 |   83.02 | ...02-209,232-240 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  environment.ts   |   94.63 |    92.38 |   95.23 |   94.63 | ...24-625,693-694 
  ...le-watcher.ts |   90.86 |    83.65 |   95.83 |   90.86 | ...23-325,370,418 
  ...resh-state.ts |   90.57 |    97.29 |   93.75 |   90.57 | 137-142,146-152   
  ...ime-reload.ts |     100 |    69.69 |     100 |     100 | ...12-113,122-123 
  hot-reload.ts    |     100 |    89.13 |     100 |     100 | 47,172-178,238    
  keyBindings.ts   |    97.4 |       50 |     100 |    97.4 | 240-243           
  ...ngsAdapter.ts |     100 |    94.11 |     100 |     100 | 64                
  ...ig-watcher.ts |   95.17 |    83.05 |     100 |   95.17 | ...78,200,292-293 
  ...er-secrets.ts |   98.97 |    96.87 |     100 |   98.97 | 85                
  mcpApprovals.ts  |   78.57 |       92 |   86.66 |   78.57 | ...18-319,324-326 
  mcpJson.ts       |     100 |      100 |     100 |     100 |                   
  mcpServers.ts    |   92.85 |     87.5 |     100 |   92.85 | 46-47             
  ...idersScope.ts |      95 |    94.73 |     100 |      95 | 11-12             
  ...abledTools.ts |     100 |      100 |     100 |     100 |                   
  ...comparison.ts |     100 |      100 |     100 |     100 |                   
  ...n-settings.ts |   99.15 |    93.93 |     100 |   99.15 | 63                
  sandboxConfig.ts |   93.33 |    93.33 |     100 |   93.33 | ...42-147,216-217 
  session-id.ts    |     100 |      100 |     100 |     100 |                   
  ...ings-cache.ts |   96.52 |    93.93 |     100 |   96.52 | 90-91,201-202     
  settings.ts      |   91.52 |    92.85 |   90.32 |   91.52 | ...1073,1075-1076 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  settingsUtils.ts |   80.92 |     89.2 |   85.18 |   80.92 | ...87-605,612-620 
  ...ngsWatcher.ts |   95.54 |    88.34 |     100 |   95.54 | ...28,277-278,293 
  ...d-env-keys.ts |     100 |      100 |     100 |     100 |                   
  ...l-settings.ts |     100 |      100 |     100 |     100 |                   
  ...paths-lite.ts |   89.47 |       88 |     100 |   89.47 | 43-44,53-54,56-57 
  ...el-options.ts |     100 |      100 |     100 |     100 |                   
  ...precedence.ts |   98.79 |     92.3 |     100 |   98.79 | 62                
  ...tedFolders.ts |   92.53 |    93.54 |     100 |   92.53 | ...36-337,373-384 
 ...nfig/migration |   95.23 |    78.94 |   85.71 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |       80 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.91 |      100 |     100 |   94.91 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |      100 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
  v5-to-v4.ts      |      96 |      100 |     100 |      96 | 94-95,99          
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |   75.08 |    67.64 |   71.42 |   75.08 |                   
  ...tputBridge.ts |   75.33 |    68.18 |   73.68 |   75.33 | ...09-410,418-421 
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/export        |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-7               
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/hooks         |     100 |      100 |     100 |     100 |                   
  ...elete-hook.ts |     100 |      100 |     100 |     100 |                   
 src/i18n          |   89.68 |    88.66 |   93.02 |   89.68 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  languageUtils.ts |   98.88 |    97.01 |     100 |   98.88 | 184-185           
  languages.ts     |   93.07 |     92.3 |   85.71 |   93.07 | ...35,164-169,184 
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |   87.37 |    83.73 |   89.32 |   87.37 |                   
  ...ng-failure.ts |     100 |      100 |     100 |     100 |                   
  ...iveHelpers.ts |   94.95 |    91.05 |     100 |   94.95 | ...30-431,529,542 
  ...uggestions.ts |   84.29 |    70.83 |     100 |   84.29 | 70-76,92-103      
  session.ts       |   84.97 |    76.31 |   96.07 |   84.97 | ...1048,1057-1067 
  ...iagnostics.ts |    95.8 |     87.5 |   93.75 |    95.8 | ...03,277-278,289 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...33-634,637-638 
 ...active/control |   75.54 |    89.83 |      80 |   75.54 |                   
  ...rolContext.ts |    6.06 |        0 |       0 |    6.06 | 57-99             
  ...Dispatcher.ts |   91.95 |    92.98 |   88.88 |   91.95 | ...54-372,392,395 
  ...rolService.ts |    6.89 |        0 |       0 |    6.89 | 46-188            
 ...ol/controllers |   57.57 |    66.48 |   73.68 |   57.57 |                   
  ...Controller.ts |    42.4 |      100 |   83.33 |    42.4 | 101-105,140-223   
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   70.23 |    63.33 |   91.66 |   70.23 | ...19-628,643-648 
  ...Controller.ts |   49.23 |       60 |      50 |   49.23 | ...07-108,111-121 
  ...Controller.ts |   53.96 |    67.08 |   66.66 |   53.96 | ...78-690,699-728 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.18 |    94.11 |   95.34 |   98.18 |                   
  ...putAdapter.ts |   98.07 |    93.21 |   98.11 |   98.07 | ...1448,1464-1465 
  ...putAdapter.ts |   96.22 |    91.66 |   85.71 |   96.22 | 52-53             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.51 |      100 |   90.47 |   98.51 | 90-91,131-132     
  ...projection.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/peerMessaging |   91.89 |    88.29 |   96.42 |   91.89 |                   
  ...ngContext.tsx |     100 |      100 |     100 |     100 |                   
  ...-messaging.ts |   91.78 |    88.17 |   96.29 |   91.78 | ...31-436,507-512 
 src/remoteInput   |   87.31 |    75.32 |   88.23 |   87.31 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   88.01 |       76 |   93.33 |   88.01 | ...49-350,361-364 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/runtime       |   99.72 |    95.47 |     100 |   99.72 |                   
  ...livery-ipc.ts |     100 |    91.17 |     100 |     100 | 94,106,134        
  ...l-delivery.ts |     100 |      100 |     100 |     100 |                   
  cpu-percent.ts   |     100 |      100 |     100 |     100 |                   
  ...ion-source.ts |     100 |      100 |     100 |     100 |                   
  ...d-task-run.ts |     100 |       70 |     100 |     100 | 57,71             
  ...erver-name.ts |     100 |      100 |     100 |     100 |                   
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...-summaries.ts |   86.66 |       50 |     100 |   86.66 | 11,19             
  ...ber-errors.ts |     100 |    95.53 |     100 |     100 | 53,93-94,172,192  
  ...ls-mapping.ts |     100 |      100 |     100 |     100 |                   
 src/serve         |   87.56 |    85.29 |   91.06 |   87.56 |                   
  ...extra-args.ts |     100 |      100 |     100 |     100 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   96.19 |    93.44 |     100 |   96.19 | ...47-448,451-453 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    98.21 |     100 |     100 | 737               
  ...cp-command.ts |     100 |      100 |     100 |     100 |                   
  ...horization.ts |   92.79 |    93.54 |    87.5 |   92.79 | 75-80,135-136     
  ...op-mcp-ipc.ts |   81.06 |    73.68 |   94.11 |   81.06 | ...37-242,267,289 
  ...nt-service.ts |    94.1 |    86.98 |     100 |    94.1 | ...75-477,484,486 
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ings-store.ts |   89.61 |    94.37 |   96.55 |   89.61 | ...64-276,528-531 
  ...ebhook-ipc.ts |    98.5 |     87.5 |     100 |    98.5 | 47                
  ...iagnostics.ts |     100 |      100 |     100 |     100 |                   
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   87.32 |    85.33 |     100 |   87.32 | ...14,820-824,842 
  ...er-manager.ts |   89.39 |    83.88 |   93.33 |   89.39 | ...98,711,722-724 
  ...horization.ts |     100 |      100 |     100 |     100 |                   
  ...tartup-ipc.ts |   97.72 |    96.66 |     100 |   97.72 | 88-89             
  ...supervisor.ts |   93.24 |    85.42 |    97.4 |   93.24 | ...1765,1819-1823 
  ...e-grouping.ts |     100 |    94.28 |     100 |     100 | 71,137            
  core-runtime.ts  |     100 |      100 |     100 |     100 |                   
  ...ub-session.ts |   91.01 |    81.25 |   94.73 |   91.01 | ...1120,1141-1146 
  ...tree-guard.ts |   93.87 |    89.81 |     100 |   93.87 | ...3227,3297-3301 
  daemon-logger.ts |   82.82 |    78.68 |   92.04 |   82.82 | ...1775,1802-1808 
  ...y-pressure.ts |     100 |    96.96 |     100 |     100 | 135               
  ...trics-ring.ts |     100 |      100 |     100 |     100 |                   
  ...s-provider.ts |   68.04 |    52.77 |     100 |   68.04 | ...44-249,282-290 
  daemon-status.ts |   98.69 |    91.96 |     100 |   98.69 | ...1590,1592-1593 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |   93.37 |    85.18 |     100 |   93.37 | 114-117,195-202   
  ...-scheduler.ts |   87.34 |    83.87 |     100 |   87.34 | 33-36,48-50,79-81 
  ...d-provider.ts |   92.06 |    87.09 |     100 |   92.06 | ...72,287-293,316 
  ...h-settings.ts |   94.94 |    90.45 |     100 |   94.94 | ...30,708,724,734 
  fast-path.ts     |   91.38 |       82 |   95.45 |   91.38 | ...46-555,633-634 
  ...ration-sse.ts |   42.55 |    33.33 |     100 |   42.55 | 23-24,30,33-56    
  health-query.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-149             
  ...e-observer.ts |   89.89 |    83.24 |      96 |   89.89 | ...11-512,541-543 
  ...-addresses.ts |     100 |     91.3 |     100 |     100 | 52,72             
  ...back-binds.ts |     100 |      100 |     100 |     100 |                   
  ...-workspace.ts |   91.58 |    86.48 |     100 |   91.58 | ...44-145,156-157 
  ...pp-sandbox.ts |   96.72 |    95.23 |     100 |   96.72 | 41-42             
  ...iders-edit.ts |     100 |    83.33 |     100 |     100 | 58-60,65,81       
  ...ory-picker.ts |    90.9 |    91.66 |      75 |    90.9 | 32,55-64          
  ...-with-auth.ts |     100 |      100 |     100 |     100 |                   
  ...ate-blocks.ts |   99.03 |    94.73 |     100 |   99.03 | 133               
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  ...nal-ledger.ts |    94.9 |    84.94 |     100 |    94.9 | ...81,302,361-362 
  rate-limit.ts    |   92.68 |    88.29 |     100 |   92.68 | ...89-291,303-305 
  ...qwen-serve.ts |   84.85 |    81.85 |   78.24 |   84.85 | ...9505,9523-9527 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |   46.92 |     62.5 |   76.92 |   46.92 | ...1058,1070-1093 
  ...-keepalive.ts |   94.31 |    89.28 |     100 |   94.31 | ...37,541-542,581 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   89.16 |    90.29 |   86.95 |   89.16 | ...24-325,330-334 
  serve-token.ts   |     100 |      100 |     100 |     100 |                   
  server.ts        |   89.46 |    91.44 |   71.75 |   89.46 | ...3255,3286-3287 
  ...-admission.ts |   99.13 |    95.94 |     100 |   99.13 | 308-309           
  ...on-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...-redaction.ts |     100 |      100 |     100 |     100 |                   
  ...t-event-id.ts |     100 |    95.23 |     100 |     100 | 12                
  ...-admission.ts |   98.71 |    89.65 |     100 |   98.71 | 68                
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...t-sessions.ts |   93.72 |    77.93 |     100 |   93.72 | ...51,854,867-869 
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   93.33 |    86.15 |     100 |   93.33 | ...90-293,336-339 
  ...ssion-gate.ts |   98.48 |    94.44 |     100 |   98.48 | 70                
  ...ace-agents.ts |   66.13 |    70.57 |   92.68 |   66.13 | ...2246,2256-2266 
  ...generation.ts |    95.4 |    82.35 |   66.66 |    95.4 | 55-56,78,92       
  ...-git-state.ts |     100 |    91.93 |    90.9 |     100 | 161,172,202,265   
  ...ace-inputs.ts |     100 |      100 |     100 |     100 |                   
  ...ace-memory.ts |      83 |    74.54 |     100 |      83 | ...30-537,597-604 
  ...ers-status.ts |   98.63 |       80 |     100 |   98.63 | 108,136,186,189   
  ...tion-store.ts |   89.67 |    88.27 |   92.59 |   89.67 | ...91-400,411-414 
  ...e-registry.ts |   94.09 |    90.57 |     100 |   94.09 | ...91-592,599-600 
  ...e-remember.ts |   98.31 |    93.31 |     100 |   98.31 | ...47,351-356,397 
  ...te-runtime.ts |   89.85 |    90.76 |     100 |   89.85 | ...06-207,275-296 
  ...me-storage.ts |     100 |      100 |     100 |     100 |                   
  ...visibility.ts |     100 |      100 |     100 |     100 |                   
  ...management.ts |   72.63 |    72.83 |   96.15 |   72.63 | ...88-889,896-900 
  ...lls-status.ts |     100 |    95.45 |     100 |     100 | 152               
  ...reconciler.ts |   91.63 |    84.09 |     100 |   91.63 | ...71-273,306-307 
 ...serve/acp-http |   80.64 |    80.25 |   94.53 |   80.64 |                   
  ...r-registry.ts |   96.92 |    94.87 |     100 |   96.92 | 184-187           
  client-mcp-ws.ts |   54.85 |    58.62 |   72.72 |   54.85 | ...99-300,304-305 
  ...n-registry.ts |   93.03 |    84.13 |   98.52 |   93.03 | ...1624,1671-1682 
  dispatch.ts      |   75.94 |    77.03 |   93.44 |   75.94 | ...5822,5879-5885 
  index.ts         |   83.61 |    80.67 |   91.22 |   83.61 | ...2465,2551-2552 
  json-rpc.ts      |     100 |    96.96 |     100 |     100 | 92                
  ...ach-budget.ts |     100 |      100 |     100 |     100 |                   
  safe-ws-send.ts  |   52.94 |    71.42 |     100 |   52.94 | 33-42,47-55       
  sse-stream.ts    |   98.26 |    88.75 |     100 |   98.26 | 87-88,117         
  ...ort-stream.ts |       0 |        0 |       0 |       0 | 1                 
  ws-stream.ts     |   94.06 |    89.09 |     100 |   94.06 | 50,55,134,138-141 
 src/serve/auth    |   86.86 |     79.7 |   93.87 |   86.86 |                   
  device-flow.ts   |   96.35 |    80.57 |   97.61 |   96.35 | ...1358,1453,1519 
  ...w-provider.ts |   44.24 |    74.07 |   71.42 |   44.24 | ...23-284,297,301 
 ...rve/cdp-tunnel |   87.73 |    76.21 |    97.5 |   87.73 |                   
  ...r-emulator.ts |   93.27 |    77.77 |     100 |   93.27 | ...53-256,282-283 
  ...verse-link.ts |      88 |    76.19 |     100 |      88 | ...28-329,420-423 
  ...l-registry.ts |     100 |      100 |     100 |     100 |                   
  cdp-ws.ts        |   76.28 |    61.29 |    87.5 |   76.28 | ...13-217,223-228 
 ...nel/acceptance |    6.12 |    57.89 |   46.15 |    6.12 |                   
  ...helpers.d.mts |       0 |        0 |       0 |       0 | 1                 
  ...e-helpers.mjs |   97.64 |    70.96 |     100 |   97.64 | 22-23             
  ...mcp-smoke.mjs |       0 |        0 |       0 |       0 | 1-124             
  ...cceptance.mjs |       0 |        0 |       0 |       0 | 1-473             
  ...re-server.mjs |       0 |        0 |       0 |       0 | 1-59              
  ...ols-smoke.mjs |       0 |        0 |       0 |       0 | 1-268             
  real-tab.mjs     |       0 |        0 |       0 |       0 | 1-218             
  ...al-chrome.mjs |       0 |        0 |       0 |       0 | 1-223             
 .../conversations |   86.63 |    79.08 |   92.96 |   86.63 |                   
  ...e-activity.ts |     100 |      100 |     100 |     100 |                   
  ...ime-errors.ts |     100 |      100 |     100 |     100 |                   
  ...me-manager.ts |   97.88 |    94.91 |     100 |   97.88 | 64-65,92          
  ...-ownership.ts |   87.33 |    83.75 |   88.46 |   87.33 | ...57-558,601-602 
  ...-workspace.ts |   88.17 |    76.15 |     100 |   88.17 | ...52-554,568-572 
  ...on-journal.ts |   91.65 |    80.76 |     100 |   91.65 | ...44-745,751-753 
  ...on-service.ts |   84.02 |    75.91 |   88.54 |   84.02 | ...3082,3091-3093 
 src/serve/fs      |   87.77 |    82.35 |     100 |   87.77 |                   
  audit.ts         |     100 |    96.29 |     100 |     100 | 211               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...x-registry.ts |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.64 |    74.01 |     100 |   77.64 | ...65,594-598,611 
  policy.ts        |   90.52 |    89.18 |     100 |   90.52 | 172-180           
  text-cursor.ts   |   88.23 |       90 |     100 |   88.23 | 74-77,92-95       
  ...ile-system.ts |   88.02 |    81.88 |     100 |   88.02 | ...3027,3037-3038 
 src/serve/live    |    76.6 |    70.54 |    90.2 |    76.6 |                   
  discovery.ts     |   85.89 |    82.14 |    91.3 |   85.89 | ...73-579,592-593 
  ...oordinator.ts |   82.67 |    76.63 |   97.01 |   82.67 | ...1319,1351-1353 
  ...-installer.ts |    64.3 |    82.35 |   80.76 |    64.3 | ...45-446,460-472 
  ...oordinator.ts |    76.7 |    67.47 |   85.71 |    76.7 | ...1885,1976-1977 
  ...controller.ts |   67.82 |    79.66 |      75 |   67.82 | ...66-278,287-295 
  ...sk-service.ts |   82.71 |    66.15 |   93.61 |   82.71 | ...1270,1283,1290 
  ...redentials.ts |   96.26 |    93.47 |     100 |   96.26 | 91-94             
  ...me-session.ts |   65.63 |    57.24 |   88.88 |   65.63 | ...2270,2275-2282 
  ...up-context.ts |   94.85 |    77.39 |     100 |   94.85 | ...18,327-330,350 
  types.ts         |     100 |      100 |     100 |     100 |                   
 .../local-control |   82.89 |    90.09 |      90 |   82.89 |                   
  credentials.ts   |   96.42 |    95.45 |     100 |   96.42 | 109-110           
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...interfaces.ts |   43.58 |    82.75 |   42.85 |   43.58 | ...09-117,130-142 
  ...r-identity.ts |     100 |      100 |     100 |     100 |                   
  service.ts       |    93.4 |       90 |     100 |    93.4 | ...20-222,313-315 
 src/serve/routes  |   86.41 |    81.79 |   95.81 |   86.41 |                   
  a2ui-action.ts   |   96.84 |     88.5 |    87.5 |   96.84 | ...70-272,309-311 
  capabilities.ts  |   98.96 |    95.12 |     100 |   98.96 | 102               
  ...nel-notify.ts |   79.16 |    85.18 |     100 |   79.16 | ...03-104,120-126 
  ...l-webhooks.ts |   93.56 |    84.09 |     100 |   93.56 | ...42,292,332,334 
  daemon-status.ts |   85.71 |    83.33 |     100 |   85.71 | 101-108           
  goals.ts         |   98.94 |    91.17 |     100 |   98.94 | 143               
  health.ts        |   99.09 |    91.42 |     100 |   99.09 | 147               
  live-setup.ts    |   33.33 |     37.5 |      50 |   33.33 | ...18-123,130-135 
  live.ts          |   84.61 |    76.47 |     100 |   84.61 | ...04,106-111,131 
  permission.ts    |   96.03 |    87.87 |     100 |   96.03 | 81-84             
  ...uled-tasks.ts |   87.52 |    83.61 |   95.12 |   87.52 | ...2016,2061-2062 
  ...r-backfill.ts |    98.5 |    93.65 |     100 |    98.5 | ...98,600,824-825 
  ...on-runtime.ts |   91.42 |       90 |     100 |   91.42 | 56-64             
  session.ts       |   86.76 |    83.18 |   94.44 |   86.76 | ...7281,7283-7284 
  sse-events.ts    |   87.15 |    85.09 |   94.44 |   87.15 | ...48-959,962,969 
  ...e-sessions.ts |   87.13 |    80.79 |     100 |   87.13 | ...90-492,495-500 
  terminal.ts      |   92.81 |    90.35 |     100 |   92.81 | ...10-313,332-335 
  usage-stats.ts   |     100 |    95.45 |     100 |     100 | 118               
  ...space-auth.ts |   84.74 |    75.29 |     100 |   84.74 | ...35,349,357-361 
  ...el-control.ts |   86.26 |    78.94 |     100 |   86.26 | ...17-318,339-347 
  ...management.ts |   90.35 |    78.94 |     100 |   90.35 | ...52-553,576-577 
  ...d-contacts.ts |   83.62 |    94.59 |     100 |   83.62 | 123,125-142       
  ...controller.ts |   83.31 |    80.47 |      90 |   83.31 | ...1055,1060,1067 
  ...extensions.ts |   89.91 |    79.47 |   93.93 |   89.91 | ...2340,2385-2386 
  ...-file-read.ts |      91 |    80.91 |     100 |      91 | ...20-621,624-625 
  ...file-write.ts |   89.72 |    79.35 |     100 |   89.72 | ...05,719-726,807 
  ...t-branches.ts |   75.04 |     66.4 |     100 |   75.04 | ...99-604,613-620 
  ...e-git-diff.ts |   97.19 |    89.58 |     100 |   97.19 | 157-158,185-187   
  ...ce-git-log.ts |     100 |       95 |     100 |     100 | 48,73             
  workspace-git.ts |   74.71 |     87.5 |     100 |   74.71 | 83-104            
  ...github-prs.ts |   88.26 |    63.46 |     100 |   88.26 | ...38-239,264-265 
  ...-lifecycle.ts |   95.23 |    75.75 |     100 |   95.23 | ...50-151,186-187 
  ...al-control.ts |   73.61 |       70 |     100 |   73.61 | ...28,230-236,241 
  ...management.ts |   87.14 |    84.21 |     100 |   87.14 | ...1802,1812-1817 
  ...cp-control.ts |    73.2 |    67.54 |   85.71 |    73.2 | ...27-633,644-645 
  ...ace-models.ts |   89.84 |    87.35 |     100 |   89.84 | ...27-332,336-338 
  ...ermissions.ts |    77.9 |    72.41 |     100 |    77.9 | ...69-277,298-316 
  ...e-settings.ts |   75.67 |       75 |     100 |   75.67 | ...15-726,732-733 
  ...tup-github.ts |   77.97 |    70.58 |   84.21 |   77.97 | ...46-352,397-398 
  ...ace-skills.ts |   76.41 |    86.11 |     100 |   76.41 | ...29-354,360-394 
  ...ace-status.ts |   82.57 |    74.48 |     100 |   82.57 | ...71-473,477-478 
  ...pace-tools.ts |   75.94 |    69.69 |   66.66 |   75.94 | ...59-164,193-194 
  ...pace-trust.ts |   76.92 |     67.1 |      80 |   76.92 | ...38-343,351-352 
  ...pace-voice.ts |   91.33 |    81.02 |     100 |   91.33 | ...70-673,676-678 
 src/serve/server  |   93.53 |    91.71 |   96.15 |   93.53 |                   
  access-log.ts    |   98.73 |    97.26 |     100 |   98.73 | 119,196           
  ...-timestamp.ts |     100 |      100 |     100 |     100 |                   
  aone-mrs.ts      |   91.48 |    91.35 |   81.25 |   91.48 | ...53,299-300,466 
  ...er-helpers.ts |   63.82 |    78.15 |   81.81 |   63.82 | ...16,330,332-347 
  ...w-registry.ts |    98.8 |    81.81 |     100 |    98.8 | 107               
  ...r-handlers.ts |   97.87 |       80 |     100 |   97.87 | 27                
  ...r-response.ts |   88.93 |    84.37 |     100 |   88.93 | ...74,891,954-963 
  fs-factory.ts    |     100 |    95.52 |     100 |     100 | 77,144,200        
  ...branch-ops.ts |     100 |      100 |     100 |     100 |                   
  ...list-cache.ts |   99.01 |    95.52 |     100 |   99.01 | 184-185           
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |      65 |       80 |   33.33 |      65 | 30-35,38-43,47-48 
  ...st-helpers.ts |   95.13 |    95.09 |     100 |   95.13 | ...66-168,423-428 
  self-origin.ts   |     100 |      100 |     100 |     100 |                   
  ...e-features.ts |    95.2 |     87.5 |     100 |    95.2 | 191-197           
  ...on-archive.ts |   92.43 |     90.3 |   97.61 |   92.43 | ...1140,1181-1182 
  ...ion-export.ts |   98.57 |    90.47 |     100 |   98.57 | 85                
  session-list.ts  |   97.27 |    93.88 |     100 |   97.27 | ...1183,1392-1396 
  ...pr-refresh.ts |     100 |    97.05 |     100 |     100 | 199,252,427       
  ...ry-context.ts |    87.5 |       50 |     100 |    87.5 | 49-50             
  telemetry.ts     |   99.06 |    97.27 |     100 |   99.06 | ...10,879,958-960 
 src/serve/voice   |    92.7 |    91.53 |   97.72 |    92.7 |                   
  ...ice-config.ts |   84.81 |       30 |     100 |   84.81 | 91-100,104-105    
  voice-ws.ts      |   91.58 |    93.44 |      96 |   91.58 | ...68,483,521-523 
  ...oordinator.ts |     100 |    98.24 |     100 |     100 | 176               
 ...kspace-service |   90.29 |     87.7 |   91.48 |   90.29 |                   
  index.ts         |   89.95 |    87.37 |   90.24 |   89.95 | ...1410,1424,1438 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |    92.7 |    89.75 |   98.13 |    92.7 |                   
  ...mandLoader.ts |     100 |       95 |     100 |     100 | 107               
  ...killLoader.ts |   97.19 |    86.48 |     100 |   97.19 | 142,153-154       
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   87.09 |    83.07 |     100 |   87.09 | ...35-340,345-350 
  ...omptLoader.ts |   79.55 |    88.65 |   85.71 |   79.55 | ...48,178,245-246 
  ...mandLoader.ts |   97.77 |    92.59 |     100 |   97.77 | 176,183-184       
  ...nd-factory.ts |   91.42 |    91.66 |     100 |   91.42 | 128,137-144       
  ...ation-tool.ts |     100 |    95.45 |     100 |     100 | 125               
  ...ndMetadata.ts |   98.23 |    96.77 |     100 |   98.23 | 83,87             
  commandUtils.ts  |      96 |     90.9 |     100 |      96 | 48                
  ...and-parser.ts |   90.69 |    85.71 |     100 |   90.69 | 63-66             
  ...ionService.ts |     100 |      100 |     100 |     100 |                   
  prompt-stash.ts  |   96.66 |    92.85 |     100 |   96.66 | 34-35             
  ...tree-lease.ts |   92.14 |    92.42 |     100 |   92.14 | ...91-296,329-330 
  ...low-loader.ts |     100 |    96.29 |     100 |     100 | 88                
  setup-github.ts  |    90.8 |    80.95 |     100 |    90.8 | ...49-450,457-458 
  ...-args-file.ts |   93.93 |    91.66 |    87.5 |   93.93 | 208-210,224-230   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |   98.64 |    95.89 |     100 |   98.64 | 116,142-143       
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  voice-service.ts |    90.4 |    87.87 |     100 |    90.4 | ...81,288,353-358 
  ...e-settings.ts |     100 |    95.23 |     100 |     100 | 19                
  ...ranscriber.ts |   91.77 |    87.11 |   97.22 |   91.77 | ...96-898,901-903 
 ...s/housekeeping |   93.06 |    88.57 |      95 |   93.06 |                   
  scheduler.ts     |   93.06 |    88.57 |      95 |   93.06 | ...62-364,416-420 
 ...rvices/insight |     100 |      100 |     100 |     100 |                   
  dates.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   88.94 |    86.86 |   96.29 |   88.94 |                   
  DataProcessor.ts |   88.31 |    86.84 |      95 |   88.31 | ...1368,1372-1379 
  ...tGenerator.ts |   98.24 |    85.71 |     100 |   98.24 | 47                
  ...teRenderer.ts |     100 |      100 |     100 |     100 |                   
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.25 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |       85 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.83 |     100 |   97.41 | 96-99             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services/tips |   97.27 |    84.61 |     100 |   97.27 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  tipHistory.ts    |   92.59 |       70 |     100 |   92.59 | ...24,146,153,162 
  tipRegistry.ts   |     100 |      100 |     100 |     100 |                   
  tipScheduler.ts  |     100 |    91.66 |     100 |     100 | 55                
 src/startup       |   88.99 |    83.47 |    90.9 |   88.99 |                   
  ...p-prefetch.ts |   98.09 |    94.23 |    87.5 |   98.09 | 50,209,225-226    
  ...reeStartup.ts |   80.53 |     74.6 |     100 |   80.53 | ...94,403,409-412 
 src/test-utils    |    94.6 |    76.66 |      80 |    94.6 |                   
  ci-env.ts        |      88 |     62.5 |     100 |      88 | 22-23,28          
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...mised-lock.ts |     100 |      100 |   66.66 |     100 |                   
  ...lot-client.ts |     100 |    66.66 |     100 |     100 | 31,39             
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   71.68 |    78.68 |   72.18 |   71.68 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |    77.5 |    74.24 |   76.31 |    77.5 | ...4520,4636-4642 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |    30.3 |      100 |       0 |    30.3 | 26-76             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |   63.63 |      100 |   41.17 |   63.63 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...AutoUpdate.ts |   93.54 |    94.64 |      90 |   93.54 | 126,131,202-213   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.81 |    77.44 |   62.16 |   39.81 | ...1193,1196-1215 
  ...ractiveUI.tsx |   68.53 |    78.26 |      50 |   68.53 | ...65-467,497-502 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  systemInfo.ts    |   95.09 |    90.27 |     100 |   95.09 | ...54-255,260-264 
  ...InfoFields.ts |   89.28 |    69.04 |     100 |   89.28 | ...09-110,124-125 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-relaunch.ts |   89.61 |    86.66 |      50 |   89.61 | 56-61,83-84       
 src/ui/auth       |   69.23 |    72.03 |   61.22 |   69.23 |                   
  AuthDialog.tsx   |   59.01 |     42.1 |   16.66 |   59.01 | ...25,332-354,358 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  ...etupSteps.tsx |   74.93 |    78.62 |   71.42 |   74.93 | ...92-902,918,921 
  useAuth.ts       |   94.83 |       75 |     100 |   94.83 | ...33-234,253-259 
  ...rSetupFlow.ts |   59.79 |    58.33 |     100 |   59.79 | ...82-403,420-463 
 src/ui/commands   |    84.7 |    84.48 |   91.66 |    84.7 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...or-command.ts |     100 |    95.65 |     100 |     100 | 104,182           
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |    93.1 |    95.23 |     100 |    93.1 | 77-82             
  arenaCommand.ts  |   63.89 |    65.71 |   65.21 |   63.89 | ...01-606,691-699 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  branchCommand.ts |     100 |      100 |     100 |     100 |                   
  btwCommand.ts    |   94.32 |    77.41 |     100 |   94.32 | 35-36,114-119     
  bugCommand.ts    |     100 |    77.77 |     100 |     100 | 28,62             
  cdCommand.ts     |    92.3 |    82.75 |     100 |    92.3 | ...,94-99,178,187 
  clearCommand.ts  |    80.9 |    70.83 |     100 |    80.9 | ...28-129,137-146 
  commands.ts      |   97.45 |    96.72 |     100 |   97.45 | 153-155           
  ...essCommand.ts |   86.91 |    66.66 |     100 |   86.91 | ...22-223,237-240 
  ...astCommand.ts |   84.75 |    76.47 |     100 |   84.75 | ...96-102,130-135 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   73.75 |    74.02 |   83.33 |   73.75 | ...72-605,616-617 
  copyCommand.ts   |    98.7 |    96.29 |     100 |    98.7 | 66-67,172,272,323 
  ...or-command.ts |   85.95 |    80.55 |   88.88 |   85.95 | ...68-274,298-309 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |    87.87 |     100 |     100 | ...63,231-232,245 
  ...ryCommand.tsx |   90.56 |    87.83 |    90.9 |   90.56 | ...75-280,327-334 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 26                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  doctorCommand.ts |   70.16 |    84.61 |      95 |   70.16 | ...29-679,682-816 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...rt-command.ts |   80.95 |       80 |     100 |   80.95 | 49-54,69-72,93-98 
  effort-utils.ts  |     100 |      100 |     100 |     100 |                   
  exportCommand.ts |   98.25 |    91.02 |     100 |   98.25 | ...81,198-199,364 
  ...onsCommand.ts |   52.31 |    56.25 |   69.23 |   52.31 | ...09,277-329,390 
  forgetCommand.ts |     100 |       90 |     100 |     100 | 59                
  forkCommand.ts   |     100 |    94.11 |     100 |     100 | 95,146            
  goalCommand.ts   |     100 |    96.49 |     100 |     100 | 139,192           
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.25 |    65.71 |   85.71 |   81.25 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |    58.5 |    74.07 |      80 |    58.5 | ...21-331,334-343 
  initCommand.ts   |   91.86 |       80 |     100 |   91.86 | 48,83-88          
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   94.63 |    90.66 |     100 |   94.63 | ...25-226,253-263 
  learn-command.ts |     100 |      100 |     100 |     100 |                   
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,102-103        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   86.28 |    86.29 |     100 |   86.28 | ...1112,1146-1151 
  peers-command.ts |     100 |    94.36 |     100 |     100 | 59,70,223,228     
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  planCommand.ts   |   78.82 |    76.92 |     100 |   78.82 | 30-35,51-56,68-73 
  quitCommand.ts   |     100 |      100 |     100 |     100 |                   
  recapCommand.ts  |   21.81 |      100 |      50 |   21.81 | 24-73             
  ...ns-command.ts |   98.83 |    81.81 |     100 |   98.83 | 100               
  ...berCommand.ts |     100 |     87.5 |     100 |     100 | 46                
  renameCommand.ts |    89.6 |       90 |     100 |    89.6 | ...72-176,212-219 
  ...oreCommand.ts |   90.96 |    86.04 |     100 |   90.96 | ...41-146,177-178 
  resumeCommand.ts |     100 |      100 |     100 |     100 |                   
  rewindCommand.ts |   81.25 |      100 |      50 |   81.25 | 20-22             
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   89.47 |       75 |      80 |   89.47 | 54-59             
  skillsCommand.ts |   78.82 |    81.81 |     100 |   78.82 | 37-52,78,97       
  statsCommand.ts  |   90.65 |    76.73 |     100 |   90.65 | ...30-733,825-832 
  ...ineCommand.ts |     100 |      100 |     100 |     100 |                   
  ...aryCommand.ts |   73.04 |     82.3 |      90 |   73.04 | ...20-547,561-565 
  tasksCommand.ts  |   77.33 |    72.13 |     100 |   77.33 | ...46-150,173-178 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  trustCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...te-command.ts |     100 |    94.11 |     100 |     100 | 74,148            
  vimCommand.ts    |     100 |      100 |     100 |     100 |                   
  voice-command.ts |   93.63 |       88 |     100 |   93.63 | 36,98-103         
  ...owsCommand.ts |   94.38 |    85.29 |     100 |   94.38 | ...78-183,282-287 
 src/ui/components |   74.07 |    80.32 |   78.81 |   74.07 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  AnsiOutput.tsx   |   65.57 |      100 |      50 |   65.57 | 69-90             
  ApiKeyInput.tsx  |       0 |        0 |       0 |       0 | 1-97              
  AppHeader.tsx    |    88.7 |       75 |     100 |    88.7 | 36,38-43,45       
  ...odeDialog.tsx |   87.24 |    72.22 |   33.33 |   87.24 | ...85,233-238,245 
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   95.65 |    66.66 |     100 |   95.65 | 27,52             
  ...TextInput.tsx |   89.06 |    90.78 |     100 |   89.06 | ...87-289,303-305 
  ...ontroller.tsx |     100 |      100 |     100 |     100 |                   
  Composer.tsx     |   94.54 |    66.66 |     100 |   94.54 | ...-76,88,143,158 
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   68.42 |    57.14 |     100 |   68.42 | 16-17,31-32,42-50 
  CronPill.tsx     |     100 |    93.75 |     100 |     100 | 19                
  ...ification.tsx |      84 |       60 |     100 |      84 | 23-24,40-42       
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |   11.28 |      100 |       0 |   11.28 | 71-598            
  DiffDialog.tsx   |    53.5 |     37.5 |   69.23 |    53.5 | ...32-737,747-760 
  ...ngsDialog.tsx |    8.44 |      100 |       0 |    8.44 | 37-195            
  EffortDialog.tsx |   97.36 |      100 |     100 |   97.36 | 55-56             
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...hProgress.tsx |    87.8 |    33.33 |     100 |    87.8 | 28-31,56          
  ...gsDisplay.tsx |     100 |    96.87 |   83.33 |     100 | 69                
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   81.27 |    69.23 |      50 |   81.27 | ...06,245,267-272 
  GoalPill.tsx     |   93.51 |    81.81 |     100 |   93.51 | 37-38,106-109,123 
  Header.tsx       |   98.65 |    94.73 |     100 |   98.65 | 173,175           
  Help.tsx         |   98.33 |       90 |     100 |   98.33 | ...25,382,448-449 
  ...emDisplay.tsx |   79.69 |    67.61 |     100 |   79.69 | ...17,520,523-529 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   86.36 |    83.41 |      80 |   86.36 | ...2242,2263,2366 
  ...Shortcuts.tsx |     100 |       88 |     100 |     100 | 98,119            
  ...Indicator.tsx |   98.18 |    97.82 |     100 |   98.18 | 161-162           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   95.88 |    96.03 |   46.15 |   95.88 | ...20,523-527,530 
  MemoryDialog.tsx |   86.59 |    80.15 |     100 |   86.59 | ...34-435,485,553 
  ModelDialog.tsx  |   85.22 |    74.17 |     100 |   85.22 | ...1042,1098,1100 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | 14-56             
  ...onsDialog.tsx |    2.13 |      100 |       0 |    2.13 | 62-133,148-1004   
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...icePrompt.tsx |   92.64 |    85.71 |     100 |   92.64 | 102-106,134-139   
  PrepareLabel.tsx |   91.66 |    77.27 |     100 |   91.66 | 73-75,77-79,110   
  ...atePrompt.tsx |   91.34 |       70 |     100 |   91.34 | 48-51,63-66,78    
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |   21.42 |      100 |       0 |   21.42 | 13-39             
  ...hProgress.tsx |   85.25 |    88.46 |     100 |   85.25 | 121-147           
  ...ngSpinner.tsx |   67.85 |    85.71 |      50 |   67.85 | 33-50,71,78-79    
  ...dSelector.tsx |   92.79 |    82.65 |     100 |   92.79 | ...19-323,354-370 
  ...ionPicker.tsx |   83.66 |    72.13 |     100 |   83.66 | ...96,402,444-466 
  ...onPreview.tsx |   93.58 |    83.78 |     100 |   93.58 | ...,70-71,195-197 
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   92.06 |    86.36 |   83.33 |   92.06 | ...,70-72,120-123 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   71.55 |    73.89 |   69.23 |   71.55 | ...1252,1258-1259 
  ...ionDialog.tsx |    92.3 |    96.15 |   33.33 |    92.3 | 60-63,68-75,164   
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |      28 |      100 |       0 |      28 | 18-40             
  ...iewDialog.tsx |   97.77 |    87.67 |     100 |   97.77 | ...97,305-307,324 
  ...tsDisplay.tsx |   95.86 |       75 |     100 |   95.86 | 67-71             
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-171             
  ...tivityTab.tsx |    3.94 |      100 |       0 |    3.94 | 27-275            
  StatsDialog.tsx  |    8.64 |      100 |       0 |    8.64 | ...76-111,130-322 
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |    78.9 |    56.52 |     100 |    78.9 | ...26,213,262-288 
  ...atmapView.tsx |    8.98 |      100 |       0 |    8.98 | 20-107            
  ...essionTab.tsx |      80 |    66.66 |     100 |      80 | ...70-277,283-300 
  ...ineDialog.tsx |    93.9 |    86.88 |     100 |    93.9 | ...20,282,302-304 
  ...yTodoList.tsx |   96.36 |    88.23 |     100 |   96.36 | 138-141           
  ...nsDisplay.tsx |   96.01 |    88.05 |     100 |   96.01 | ...29-130,295-297 
  ...inalImage.tsx |     100 |    93.93 |     100 |     100 | 75,129            
  ThemeDialog.tsx  |   89.95 |    46.15 |      75 |   89.95 | ...71-173,243-245 
  Tips.tsx         |   93.54 |       75 |     100 |   93.54 | 39-40             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  TrustDialog.tsx  |     100 |    83.33 |     100 |     100 | 72-87             
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...Indicator.tsx |    92.5 |     87.5 |     100 |    92.5 | 50-53             
  ...ackDialog.tsx |    7.84 |      100 |       0 |    7.84 | 24-134            
  ...xitDialog.tsx |   80.36 |    43.47 |      60 |   80.36 | ...24-238,248-251 
  ...odeVisuals.ts |   97.22 |    85.71 |     100 |   97.22 | 25                
  ...s-helpers.tsx |   66.25 |    81.25 |      50 |   66.25 | 25-32,46-53,62-72 
 ...nts/agent-view |    61.5 |    75.57 |    62.5 |    61.5 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |     100 |    81.81 |     100 |     100 | 82                
  ...tComposer.tsx |   78.35 |     64.7 |   66.66 |   78.35 | ...64,277,303-305 
  AgentFooter.tsx  |   15.38 |      100 |       0 |   15.38 | 28-65             
  AgentHeader.tsx  |   15.38 |      100 |       0 |   15.38 | 27-64             
  AgentTabBar.tsx  |    87.9 |    63.88 |     100 |    87.9 | ...88,110-118,136 
  ...oryAdapter.ts |     100 |    91.83 |     100 |     100 | 103,109-110,138   
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
 ...mponents/arena |   45.51 |    70.53 |   60.86 |   45.51 |                   
  ArenaCards.tsx   |   73.06 |    71.79 |   85.71 |   73.06 | ...83-185,321-326 
  ...ectDialog.tsx |   83.48 |    69.86 |   88.88 |   83.48 | ...88-392,409-410 
  ...artDialog.tsx |    9.77 |      100 |       0 |    9.77 | 27-166            
  ...tusDialog.tsx |    5.63 |      100 |       0 |    5.63 | 33-75,80-288      
  ...topDialog.tsx |    6.17 |      100 |       0 |    6.17 | 33-213            
 ...ackground-view |   85.86 |     85.1 |   92.98 |   85.86 |                   
  ...sksDialog.tsx |   82.66 |    83.09 |   85.71 |   82.66 | ...1854,1977-1983 
  ...TasksPill.tsx |   78.84 |    94.28 |     100 |   78.84 | 64,109-129        
  ...gentPanel.tsx |   97.08 |    86.31 |     100 |   97.08 | 132,442-446,520   
  agent-forest.ts  |    99.2 |    93.93 |     100 |    99.2 | 258               
  ...Visibility.ts |     100 |      100 |     100 |     100 |                   
  ...e-overlay.tsx |    88.2 |    76.47 |     100 |    88.2 | ...36-138,140-142 
 ...nts/extensions |   84.32 |    76.78 |   83.33 |   84.32 |                   
  ...gerDialog.tsx |   82.15 |    76.08 |     100 |   82.15 | ...91-198,258,260 
  TabBar.tsx       |   97.29 |    88.88 |     100 |   97.29 | 33                
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   46.26 |       85 |   58.82 |   46.26 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |       0 |        0 |       0 |       0 | 1-145             
  ...nListStep.tsx |   75.26 |    88.37 |   66.66 |   75.26 | ...53,174,203-209 
  ...electStep.tsx |       0 |        0 |       0 |       0 | 1-83              
  ...nfirmStep.tsx |   16.32 |      100 |       0 |   16.32 | 28-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
 ...xtensions/tabs |   71.92 |    68.21 |   70.83 |   71.92 |                   
  DiscoverTab.tsx  |   68.22 |    67.66 |   55.55 |   68.22 | ...93,656-660,664 
  InstalledTab.tsx |   75.49 |    67.44 |   83.33 |   75.49 | ...77,782-783,820 
  SourcesTab.tsx   |   71.67 |    70.47 |   77.77 |   71.67 | ...28,547,621-633 
 ...tensions/views |    50.7 |    52.38 |   20.83 |    50.7 |                   
  ...tionsView.tsx |   73.75 |    56.36 |   66.66 |   73.75 | ...30,353,369-374 
  ...tionsView.tsx |   43.45 |    44.82 |    6.66 |   43.45 | ...98-405,408-420 
  ...etailView.tsx |    9.24 |      100 |       0 |    9.24 | 40-67,70-163      
 ...mponents/hooks |   87.11 |    81.37 |   91.89 |   87.11 |                   
  ...rListBody.tsx |   95.29 |    85.18 |     100 |   95.29 | 95-98             
  ...etailStep.tsx |   75.32 |    71.42 |      60 |   75.32 | ...56-169,173-186 
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entHeader.tsx |     100 |    85.71 |     100 |     100 | 47                
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...abledStep.tsx |     100 |      100 |     100 |     100 |                   
  ...sListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   72.29 |    70.49 |     100 |   72.29 | ...51,563-568,572 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
  ...erGrouping.ts |     100 |      100 |     100 |     100 |                   
  sourceLabels.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |   40.91 |    63.44 |   70.58 |   40.91 |                   
  ...ealthPill.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   32.09 |    26.19 |      40 |   32.09 | ...12,914,927-933 
  ...valDialog.tsx |   15.06 |      100 |       0 |   15.06 | 40-109            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-35              
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |      97 |       95 |     100 |      97 | 24,113-114        
 ...ents/mcp/steps |   53.94 |    73.51 |   57.14 |   53.94 |                   
  ...icateStep.tsx |    5.65 |      100 |       0 |    5.65 | 40-66,69-308      
  ...electStep.tsx |   10.95 |      100 |       0 |   10.95 | 16-88             
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...eListStep.tsx |   99.09 |    97.36 |     100 |   99.09 | 71                
  ...etailStep.tsx |   62.83 |       60 |   33.33 |   62.83 | ...87-296,307-332 
  ...rListStep.tsx |   88.53 |    81.25 |     100 |   88.53 | ...64,170,175-180 
  ...etailStep.tsx |    10.3 |      100 |       0 |    10.3 | ...1,67-79,82-140 
  ToolListStep.tsx |   69.29 |       50 |     100 |   69.29 | ...23,126,135-144 
 ...nents/messages |   90.71 |    87.78 |   86.53 |   90.71 |                   
  ...orMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...ionDialog.tsx |   89.23 |     84.9 |   81.81 |   89.23 | ...75,593,611-613 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |    94.73 |     100 |     100 | ...43,289,402,432 
  ...onMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...nMessages.tsx |   92.35 |    96.07 |   76.92 |   92.35 | ...59-361,364-367 
  DiffRenderer.tsx |   93.17 |    86.02 |     100 |   93.17 | ...07,235-236,302 
  ...tsDisplay.tsx |   97.08 |    77.77 |     100 |   97.08 | 95,97,106         
  ...usMessage.tsx |   81.73 |     65.9 |      75 |   81.73 | ...10-214,222,245 
  ...tsDisplay.tsx |   95.52 |    88.31 |     100 |   95.52 | ...40,142,175-180 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   21.05 |      100 |       0 |   21.05 | 23-39             
  ...sMessages.tsx |   59.04 |       50 |    37.5 |   59.04 | ...21-126,147-159 
  ...ryMessage.tsx |   13.63 |      100 |       0 |   13.63 | 23-64             
  ...onMessage.tsx |   91.87 |    82.51 |     100 |   91.87 | ...49-651,658-660 
  ...upMessage.tsx |   98.38 |    95.38 |     100 |   98.38 | 188-191,422       
  ToolMessage.tsx  |   95.04 |    89.55 |     100 |   95.04 | ...1075,1120-1122 
 ...ponents/shared |   86.34 |    82.18 |    86.6 |   86.34 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...rBoundary.tsx |     100 |      100 |     100 |     100 |                   
  MaxSizedBox.tsx  |   84.71 |    86.95 |      90 |   84.71 | ...67-568,685-686 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   90.37 |    82.85 |   18.18 |   90.37 | ...60-63,65,73-76 
  StaticRender.tsx |     100 |      100 |     100 |     100 |                   
  TextInput.tsx    |    80.8 |    67.79 |      80 |    80.8 | ...36-240,252-258 
  ...ontroller.tsx |     100 |    81.81 |     100 |     100 | 59-62             
  ...apsedTime.tsx |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...lizedList.tsx |   91.49 |    86.66 |   83.33 |   91.49 | ...18-846,859,959 
  text-buffer.ts   |   85.98 |    81.78 |   97.91 |   85.98 | ...2664,2762-2763 
  ...er-actions.ts |   73.93 |    67.22 |     100 |   73.93 | ...32-733,934-936 
 ...ponents/skills |    3.99 |      100 |       0 |    3.99 |                   
  ...gerDialog.tsx |    3.99 |      100 |       0 |    3.99 | 79-137,140-678    
 ...ents/subagents |   30.87 |        0 |       0 |   30.87 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
  reducers.tsx     |    12.1 |      100 |       0 |    12.1 | 33-190            
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |   10.95 |      100 |       0 |   10.95 | ...1,56-57,60-102 
 ...bagents/create |    9.13 |      100 |       0 |    9.13 |                   
  ...ionWizard.tsx |    7.28 |      100 |       0 |    7.28 | 34-299            
  ...rSelector.tsx |   14.75 |      100 |       0 |   14.75 | 26-85             
  ...onSummary.tsx |    4.26 |      100 |       0 |    4.26 | 27-331            
  ...tionInput.tsx |    8.63 |      100 |       0 |    8.63 | 23-177            
  ...dSelector.tsx |   33.33 |      100 |       0 |   33.33 | 20-21,26-27,36-63 
  ...nSelector.tsx |    37.5 |      100 |       0 |    37.5 | 20-21,26-27,36-58 
  ...EntryStep.tsx |   12.76 |      100 |       0 |   12.76 | 34-78             
  ToolSelector.tsx |    4.16 |      100 |       0 |    4.16 | 31-253            
 ...bagents/manage |    21.6 |    59.52 |   27.27 |    21.6 |                   
  ...ctionStep.tsx |   10.25 |      100 |       0 |   10.25 | 21-103            
  ...eleteStep.tsx |   20.93 |      100 |       0 |   20.93 | 23-62             
  ...tEditStep.tsx |   25.53 |      100 |       0 |   25.53 | ...2,37-38,51-124 
  ...ctionStep.tsx |   35.61 |    59.52 |     100 |   35.61 | ...21-433,438-440 
  ...iewerStep.tsx |   13.72 |      100 |       0 |   13.72 | 18-73             
  ...gerDialog.tsx |    6.74 |      100 |       0 |    6.74 | 35-341            
 ...mponents/views |   69.22 |    71.81 |   61.11 |   69.22 |                   
  ContextUsage.tsx |   71.49 |    64.86 |      80 |   71.49 | ...30-436,473-567 
  DoctorReport.tsx |     9.8 |      100 |       0 |     9.8 | 25-54,57-131      
  ...sionsList.tsx |   88.05 |       75 |     100 |   88.05 | 70-77             
  McpStatus.tsx    |   92.01 |     73.8 |     100 |   92.01 | ...36,175-177,262 
  SkillsList.tsx   |   20.51 |      100 |       0 |   20.51 | 17-20,27-57       
  ToolsList.tsx    |      75 |    81.81 |     100 |      75 | 39-42,59-67       
 src/ui/contexts   |   86.47 |    82.27 |   86.48 |   86.47 |                   
  ...ewContext.tsx |   91.66 |       90 |      75 |   91.66 | ...89-193,279-289 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   93.83 |    68.51 |   42.85 |   93.83 | ...44,281-285,317 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.65 |    84.85 |     100 |   85.65 | ...1612-1614,1620 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   80.77 |    79.56 |    92.3 |   80.77 | ...31-434,443-446 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...edContext.tsx |     100 |      100 |      50 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 156-157           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 237-238           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
  ...rtContext.tsx |     100 |      100 |     100 |     100 |                   
 src/ui/daemon     |   89.51 |    76.92 |   95.65 |   89.51 |                   
  ...ui-adapter.ts |   89.51 |    76.92 |   95.65 |   89.51 | ...59,877-878,964 
 src/ui/editors    |   93.33 |    85.71 |   66.66 |   93.33 |                   
  ...ngsManager.ts |   93.33 |    85.71 |   66.66 |   93.33 | 49,63-64          
 src/ui/hooks      |   86.49 |    84.45 |   88.88 |   86.49 |                   
  ...dProcessor.ts |   85.53 |     85.2 |     100 |   85.53 | ...-970,1017-1018 
  ...ention-ref.ts |   97.72 |       84 |     100 |   97.72 | 65                
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...esourceRef.ts |     100 |      100 |     100 |     100 |                   
  ...completion.ts |     100 |    95.45 |     100 |     100 | 95                
  ...ention-ref.ts |     100 |      100 |     100 |     100 |                   
  ...dProcessor.ts |   94.51 |    73.58 |     100 |   94.51 | ...97-298,303-304 
  ...dProcessor.ts |   86.83 |    71.86 |   83.33 |   86.83 | ...1536,1565-1569 
  ...rt-command.ts |     100 |      100 |     100 |     100 |                   
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...llm-stream.ts |   88.85 |    85.07 |   85.18 |   88.85 | ...6260,6262,6367 
  ...ng-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...oice-input.ts |   92.41 |    82.08 |   66.66 |   92.41 | ...12,514-515,670 
  ...ke-repaint.ts |     100 |      100 |     100 |     100 |                   
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      42 |       75 |     100 |      42 | 42-44,53-59,62-87 
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...enaCommand.ts |      85 |      100 |     100 |      85 | 23-24,29          
  ...aInProcess.ts |   27.92 |       80 |      25 |   27.92 | ...69-170,173-175 
  ...Completion.ts |   86.44 |    88.48 |     100 |   86.44 | ...14-515,525-541 
  ...ifications.ts |   87.82 |    96.77 |     100 |   87.82 | 138-152           
  ...tIndicator.ts |   88.28 |    81.57 |     100 |   88.28 | ...66,175,179-187 
  ...waySummary.ts |   96.26 |       75 |     100 |   96.26 | 126-128,170       
  ...ndTaskView.ts |   94.89 |    77.55 |     100 |   94.89 | 164-168,257,263   
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   96.03 |    88.75 |     100 |   96.03 | ...04-205,362-365 
  ...ompletion.tsx |    97.1 |    87.23 |     100 |    97.1 | ...26-327,337-338 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   96.64 |    91.37 |     100 |   96.64 | ...37-238,242-243 
  ...nitMessage.ts |     100 |      100 |     100 |     100 |                   
  ...extualTips.ts |   78.26 |       50 |     100 |   78.26 | ...2,75-79,96-104 
  ...eteCommand.ts |   89.52 |    90.69 |     100 |   89.52 | ...98-106,114-115 
  ...ialogClose.ts |   36.11 |       10 |     100 |   36.11 | ...89-195,202-207 
  useDiffData.ts   |   11.62 |      100 |       0 |   11.62 | 44-87             
  ...oublePress.ts |   53.12 |       75 |     100 |   53.12 | 33-35,41-54       
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   99.12 |    97.64 |     100 |   99.12 | 182-183           
  ...ionUpdates.ts |   93.72 |    92.98 |     100 |   93.72 | ...87-291,314-320 
  ...agerDialog.ts |   88.88 |      100 |     100 |   88.88 | 21,25             
  ...backDialog.ts |    63.9 |    76.47 |   66.66 |    63.9 | ...66-168,190-191 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |    93.33 |     100 |     100 | 62                
  ...ggestions.tsx |   96.47 |    78.94 |     100 |   96.47 | 121,155-156       
  ...BranchName.ts |     100 |    94.44 |     100 |     100 | 54                
  ...oryManager.ts |   98.44 |     98.9 |     100 |   98.44 | 157-160           
  ...ooksDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...stListener.ts |     100 |      100 |     100 |     100 |                   
  ...nAuthError.ts |   76.19 |       50 |     100 |   76.19 | 39-40,43-45       
  ...putHistory.ts |   92.59 |    85.71 |     100 |   92.59 | 63-64,72,94-96    
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |   22.58 |      100 |      50 |   22.58 | 11-32,44-85       
  ...gIndicator.ts |     100 |    96.66 |     100 |     100 | 109               
  useLogger.ts     |      16 |      100 |       0 |      16 | 15-45             
  useMCPHealth.ts  |   10.52 |      100 |       0 |   10.52 | 36-75             
  ...cpApproval.ts |   93.12 |    86.11 |     100 |   93.12 | ...24-127,139-140 
  useMcpDialog.ts  |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...moryDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...oryMonitor.ts |   83.14 |    78.57 |     100 |   83.14 | 54-63,74-79       
  ...ssageQueue.ts |     100 |    95.19 |     100 |     100 | ...53,289,360,375 
  ...delCommand.ts |     100 |       96 |     100 |     100 | 61                
  ...ouseEvents.ts |   94.89 |       95 |   83.33 |   94.89 | 78-82             
  ...raseCycler.ts |   84.74 |    76.47 |     100 |   84.74 | ...49,52-53,69-71 
  ...rredEditor.ts |   58.33 |    22.22 |     100 |   58.33 | 23-27,29-33       
  ...derUpdates.ts |   89.16 |     82.6 |     100 |   89.16 | ...77,329-339,419 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   89.13 |     86.9 |     100 |   89.13 | ...61-463,496-506 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...umeCommand.ts |   96.51 |    90.19 |     100 |   96.51 | 279,306-311       
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.19 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.35 |     100 |   92.87 | ...99-501,503-505 
  ...earchInput.ts |     100 |    97.29 |     100 |     100 | 82                
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   93.28 |    80.95 |     100 |   93.28 | ...96,153-154,164 
  ...oryCommand.ts |   85.48 |    58.33 |     100 |   85.48 | 22-28,40,71       
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   82.79 |    85.33 |   94.73 |   82.79 | ...86-688,696-732 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |   97.32 |    93.93 |     100 |   97.32 | ...18-422,518-525 
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...mInProcess.ts |   27.35 |       80 |      25 |   27.35 | ...82-183,186-188 
  ...tification.ts |     100 |     87.5 |     100 |     100 | 50                
  ...alProgress.ts |   67.34 |    58.82 |   66.66 |   67.34 | 52-53,61-68,79-85 
  ...rminalSize.ts |     100 |      100 |     100 |     100 |                   
  ...emeCommand.ts |    79.2 |    35.29 |     100 |    79.2 | ...15-116,120-121 
  useTimer.ts      |   97.59 |    94.73 |     100 |   97.59 | 17-18             
  ...lMigration.ts |       0 |        0 |       0 |       0 |                   
  ...rustModify.ts |     100 |    90.47 |     100 |     100 | 112,134           
  useTurnDiffs.ts  |   95.12 |    78.57 |     100 |   95.12 | 133-134,156-157   
  ...elcomeBack.ts |   87.36 |     90.9 |     100 |   87.36 | ...,94-96,114-115 
  ...reeSession.ts |   93.75 |       70 |     100 |   93.75 | 47-48,72          
  vim.ts           |      74 |    67.56 |   69.23 |      74 | ...1854-1861,1869 
 src/ui/layouts    |   91.25 |    89.47 |     100 |   91.25 |                   
  ...AppLayout.tsx |   90.99 |     87.5 |     100 |   90.99 | 61-63,111-116,152 
  ...AppLayout.tsx |   91.66 |    92.85 |     100 |   91.66 | 75-80             
 src/ui/model      |   97.91 |    98.36 |     100 |   97.91 |                   
  ...ggregation.ts |     100 |      100 |     100 |     100 |                   
  ...ming-model.ts |   97.43 |    97.72 |     100 |   97.43 | 261-265           
 src/ui/models     |   80.72 |       80 |   71.42 |   80.72 |                   
  ...ableModels.ts |   80.72 |       80 |   71.42 |   80.72 | ...,61-71,125-127 
 ...noninteractive |     100 |      100 |    6.66 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |    6.66 |     100 |                   
 src/ui/opentui    |   83.78 |    76.39 |   80.59 |   83.78 |                   
  ...plain-text.ts |     100 |    89.47 |     100 |     100 | 73,134            
  ...een-reader.ts |     100 |    88.57 |     100 |     100 | 79-83,198,211     
  clipboard.ts     |     100 |    88.88 |     100 |     100 | 47                
  ...ds-context.ts |   96.66 |      100 |   38.88 |   96.66 | 159,161           
  ...nds-output.ts |     100 |      100 |     100 |     100 |                   
  dialogs-core.ts  |     100 |    94.28 |     100 |     100 | 179,190           
  ...gs-shared.tsx |   51.32 |     64.7 |      40 |   51.32 | ...28-331,371-449 
  ...ogs-theme.tsx |    30.8 |    88.88 |      75 |    30.8 | 148-326           
  early-input.ts   |   94.23 |    73.68 |   71.42 |   94.23 | 85,88-89          
  event-adapter.ts |   90.57 |    71.42 |   88.88 |   90.57 | ...36,721,740-748 
  exit-guard.ts    |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   95.45 |     87.5 |     100 |   95.45 | 56                
  help-content.ts  |   98.11 |    85.41 |     100 |   98.11 | 226-227,316,318   
  input-history.ts |     100 |    84.21 |     100 |     100 | 43-45,58          
  ...projection.ts |    83.6 |    63.26 |   86.66 |    83.6 | ...1069,1074,1079 
  key-map.ts       |     100 |      100 |     100 |     100 |                   
  ...egotiation.ts |   94.82 |    73.68 |     100 |   94.82 | 142-144           
  link-click.ts    |     100 |    82.97 |     100 |     100 | ...49,152,185-189 
  mouse-caret.ts   |     100 |      100 |     100 |     100 |                   
  mouse-hit.ts     |     100 |      100 |     100 |     100 |                   
  osc8-parity.ts   |     100 |      100 |     100 |     100 |                   
  ...h-dispatch.ts |   75.24 |     63.1 |      50 |   75.24 | ...73,592-593,636 
  theme-auto.ts    |     100 |      100 |     100 |     100 |                   
  theme-parity.ts  |   98.68 |    82.35 |     100 |   98.68 | 87                
  theme.ts         |    97.7 |    96.55 |     100 |    97.7 | 202-204           
 src/ui/selection  |   93.56 |    86.19 |     100 |   93.56 |                   
  screen-buffer.ts |   94.73 |    66.66 |     100 |   94.73 | 51-52             
  ...ion-coords.ts |     100 |      100 |     100 |     100 |                   
  ...ction-span.ts |   93.81 |     92.1 |     100 |   93.81 | ...1,45-46,99-100 
  ...tion-state.ts |     100 |      100 |     100 |     100 |                   
  ...ction-text.ts |   93.85 |    93.44 |     100 |   93.85 | 30-34,130-131     
  ...selection.tsx |   91.88 |    78.57 |     100 |   91.88 | ...16-417,446-447 
 src/ui/state      |      95 |    81.81 |     100 |      95 |                   
  extensions.ts    |      95 |    81.81 |     100 |      95 | 69-70,89          
 src/ui/themes     |    98.5 |    73.27 |     100 |    98.5 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |   99.23 |    97.14 |     100 |   99.23 | 277-278           
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  ...inal-theme.ts |   88.59 |     86.2 |     100 |   88.59 | ...57-261,266-270 
  dracula.ts       |     100 |      100 |     100 |     100 |                   
  github-dark.ts   |     100 |      100 |     100 |     100 |                   
  github-light.ts  |     100 |      100 |     100 |     100 |                   
  googlecode.ts    |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  qwen-dark.ts     |     100 |      100 |     100 |     100 |                   
  qwen-light.ts    |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-manager.ts |   88.68 |    84.33 |     100 |   88.68 | ...83-392,397-398 
  theme.ts         |     100 |    38.02 |     100 |     100 | ...34-449,457-461 
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   88.07 |    86.06 |   96.15 |   88.07 |                   
  ...Colorizer.tsx |   80.31 |    85.41 |     100 |   80.31 | ...00-201,313-339 
  ...nRenderer.tsx |   80.07 |     75.6 |     100 |   80.07 | ...70,274,332-333 
  ...wnDisplay.tsx |   92.87 |     93.5 |     100 |   92.87 | ...,955,1002-1020 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   93.63 |    81.77 |   95.23 |   93.63 | ...47-750,803-808 
  ...odeDisplay.ts |   94.28 |    85.71 |     100 |   94.28 | 23,40             
  asciiCharts.ts   |    96.7 |     87.5 |     100 |    96.7 | 170-177,278       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |    52.9 |    74.15 |    92.3 |    52.9 | ...29,632-641,644 
  commandUtils.ts  |   98.61 |    93.33 |     100 |   98.61 | 189,217-218,424   
  ...ssion-text.ts |   90.54 |    71.42 |     100 |   90.54 | 66-68,80,82,90-91 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   73.84 |    73.91 |     100 |   73.84 | ...34,36-40,42-46 
  ...coalescing.ts |     100 |      100 |     100 |     100 |                   
  formatters.ts    |   94.87 |    98.24 |     100 |   94.87 | 116-119           
  goal-runtime.ts  |   94.44 |    96.29 |     100 |   94.44 | 32-34             
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...gap-notice.ts |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |    95.65 |     100 |     100 | 45,151            
  historyUtils.ts  |   96.07 |     97.1 |     100 |   96.07 | 104-107           
  ...mage-parts.ts |   97.75 |       95 |     100 |   97.75 | 82-83             
  inline-math.ts   |   98.48 |    95.23 |     100 |   98.48 | 129-130           
  input-mouse.ts   |     100 |    85.71 |     100 |     100 | 48,93             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |   68.81 |       75 |   66.66 |   68.81 | ...27-132,160-161 
  latexRenderer.ts |   94.95 |     73.8 |     100 |   94.95 | ...76-178,184-187 
  layoutUtils.ts   |     100 |      100 |     100 |     100 |                   
  list-mouse.ts    |     100 |      100 |     100 |     100 |                   
  ...ightLoader.ts |     100 |       95 |     100 |     100 | 81                
  ...nUtilities.ts |   98.72 |    94.36 |     100 |   98.72 | 145-146           
  ...t-position.ts |     100 |     87.5 |     100 |     100 | 85                
  ...geRenderer.ts |   86.51 |    70.16 |   95.12 |   86.51 | ...1286,1326-1332 
  ...alRenderer.ts |   86.69 |     71.9 |     100 |   86.69 | ...1476,1513-1519 
  ...lsBySource.ts |     100 |    95.45 |     100 |     100 | 84                
  mouse-hit.ts     |     100 |     90.9 |     100 |     100 | 62-64             
  mouse.ts         |   92.85 |    74.19 |     100 |   92.85 | ...38,145,149-152 
  osc8.ts          |   91.33 |    79.03 |     100 |   91.33 | ...73,273,277-278 
  ...red-height.ts |   98.38 |    97.14 |     100 |   98.38 | 195-197           
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |     100 |      100 |     100 |     100 |                   
  ...storyUtils.ts |   84.37 |    81.09 |     100 |   84.37 | ...03-625,759-760 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...evel-label.ts |   77.77 |    66.66 |     100 |   77.77 | 18,22-24          
  ...are-cursor.ts |      90 |     87.5 |     100 |      90 | 39-44             
  ...ataService.ts |   93.17 |     79.1 |     100 |   93.17 | ...14,227,254-256 
  suggestions.ts   |     100 |      100 |     100 |     100 |                   
  ...izedOutput.ts |   95.19 |      100 |   88.88 |   95.19 | 121-126           
  ...nal-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...e-renderer.ts |   90.24 |    82.66 |     100 |   90.24 | ...04,506-508,631 
  ...ize-reflow.ts |     100 |     92.3 |     100 |     100 | 57,62,209,217,347 
  ...wOptimizer.ts |     100 |    94.73 |     100 |     100 | 35,78             
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   98.75 |    95.93 |     100 |   98.75 | 292-293,488-489   
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   95.81 |     92.3 |     100 |   95.81 | ...09-210,243-244 
  ...isplay-map.ts |     100 |      100 |     100 |     100 |                   
  updateCheck.ts   |     100 |    92.75 |     100 |     100 | 227-239,331       
  windowTitle.ts   |   96.55 |    94.73 |     100 |   96.55 | 56-57             
  ...ow-keyword.ts |     100 |      100 |     100 |     100 |                   
 ...i/utils/export |   75.03 |     60.1 |   94.59 |   75.03 |                   
  collect.ts       |   71.27 |    65.81 |      96 |   71.27 | ...90-633,655-656 
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |   80.42 |    51.35 |     100 |   80.42 | ...59-364,376-378 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |     100 |      100 |     100 |     100 |                   
 ...ort/formatters |   52.92 |    47.22 |   71.42 |   52.92 |                   
  html.ts          |   84.61 |       50 |     100 |   84.61 | ...53,57-58,62-63 
  json.ts          |     100 |      100 |     100 |     100 |                   
  jsonl.ts         |   82.45 |     37.5 |     100 |   82.45 | ...48,50-51,65-66 
  markdown.ts      |   36.32 |    47.05 |      50 |   36.32 | ...16-219,233-295 
 src/ui/voice      |   81.24 |    79.78 |   81.69 |   81.24 |                   
  ...d-recorder.ts |     6.2 |      100 |       0 |     6.2 | ...33-159,162-163 
  ...o-recorder.ts |   84.61 |    93.33 |   57.14 |   84.61 | ...16-117,131-136 
  ...me-session.ts |   91.09 |     92.1 |     100 |   91.09 | ...99,305,316-319 
  sox-recorder.ts  |    92.7 |    71.87 |     100 |    92.7 | ...34-135,153-154 
  ...ailability.ts |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |     100 |      100 |     100 |     100 |                   
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  ...e-recorder.ts |   88.29 |    67.74 |   81.81 |   88.29 | ...,98-99,112,115 
  voice-refine.ts  |     100 |    93.33 |     100 |     100 | 92                
  ...ream-retry.ts |   86.79 |       70 |     100 |   86.79 | 16-18,48-49,59-60 
  ...am-session.ts |   88.02 |    66.66 |   84.61 |   88.02 | ...26,343-345,363 
  ...ranscriber.ts |     100 |      100 |     100 |     100 |                   
 src/utils         |   92.22 |    89.79 |   96.14 |   92.22 |                   
  ...p-profiler.ts |   98.39 |    92.59 |     100 |   98.39 | 141,185,235       
  acpModelUtils.ts |   97.36 |    95.09 |     100 |   97.36 | ...09-210,214-215 
  apiPreconnect.ts |   96.74 |    94.59 |     100 |   96.74 | 167-170           
  ...ol-call-id.ts |   84.61 |       60 |     100 |   84.61 | 26-27,37-38       
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  ...-api-error.ts |     100 |    96.42 |     100 |     100 | 14                
  cleanup.ts       |   84.05 |    94.11 |      80 |   84.05 | 80,111-121        
  ...y-identity.ts |   89.38 |    85.32 |     100 |   89.38 | ...48-449,456-457 
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.38 |    71.83 |   88.88 |   70.38 | ...27,430-431,438 
  deepMerge.ts     |     100 |       90 |     100 |     100 | 50-52,58          
  ...re-runtime.ts |     100 |      100 |     100 |     100 |                   
  ...putCapture.ts |   90.65 |    86.31 |     100 |   90.65 | ...73,371,373-374 
  ...arResolver.ts |   97.14 |    96.55 |     100 |   97.14 | 125-126           
  errors.ts        |   97.56 |    94.64 |     100 |   97.56 | 69-70,304-305     
  events.ts        |     100 |      100 |     100 |     100 |                   
  ...on-mention.ts |   88.48 |     82.6 |     100 |   88.48 | ...56-160,164-168 
  gitUtils.ts      |   92.85 |    86.66 |     100 |   92.85 | ...13-116,164-167 
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.81 |    94.69 |     100 |   97.81 | ...03,420-421,466 
  ...projection.ts |   95.27 |    95.58 |     100 |   95.27 | 140-145           
  jsonc-editor.ts  |   93.18 |    92.66 |     100 |   93.18 | ...80-381,384-385 
  load-undici.ts   |     100 |      100 |     100 |     100 |                   
  ...npm-update.ts |   86.64 |    77.02 |     100 |   86.64 | ...03-304,335-345 
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...er-mention.ts |     100 |    66.66 |     100 |     100 | 14,30,44-46       
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   94.31 |    91.36 |     100 |   94.31 | ...34,440,443-447 
  ...-part-list.ts |     100 |      100 |     100 |     100 |                   
  osc.ts           |   97.18 |      100 |    87.5 |   97.18 | 182-183           
  package.ts       |   88.88 |    85.71 |     100 |   88.88 | 31-32             
  paths.ts         |     100 |      100 |     100 |     100 |                   
  processUtils.ts  |    92.3 |       80 |     100 |    92.3 | 45-46             
  readStdin.ts     |   93.67 |    94.11 |   85.71 |   93.67 | 79-83             
  relaunch.ts      |   95.87 |    89.28 |     100 |   95.87 | 103-105,131       
  resolvePath.ts   |     100 |      100 |     100 |     100 |                   
  runBudget.ts     |   99.35 |    96.77 |     100 |   99.35 | 119               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  ...xImageName.ts |     100 |    77.77 |     100 |     100 | 10,18             
  sandboxMounts.ts |     100 |      100 |     100 |     100 |                   
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  shell-args.ts    |     100 |      100 |     100 |     100 |                   
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |   76.66 |       90 |   83.33 |   76.66 | 93-99             
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   76.47 |       25 |     100 |   76.47 | 13,17,23-24       
  ...on-handler.ts |    73.8 |       75 |     100 |    73.8 | 17-18,25-26,67-73 
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   87.75 |       75 |     100 |   87.75 | 47-48,53-54,57-58 
  version.ts       |     100 |    66.66 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   94.35 |    94.11 |     100 |   94.35 |                   
  cleanup.ts       |   92.59 |    93.75 |     100 |   92.59 | ...02-205,209-211 
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  throttledOnce.ts |   95.95 |    93.93 |     100 |   95.95 | 77-78,153-154     
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   88.92 |    87.34 |   90.58 |   88.92 |                   
 src               |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/agents        |   90.51 |    85.03 |      94 |   90.51 |                   
  ...transcript.ts |   88.49 |    84.09 |     100 |   88.49 | ...32,640,646-650 
  ...ent-resume.ts |   85.74 |       78 |    85.1 |   85.74 | ...1803-1807,1810 
  ...ound-tasks.ts |   95.19 |    90.72 |   96.42 |   95.19 | ...1889,1897-1898 
  forkedAgent.ts   |   95.91 |    87.12 |   94.44 |   95.91 | ...76-478,601,728 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   94.64 |    88.67 |   95.71 |   94.64 | ...1676,1690-1692 
  ...w-snapshot.ts |   75.58 |    72.47 |    87.5 |   75.58 | ...24,448,455-457 
  worktree-pin.ts  |     100 |    88.23 |     100 |     100 | 78,99             
 src/agents/arena  |   76.87 |    68.43 |   78.94 |   76.87 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |    75.8 |    65.46 |   78.57 |    75.8 | ...1879,1885-1886 
  arena-events.ts  |   64.44 |      100 |      50 |   64.44 | ...71-175,178-183 
  diff-summary.ts  |    87.5 |    72.34 |     100 |    87.5 | ...32-133,137-138 
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...gents/backends |   77.77 |    86.68 |   75.86 |   77.77 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   92.12 |    90.74 |   97.05 |   92.12 | ...37-538,666-672 
  TmuxBackend.ts   |    90.7 |    76.55 |   97.36 |    90.7 | ...87,697,743-747 
  detect.ts        |   31.25 |      100 |       0 |   31.25 | 34-88             
  index.ts         |     100 |      100 |     100 |     100 |                   
  iterm-it2.ts     |     100 |     92.1 |     100 |     100 | 37-38,106         
  tmux-commands.ts |    6.64 |      100 |    3.03 |    6.64 | ...93-363,386-503 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...agents/runtime |   93.43 |    87.58 |   91.66 |   93.43 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  ...-test-mock.ts |   98.82 |    66.66 |   58.33 |   98.82 | 85                
  agent-core.ts    |   90.38 |    80.91 |   81.25 |   90.38 | ...2550,2596-2598 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   93.57 |    89.41 |   83.33 |   93.57 | ...04-505,508-509 
  ...nteractive.ts |   81.64 |     82.6 |      80 |   81.64 | ...33,535-538,541 
  ...statistics.ts |   98.29 |    82.55 |     100 |   98.29 | 141,165,206,239   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ool-policy.ts |   98.38 |      100 |    92.3 |   98.38 | 85-86             
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...-scheduler.ts |   97.43 |    96.36 |     100 |   97.43 | 128-130           
  ...ow-journal.ts |   92.78 |    78.12 |     100 |   92.78 | ...49-150,192-194 
  ...ta-literal.ts |   95.96 |    92.68 |     100 |   95.96 | ...78-379,395-396 
  ...chestrator.ts |   93.86 |    90.47 |     100 |   93.86 | ...2213,2306-2309 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...low-runner.ts |   94.08 |     85.4 |   95.65 |   94.08 | ...68,435,455-458 
  ...ow-sandbox.ts |    97.4 |    89.37 |     100 |    97.4 | ...1846,1852-1853 
  ...flow-saved.ts |    96.7 |     93.9 |     100 |    96.7 | 153-154,261-264   
  ...flow-stall.ts |    97.9 |    83.33 |     100 |    97.9 | 170-171,270       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   85.82 |    86.41 |   91.15 |   85.82 |                   
  TeamManager.ts   |   80.26 |    85.23 |   84.37 |   80.26 | ...2089,2112-2113 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   96.02 |     87.5 |     100 |   96.02 | 352-358           
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   89.29 |       83 |     100 |   89.29 | ...1000,1044-1045 
  team-events.ts   |   73.68 |      100 |   66.66 |   73.68 | 140-144,151-155   
  teamHelpers.ts   |   92.99 |    94.52 |      95 |   92.99 | ...29-330,415-425 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   95.28 |    95.34 |   98.24 |   95.28 |                   
  ...on-harness.ts |   96.49 |    85.71 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |     100 |    96.96 |     100 |     100 | 189,198           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |    86.3 |    88.53 |   78.38 |    86.3 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   84.86 |    87.79 |   76.28 |   84.86 | ...9561,9565-9567 
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...ver-config.ts |   97.29 |      100 |   83.33 |   97.29 | 48-49             
  models.ts        |     100 |      100 |     100 |     100 |                   
  ...sDiscovery.ts |   97.46 |    93.05 |     100 |   97.46 | ...04,182-183,202 
  storage.ts       |   96.05 |    93.43 |   89.47 |   96.05 | ...34-735,738-739 
 ...nfirmation-bus |   98.27 |    97.22 |     100 |   98.27 |                   
  message-bus.ts   |   98.14 |    97.14 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   92.84 |    88.69 |   93.96 |   92.84 |                   
  ...on-restore.ts |   88.23 |    85.41 |     100 |   88.23 | ...60,63-64,67-68 
  baseLlmClient.ts |    88.4 |    83.68 |   81.81 |    88.4 | ...59,672,678-680 
  client.ts        |   92.48 |    88.27 |   91.91 |   92.48 | ...4688,4786-4787 
  ...tGenerator.ts |   87.45 |    88.09 |   88.88 |   87.45 | ...09-510,555-561 
  ...lScheduler.ts |   90.22 |    84.96 |   94.73 |   90.22 | ...6488,6516-6532 
  ...entContext.ts |   96.63 |    90.13 |   96.66 |   96.63 | ...42,444-445,512 
  geminiChat.ts    |     100 |      100 |     100 |     100 |                   
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  genai-compat.ts  |     100 |      100 |     100 |     100 |                   
  ...MediaLimit.ts |     100 |       96 |     100 |     100 | 96                
  ...htProtocol.ts |    9.09 |      100 |       0 |    9.09 | ...9,62-66,69-110 
  ...ream-error.ts |     100 |      100 |     100 |     100 |                   
  llm-chat.ts      |   95.21 |     90.8 |   96.66 |   95.21 | ...5769,5814-5815 
  llm-request.ts   |     100 |      100 |     100 |     100 |                   
  logger.ts        |   87.41 |    87.02 |     100 |   87.41 | ...64-568,614-628 
  ...lay-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...dispatcher.ts |     100 |      100 |     100 |     100 |                   
  ...tyDefaults.ts |     100 |      100 |     100 |     100 |                   
  ...olExecutor.ts |   93.54 |    83.33 |      50 |   93.54 | 46-47             
  output-styles.ts |     100 |      100 |     100 |     100 |                   
  ...on-helpers.ts |   95.38 |    84.31 |     100 |   95.38 | ...87,215,217-218 
  ...issionFlow.ts |   98.98 |    96.96 |     100 |   98.98 | 109               
  ...try-policy.ts |     100 |      100 |     100 |     100 |                   
  ...ell-policy.ts |   94.89 |    88.54 |     100 |   94.89 | ...51-252,297-298 
  prompts.ts       |   93.89 |     91.2 |      85 |   93.89 | ...1272,1475-1476 
  ...ing-effort.ts |     100 |      100 |     100 |     100 |                   
  ...n-recovery.ts |   95.13 |       80 |     100 |   95.13 | ...06-107,142-144 
  ...t-profiler.ts |    97.9 |    81.15 |   88.23 |    97.9 | 117,124-125,130   
  stream-guards.ts |   91.16 |    93.18 |     100 |   91.16 | ...89,218-229,294 
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |     92.1 |     100 |     100 | 87,122-139        
  ...-arguments.ts |     100 |      100 |     100 |     100 |                   
  ...reparation.ts |     100 |      100 |     100 |     100 |                   
  ...tion-guard.ts |   90.38 |    94.73 |     100 |   90.38 | 83-87             
  ...allIdUtils.ts |   98.81 |    91.22 |     100 |   98.81 | 43,52             
  ...okTriggers.ts |   99.45 |     92.5 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   99.21 |    94.69 |     100 |   99.21 | 784-785,854       
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   96.62 |    89.21 |   97.43 |   96.62 |                   
  ...tGenerator.ts |   97.71 |    89.13 |   97.43 |   97.71 | ...1539,1568,1579 
  converter.ts     |   96.19 |    89.25 |     100 |   96.19 | ...1334,1555-1557 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 ...tent-generator |   89.24 |    72.72 |   94.11 |   89.24 |                   
  index.ts         |     100 |    85.71 |     100 |     100 | 51                
  ...-generator.ts |   87.54 |    71.42 |   93.75 |   87.54 | ...93-294,356-362 
 ...ntentGenerator |   95.78 |    90.51 |   96.22 |   95.78 |                   
  ...e-snapshot.ts |   97.39 |    89.65 |     100 |   97.39 | ...,49-50,151-152 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   95.38 |    90.14 |   95.12 |   95.38 | ...1345-1346,1374 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   92.41 |    90.86 |   96.33 |   92.41 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   91.25 |    89.66 |   96.87 |   91.25 | ...1946,2115-2130 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   76.19 |    88.88 |      50 |   76.19 | 44-53,90-94       
  ...tGenerator.ts |      70 |    73.33 |     100 |      70 | ...07-112,121-127 
  pipeline.ts      |    96.3 |    91.36 |     100 |    96.3 | ...1204-1205,1312 
  ...ix-caching.ts |   95.23 |    92.85 |     100 |   95.23 | 45-46,69-70       
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |   92.11 |    92.25 |     100 |   92.11 | ...21-522,542-545 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   97.24 |       92 |   98.64 |   97.24 |                   
  dashscope.ts     |   98.42 |    95.27 |   96.55 |   98.42 | ...51-752,894-895 
  deepseek.ts      |   95.27 |    90.56 |     100 |   95.27 | ...52-153,166-167 
  default.ts       |   98.87 |       96 |     100 |   98.87 | 178,304           
  index.ts         |     100 |      100 |     100 |     100 |                   
  mimo.ts          |   94.11 |    66.66 |     100 |   94.11 | 29,52-53          
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  mistral.ts       |   96.07 |    73.33 |     100 |   96.07 | 32-33             
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
  zai.ts           |      90 |    76.31 |     100 |      90 | ...,72-73,173-175 
 src/extension     |   89.16 |     86.5 |   93.61 |   89.16 |                   
  ...ive-safety.ts |    97.9 |     92.8 |     100 |    97.9 | 235-236,313-316   
  ...-converter.ts |   80.55 |    73.66 |     100 |   80.55 | ...1133,1179-1180 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |     100 |      100 |     100 |     100 |                   
  ...git-client.ts |     100 |      100 |     100 |     100 |                   
  ...redentials.ts |   95.33 |    89.47 |     100 |   95.33 | ...21-122,173-175 
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   92.82 |     89.1 |    98.3 |   92.82 | ...1641-1647,1691 
  ...ionManager.ts |   84.96 |    84.05 |      83 |   84.96 | ...3159,3197-3198 
  ...references.ts |     100 |     90.9 |     100 |     100 | ...05,129,197,200 
  ...onSettings.ts |    92.3 |     94.4 |     100 |    92.3 | ...98-501,570-571 
  ...-converter.ts |   78.91 |    86.36 |   85.71 |   78.91 | ...95,202,214-248 
  github.ts        |   92.61 |    87.44 |     100 |   92.61 | ...1310-1311,1321 
  http-client.ts   |   84.61 |       80 |     100 |   84.61 | 20-21             
  i18n.ts          |   78.26 |       96 |      50 |   78.26 | 104-110,116-123   
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   88.39 |    83.11 |     100 |   88.39 | ...08,494,507-508 
  ...ork-policy.ts |   89.72 |    90.16 |     100 |   89.72 | ...36,148-154,156 
  npm.ts           |   89.02 |    81.81 |     100 |   89.02 | ...86-688,695-700 
  override.ts      |   94.11 |    93.54 |     100 |   94.11 | 63-64,81-82       
  ...-converter.ts |   94.89 |    90.41 |     100 |   94.89 | ...50-151,222-224 
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-107,141-146    
  ...ceRegistry.ts |   94.01 |    83.33 |     100 |   94.01 | ...38-344,365-366 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.95 |    84.21 |     100 |   88.95 | ...32-235,238-241 
  ...extraction.ts |   85.77 |       81 |   89.47 |   85.77 | ...02-205,260-261 
 ...ent-plugins-v1 |   84.94 |    79.51 |     100 |   84.94 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  manifest.ts      |   81.87 |    84.48 |     100 |   81.87 | ...55-156,161-174 
  mcp.ts           |   84.98 |    79.56 |     100 |   84.98 | ...88-389,419-420 
  paths.ts         |     100 |    94.44 |     100 |     100 | 59                
  skills.ts        |   82.31 |    63.88 |     100 |   82.31 | ...38-141,150-151 
 src/followup      |   84.78 |    82.27 |   86.84 |   84.78 |                   
  followupState.ts |   98.44 |    95.74 |     100 |   98.44 | 236-237           
  index.ts         |     100 |      100 |     100 |     100 |                   
  overlayFs.ts     |   96.29 |    88.88 |     100 |   96.29 | 78,108,122        
  speculation.ts   |   76.53 |    71.96 |   58.33 |   76.53 | ...48-749,756-757 
  ...onToolGate.ts |   97.97 |     87.5 |     100 |   97.97 | 105,110           
  ...nGenerator.ts |   86.11 |    87.17 |     100 |   86.11 | ...39-244,356-358 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   93.59 |    90.38 |      95 |   93.59 |                   
  ...eGoalStore.ts |   87.61 |    88.88 |   86.66 |   87.61 | ...85-188,196-204 
  ...t-verifier.ts |   99.45 |    97.05 |     100 |   99.45 | 155               
  ...checkpoint.ts |   86.08 |    85.18 |     100 |   86.08 | ...29-132,142-145 
  ...ion-prompt.ts |     100 |      100 |     100 |     100 |                   
  goal-evidence.ts |    88.7 |     88.2 |   97.67 |    88.7 | ...1219,1242-1245 
  ...projection.ts |   66.66 |    72.97 |   33.33 |   66.66 | ...87,190,194-196 
  ...ersistence.ts |   87.36 |    85.96 |    87.5 |   87.36 | ...53-154,185-190 
  goal-protocol.ts |   97.56 |    96.42 |     100 |   97.56 | 322-323           
  goal-reducer.ts  |   95.75 |    93.82 |   97.36 |   95.75 | ...76,666,684-685 
  goal-runtime.ts  |   96.51 |    90.64 |   96.49 |   96.51 | ...1645-1646,1777 
  ...provenance.ts |     100 |      100 |     100 |     100 |                   
  goal-tools.ts    |   98.58 |     95.2 |   96.15 |   98.58 | ...41-242,350-351 
  ...rn-context.ts |     100 |      100 |     100 |     100 |                   
  goal-verifier.ts |   92.46 |    93.02 |     100 |   92.46 | ...69-172,185-187 
  goal-wire.ts     |       0 |        0 |       0 |       0 | 1-28              
  goalHook.ts      |   96.91 |    92.53 |     100 |   96.91 | 115-120,221-222   
  goalJudge.ts     |   95.84 |    87.09 |     100 |   95.84 | ...55-356,448-449 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/hooks         |   90.59 |    86.89 |   90.32 |   90.59 |                   
  ...okRegistry.ts |   86.48 |    77.08 |     100 |   86.48 | ...41-344,362-369 
  ...bortSignal.ts |     100 |      100 |     100 |     100 |                   
  context-usage.ts |     100 |      100 |     100 |     100 |                   
  ...terpolator.ts |   96.66 |    93.33 |     100 |   96.66 | 66-67             
  ...HookRunner.ts |   96.68 |    87.23 |     100 |   96.68 | 110-112,231-233   
  ...Aggregator.ts |   96.57 |    91.48 |     100 |   96.57 | ...20-321,402,404 
  ...entHandler.ts |   95.57 |    84.76 |   94.73 |   95.57 | ...1040-1041,1051 
  hookPlanner.ts   |   87.55 |    85.54 |   86.66 |   87.55 | ...22-226,233-244 
  hookRegistry.ts  |   92.53 |    85.43 |     100 |   92.53 | ...39,458,462,466 
  hookRunner.ts    |   85.68 |    82.96 |    92.3 |   85.68 | ...1289,1299-1302 
  hookSystem.ts    |   87.64 |     98.5 |   70.83 |   87.64 | ...58-759,765-766 
  ...HookRunner.ts |   79.06 |    66.66 |      80 |   79.06 | ...33-434,452-456 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...edCallback.ts |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   94.19 |    84.37 |   81.81 |   94.19 | ...76-384,458-459 
  ...SkillHooks.ts |   82.47 |    84.21 |      75 |   82.47 | 63-67,169-184     
  ...oksManager.ts |   94.87 |    90.12 |     100 |   94.87 | ...84,325,327-329 
  ssrfGuard.ts     |   86.45 |    89.13 |     100 |   86.45 | ...85,289-295,301 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   94.25 |    96.09 |   88.88 |   94.25 | ...46-547,632-636 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
  ...it-context.ts |     100 |      100 |     100 |     100 |                   
 src/ide           |   76.98 |    85.03 |   79.03 |   76.98 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   69.16 |    84.65 |   68.29 |   69.16 | ...1068,1097-1105 
  ide-installer.ts |   89.06 |    79.31 |     100 |   89.06 | ...36,143-147,160 
  ideContext.ts    |     100 |      100 |     100 |     100 |                   
  process-utils.ts |   84.84 |    71.79 |     100 |   84.84 | ...37,151,193-194 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ipc           |   94.64 |    94.01 |   96.72 |   94.64 |                   
  inbound-gate.ts  |   98.99 |    89.71 |     100 |   98.99 | 557-559           
  ...-directory.ts |     100 |      100 |     100 |     100 |                   
  peer-envelope.ts |     100 |      100 |     100 |     100 |                   
  peer-frames.ts   |   97.61 |    97.22 |     100 |   97.61 | 262-264           
  peer-routing.ts  |     100 |      100 |     100 |     100 |                   
  peer-send.ts     |   97.17 |     98.3 |   88.88 |   97.17 | 183-187           
  socket-path.ts   |   85.71 |    93.33 |     100 |   85.71 | 83-88             
  uds-client.ts    |   88.52 |    92.59 |   85.71 |   88.52 | 172-185           
  uds-inbox.ts     |   82.42 |    84.09 |     100 |   82.42 | ...33,240-250,282 
 src/lsp           |   58.96 |    70.67 |   66.49 |   58.96 |                   
  ...nfigLoader.ts |   80.55 |    72.22 |   95.65 |   80.55 | ...02-504,508-514 
  ...ionFactory.ts |   42.81 |    73.07 |      50 |   42.81 | ...76-427,433-450 
  ...Normalizer.ts |   23.09 |    13.72 |   30.43 |   23.09 | ...04-905,909-924 
  ...verManager.ts |   75.73 |     80.1 |   79.66 |   75.73 | ...1346,1352-1382 
  ...eLspClient.ts |   32.78 |    81.81 |   21.05 |   32.78 | ...89-293,299-300 
  ...LspService.ts |      60 |    73.36 |   78.26 |      60 | ...1575,1635-1645 
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |    82.3 |    77.81 |   78.33 |    82.3 |                   
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   79.31 |    58.06 |     100 |   79.31 | ...26-933,940-942 
  ...en-storage.ts |   98.78 |    97.95 |     100 |   98.78 | 106-107           
  oauth-utils.ts   |   73.61 |    85.48 |    92.3 |   73.61 | ...46-366,392-421 
  ...n-provider.ts |   89.83 |       96 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   82.12 |    88.48 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.71 |   95.23 |   87.08 | ...00-201,214-215 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/memory        |   89.47 |    85.73 |    92.1 |   89.47 |                   
  ...y-document.ts |   89.52 |    84.61 |     100 |   89.52 | ...24-325,329-330 
  ...nel-memory.ts |   97.36 |    96.63 |   96.42 |   97.36 | ...91-293,367-368 
  dream.ts         |    64.6 |    72.22 |      50 |    64.6 | ...04-109,124-165 
  ...entPlanner.ts |     100 |    83.33 |     100 |     100 | 135,145           
  entries.ts       |   75.59 |    84.84 |   83.33 |   75.59 | ...56-157,172-180 
  extract.ts       |   93.82 |    84.09 |     100 |   93.82 | 78-83,122,154-157 
  ...entPlanner.ts |   91.55 |    76.74 |     100 |   91.55 | ...05,118-121,296 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   90.71 |    81.14 |   94.44 |   90.71 | ...17,640,657-663 
  indexer.ts       |   94.14 |       84 |     100 |   94.14 | ...32-233,334,337 
  ...kill-agent.ts |   97.94 |    89.36 |     100 |   97.94 | 82-83,179-180     
  manager.ts       |   78.43 |    83.16 |   77.77 |   78.43 | ...1493,1506-1508 
  ...ent-config.ts |   92.22 |    84.78 |      92 |   92.22 | ...64,473-474,478 
  memoryAge.ts     |   90.47 |    84.61 |     100 |   90.47 | 50-51             
  ...yDiscovery.ts |   93.48 |    90.09 |     100 |   93.48 | ...42,401,629-632 
  paths.ts         |     100 |      100 |     100 |     100 |                   
  ...ing-skills.ts |     100 |       72 |     100 |     100 | 31-35,73-78,97    
  prompt.ts        |   97.26 |    86.79 |     100 |   97.26 | ...10-218,222,225 
  recall.ts        |   86.86 |    86.23 |   92.85 |   86.86 | ...33-538,571-582 
  refresh.ts       |   93.58 |    89.58 |     100 |   93.58 | ...75-176,183-184 
  ...ceSelector.ts |    93.2 |    85.71 |     100 |    93.2 | ...45-146,148-149 
  remember.ts      |   97.21 |    95.29 |     100 |   97.21 | ...29,341,345-347 
  scan.ts          |   93.75 |       80 |     100 |   93.75 | ...08-109,154,157 
  scopes.ts        |     100 |      100 |     100 |     100 |                   
  ...et-scanner.ts |     100 |      100 |     100 |     100 |                   
  ...entPlanner.ts |   79.76 |    76.84 |      80 |   79.76 | ...69-473,476,482 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   92.92 |    81.81 |     100 |   92.92 | ...16-117,147-148 
  ...git-status.ts |     100 |    85.71 |     100 |     100 | 27                
  ...cret-guard.ts |     100 |      100 |     100 |     100 |                   
  ...emory-sync.ts |   94.24 |    82.85 |     100 |   94.24 | ...34-236,246-247 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   81.21 |     79.1 |   81.81 |   81.21 | ...66-280,294-299 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   92.81 |    89.34 |   91.35 |   92.81 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   97.77 |    91.83 |     100 |   97.77 | 155,161,171       
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   79.43 |    64.51 |   85.71 |   79.43 | ...,89-96,131-142 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.07 |     100 |     100 | 177,262           
  modelsConfig.ts  |   89.36 |    86.93 |   88.09 |   89.36 | ...1407,1436-1437 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/output        |     100 |      100 |     100 |     100 |                   
  ...-formatter.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/permissions   |   84.44 |    91.62 |   71.77 |   84.44 |                   
  autoMode.ts      |   97.66 |    93.13 |     100 |   97.66 | ...82-589,635,712 
  ...transcript.ts |   98.51 |    86.48 |     100 |   98.51 | 264-265           
  classifier.ts    |      94 |    94.54 |     100 |      94 | 158-165,389-393   
  ...erousRules.ts |     100 |    90.19 |     100 |     100 | 110,133,147,175   
  ...alTracking.ts |     100 |      100 |     100 |     100 |                   
  ...e-commands.ts |   86.77 |     73.8 |     100 |   86.77 | 131-141,210-214   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...on-manager.ts |   88.26 |     91.9 |   82.35 |   88.26 | ...1374,1480-1484 
  rule-parser.ts   |    94.9 |    92.81 |     100 |    94.9 | ...1552,1586-1588 
  ...-semantics.ts |   70.44 |    91.09 |   46.66 |   70.44 | ...2237,2311-2314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   99.06 |    95.23 |     100 |   99.06 |                   
  system-prompt.ts |   99.06 |    95.23 |     100 |   99.06 | 235               
 src/prompts       |   83.63 |      100 |    87.5 |   83.63 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |     100 |      100 |     100 |     100 |                   
 src/providers     |   85.14 |    80.63 |   82.85 |   85.14 |                   
  all-providers.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  install.ts       |   93.11 |     84.5 |     100 |   93.11 | ...56-257,330-331 
  ...-discovery.ts |    95.4 |    94.44 |     100 |    95.4 | 31-32,42-43       
  ...der-config.ts |   75.91 |    73.48 |   78.26 |   75.91 | ...74-475,503-504 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   98.04 |    91.66 |   63.63 |   98.04 |                   
  ...oding-plan.ts |    87.5 |      100 |       0 |    87.5 | 82-84,87-89,91-94 
  ...a-standard.ts |     100 |      100 |     100 |     100 |                   
  ...token-plan.ts |     100 |      100 |     100 |     100 |                   
  ...m-provider.ts |   97.05 |    81.25 |      75 |   97.05 | 118-119           
  deepseek.ts      |     100 |      100 |     100 |     100 |                   
  grok.ts          |     100 |      100 |     100 |     100 |                   
  idealab.ts       |     100 |      100 |     100 |     100 |                   
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  moonshot.ts      |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |   85.36 |    78.59 |   95.94 |   85.36 |                   
  ...tGenerator.ts |    98.6 |    98.14 |     100 |    98.6 | 103-104           
  qwenOAuth2.ts    |   82.79 |    73.45 |    90.9 |   82.79 | ...1205-1221,1251 
  ...kenManager.ts |   85.36 |     76.8 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |   90.67 |    86.35 |   96.59 |   90.67 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   98.48 |    87.28 |     100 |   98.48 | 81-82,105,474-475 
  branch-points.ts |     100 |    95.23 |     100 |     100 | ...20,211,224,327 
  ...ionService.ts |   97.77 |    96.56 |     100 |   97.77 | ...1098,1241-1249 
  ...ingService.ts |   92.25 |    87.61 |   94.79 |   92.25 | ...2924,2939-2940 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |    97.2 |    94.23 |     100 |    97.2 | ...39-340,378-381 
  cronScheduler.ts |   94.11 |    89.74 |   98.03 |   94.11 | ...1366,1775-1776 
  cronTasksFile.ts |   95.88 |       92 |     100 |   95.88 | ...72,381-382,520 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   96.22 |    93.54 |      90 |   96.22 | 121,155-156,161   
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |    97.5 |    96.07 |     100 |    97.5 | 349-350,363-364   
  ...temService.ts |    92.8 |    84.68 |   94.11 |    92.8 | ...53,479-486,531 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |   74.75 |    70.76 |   96.07 |   74.75 | ...2296,2325-2326 
  ...on-service.ts |   86.58 |    74.39 |     100 |   86.58 | ...56-460,498-499 
  ...references.ts |   98.57 |    91.42 |     100 |   98.57 | 156-157,217-218   
  ...ionService.ts |   98.26 |    97.23 |     100 |   98.26 | ...65-866,889-890 
  ...ticsDumper.ts |   98.37 |    95.23 |     100 |   98.37 | 185-186           
  ...ureMonitor.ts |   95.82 |    90.52 |   97.05 |   95.82 | ...60,861,875-877 
  ...orRegistry.ts |   97.22 |    90.99 |     100 |   97.22 | ...55-456,609-610 
  ...ttachments.ts |   97.74 |     90.9 |     100 |   97.74 | 298-308,646       
  ...pi-history.ts |   98.94 |    89.13 |     100 |   98.94 | 43                
  ...ersistence.ts |   91.88 |    81.19 |     100 |   91.88 | ...1073-1074,1119 
  ...tory-state.ts |     100 |    95.23 |     100 |     100 | 31                
  ...on-service.ts |   94.61 |    92.44 |   97.22 |   94.61 | ...11-613,669-677 
  ...pr-service.ts |   96.04 |    89.74 |     100 |   96.04 | 72,98-101,190-191 
  ...ce-service.ts |    98.5 |    94.11 |    90.9 |    98.5 | 64-65             
  ...n-registry.ts |    98.8 |    96.77 |     100 |    98.8 | 630,684-685,743   
  ...ken-counts.ts |     100 |       96 |     100 |     100 | 58                
  ...ipt-reader.ts |    93.7 |    91.09 |    97.8 |    93.7 | ...2791-2792,2869 
  ...turn-state.ts |   94.11 |     90.9 |   91.66 |   94.11 | 108-112,129-130   
  ...est-helper.ts |       0 |        0 |       0 |       0 | 1-65              
  ...iter-lease.ts |   84.56 |       75 |    97.8 |   84.56 | ...2666,2688,2702 
  sessionRecap.ts  |   67.56 |    43.47 |     100 |   67.56 | ...60,178,180-183 
  ...ionService.ts |   89.33 |    87.47 |   91.72 |   89.33 | ...4207-4208,4249 
  sessionTitle.ts  |   96.35 |    79.71 |     100 |   96.35 | ...08-311,342-343 
  ...ContextEnv.ts |     100 |    94.73 |     100 |     100 | 76,111            
  ...ionService.ts |   84.43 |    78.45 |   97.18 |   84.43 | ...2496,2502-2507 
  ...pInhibitor.ts |   97.42 |    92.77 |     100 |   97.42 | ...30,169,369-370 
  ...e-encoding.ts |   85.96 |    76.47 |     100 |   85.96 | 58-61,64-65,78-79 
  ...Estimation.ts |     100 |    95.83 |     100 |     100 | 139               
  ...ageService.ts |   97.76 |    91.59 |   93.75 |   97.76 | ...61-262,366,567 
  ...ite-origin.ts |     100 |    93.33 |     100 |     100 | 32                
  ...UseSummary.ts |   94.63 |    88.46 |     100 |   94.63 | ...62-164,214-215 
  ...rd-service.ts |     100 |    88.37 |     100 |     100 | ...29,145-146,241 
  ...oryService.ts |   90.77 |    84.92 |     100 |   90.77 | ...43-546,598-599 
  ...l-registry.ts |   92.99 |    83.19 |     100 |   92.99 | ...66-367,377-378 
  ...reeCleanup.ts |   14.42 |      100 |   33.33 |   14.42 | 58-186            
  ...ionService.ts |   88.36 |     87.8 |     100 |   88.36 | ...48-449,465-466 
 ...icrocompaction |   98.91 |    95.06 |     100 |   98.91 |                   
  microcompact.ts  |   98.91 |    95.06 |     100 |   98.91 | ...60,769,778-779 
 ...s/visionBridge |    98.8 |    92.12 |     100 |    98.8 |                   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |   98.72 |    82.35 |     100 |   98.72 | 65,71             
  ...ge-service.ts |   98.61 |     94.7 |     100 |   98.61 | ...06,666,679-680 
 src/skills        |   89.78 |    86.05 |   94.73 |   89.78 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |    93.33 |     100 |     100 | 93,112            
  skill-curator.ts |   89.71 |    81.54 |     100 |   89.71 | ...01-902,904-907 
  skill-load.ts    |   94.84 |     87.5 |     100 |   94.84 | ...03,223,235-237 
  skill-manager.ts |   86.11 |    85.71 |   86.11 |   86.11 | ...1244,1251-1255 
  skill-paths.ts   |   90.42 |     87.5 |     100 |   90.42 | ...19-120,125-126 
  symlinkScope.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |   97.91 |    98.07 |     100 |   97.91 | 289-290           
 ...ataviz/scripts |   80.06 |    95.23 |   88.23 |   80.06 |                   
  ...te_palette.js |   80.06 |    95.23 |   88.23 |   80.06 | 261-296,306-328   
 ...s/bundled/loop |   97.48 |    95.77 |     100 |   97.48 |                   
  ...omous-loop.ts |     100 |      100 |     100 |     100 |                   
  ...-task-file.ts |   94.85 |     92.4 |     100 |   94.85 | ...56,367,375-376 
  ...k-resolver.ts |     100 |      100 |     100 |     100 |                   
 src/subagents     |   88.93 |    89.34 |   98.36 |   88.93 |                   
  ...ter-schema.ts |     100 |    98.18 |     100 |     100 | 99                
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   85.75 |    86.38 |   97.56 |   85.75 | ...1653,1730-1731 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   94.14 |    95.23 |     100 |   94.14 | 47-52,65-66,71-76 
 src/telemetry     |   83.23 |    84.98 |   86.51 |   83.23 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  context-usage.ts |   96.85 |    91.07 |     100 |   96.85 | ...26-127,199-200 
  ...on-metrics.ts |   99.08 |    80.95 |     100 |   99.08 | 185,199           
  ...on-tracing.ts |   80.71 |    81.91 |   79.16 |   80.71 | ...92,499-501,517 
  ...attributes.ts |   96.98 |    91.37 |     100 |   96.98 | ...47-348,366-367 
  ...ag-metrics.ts |     100 |    77.77 |     100 |     100 | 21,40             
  ...t-loop-lag.ts |   96.85 |    85.71 |     100 |   96.85 | 170-173           
  ...-exporters.ts |   65.38 |    83.33 |      50 |   65.38 | ...08-109,112-113 
  ...ai-content.ts |    74.5 |    66.41 |   91.66 |    74.5 | ...1480,1493-1502 
  ...i-provider.ts |     100 |    99.02 |     100 |     100 | 106               
  ...ai-request.ts |   87.88 |    92.79 |   83.78 |   87.88 | ...55-561,564-568 
  gen-ai-usage.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...-processor.ts |   99.12 |    96.03 |      95 |   99.12 | 150,379-380       
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |   60.83 |    77.77 |   66.66 |   60.83 | ...1523,1540-1560 
  metrics.ts       |   80.37 |    82.35 |   80.95 |   80.37 | ...1150,1153-1164 
  otlp-urls.ts     |     100 |      100 |     100 |     100 |                   
  ...attributes.ts |     100 |      100 |     100 |     100 |                   
  ...ime-config.ts |       0 |        0 |       0 |       0 | 1                 
  sanitize.ts      |      80 |    83.33 |     100 |      80 | 35-36,41-42       
  ...rters-grpc.ts |     100 |      100 |     100 |     100 |                   
  ...rters-http.ts |     100 |      100 |     100 |     100 |                   
  sdk-impl.ts      |   94.13 |    86.66 |      75 |   94.13 | ...45,496-497,513 
  sdk.ts           |    82.7 |     90.9 |   66.66 |    82.7 | ...00-204,242-264 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...ion-events.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   91.29 |    88.88 |    97.5 |   91.29 | ...1946,1975-1978 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  trace-context.ts |     100 |      100 |     100 |     100 |                   
  ...e-id-utils.ts |     100 |      100 |     100 |     100 |                   
  tracer.ts        |   98.56 |    88.63 |     100 |   98.56 | 52,101            
  types.ts         |   83.26 |    88.81 |   86.36 |   83.26 | ...1467,1471-1478 
  uiTelemetry.ts   |   98.87 |     95.1 |   97.05 |   98.87 | ...59,696,786-787 
 ...ry/qwen-logger |   74.23 |     80.7 |      70 |   74.23 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   74.23 |    80.53 |   69.49 |   74.23 | ...1122,1160-1161 
 src/test-utils    |   96.38 |    98.64 |   84.09 |   96.38 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   94.11 |       90 |     100 |   94.11 | 69-70             
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...mised-lock.ts |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |   94.85 |      100 |      80 |   94.85 | ...53,227-228,241 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   87.75 |    86.37 |   90.35 |   87.75 |                   
  ...erQuestion.ts |      90 |    82.75 |   92.85 |      90 | ...01-402,409-410 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  ...ub-session.ts |   89.72 |    91.48 |   83.33 |   89.72 | ...06-307,318-325 
  cron-create.ts   |   92.26 |    97.72 |      75 |   92.26 | ...,76-77,272-281 
  cron-delete.ts   |   97.56 |      100 |   85.71 |   97.56 | 31-32             
  cron-list.ts     |   98.23 |    95.45 |   88.88 |   98.23 | 57-58             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  display-image.ts |   87.42 |    85.71 |    90.9 |   87.42 | ...29-134,194-195 
  edit.ts          |   82.76 |    86.88 |   82.35 |   82.76 | ...45-746,865-915 
  ...r-worktree.ts |   83.14 |    68.42 |   88.88 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |      85 |       84 |      90 |      85 | ...28-133,161-175 
  exit-worktree.ts |   83.29 |     83.8 |   94.73 |   83.29 | ...14-515,537-538 
  exitPlanMode.ts  |      95 |    85.29 |     100 |      95 | ...21-325,344,378 
  ...permission.ts |     100 |      100 |     100 |     100 |                   
  glob.ts          |   96.33 |     88.5 |     100 |   96.33 | ...24-225,373,376 
  grep.ts          |   90.73 |    86.71 |   86.36 |   90.73 | ...76-677,727-728 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  image-gen.ts     |   91.66 |    78.12 |   91.66 |   91.66 | ...13-214,221-222 
  list-agents.ts   |   96.52 |    95.55 |    87.5 |   96.52 | 37-38,53-54       
  loop-wakeup.ts   |   99.27 |     93.1 |     100 |   99.27 | 45                
  ls.ts            |   96.74 |    90.54 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.71 |     59.9 |    90.9 |   72.71 | ...1212,1214-1215 
  ...fier-input.ts |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   82.07 |    80.15 |   85.71 |   82.07 | ...3243,3245-3246 
  mcp-client.ts    |   86.55 |    88.01 |   94.02 |   86.55 | ...2581,2585-2588 
  ...ry-timeout.ts |     100 |      100 |     100 |     100 |                   
  mcp-errors.ts    |     100 |      100 |     100 |     100 |                   
  ...pool-entry.ts |   79.21 |    85.71 |   81.57 |   79.21 | ...1342,1350-1351 
  ...ool-events.ts |       8 |        0 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |    97.5 |    93.93 |     100 |    97.5 | 178-179           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-retry.ts     |   97.67 |    95.65 |     100 |   97.67 | 131-132           
  ...ion-config.ts |     100 |      100 |     100 |     100 |                   
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |   98.14 |     93.2 |     100 |   98.14 | ...1269,1324-1325 
  ...sport-pool.ts |   83.98 |     80.3 |   88.46 |   83.98 | ...1411,1418-1422 
  ...ace-budget.ts |   87.27 |     82.6 |     100 |   87.27 | ...00-305,340-345 
  memory-config.ts |     100 |      100 |     100 |     100 |                   
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 101,108           
  monitor.ts       |   91.82 |    83.09 |   88.46 |   91.82 | ...99,612,810-815 
  notebook-edit.ts |   85.71 |    77.39 |   82.35 |   85.71 | ...96-912,958-959 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   83.21 |    90.69 |     100 |   83.21 | 147-158,207-220   
  read-file.ts     |   95.49 |    88.61 |    87.5 |   95.49 | ...49,464,536-537 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  readManyFiles.ts |   96.04 |    82.25 |     100 |   96.04 | ...41,594,604-608 
  ...d-artifact.ts |   85.68 |    81.59 |   94.73 |   85.68 | ...1071,1095-1096 
  ...t-findings.ts |   99.13 |    93.93 |    92.3 |   99.13 | 255-257           
  ...t-shutdown.ts |    87.2 |    86.66 |   77.77 |    87.2 | ...,75-79,162-165 
  ripGrep.ts       |    94.6 |    87.34 |   95.45 |    94.6 | ...33-734,740-741 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |   86.86 |    93.18 |      75 |   86.86 | ...20-426,568-575 
  ...n-mcp-view.ts |   94.07 |    91.89 |    90.9 |   94.07 | 131-139           
  shell.ts         |   78.96 |    84.29 |      93 |   78.96 | ...5036,5111-5112 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   93.56 |    90.78 |   91.66 |   93.56 | ...49,653,701-723 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |    94.4 |    93.75 |   83.33 |    94.4 | 45-49,63-64,95    
  task-list.ts     |   80.43 |    86.95 |   85.71 |   80.43 | ...67,121,125-132 
  task-stop.ts     |   93.14 |    96.29 |    87.5 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.87 |     86.5 |   92.85 |   82.87 | ...54-564,588-599 
  team-create.ts   |   97.24 |     87.5 |   85.71 |   97.24 | 48-49,129-130     
  team-delete.ts   |   88.67 |     87.5 |   85.71 |   88.67 | ...2-48,72-73,129 
  ...n-approval.ts |   92.14 |    96.96 |   81.81 |   92.14 | 38-39,42-43,93-99 
  todoWrite.ts     |   95.73 |    90.47 |   93.75 |   95.73 | ...48-552,565-570 
  ...repeat-key.ts |     100 |      100 |     100 |     100 |                   
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   80.72 |    82.95 |   86.53 |   80.72 | ...1106,1114-1115 
  ...-finalizer.ts |    98.1 |    92.36 |   93.33 |    98.1 | ...34-235,237-241 
  ...iagnostics.ts |   99.06 |    97.69 |   91.66 |   99.06 | 133-134,205       
  ...-retention.ts |     100 |    95.83 |     100 |     100 | 116               
  tool-search.ts   |    96.2 |    89.79 |   93.75 |    96.2 | ...10,260-265,428 
  tool-utils.ts    |   97.46 |    96.55 |     100 |   97.46 | 26-27             
  tools.ts         |   92.93 |    92.18 |      92 |   92.93 | ...67-568,584-590 
  truncation.ts    |   90.61 |    90.35 |     100 |   90.61 | ...53-461,498-504 
  ...reapproved.ts |   99.27 |    94.11 |     100 |   99.27 | 170               
  web-fetch.ts     |   96.05 |    90.54 |   96.77 |   96.05 | ...85-786,800-801 
  web-search.ts    |   90.58 |    83.57 |      80 |   90.58 | ...1025,1083-1086 
  write-file.ts    |   87.29 |    86.15 |   89.47 |   87.29 | ...53-856,893-928 
  zoom-image.ts    |   95.76 |    93.93 |    90.9 |   95.76 | 54-59,203-204     
 src/tools/agent   |   87.26 |    88.53 |   89.71 |   87.26 |                   
  agent.ts         |   85.88 |    87.66 |   87.35 |   85.88 | ...4277,4311-4321 
  fork-profile.ts  |   93.65 |       90 |     100 |   93.65 | ...33-134,171-174 
  fork-subagent.ts |   98.73 |       95 |     100 |   98.73 | 101-102,173       
 ...tools/artifact |   95.83 |    92.51 |   88.63 |   95.83 |                   
  artifact-tool.ts |   91.69 |    88.46 |   71.42 |   91.69 | ...20-321,329-332 
  ...-publisher.ts |     100 |    85.71 |     100 |     100 | 32                
  ...-publisher.ts |   96.74 |    97.72 |    87.5 |   96.74 | 29-30,156-157     
  html.ts          |     100 |    96.77 |     100 |     100 | 122               
  ...-publisher.ts |     100 |       80 |     100 |     100 | 30                
  oss-publisher.ts |    98.1 |    91.48 |     100 |    98.1 | 43-45             
  publisher.ts     |     100 |      100 |     100 |     100 |                   
 ...tools/workflow |   89.29 |    86.71 |   83.33 |   89.29 |                   
  workflow.ts      |   89.29 |    86.71 |   83.33 |   89.29 | ...91-892,991-992 
 src/utils         |   92.79 |    89.76 |    96.9 |   92.79 |                   
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |      95 |    92.76 |     100 |      95 | ...49-550,657-661 
  auth-type.ts     |     100 |      100 |     100 |     100 |                   
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  ...ry-content.ts |   98.45 |    95.79 |     100 |   98.45 | 132-133,159-160   
  browser.ts       |   86.84 |    78.94 |     100 |   86.84 | 34,36-37,65-66    
  btwUtils.ts      |   13.95 |      100 |       0 |   13.95 | 17-31,34-55       
  bundlePaths.ts   |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.06 |    89.47 |     100 |   91.06 | ...46-147,154-155 
  ...n-branches.ts |   95.89 |    94.11 |      95 |   95.89 | ...99-500,512-525 
  ...tion-chain.ts |     100 |      100 |     100 |     100 |                   
  cronDisplay.ts   |     100 |    97.61 |     100 |     100 | 46                
  cronParser.ts    |   95.34 |    93.33 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   99.49 |    96.29 |     100 |   99.49 | 224               
  ...qwen-model.ts |     100 |      100 |     100 |     100 |                   
  editHelper.ts    |   93.63 |     83.9 |     100 |   93.63 | ...27-428,462-463 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  encoding.ts      |     100 |      100 |     100 |     100 |                   
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  errorParsing.ts  |     100 |      100 |     100 |     100 |                   
  ...rReporting.ts |   95.65 |    93.33 |     100 |   95.65 | 37-38             
  errors.ts        |   88.92 |    93.58 |      68 |   88.92 | ...92,394,410-411 
  fetch.ts         |   90.68 |    82.63 |     100 |   90.68 | ...72,483-484,503 
  ...ng-options.ts |     100 |      100 |     100 |     100 |                   
  file-identity.ts |     100 |      100 |     100 |     100 |                   
  fileUtils.ts     |   94.79 |    92.18 |   96.29 |   94.79 | ...2076,2084-2085 
  formatters.ts    |     100 |      100 |     100 |     100 |                   
  ...eUtilities.ts |    92.4 |    86.95 |     100 |    92.4 | ...52-158,168-169 
  ...rStructure.ts |   94.39 |    94.28 |     100 |   94.39 | ...29-132,343-348 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  git-branches.ts  |   91.64 |    84.87 |    92.3 |   91.64 | ...00,415-420,580 
  ...fig-safety.ts |   97.01 |       80 |     100 |   97.01 | 53-54             
  git-ignore.ts    |     100 |      100 |     100 |     100 |                   
  gitDiff.ts       |   95.19 |    81.36 |     100 |   95.19 | ...1073,1419-1420 
  gitDirect.ts     |   98.84 |    94.28 |     100 |   98.84 | 234,318           
  ...noreParser.ts |   94.48 |    93.22 |     100 |   94.48 | ...23-124,158-159 
  gitUtils.ts      |   78.83 |    82.35 |    87.5 |   78.83 | ...22-123,164-215 
  github-prs.ts    |   96.06 |    84.09 |     100 |   96.06 | 251,350-358       
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  image-view.ts    |   95.08 |    93.47 |     100 |   95.08 | ...62-166,234-238 
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  is-tool.ts       |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   96.15 |    93.63 |     100 |   96.15 | ...86-387,429-432 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iconv-lite.ts |     100 |      100 |     100 |     100 |                   
  ...simple-git.ts |   96.77 |    91.66 |     100 |   96.77 | 38                
  ...m-headless.ts |      96 |    88.88 |     100 |      96 | 34                
  ...-constants.ts |   94.73 |     92.3 |     100 |   94.73 | 66-67             
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...tProcessor.ts |   94.01 |     90.1 |     100 |   94.01 | ...47-353,445-446 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.24 |     100 |   98.96 | 154               
  ...kerChecker.ts |    90.9 |    91.66 |     100 |    90.9 | 73-79             
  notebook.ts      |   94.57 |    89.91 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   91.66 |    89.74 |     100 |   91.66 | ...26-228,251-256 
  osc8.ts          |   54.26 |    64.86 |   83.33 |   54.26 | ...72-195,197-257 
  partUtils.ts     |     100 |    98.64 |     100 |     100 | 211               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   90.88 |     90.6 |     100 |   90.88 | ...28-629,631-633 
  pdf.ts           |   92.17 |    85.81 |     100 |   92.17 | ...64-565,606-611 
  ...s-liveness.ts |     100 |    93.47 |     100 |     100 | 62,72,108         
  projectPath.ts   |     100 |      100 |     100 |     100 |                   
  projectRoot.ts   |   71.73 |    78.57 |     100 |   71.73 | 54-66             
  ...ectSummary.ts |   89.62 |    72.41 |     100 |   89.62 | ...40-145,196-199 
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  proxyUtils.ts    |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   71.15 |       86 |     100 |   71.15 | ...-90,96-101,147 
  ...noreParser.ts |   92.63 |    91.66 |     100 |   92.63 | ...77-178,197-198 
  rateLimit.ts     |   93.75 |    89.62 |     100 |   93.75 | ...13,218-219,262 
  ...text-range.ts |   96.98 |    87.36 |     100 |   96.98 | ...87-688,763-764 
  retry.ts         |   96.09 |    92.52 |     100 |   96.09 | ...72,563-564,582 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.63 |    97.08 |     100 |   97.63 | ...17,251-252,278 
  retryPolicy.ts   |   97.72 |    90.56 |     100 |   97.72 | 130-131           
  ripgrepUtils.ts  |   90.04 |    93.43 |   95.45 |   90.04 | ...55-565,598-599 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   84.87 |    86.71 |   96.29 |   84.87 | ...71,696,725-734 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |   97.77 |    91.66 |     100 |   97.77 | 172-173           
  safe-mode.ts     |     100 |      100 |     100 |     100 |                   
  safeJsonParse.ts |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...-child-env.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   98.22 |    98.01 |     100 |   98.22 | 100,102-103       
  ...aValidator.ts |   92.09 |    83.65 |   90.47 |   92.09 | ...60,882-883,896 
  ...r-launcher.ts |   96.35 |    93.97 |   85.71 |   96.35 | ...35-336,347-348 
  sedEditParser.ts |   91.78 |    92.18 |     100 |   91.78 | ...66-569,645-646 
  ...nIdContext.ts |     100 |       90 |     100 |     100 | 95                
  ...orageUtils.ts |   96.21 |    86.32 |     100 |   96.21 | ...70,386,466,485 
  ...-pager-env.ts |     100 |      100 |     100 |     100 |                   
  ...fety-rules.ts |     100 |     89.7 |     100 |     100 | ...01,304,309-311 
  shell-utils.ts   |   86.37 |    88.59 |     100 |   86.37 | ...2361,2368-2372 
  ...lAstParser.ts |    98.3 |    91.59 |     100 |    98.3 | ...1340-1342,1352 
  ...nlyChecker.ts |   96.33 |    96.57 |     100 |   96.33 | ...83-284,292-293 
  sideQuery.ts     |   86.82 |    86.66 |     100 |   86.82 | ...79-185,187-193 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   77.77 |    57.14 |     100 |   77.77 | 44,54-59          
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminal-env.ts  |      50 |      100 |       0 |      50 | 18-19             
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    95.65 |     100 |     100 | 99                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  ...error-type.ts |     100 |      100 |     100 |     100 |                   
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ultCleanup.ts |   54.62 |    35.71 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.83 |     92.7 |     100 |   96.83 | ...37-342,344-349 
  ...pt-records.ts |   87.61 |    86.23 |     100 |   87.61 | ...80-484,514-529 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...-directory.ts |    83.7 |    80.95 |    87.5 |    83.7 | ...37-238,252-253 
  ...ifact-path.ts |   94.11 |    92.85 |     100 |   94.11 | 32-33             
  ...aceContext.ts |   95.39 |    89.47 |     100 |   95.39 | ...16-317,321-322 
  xml.ts           |    97.8 |    87.69 |     100 |    97.8 | 98-99             
  yaml-parser.ts   |   83.87 |    77.27 |     100 |   83.87 | ...31-234,239-240 
 ...ils/filesearch |   83.94 |    80.75 |   94.78 |   83.94 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |    82.9 |    76.81 |   95.08 |    82.9 | ...1563,1597-1598 
  fileSearch.ts    |   93.78 |    87.67 |     100 |   93.78 | ...71-272,274-275 
  fzfWorker.ts     |       0 |        0 |       0 |       0 | 1-109             
  ...rkerHandle.ts |   84.05 |    75.86 |      90 |   84.05 | ...30-334,340-341 
  ignore.ts        |     100 |    97.36 |     100 |     100 | 187               
  result-cache.ts  |     100 |    93.75 |     100 |     100 | 49                
 ...uest-tokenizer |    92.3 |      100 |   88.88 |    92.3 |                   
  ...ageFormats.ts |   81.81 |      100 |   66.66 |   81.81 | 56-61             
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
-------------------|---------|----------|---------|---------|-------------------

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

@wenshao

wenshao commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@wenshao

wenshao commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /takeover

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

Copy link
Copy Markdown
Collaborator

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

中文说明

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

@qwen-code-dev-bot

qwen-code-dev-bot commented Aug 26, 2026 •

Copy link
Copy Markdown
Collaborator

⚠️ AutoFix round 10 ended without publishing a report — view run.

中文说明

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

Review-feedback round — PR #10136

Commit 8e1fd85feb — fix(review): align fix-audit shape readers and key the deferral claim off enforcement (#10136) (7 files, +180/−74). Both Critical findings were reproduced with failing tests BEFORE the fix, fixed minimally, and each new guard was mutation-probed. Fifteen Suggestion findings are deferred to the next round under the per-round batch bound (Critical/Required first); each has a reply on its own thread.

Resolved (8 inline findings)

  • [Critical] R1-1 — weak scope bar (budget.ts isFixAuditRound, compose-review.ts fixAuditShapeFacts): reproduced — a plan with a valid anchor but deltaFiles: [] (or a non-string element) read as fix-audit at the roster/topology/tier/floor-arm while incrementalScopeOf degraded every brief to full-scope. Fix: the bar now requires a non-empty delta list whose elements are all non-empty strings, and fixAuditShapeFacts CALLS isFixAuditRound instead of restating a weaker copy — one shared predicate across all readers. Witnesses: new budget parity test (bar + topology + tier) and a compose test proving a divergent plan engages neither the floor arm nor the disclosure; both fail pre-fix, and removing the new bar elements re-fails them (mutation probe).
  • [Critical] R1-2 — deferral claim keyed off the wrong floor reading (compose-review.ts): reproduced — with an ABSENT severityFloor (default config) the reporting reading resolves critical via the plan arm while enforcement fails open, and the body posted "Findings below Critical were recorded and deferred, never posted." beside the very Suggestion it posted inline (assertion evidence: body contained both that sentence and "Suggestions are inline"). Fix: the claim now keys off floorEnforcementEngaged (the strict reading floorEnforcedReroute acted on), and the open-floor sentence names its true cause in both reachable states (operator-set suggestion vs absent floor record) instead of attributing operator intent to an absent record. Witness: new compose test fails pre-fix, and reverting the condition re-fails it (mutation probe).
  • R1-9 — clause bound searched by raw substring (import-graph.ts seamLines): reproduced — bindings named exporter/importData/reimport displaced the clause bound inside their own name, clauseBindings returned zero bindings, and every usage line dropped from the seam. Fix: word-bounded keyword scan ((^|[^\w$])(?:import|export)(?![\w$])). Witness: new seamLines regression test fails pre-fix and kills the revert mutant.
  • Verification-report Finding 1 — the $ lookbehind unpinned (import-graph.test.ts): the existing bounds $-carrying identifiers case now carries a $$store.dispatch(); line that must NOT be marked; a mutation dropping $ from the lookbehind now fails the suite (this mutant survived the verification matrix).
  • R1-19 — dead re-export (compose-review.ts): removed the FLAT_STREAK_TO_ENGAGE re-export (zero importers anywhere, verified by grep) and its false "every earlier reader imported it from here" sentence; the true sentence stays. Subtractive.
  • R1-3 / R1-3 second occurrence — wrong cross-references (SKILL.md): both see Step 3's topology note occurrences now point at Step 1's topology subsection, where the fix-audit bullet lives; the Step 5 half of the line-166 sentence stays.
  • R1-16 — lens count off by one (SKILL.md, budget.ts): "thirteen dimension lenses" → "fourteen" at the two NEW sites, matching the file's own definition (sixteen minus Issue Fidelity and Build & Test).
  • R1-18 — false consumer doc block (budget.ts): the isFixAuditRound doc no longer claims one structural consumer; it names the real consumer set (topology gate here; roster's Agent-0 exclusion and the brief builder's posture frame read it back).

Declined (1 review-level item)

  • [rv:5032191238] "Test Plan files: no such file or directory" — refuted by inspection: all five named files exist and four of them ran green in this round (packages/cli/src/commands/review/lib/{posture,import-graph,incremental-scope,retirement}.test.ts, 320 tests pre-round; packages/core/src/skills/bundled/review/SKILL.test.ts, 41 tests green). The review's own message says its worktree had no node_modules and it hit its tool budget — the files were never absent from the tree. The review itself marks this "not a blocker".

Escalated (1 review-level item)

  • [rv:5029480727] PR body does not follow the PR template — this asks for a PR-body restructure (## Why it's needed, ## Reviewer Test Plan, ## Risk & Scope, ## Linked Issues). This flow has no GitHub write access and address-review has no PR-body output channel, so the body cannot be edited from this checkout. A maintainer (or a flow with credentials) needs to restructure the existing body along the lines the triage comment describes, then re-run @qwen-code /triage.

Deferred to the next round (15 inline findings, batch bound ~8)

R1-4 (retirement one-receipt discriminating test), R1-5 (fetch-pr recorded-floor wiring tests), R1-6 (APPROVE-branch disclosure test), R1-7 + documentation twin (seam census kept === total gating), R1-8 + second stale doc block (floorEnforcedReroute / ledgerMarkerFor doc blocks), R1-10 (narrowed list discarded on the convergence round), R1-11 (SKILL.md:852 plan-arm contradiction), R1-12 (capture-time host/skillArgs identity axes), R1-13 (wave relaunch exclusivity claim, four sites), R1-14 + DESIGN.md twin (RoundSchedule.converged contract), R1-15 (SKILL.md:242 huge-tier parenthetical), R1-17 (launch preamble tail grammar). Each has a reply on its own thread with the reason. Also deferred: verification-report Finding 2 (pin the new SKILL.md prose in SKILL.test.ts) and Finding 3 (nit, no action required).

Notes

  • --conflict false: no merge performed.
  • No settings source changed, so npm run generate:settings-schema was not applicable. No integration test exercises the review command (grep over integration-tests/ for review run/review-pr/compose-review finds nothing), so no post-bundle integration run applies.
  • The touched files compose-review.ts and import-graph.ts were already non-prettier-clean at HEAD (verified: HEAD content diffs against prettier --stdin-filepath output); this round's prettier --write on those files normalized a few pre-existing over-length lines beside the edits, matching what npm run format would produce.

Verification

Commands actually run, in order:

  • npm run build (repo root) — passed (exit 0), re-run after the source changes.
  • npm run typecheck — passed (exit 0).
  • npm run lint — passed (exit 0).
  • npx prettier --check on the six changed TS files — passed after prettier --write on the five it flagged.
  • npx vitest run src/commands/review (packages/cli, whole review suite) — 104 files, 5137 passed | 5 skipped (pre-round baseline at HEAD was 5133; +4 new tests).
  • npx vitest run src/skills/bundled/review/SKILL.test.ts (packages/core) — 41 passed.
  • npx vitest run budget/import-graph/posture/retirement/roster/incremental-scope lib files — 320 passed (baseline before edits).
  • Reproduction (pre-fix, failing as the findings predict): budget.test.ts parity test FAILED; compose "ABSENT floor" test FAILED with expected 'Reviewed — no blockers. Suggestions a…' not to contain 'recorded and deferred, never posted'; compose divergent-plan test FAILED; seamLines clause-bound test FAILED. All green after the fix.
  • Mutation probes (guard removed → focused test FAILED → guard restored → green): (1) drop the new scope-bar elements from isFixAuditRound; (2) revert fixAuditFloorEngaged to the reporting reading; (3) revert the clause bound to lastIndexOf; (4) drop $ from the seam-usage lookbehind.
  • No commit was made while any required check was failing; the single commit landed after all of the above were green.
中文说明

评审反馈轮 — PR #10136

提交 8e1fd85feb —— fix(review): align fix-audit shape readers and key the deferral claim off enforcement (#10136)(7 个文件,+180/−74)。两条 Critical 发现均先在修复前用失败测试复现,再以最小改动修复,且每个新守卫都做了变异探针。受每轮批次上限(Critical/必选优先)约束,十五条 Suggestion 发现延后到下一轮,各自线程上均有回复。

已解决(8 条内联发现)

  • [Critical] R1-1 —— 弱 scope 校验栏(budget.ts isFixAuditRound、compose-review.ts fixAuditShapeFacts):已复现——携带有效 anchor 但 deltaFiles: [](或含非字符串元素)的 plan 会在 roster/拓扑/档位/下限臂上被读作 fix-audit,而 incrementalScopeOf 却把每个 brief 退化为全量形态。修复:校验栏现在要求非空 delta 列表且所有元素均为非空字符串,并且 fixAuditShapeFacts 直接调用 isFixAuditRound,不再重复一份更弱的副本——所有读取器共用一个谓词。见证:新的 budget 对齐测试(校验栏 + 拓扑 + 档位)与一条 compose 测试(证明 divergent plan 既不触发下限臂也不渲染披露);两者修复前失败,且删除新校验栏元素会再次失败(变异探针)。
  • [Critical] R1-2 —— 延后声明引用了错误的下限读取(compose-review.ts):已复现——severityFloor 缺失(默认配置)时,报告读取经 plan 臂决议为 critical,而强制读取放行,正文竟在发布内联 Suggestion 的同时发布 "Findings below Critical were recorded and deferred, never posted."(断言证据:正文同时包含该句与 "Suggestions are inline")。修复:该声明现在以 floorEnforcementEngaged(即 floorEnforcedReroute 实际执行的严格读取)为准,且开放下限句在两种可达状态(操作者显式 suggestion 与下限记录缺失)下分别陈述真实成因,不再把操作者意图归因于缺失的记录。见证:新 compose 测试修复前失败,回退该条件会再次失败(变异探针)。
  • R1-9 —— 子句定界用裸子串查找(import-graph.ts seamLines):已复现——名为 exporter/importData/reimport 的绑定会把子句边界落在自己名字内部,clauseBindings 返回零个绑定,所有使用行从接缝中丢失。修复:单词定界的关键字扫描((^|[^\w$])(?:import|export)(?![\w$]))。见证:新的 seamLines 回归测试修复前失败,并能杀死回退变异。
  • 验证报告发现 1 —— $ 向后断言无测试钉住(import-graph.test.ts):现有 bounds $-carrying identifiers 用例新增一行必须不被标记的 $$store.dispatch();;从向后断言中删除 $ 的变异现在会使套件失败(该变异此前在验证矩阵中幸存)。
  • R1-19 —— 死再导出(compose-review.ts):删除 FLAT_STREAK_TO_ENGAGE 再导出(经 grep 确认任何地方都无导入者)及其虚假的 "every earlier reader imported it from here" 句子;真实句子保留。纯削减。
  • R1-3 / R1-3 第二处 —— 错误交叉引用(SKILL.md):两处 see Step 3's topology note 均改为指向 Step 1 的拓扑小节(fix-audit 条目实际所在);第 166 行句子中 Step 5 的半句保留。
  • R1-16 —— 透镜计数差一(SKILL.md、budget.ts):两个新增位置的 "thirteen dimension lenses" → "fourteen",与本文件自身的定义(十六减去 Issue Fidelity 与 Build & Test)一致。
  • R1-18 —— 失实的消费者文档块(budget.ts):isFixAuditRound 的文档不再声称只有一个结构消费者;改为点名真实消费者集合(拓扑门在此读取;roster 的 Agent-0 排除与 brief 构建器的姿态框架直接回读)。

拒绝(1 条评审级条目)

  • [rv:5032191238] "Test Plan 文件:no such file or directory" —— 经核查证伪:五个被点名的文件全部存在,其中四个在本轮运行通过(packages/cli/src/commands/review/lib/{posture,import-graph,incremental-scope,retirement}.test.ts,轮前基线 320 个测试;packages/core/src/skills/bundled/review/SKILL.test.ts,41 个测试通过)。该评审自己的消息说明其 worktree 没有 node_modules 且达到工具预算——文件从未缺席于代码树。该评审自身也标注 "not a blocker"。

升级(1 条评审级条目)

  • [rv:5029480727] PR 正文未遵循 PR 模板 —— 该条要求重组 PR 正文(## Why it's needed、## Reviewer Test Plan、## Risk & Scope、## Linked Issues)。本流程没有 GitHub 写权限,address-review 也没有 PR 正文输出通道,因此无法从本 checkout 编辑正文。需要维护者(或有凭据的流程)按 triage 评论所述方式重组现有正文,然后重新触发 @qwen-code /triage。

延后到下一轮(15 条内联发现,批次上限约 8)

R1-4(retirement 单次收据区分性测试)、R1-5(fetch-pr 已记录下限接线测试)、R1-6(APPROVE 分支披露测试)、R1-7 + 文档孪生(接缝计数 kept === total 加条件)、R1-8 + 第二个陈旧文档块(floorEnforcedReroute / ledgerMarkerFor 文档块)、R1-10(收敛轮丢弃收窄列表)、R1-11(SKILL.md:852 plan 臂矛盾)、R1-12(捕获期 host/skillArgs 身份轴)、R1-13(波次重启排他性声称,四处)、R1-14 + DESIGN.md 孪生(RoundSchedule.converged 契约)、R1-15(SKILL.md:242 巨型档括注)、R1-17(启动前言尾部语法)。每条均在其线程上有说明原因的回复。另延后:验证报告发现 2(在 SKILL.test.ts 中钉住新增 SKILL.md 行文)与发现 3(nit,无需处理)。

备注

  • --conflict false:未执行合并。
  • 未改动 settings 源,因此不适用 npm run generate:settings-schema。没有任何集成测试演练 review 命令(在 integration-tests/ 中 grep review run/review-pr/compose-review 无结果),因此不适用打包后的集成测试。
  • 被改动的 compose-review.ts 与 import-graph.ts 在 HEAD 上本就不符合 prettier(已验证:HEAD 内容与 prettier --stdin-filepath 输出存在差异);本轮对这两个文件执行 prettier --write 时顺带规范化了编辑旁的若干超长既有行,与 npm run format 的产物一致。

验证

实际执行的命令,按顺序:

  • npm run build(仓库根)——通过(exit 0),源码改动后重新执行。
  • npm run typecheck —— 通过(exit 0)。
  • npm run lint —— 通过(exit 0)。
  • 对六个被改 TS 文件执行 npx prettier --check —— 在对被标记的五个文件执行 prettier --write 后通过。
  • npx vitest run src/commands/review(packages/cli,完整 review 套件)——104 个文件,5137 通过 | 5 跳过(轮前 HEAD 基线为 5133;新增 4 个测试)。
  • npx vitest run src/skills/bundled/review/SKILL.test.ts(packages/core)——41 通过。
  • npx vitest run budget/import-graph/posture/retirement/roster/incremental-scope 各 lib 测试文件 —— 320 通过(编辑前基线)。
  • 复现(修复前,按发现预测失败):budget.test.ts 对齐测试失败;compose "ABSENT floor" 测试失败,断言输出为 expected 'Reviewed — no blockers. Suggestions a…' not to contain 'recorded and deferred, never posted';compose divergent-plan 测试失败;seamLines 子句定界测试失败。修复后全部转绿。
  • 变异探针(删除守卫 → 目标测试失败 → 恢复守卫 → 转绿):(1) 从 isFixAuditRound 删除新校验栏元素;(2) 把 fixAuditFloorEngaged 回退为报告读取;(3) 把子句定界回退为 lastIndexOf;(4) 从接缝使用向后断言中删除 $。
  • 在任何必选检查失败时均未提交;唯一一次提交在上述全部转绿之后完成。

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

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


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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

中文说明

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

中文说明

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

Review round summary — PR #10136

All 8 distinct findings (15 inline threads) are resolved in code, each with a failing-on-pre-fix witness and a mutation probe where the change adds a guard. Nothing declined, deferred, or escalated this round. The Deferred under the convergence posture sections in the review bodies are audit records ("recorded, not requested in this round") and were left untouched.

Findings and dispositions

R2-1 — Critical (rc:3866310288, rc:3867715494, rc:3868766828, rc:3869699872): licence block contradicts the fix-audit plan arm. Reproduced first: the flagship test shape (posture'd plan, auto floor, context-unavailable) capped with ['context-unavailable', 'unlicensed-deferral'] and posted both the deferral sentence and the ⚠️ without a posture licence warning; the round-1 sibling capped with ['unlicensed-deferral'] alone. Fix: composeReviewBody now reads the plan's posture record (fixAuditShapeFacts, the same fact the floor arm acted on) before the licence block, and the two auto doubt arms (contextUnavailable, prevRound === 0) resolve licensed when that record is present; the duplicate read further down was removed and the arm enumeration updated in floorEnforcedReroute's docstring and both licence comments. Witnesses: extended flagship test + new round-1 test; both fail on the pre-round code, and a mutation probe removing each && fixAudit === null guard turns them red again.

R4-1 — Critical (rc:3868766831, rc:3869699884): Agent-0 exclusion rationale disproved. Reproduced through the roster: a fix-audit plan whose published scope shows no deletion rosters exactly ['chunk-1', 'test-matrix', '1c', '7'] — no Agent 0, no 1b. The suggested fix offered two options (keep Agent 0, or document the loss as a knowingly traded gap). I kept Agent 0: the invisible class — a fix commit removing behaviour the PR itself added (absent at the merge base, absent at head, so base..head shows neither side) — is the posture's own flagship signal class, and issue fidelity is the only auditor that re-checks head against the issue whatever the diff displays; documenting it as an accepted trade would leave a persistent Critical hole in exactly the rounds this shape exists for. The three main levers (narrowed fan-out, seam-bounded widening, narrowed waves) are untouched. Changes: roster gate + rationale comment; fetch-pr stderr note ("Agent 0 skipped" clause removed) and docstring; compose-review comments and the posted round-shape sentence (en + zh) no longer claim "the issue-fidelity pass was not re-run"; DESIGN.md sentence rewritten; SKILL.md:299 parenthetical dropped; stale reader lists in the budget.ts/roster.ts docstrings updated. Witnesses: the renamed existing test (its old pin was the disproved behaviour itself) plus the canonical invisible-shape test — both red pre-round; mutation probe re-adding the exclusion turns them red.

R5-1 — Critical (rc:3869699893): postureNarrowing empty delta set. Reproduced: a disjoint deltaFiles made round 3 exit 5 on a false "clean convergence". Fix: if (ids.size === 0) return null; — the schedule degrades to the byte-for-byte ordinary rules, matching every sibling reader's fail-toward-more-coverage direction. Witness fails pre-round (expected 5 to be undefined); mutation-probed.

R2-2 — Suggestion (rc:3866310301): open-floor cause ternary. Reproduced: a drifted floor ('blocker') beside the plan record posted "(the operator turned the posture off)". Fix: three-way cause keyed on the actual floor state — explicit suggestion / absent record / present-but-unreadable — in en and zh. Witness fails pre-round; mutation-probed.

R2-3 — Suggestion (rc:3866310332): delta-list bar parity. Reproduced: deltaFiles: ['x.ts', ''] engaged the brief builder's incremental frame but not isFixAuditRound. Fix: the bar now meets incrementalScopeOf's own reading — reject non-string elements, filter '' after admission, require a non-empty remainder. One deliberate deviation from the literal suggestion block: the proposed filter(typeof string && !== '').length > 0 would also admit ['x.ts', 42], which incrementalScopeOf rejects wholesale — admitting it would break the bar's documented invariant (the posture must never engage where the brief builder degrades to full scope) and the pre-existing pinned control, so the bar is every(string) && some(non-empty), which satisfies the accept case and keeps every control. Witness fails pre-round; mutation-probed.

R2-4 — Suggestion (rc:3866310340, rc:3866310349, rc:3866310356, rc:3866310362): "never posted" universal at 4 sites. Fixed at all four: compose engaged-floor sentence (en + zh), fix-audit brief banner, SKILL.md:709 parenthetical, and SKILL.md:299 topology bullet now carve out pre-confirmed [build]/[test]/[probe] findings. Witnesses: a [test]-tagged Suggestion stays inline while the body pins the carve-out clause (compose), and the brief banner assertion — both red pre-round; both code sites mutation-probed.

R2-5 — Suggestion (rc:3866310373): tier clause. Fixed (prose): SKILL.md:299 now names the huge tier's 3 where a deadline-bound run's delta is itself huge — the huge gate is checked first. Witness N/A (prose).

R2-6 — Suggestion (rc:3866310381): seam-census universal. Fixed (prose): SKILL.md:166 now says each entry that the seam scan could run carries the census, and names the doubt states (unreadable worktree source, hunk-less section) that re-enter full-range with no census. Witness N/A (prose).

Notes

  • The existing test "drops Agent 0 and keeps the territory shape on a small delta" was updated rather than kept: it pinned exactly the behaviour R4-1's probe disproved, which is the content evidence the test-weakening rule requires (stated here beside the machine-measured advisory).
  • The repository's pre-commit hook (lint-staged/prettier) normalized two pre-existing formatting deviations in files this round touches (a reduce fold in fetch-pr.ts, an emphasis-marker style in DESIGN.md); those hunks are the hook's own output, not functional changes.
  • No conflict resolution was needed (--conflict false; origin/main not merged).

Verification

Commands actually run this round (all from the repository root unless noted):

  • npm run build — passed (0 TS errors)
  • npm run typecheck — passed (0 TS errors)
  • npm run lint — passed (0 errors/problems)
  • npx prettier --check on all 11 changed files — passed
  • npx vitest run (packages/cli) — compose-review.test.ts 549 passed, agent-prompt.test.ts 303 passed, lib/budget.test.ts 81 passed, lib/roster.test.ts 49 passed, fetch-pr.test.ts 157 passed, lib/retirement.test.ts 149 passed, lib/incremental-scope.test.ts 7 passed, check-coverage.test.ts 107 passed (1402 total, 0 failed)
  • npx vitest run (packages/core) — skills/bundled/review/SKILL.test.ts 41 passed
  • Integration tests after npm run bundle: not run — every touched behaviour (compose body/licence, roster, budget bar, reverse-audit schedule, brief banners) is exercised by the unit suites above; no change touches behaviour only reachable through the bundled CLI (narrow-diff output is unchanged)
  • Mutation probes (8): each new guard/branch temporarily removed → its witness test FAILED → guard restored → green again (R2-1 both arms, R2-2 ternary, R2-3 bar, R2-4 compose sentence + brief banner, R4-1 gate, R5-1 null return)
  • Red-first confirmation: every Critical's witness test was run against the pre-fix code and failed with exactly the defect shape each finding described before its fix was applied
中文说明

评审轮次总结 — PR #10136

全部 8 个独立发现(15 条行内评论线程)均已在代码中解决,每个改动都配有"在修复前代码上失败"的见证测试,凡新增守卫处均做了变异探针验证。本轮没有拒绝、延后或升级任何条目。评审正文中 Deferred under the convergence posture 各节属于审计记录("已记录,本轮不要求处理"),未做改动。

发现与处理

R2-1 — Critical(rc:3866310288、rc:3867715494、rc:3868766828、rc:3869699872):许可块与 fix-audit 计划分支自相矛盾。 先复现:旗舰测试形态(带姿态的计划、auto 下限、context-unavailable)被打上 ['context-unavailable', 'unlicensed-deferral'] 双重封顶,正文同时出现延后句与 ⚠️ without a posture licence 警告;round-1 兄弟形态只被打上 ['unlicensed-deferral']。修复:composeReviewBody 现在在许可块之前读取计划的姿态记录(fixAuditShapeFacts,与下限分支所依据的是同一事实),当该记录存在时,两个 auto 疑态分支(contextUnavailable、prevRound === 0)判定为有许可;删除了函数后段重复的读取,并在 floorEnforcedReroute 的文档注释和两处许可注释中更新了分支枚举。见证:扩展旗舰测试 + 新增 round-1 测试;两者在修复前代码上失败,变异探针分别移除两个 && fixAudit === null 守卫后重新变红。

R4-1 — Critical(rc:3868766831、rc:3869699884):Agent-0 排除理由被证伪。 通过 roster 复现:发布范围内没有删除行的 fix-audit 计划,其 roster 恰为 ['chunk-1', 'test-matrix', '1c', '7'] —— 既无 Agent 0 也无 1b。建议修复给了两个选项(保留 Agent 0,或把该损失写成"明知而接受"的取舍记录)。我选择保留 Agent 0:不可见类别——修复提交删掉了 PR 自身添加的行为(在 merge base 处不存在、在 head 处也不存在,因此 base..head 两侧都看不到)——正是该姿态最重要的信号类别,而 issue fidelity 是唯一不看 diff 显示、直接对照 issue 复查 head 的审计者;若把它写成"接受的取舍",就会在这种形态专门要审计的轮次里留下一个持久的 Critical 空洞。三大主要杠杆(收窄扇出、接缝有界重发、收窄波次)均未改动。改动:roster 门控 + 理由注释;fetch-pr 的 stderr 提示(移除 "Agent 0 skipped" 子句)与文档注释;compose-review 的注释及已发布的轮次形态句(中英文)不再声称"未重跑 issue-fidelity";DESIGN.md 句子重写;SKILL.md:299 的括注删除;budget.ts/roster.ts 文档注释中过时的读者清单更新。见证:改名后的既有测试(它钉住的正是被证伪的行为本身)+ 标准的不可见形态测试——两者在修复前均变红;变异探针重新加回排除条件后再次变红。

R5-1 — Critical(rc:3869699893):postureNarrowing 空 delta 集合。 复现:不相交的 deltaFiles 使 round 3 以虚假的 "clean convergence" 退出(exit 5)。修复:if (ids.size === 0) return null; —— 调度退回到逐字节一致的普通规则,与所有兄弟读取者"失败时偏向更多覆盖"的方向一致。见证在修复前失败(expected 5 to be undefined);已做变异探针。

R2-2 — Suggestion(rc:3866310301):开放下限原因三元式。 复现:漂移的下限值('blocker')伴随计划记录时,正文发布了 "(the operator turned the posture off)"。修复:原因改为按实际下限状态的三分——显式 suggestion/记录缺失/存在但不可读——中英文同步。见证在修复前失败;已做变异探针。

R2-3 — Suggestion(rc:3866310332):delta 列表门限一致性。 复现:deltaFiles: ['x.ts', ''] 会启用简报构建器的增量框架,却不启用 isFixAuditRound。修复:门限现在与 incrementalScopeOf 自身的读法对齐——拒绝非字符串元素、准入后再过滤 ''、要求剩余非空。与建议块的字面写法有一处刻意偏差:建议的 filter(typeof string && !== '').length > 0 还会接受 ['x.ts', 42],而 incrementalScopeOf 对这种列表是整体拒绝的——若接受它会破坏门限的文档化不变量(简报构建器降级为全量时姿态不得启用)和既有的钉住控制项,因此门限实现为 every(string) && some(non-empty):既满足接受用例 ['x.ts', ''] → true,又保持所有控制项不变。见证在修复前失败;已做变异探针。

R2-4 — Suggestion(rc:3866310340、rc:3866310349、rc:3866310356、rc:3866310362):四处"从不发布"的全称断言。 四处均已修复:compose 的"下限已启用"句(中英文)、fix-audit 简报横幅、SKILL.md:709 括注、SKILL.md:299 拓扑条目,均加入"预确认的 [build]/[test]/[probe] 发现除外"的限定。见证:带 [test] 标签的 Suggestion 保持行内、正文钉住限定子句(compose),以及简报横幅断言——两者修复前均为红;两处代码位置已做变异探针。

R2-5 — Suggestion(rc:3866310373):层级子句。 已修复(文字):SKILL.md:299 现在写明——当有截止时限的运行其 delta 本身达到"巨大"时取巨大层的 3,且巨大门先被检查。见证不适用(纯文字)。

R2-6 — Suggestion(rc:3866310381):接缝普查全称断言。 已修复(文字):SKILL.md:166 现在写明只有接缝扫描得以运行的条目才携带普查数,并点名两种疑态(worktree 源文件读不了、小节无 hunk)会以全量 hunk、无普查数的形式重新进入。见证不适用(纯文字)。

说明

  • 既有测试 "drops Agent 0 and keeps the territory shape on a small delta" 做了更新而非保留:它钉住的正是 R4-1 探针所证伪的行为,这正是削弱测试规则所要求的内容证据(在此与机器度量的删测提示并列陈述)。
  • 仓库的 pre-commit 钩子(lint-staged/prettier)对本轮触及文件中两处既有的格式偏差做了规范化(fetch-pr.ts 中一个 reduce 折行、DESIGN.md 中一处强调符样式);这些 hunk 是钩子自身的输出,非功能性改动。
  • 无需冲突解决(--conflict false;未合并 origin/main)。

验证

本轮实际执行的命令(除注明外均在仓库根目录):

  • npm run build — 通过(0 个 TS 错误)
  • npm run typecheck — 通过(0 个 TS 错误)
  • npm run lint — 通过(0 错误/问题)
  • npx prettier --check(全部 11 个改动文件)— 通过
  • npx vitest run(packages/cli)— compose-review.test.ts 549 通过、agent-prompt.test.ts 303 通过、lib/budget.test.ts 81 通过、lib/roster.test.ts 49 通过、fetch-pr.test.ts 157 通过、lib/retirement.test.ts 149 通过、lib/incremental-scope.test.ts 7 通过、check-coverage.test.ts 107 通过(共 1402 通过,0 失败)
  • npx vitest run(packages/core)— skills/bundled/review/SKILL.test.ts 41 通过
  • npm run bundle 后的集成测试:未运行——所有被改动的行为(compose 正文/许可、roster、budget 门限、反向审计调度、简报横幅)均由上述单测套件覆盖;没有改动触及只能经捆绑 CLI 到达的行为(narrow-diff 输出未变)
  • 变异探针(8 个):逐一临时移除每个新守卫/分支 → 对应见证测试失败 → 恢复守卫 → 重新变绿(R2-1 两个分支、R2-2 三元式、R2-3 门限、R2-4 compose 句 + 简报横幅、R4-1 门控、R5-1 空集返回 null)
  • 红测先行确认:每个 Critical 的见证测试都先在修复前代码上运行过,失败形态与对应发现描述完全一致,之后才实施修复

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

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


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

qwen-code-dev-bot and others added 2 commits August 27, 2026 17:30
Conflicts resolved by keeping both sides:
- compose-review.ts: union of the md-field and posture imports
- SKILL.md: the branch's fix-audit 'effective' bullet with main's
  stop-sidecar 'upToDate' bullet
- DESIGN.md: main's local-flow anchoring paragraph closing the
  import-hop section, then the branch's #10104 posture section

Co-authored-by: Qwen-Coder <[email protected]>
…0136)

The fix-audit roster keeps Agent 0 unconditionally for PR plans — the
probe the roster comment records disproved dropping it — but three
prose claims survived saying otherwise. Rewrite the Step 3B role-0
parenthetical and the user-docs fix-audit sentence to say the round
keeps issue fidelity, and qualify the Step 6 floor paragraph and the
floorEnforcedReroute docblock fail-open enumeration with the plan
record arm they contradict. Also normalises pre-existing prettier
markers on the edited docs line. Prose only; no behaviour change.

Co-authored-by: Qwen-Coder <[email protected]>
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

Address-review summary — PR #10136 (round 6)

Dispositions

[rc:3872893476] Critical R6-1 — SKILL.md says the fix-audit roster "deliberately omits" Agent 0 → Fixed

Reproduced by inspection at the reviewed commit: roster.ts adds role 0 unconditionally for PR plans (isPositivePrNumber(plan.prNumber) && typeof plan.ownerRepo === 'string', no posture gate), and the comment this PR added directly above it records that a probe through the real pipeline disproved dropping Agent 0 on fix-audit rounds. roster.test.ts pins the behaviour with three tests asserting requiredAgents keeps 0 under posture: 'critical'. Meanwhile SKILL.md's Step 3B roles sentence still claimed the opposite, and its "see Step 1's topology note" cross-reference dangled — the note now says the roster "already reflects the shape".

Witness probe before editing: negating the add('0') guard turns all three "keeps Agent 0" tests red (keeps Agent 0 and the territory shape on a small delta, keeps Agent 0 on a fix-audit round whose published scope shows no deletion, keeps Agent 0 on the same plan without the posture); restoring it returns them to green — confirming the corrected sentence describes real, pinned behaviour.

Changes (commit 7e4297738b):

  • Rewrote the role-0 parenthetical to match the code, dropping the dangling cross-reference: the roster keeps Agent 0 on a fix-audit round too, because issue fidelity re-checks head against the issue whatever the diff displays and is the one auditor that can see a fix commit removing behaviour the issue required when the removal appears on neither side of base..head.
  • Fixed the same-class stale claim the finding named at docs/users/features/code-review.md:370 ("no issue-fidelity agent, which the full rounds already answered") in the same pass.

The prose itself is pinned by no test (as the finding noted); the two named roster.test.ts tests pin the behaviour the corrected sentence describes and stay green.

[rv:5042213052] CHANGES_REQUESTED review body

  • 8 confirmed-already-reported Suggestions — no new reporting needed. Of these, R1-11 (comment 3864214055: the plan-arm sentence contradicting the context-unavailable sentence at SKILL.md's floor-resolution paragraph, plus its accepted scope: the enforced-floor enumeration omitting the plan arm) is resolved in code by this round's batch — see the next bullet. The rest (R1-4, R1-5, R1-12, R1-13, and the two untested-seam findings) remain recorded under their earlier deferrals; none was requested this round.
  • Two items deferred under the convergence posture ("recorded, not requested in this round") — verified real and fixed anyway, because both are the same root-cause family as the Critical (prose claims that survived review: adapt the re-review shape once the posture is critical-only — audit the fix commits instead of re-fanning the full territory #10104's plan-record arm) and leaving them recorded again is exactly how R6-1 came back as a fresh Critical:
    • compose-review.ts docblock: the fail-open enumeration listed "auto in the context-unavailable state" as failing open, contradicting the plan arm four lines above ("holds even context-unavailable and at round 1"). Verified against floorResolvesCritical: the plan arm (floor === 'auto' && fixAuditPlan === true) carries no context-unavailable gate and no round gate. Fixed by qualifying the enumeration: "auto in the context-unavailable state without a fix-audit plan record".
    • SKILL.md floor-resolution paragraph: the round-decision parenthetical "(no recovered ledger → round 1 → no posture)" ignored the plan-record arm the same paragraph inserts. Fixed the whole contradiction class in that paragraph in one pass rather than one named instance per round: the parenthetical, the context-unavailable sentence ("treat auto as round 1: no posture, full posting" — now excepted where the plan carries its fix-audit record; this is R1-11's contradiction), and the enforced-floor enumeration (now lists the plan arm beside explicit critical, round 6, and the flatRounds streak).
  • Test Plan note (5 test files "no such file or directory", not a blocker) — verified: all five exist at their package-prefixed paths (packages/cli/src/commands/review/lib/{posture,import-graph,incremental-scope,retirement}.test.ts, packages/core/src/skills/bundled/review/SKILL.test.ts); the listed paths omitted the package prefix. No code action; all five suites were run and pass (see Verification).

Conflict resolution (--conflict true)

Merged origin/main (39 commits ahead) in f85bf21b34; three conflicts, each resolved by keeping both sides' additive content rather than taking one:

  • packages/cli/src/commands/review/compose-review.ts — import collision: union of the branch's posture-constants import with main's added stripCommentGrammar import.
  • packages/core/src/skills/bundled/review/SKILL.md — adjacent edits to the incremental-check bullets: kept the branch's fix-audit effective bullet and main's stop-sidecar upToDate bullet.
  • packages/core/src/skills/bundled/review/DESIGN.md — both sides appended at the same point: main's local-flow anchoring paragraph closes the import-hop section, then the branch's "Why the critical posture changes the round's shape (review: adapt the re-review shape once the posture is critical-only — audit the fix commits instead of re-fanning the full territory #10104)" section follows.

Verification

All commands actually run, on the final tree unless noted:

  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed
  • npx prettier --check on the three touched files — passed (the docs line this round edits carried pre-existing *-style emphasis markers that prettier flags; normalising them to _ on that same line is included)
  • cd packages/cli && npx vitest run src/commands/review/lib/roster.test.ts src/commands/review/compose-review.test.ts src/commands/review/lib/posture.test.ts src/commands/review/lib/incremental-scope.test.ts src/commands/review/lib/retirement.test.ts src/commands/review/lib/import-graph.test.ts src/commands/review/agent-prompt.test.ts — 7 files, 1149 passed
  • cd packages/cli && npx vitest run src/commands/review/compose-review.test.ts (final tree) — 603 passed
  • cd packages/core && npx vitest run src/skills/bundled/review/SKILL.test.ts (final tree) — 55 passed
  • Mutation probe (pre-existing witness, not a guard this round adds — the fix is prose-only): negating the add('0') guard in roster.ts → the three "keeps Agent 0" tests fail; restored → green.
  • Settings sources untouched → npm run generate:settings-schema not applicable. Integration tests not applicable: the only TypeScript change is a docblock comment; no behaviour is exercised solely through the bundled CLI.

Commits this round: f85bf21b34 (merge of origin/main, conflicts resolved), 7e4297738b (the prose fixes). No --no-verify on the fix commit; the husky pre-commit hook (prettier + eslint via lint-staged) ran and passed.

中文说明

处理总结 — PR #10136(第 6 轮)

各项处置

[rc:3872893476] Critical R6-1 — SKILL.md 称 fix-audit roster "刻意省略" Agent 0 → 已修复

在受审 commit 上通过代码检查复现:roster.ts 对 PR plan 无条件添加角色 0(isPositivePrNumber(plan.prNumber) && typeof plan.ownerRepo === 'string',无姿态门槛),且本 PR 在其上方新增的注释明确记录:经真实管线的 probe 已证伪"在 fix-audit 轮丢弃 Agent 0"。roster.test.ts 用三个测试钉住该行为,断言 posture: 'critical' 下 requiredAgents 保留 0。而 SKILL.md 的 Step 3B 角色句仍声称相反,其交叉引用"see Step 1's topology note"已悬空——该注现在写的是 roster"已反映该形态"。

编辑前的见证 probe:将 add('0') 守卫取反后,三个 "keeps Agent 0" 测试全部变红(keeps Agent 0 and the territory shape on a small delta、keeps Agent 0 on a fix-audit round whose published scope shows no deletion、keeps Agent 0 on the same plan without the posture);恢复后重新变绿——确认修正后的句子描述的是真实且有测试钉住的行为。

修改(commit 7e4297738b):

  • 将角色 0 的括注改写为与代码一致,并移除悬空交叉引用:roster 在 fix-audit 轮同样保留 Agent 0,因为 issue fidelity 无论 diff 显示什么都会对照 issue 复查 head,且当"修复 commit 删除了 issue 要求的行为"这一删除在 base..head 两侧都不出现时,它是唯一能看到该类别的审计者。
  • 在同一次修复中一并改正该发现点名的 docs/users/features/code-review.md:370 处同类陈旧声称("no issue-fidelity agent, which the full rounds already answered")。

散文本身无任何测试钉住(如该发现所述);上述两个 roster.test.ts 用例钉住修正后句子所描述的行为,且保持绿色。

[rv:5042213052] CHANGES_REQUESTED 评审正文

  • 8 条已确认此前报告过的建议 — 无需重复报告。其中 R1-11(comment 3864214055:plan-arm 句与 SKILL.md 决议段落中 context-unavailable 句的矛盾,及其已接受范围:强制楼层枚举遗漏 plan arm)已被本轮修复批次在代码中解决——见下一要点。其余(R1-4、R1-5、R1-12、R1-13 及两条接缝未测试发现)维持先前延期记录;本轮均未要求处理。
  • 两条收敛姿态下延后的条目("已记录,本轮不要求修改")— 经核实为真且仍予修复:两者与 Critical 同属一个根因家族(review: adapt the re-review shape once the posture is critical-only — audit the fix commits instead of re-fanning the full territory #10104 的 plan-record arm 加入后幸存的陈旧散文声称),再次仅记录不修复正是 R6-1 以新 Critical 身份回归的原因:
    • compose-review.ts docblock:fail-open 枚举把 "auto 处于 context-unavailable 状态" 列为放行,与上方四行的 plan arm("在 context-unavailable 甚至 round 1 也成立")矛盾。对照 floorResolvesCritical 核实:plan arm(floor === 'auto' && fixAuditPlan === true)没有 context-unavailable 门槛,也没有轮次门槛。修复方式:为枚举加限定——"auto 处于 context-unavailable 状态且无 fix-audit plan 记录"。
    • SKILL.md 楼层决议段落:轮次决议括注 "(no recovered ledger → round 1 → no posture)" 忽略了同一段落插入的 plan-record arm。一次性修复该段落中整类矛盾,而不是每轮只修被点名的一处:括注、context-unavailable 句("treat auto as round 1: no posture, full posting"——现对 plan 携带 fix-audit 记录的情形加例外;此即 R1-11 的矛盾)、以及强制楼层枚举(现在 explicit critical、round 6、flatRounds streak 之外补列 plan arm)。
  • Test Plan 备注(5 个测试文件 "no such file or directory",非阻断)— 已核实:五个文件均存在于带包前缀的路径(packages/cli/src/commands/review/lib/{posture,import-graph,incremental-scope,retirement}.test.ts、packages/core/src/skills/bundled/review/SKILL.test.ts);所列路径遗漏了包前缀。无需改代码;五个套件均已运行并通过(见验证)。

冲突解决(--conflict true)

在 f85bf21b34 中合并 origin/main(领先 39 个 commit);三处冲突,均以保留双方新增内容的方式解决,而非盲取一侧:

  • packages/cli/src/commands/review/compose-review.ts — import 冲突:取分支的 posture 常量 import 与 main 新增的 stripCommentGrammar import 的并集。
  • packages/core/src/skills/bundled/review/SKILL.md — incremental-check 两个 bullet 的相邻编辑:保留分支的 fix-audit effective bullet 与 main 的 stop-sidecar upToDate bullet。
  • packages/core/src/skills/bundled/review/DESIGN.md — 双方在同一点追加:main 的 local-flow anchoring 段落作为 import-hop 一节的收尾,其后接分支的 "Why the critical posture changes the round's shape (review: adapt the re-review shape once the posture is critical-only — audit the fix commits instead of re-fanning the full territory #10104)" 一节。

验证

以下均为实际执行的命令(除注明外在最终代码树上运行):

  • npm run build — 通过
  • npm run typecheck — 通过
  • npm run lint — 通过
  • 对三个被改文件执行 npx prettier --check — 通过(本轮编辑的文档行上原本就有 prettier 标记为不合规的 * 风格强调符;在同一行上将其规范化为 _ 已包含在修改中)
  • cd packages/cli && npx vitest run src/commands/review/lib/roster.test.ts src/commands/review/compose-review.test.ts src/commands/review/lib/posture.test.ts src/commands/review/lib/incremental-scope.test.ts src/commands/review/lib/retirement.test.ts src/commands/review/lib/import-graph.test.ts src/commands/review/agent-prompt.test.ts — 7 个文件,1149 通过
  • cd packages/cli && npx vitest run src/commands/review/compose-review.test.ts(最终树)— 603 通过
  • cd packages/core && npx vitest run src/skills/bundled/review/SKILL.test.ts(最终树)— 55 通过
  • 变异 probe(验证既有见证测试,本轮未新增守卫——修复纯属散文):将 roster.ts 中 add('0') 守卫取反 → 三个 "keeps Agent 0" 测试失败;恢复 → 绿。
  • 未改动 settings 源 → 无需 npm run generate:settings-schema。无需集成测试:唯一的 TypeScript 改动是一处 docblock 注释;不存在仅经捆绑 CLI 才能验证的行为。

本轮提交:f85bf21b34(合并 origin/main,解决冲突)、7e4297738b(散文修复)。修复提交未使用 --no-verify;husky pre-commit 钩子(lint-staged 的 prettier + eslint)已运行并通过。

Base-conflict check · 基分支冲突检查: conflicted with main — resolved in this push. · 与 main 有冲突——已在本次推送中解决。

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


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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

中文说明

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

DESIGN.md's disclosure list still promised a plan census and a
per-file bound in the brief, and its "what deliberately did not change"
paragraph said nothing about the lever that came out. Both follow the
code now, and the section records why the seam-bounded republication is
absent: its premise is per-file while the only gate that can vouch it is
per-base, and neither repair is proportionate — a per-file vouch needs
publication state the byte-capped marker cannot carry, and a gate keyed
to the last full-range round goes dormant at every merge-base advance.

The user doc's disclosure list follows, and both narrowing rules this
round added are named there too.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01TgejmvesNzoRG1KrdYJ8iX
@wenshao

wenshao commented Sep 12, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@wenshao
wenshao enabled auto-merge September 12, 2026 00:12
qqqys
qqqys previously approved these changes Sep 12, 2026

@qqqys qqqys left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Critical-only review pass at head 61ed6436ca7b49ea5460ca53596a8b03e24bf4b8. No merge-blocking defect found, and every Critical from the latest round is verified fixed or rendered moot by reading the current head code.

Round 22 Criticals, re-verified on this head

  • R20-3 - entry identity for the whole staleness ruling - fixed. In packages/cli/src/commands/review/lib/retirement.ts, fileLineToken no longer accepts any first whitespace-delimited token: the code comment cites this finding and explains that the entry anchor cannot distinguish a genuine entry from a finding's own **Anchor:** block quoting the format template (- **File:** <file>:<line>), so a token that does not have the mandated file:line shape (<file, [list) is rejected. entryTokensOf then returns null for a non-empty list that yields no token, and its documented fail direction is stale rather than a fresh reading of a list nobody could parse, so an unparseable list can never certify a chunk dry.
  • R22-2 - both list-based staleness arms required a file-backed list, so the inlined fallback could not satisfy them - fixed. Records now carry findingsFromFile ("the list was read back from its .findings.md file, not the prompt fallback"), and the per-round accumulator only collects a list into fileLists under if (rec.findingsFromFile). The two sources are therefore tracked separately instead of one silently standing in for the other.
  • R22-3 - the staleness scan skipped rounds on the round-level dry fold - fixed. The per-round entry now also keeps memberOutcomes: AuditOutcome[], one outcome per audit member, with the comment that the round-level fold hides them because mergeOutcomes folds ['unknown','dry'] to 'dry'. A record no transcript certified pushes 'unknown' as a member, so a round holding one dry receipt beside an uncertified sibling is no longer read as a round that certified the territory.
  • R18-1 (lib/import-graph.ts), R20-5 and R22-1 (lib/incremental-scope.ts) - no longer this PR's surface. The seam-bounded widening was dropped in f948f869 feat(review)!: drop the seam-bounded widening from the fix-audit shape, and neither file appears in this PR's diff against main at this head (19 files, all under commands/review plus the two bundled review docs), so the code those findings cited is not part of the change under review. The Risk & Scope section states the removal and why the lever's per-file premise could not be vouched by a per-base gate.

All 108 review threads are resolved, across both pages.

Current scan

  • The posture prediction cannot outrun the resolution and fails toward the full round. lib/posture.ts returns null for an explicit suggestion floor, for a side ledger that is not a non-null object, and for a round that is absent, non-integer or non-positive; it predicts 'round' only from round + 1 >= CRITICAL_FLOOR_ROUND, the same schedule constant compose reads. The flat-trend arm clamps the recorded streak to Math.max(round - 2, 0), so a planted or corrupt side file claiming a long streak cannot engage the posture off rounds the signal never measured.
  • Shape and posting floor stay aligned in the safe direction. floorResolvesCritical in compose-review.ts gates the new fix-audit arm on floor === 'auto' (if (floor === 'auto' && fixAuditPlan === true) return 'auto-resolved';), so an explicit --severity-floor suggestion still wins over a stale plan record, and every unrecognized state returns undefined - the floor fails open, deferring fewer findings rather than more. The arm exists so a round that already spent its shape on the posture cannot then post sub-Critical findings in full beside a disclosure describing a posture it did not run.
  • Record identity is anchored. RECORD_KEY_RE is ^reverse-audit--chunk-(\d+)--round-(\d+)--([0-9a-f]+])$, and the transcript-certification relation is inverted deliberately so one launch prompt that verbatim-contains several recorded prompts cannot credit every chunk with the same dry receipt.
  • The narrowing is disclosed rather than silent. The narrowed list of { chunkId, dryRound } is the note itself, and the reduction also lands in the plan record, the chunk briefs and the posted body's round-shape paragraph.

CI

At review time every concluded check on this head was success, including Serve A/B, Integration Tests (no-AK), both Desktop Shell lanes, the TUI parity and OpenTUI gates and the real-daemon E2E lanes. Test (ubuntu-latest, Node 22.x), Lint & Static (ubuntu-latest, Node 22.x) and review-pr were still running; no failure is attributable to this change, and a pending check is not treated as a gate here. If either unit lane concludes red, that conclusion should be read before merging.

@yiliang114 yiliang114 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed at head 61ed6436ca7b49ea5460ca53596a8b03e24bf4b8 against base d0e393570, dimensions: correctness and security. Three findings inline — two Suggestions and one Nice-to-have. Not approving, and the reason is the adjudication below rather than my own findings.

The unresolved Critical on this head still stands — I read it independently rather than taking the bot's word. In lib/retirement.ts, mergeOutcomes (848-852) folds ['unknown', 'dry'] to 'dry'; the staleness scan skips any round whose fold is dry at 1168, so arm 3 (1200-1209) — the only consumer of a.filedFiles, collected fold-independently at 1101 — never consults a dry-folded round's filings. The member-level half exists at 1230 but reads latest.memberOutcomes alone, and narrowing first rules at round 3, so latest is round 2 and the round that can hide a filed sibling is round 1. listUnreadable (1244-1246) keys on the same fold axis. The module's own bar at 1140-1142 — "falls through to the ordinary rules and stays hot, the same fail-toward-auditing floor as every other refusal in this file" — is the direction this path breaks, and the R20-2 comment at 1211-1229 states the mechanism correctly while closing only its latest instance.

Verified clean, so it does not get re-litigated next round: every doubt state in resolveCriticalPosture returns null (posture.ts:88-106), the planted-streak clamp included; isTerritoryFanOut receives incremental at every call site I could find (budget.ts:420-424, 462 through cappedRoundTier, 634 failing toward the full tier on a bare object, roster.ts:322/433/465, agent-prompt.ts:3213 through PlanReport), so no size branch bypasses the shared predicate; Agent 0 is kept on a fix-audit round (roster.ts:303-320) — the PR body's four "no Agent 0" claims are the stale side of that pair; nothing narrows severities, and postureNarrowing fails every malformed shape to the ordinary schedule; the terminal narrowingNote (agent-prompt.ts:3397-3413) and the posted "Round shape" paragraph (compose-review.ts:7824-7840) enumerate the same stay-in causes from opposite perspectives, so the 3-versus-5 count is phrasing, not divergence. No new sink in the diff: no child_process, eval, dynamic import or new RegExp, every added pattern is a static anchored literal, the side-file path is keyed only by a twice-validated PR number, and no secret or internal host reaches the disclosure strings.

中文说明

不 approve 的原因不是我这轮的发现,而是当前 head 上那条未解决的 Critical 我自己读下来仍然成立:retirement.ts 的折叠级 dry 判定(1168)让 arm 3 的 filedFiles 对非 latest 轮永不被查阅,而 member 级判定(1230)只覆盖 latest,收窄最早在 round 3 裁决,能藏住已归档兄弟的恰好是 round 1。我另外提了 2 条 Suggestion + 1 条 Nice-to-have,都在 inline;同时把已核实为干净的点列在上面,避免下一轮重复审查。

Comment thread packages/cli/src/commands/review/lib/posture.ts
Comment thread packages/cli/src/commands/review/fetch-pr.ts
Comment thread packages/cli/src/commands/review/compose-review.ts
@wenshao

wenshao commented Sep 12, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

wenshao and others added 3 commits September 12, 2026 15:01
…floor

Two from the bot, three from review.

R20-3 (mine) — `FILE_LINE_TOKEN_RE` was one spelling short of the format
this CLI itself orders. `FINDING_FORMAT` says `<file path>:<line number
or RANGE>` and is interpolated into every findings-producing role;
the reader accepted only `:12`, so a range-form filing yielded no token,
arm 3 had nothing to look for, and the chunk was priced out of the wave
over a finding no receipt ever saw. Measured on the lists one real round
produced: 36 of 92 entries used the range form. Both halves are in — the
regex reads the format now, and a file line NON-EMPTY after the tag
strip that still yields no token is carried as doubt (`filedTokenlessly`)
rather than as absence, so every spelling the allow-list does not know
fails toward auditing. A line that IS empty after the strip still names
nothing.

R23-1 — the open arm asserted that "the posting floor itself" resolved
OPEN while the same body's marker stamped `floor: c` and the
mechanism-health note said it resolved to critical. The two readings
diverge on exactly one state, an absent floor record beside a postured
plan, and only the parenthetical attributed the openness to the
enforcement reading. The clause says which reading it describes now.

Review (yiliang114):

- The round counter is a shared id space, and until now neither counter
  arm read the provenance the side file already records. Before this PR
  a counter another account wrote moved the posting floor; with it, the
  same counter buys less review WORK. Both counter arms refuse a record
  stamped `foreign` or `anonymousAdoption`; the `explicit` arm is
  unconditioned because it reads the operator's own CLI record.
- The host-chain comment claimed parity with submit's four-term chain.
  The missing term is submit's RECORDED binding, and it cannot be a term
  here: the record IS what is being read, so binding the axis to its own
  host would make `recordedSeverityFloor` compare a value against itself.
  The comment says what it implements, and where the two-names shape is
  actually absorbed (`hostsEquivalent`).
- The plan file licensing its own consequence is now stated rather than
  implied: DESIGN.md records the boundary (trusted for facts about the
  round's own shape, never for identity, which is the line
  `authorization.ts` already draws), and the posted body names the
  capture's plan record as the licence on exactly the states where the
  compose-side arms could not re-derive the posture.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01TgejmvesNzoRG1KrdYJ8iX
…listed

The doubt arm this round added — a filing whose file line cannot be read
as a comparable token — was missing from both surfaces that enumerate
what returns a chunk to the ordinary retirement rules: the round's
`posture narrowing:` note and the posted round-shape sentence. Same
class the round filed twice against this PR's own prose, and the same
answer: a disclosure that lists the rules lists the rules.

The arms' own docblock said "three arms" and now says four, with the
ordering that matters spelled out — each is reached only for a round the
record does not certify dry, so a dry round's own text never rules.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01TgejmvesNzoRG1KrdYJ8iX
DESIGN.md described the posture prediction's counter arms without the
provenance refusal they now make, and still said the open sentence
states that "the floor" resolved open — the exact unqualified claim
R23-1 filed. Both follow the code, with the reason each is keyed the way
it is.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01TgejmvesNzoRG1KrdYJ8iX
…round-shape

Main's explicit-deadline change (#11686) factored `sizeTier` out of the
round-cap tier and shares it with the plan's new default wall. This
branch flips the cap to the territory tier on a critical-posture
fix-audit round. The posture is now read in the cap's small case, not
inside `sizeTier`: a posture is not a size, and the wall keyed on that
size must read the same tier whether or not the plan's incremental block
rides along. A fix-audit round therefore keeps the 3B cap of 5 and the
default wall its delta's size earns, and tests pin both halves.

fetch-pr records `hasDeadline: wall.explicit` beside the incremental
ruling. The SKILL, DESIGN and user-doc wording that said the huge
reduction applies "where there is a wall" now says an explicit deadline.
The anonymous counter-advance in `persistRecoveredLedger` keeps this
account's own findings and adopts only the winning marker's round, and
it recorded nothing about where that number came from. The plan-time
posture reader refused `foreign` and `anonymousAdoption`, neither of
which this write sets, so an unattributable counter could engage the
fix-audit shape and buy less review work.

The write now stamps `roundAdoptedAnonymously: true`, a flag of its own.
`anonymousAdoption` describes the list, and the closure mint reads it to
decide whether absence can mean "ruled fixed" over a list this branch
keeps as the account's own. The identity-known whole write rebuilds the
file from the recovered ledger and so clears the stamp, and
`resolveCriticalPosture` refuses it beside the other two.
…dering

The posture narrowing decided whether a dry receipt had seen an earlier
round's findings by reading the model-edited findings list: its entry
set, the file lines a return filed, the entries a return quoted. Every
review round found a rendering where a misreading granted the narrowing
(a re-wrapped list, a range, an aggregate, a `./` prefix, a second
finding at one location), and a stricter reader only moved the gap.

The loop already fixes the order that question is about. Findings merge
before every round build, and only the convergence pair is built
together. So the ruling now counts launches: rounds 1 and 2 are one
launch, and a non-delta chunk narrows only when every member of its
latest launch is dry. Every earlier launch's findings are then already on
the list the dry launch was built on.

Two withhold-only checks guard where that order can break. If an earlier
round with a member not certified dry shares a findings digest with the
dry launch, the merge never ran. And a resumed run receives an
interrupted attempt's returns only through `recover-findings`, whose bar
is stricter than this module's scan. So every return that was not dry
must share one stamped session with every dry receipt of the latest
launch, or the narrowing is held.

The list-reading arms, the location reader and the anchored quotation
guard are removed, and `classifyReturn` matches main again.

Also clears wording left from the removed seam-bounded widening in test
titles and comments, and names the lone posture-narrowing note when a
round retires nothing.
@wenshao

wenshao commented Sep 13, 2026

Copy link
Copy Markdown
Collaborator Author

Takeover round 24: the merge conflict is resolved, both round-24 Criticals are answered, and the reverse-audit narrowing no longer reads the findings list. Head is 6a5f22398f.

  • Merge with main (6a4f2eef06). Main's explicit-deadline change (feat(review): record a default deadline in the plan so every run has a wall #11686) shares sizeTier between the round cap and the plan's new default wall. A fix-audit round still takes the 3B round cap of 5, but the posture is read in the cap's small case rather than inside sizeTier. The default wall therefore stays the one the delta's size earns. Tests pin both halves, and the recorded budget, readers, roster and coverage were checked for agreement.
  • R24-1 (2f3ec71e39). The anonymous counter-advance now stamps roundAdoptedAnonymously: true, and the plan-time posture refuses it. anonymousAdoption is untouched, because it describes the list.
  • R20-3 (6a5f22398f). The staleness ruling no longer reads the list; it rules on launch order. Rounds 1 and 2 are one launch, and a non-delta chunk narrows only when every member of its latest launch is dry. Two checks can only keep a chunk in the wave: exact-digest equality with an earlier round that was not dry, and a resume boundary (every non-dry return must share one stamped session with the dry launch, since a resumed run gets old returns only through recover-findings). A stricter findings-list reader was built first; this round's reverse audit broke it before commit, which is why the list reading was removed rather than tightened.

Verification. Before commit, six rounds of undirected audit and six of reverse audit ran against the change. Every surviving finding was fixed, and the last round found nothing new. Every new guard has a mutation that turns a test red. src/commands/review: 123 files, 6499 tests passed; core SKILL.test.ts: 69 passed. tsc --noEmit, eslint --max-warnings 0 and prettier --check are clean on every touched file.

中文说明

接管第 24 轮:合并冲突已解决,第 24 轮的两条 Critical 已处理,反审收窄不再读取发现清单。 当前 head 为 6a5f22398f。

  • 合并 main(6a4f2eef06)。 main 的显式 deadline 改动(feat(review): record a default deadline in the plan so every run has a wall #11686)让轮次上限和 plan 新增的默认 wall 共用 sizeTier。fix-audit 轮仍取 3B 档上限 5,但姿态改在上限的 small 分支里读取,不进入 sizeTier,所以默认 wall 仍按 delta 自身尺寸确定。两部分都有测试钉住,并核对过预算记录、读取方、roster 和 coverage 结果一致。
  • R24-1(2f3ec71e39)。 匿名推进计数器的写入现在带上 roundAdoptedAnonymously: true,plan 期姿态预测据此拒绝。anonymousAdoption 没有改动,因为它描述的是清单。
  • R20-3(6a5f22398f)。 过时判定不再读取清单,改为按启动顺序判定。第 1、2 轮算作一次启动;非 delta chunk 只有在最近一次启动的每个成员都干燥时才会收窄。另有两项检查只能让 chunk 留在波内:与此前某个非干燥轮次的摘要完全相同;以及续跑边界,即每个非干燥返回都必须与这次干燥启动同属一个打过戳的会话,因为续跑的会话只能通过 recover-findings 拿到旧的返回。本轮先实现过一个更严格的清单读取器,提交前被反向审计打穿,所以选择删除这层读取,而不是继续收紧。

验证。 提交前对改动做了六轮开放式审计和六轮反向审计。所有成立的发现都已修复,最后一轮没有新发现。每个新增守卫都有能让测试变红的变异。src/commands/review 共 123 个文件、6499 个测试通过;core SKILL.test.ts 69 个通过。所有改动文件的 tsc --noEmit、eslint --max-warnings 0、prettier --check 均无问题。

…round-shape

Main's #11779 documents the deadline's pause ceilings in a new "Review
Deadline" section and points the default-wall paragraph at it. This
branch had added a sentence to that same paragraph saying a fix-audit
round keeps the wall its delta's size earns. Both edits are kept: the
branch's sentence, and main's pointer at the end of the paragraph's
parenthetical.
The reverse-audit schedule treated a chunk's prompt records as the
complete list of rounds that ran. A record's write and its read are both
best-effort, and a fail-open build prints every chunk whatever the
schedule said. So a round can run, file a yield, and leave no record to
pair. That round then vanished from the chunk's history: a stale dry
launch before it read as the latest one and narrowed the chunk out for
good, and a lost cold check let a retired chunk skip odd rounds and
converge over the yield.

Every launch block points its agent at the brief filed under its record
key in the plan's record dir, so a transcript still names every key it
was launched for. The pairing walk now records which keys each
transcript paired with. Every other key it names, for a round before the
one being built, joins that chunk's round, carrying the launch's
findings digest and session: as the yield it filed, or as a member that
certified nothing. That covers a lost record, an altered delivery beside
a record that survived, and a multi-block launch.

A transcript that matched several records, or names any key but the one
it paired with, certifies nothing, but its yield still joins every
record it paired with, so a dry relaunch cannot decide the round over
it. A lost launch's quotation guard reads the findings list the CLI
filed for that round and digest, never a pointer from the delivery. Keys
are read from the flattened launch, the same text the pairing reads, and
matched on the tail every absolute spelling of the record dir shares, in
any letter case, so a plan spelled through a symlink, a relative path or
another case names the same keys. A key whose record is on disk but
older than the plan belongs to a dead attempt, so it is skipped.

A transcript also names a block by delivering every line of its record
but the brief line, read against every record outside the (chunk, round)
it paired with, and a transcript that paired with no record names the
brief its agent opened, as the harness recorded the call. So an altered
brief line, alone or inside a multi-block launch, still counts, while an
honest launch still certifies its own record. Transcripts are pre-
filtered on the role id in the delivery or in a call's arguments, so an
agent that opened its brief is read even when the delivery lost every
mention of the role. A transcript that did pair names an opened brief
only when no launch paired with that block's record (lost or partly
written), and then certifies nothing.

The posture narrowing and the ordinary retirement rule both read this
history. An earlier launch that lost its record does not hold a later
dry launch, because that launch was built after it merged.

The narrowing also reads the clock. A return that was not dry and was
written after the latest launch's first record was built cannot be on
the list that launch was built against, so it holds the narrowing the
way the list-bytes check does. That covers a block of an earlier round
launched again inside a later wave, which pairs with its own old record
on a digest the dry launch does not share. A record's build time is its
birth time, which a reprint of the same block under the same key (the
single-auditor repair) does not move; a record born before the plan,
which a retry rewrote, and a filesystem that keeps no birth time, date
from the last write.

The CLI's posture narrowing note, the posted round-shape sentence,
SKILL.md and the user guide now name the clock among the rules that
return a chunk to the ordinary retirement rules.
…round-shape

Brings in #11781, #11742, #11692, #11641, #11280, #11786, #11800,
#11796, #11788 and #11647. None of them touches a file this branch
changes, so the merge is clean.
@wenshao

wenshao commented Sep 14, 2026

Copy link
Copy Markdown
Collaborator Author

Takeover round 25: main is merged again and R25-1 is fixed. Head is 721f257f8a.

Verification. Before commit: 20 rounds of undirected audit and the same number of reverse audit, every surviving finding fixed. Every new guard has a mutation that turns a test red, and 26 of the new tests fail against the pre-fix module. src/commands/review: 123 files, 6546 tests passed; core SKILL.test.ts: 69 passed; tsc --noEmit, eslint --max-warnings 0 and prettier --check are clean on every touched file.

中文说明

接管第 25 轮:再次合并 main,并修复 R25-1。 当前 head 为 721f257f8a。

验证。 提交前做了 20 轮开放式审计和同样轮数的反向审计,所有成立的发现都已修复。每个新增守卫都有能让测试变红的变异;用修复前的模块跑,新测试有 26 个失败。src/commands/review 共 123 个文件、6546 个测试通过;core SKILL.test.ts 69 个通过;所有改动文件的 tsc --noEmit、eslint --max-warnings 0、prettier --check 均无问题。

…re cannot see (#10136 R26-1)

The unmerged guard compares list BYTES, which only ever detects a total
merge skip: a partial merge — the orchestrator merging some of a round's
returns and dropping one — changes the bytes, so the tripwire stayed
false and a non-delta chunk was narrowed out over a filed Critical that
never reached any list, permanently (no cold check, and CONVERGED could
fire over it).

The merge is a prose instruction to the model, not a mechanism, so prove
it on the one artifact the merge wrote: the findings file the dry launch
was built from, read by the round-and-digest key the lost-launch path
already uses. For each earlier round with a yielded member, that list
must carry the yield's filed **File:** line (the membership test
classifyReturn already applies); absent, the narrowing is refused. The
witness is refusal-only — a misreading keeps the chunk hot, and a file
absent from disk is no evidence either way, so the records-only fixture
shapes (:276-310, :340-374) grant exactly as before.

Mutation: dropping `!partialMerge` from the gate reds the new partial-
merge case while the control (both filings carried) still narrows.
@wenshao

wenshao commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@wenshao
wenshao added this pull request to the merge queue Sep 21, 2026
Merged via the queue into main with commit cc5ee0a Sep 21, 2026
99 of 101 checks passed
wenshao added a commit that referenced this pull request Sep 21, 2026
With #10136 on the branch two things answer to "fix audit": the PR
re-review's narrowed round, read off the plan's `incremental.posture`,
and Step 6B's one agent over the hunks a local `--fix` applied. Step 6B
now says which one it is and why the two never meet in one run (the
round needs a pull-request target, where `fix.effective` is false), so
a reader cannot carry the round's convergence carve-out into a local
`--fix` review. DESIGN.md records the same; SKILL.test.ts pins the
sentence.
destire-mio pushed a commit to destire-mio/qwen-code that referenced this pull request Sep 24, 2026
…wenLM#10169)

* feat(review): audit the applied --fix for unpinned new assumptions

Step 6B applied findings to the working tree and forbade re-running the
review over the result, so `--fix` output shipped with no independent
check at all — while the fix round is the loop's largest single source of
its own next round (a third of post-first-round findings, #9578), and
PR #9793's two fix-introduced Criticals survived a mutation probe of the
intended fix sites.

Add a scoped fix audit, not a re-review: `review fix-delta` records the
working tree before the first edit (a tree object through a throwaway
index — the user's index and the stash stack are never touched) and
diffs the tree against it afterwards, with the review's own side files
excluded; `agent-prompt --role fix-audit` renders the `fixed` findings
above those hunks into one digest-keyed list file and prints the launch
block for a single agent whose brief asks one question per hunk — what
does this edit newly assume, and does anything in the tree pin it — and
reports only the unpinned. The role reads no diff, carries no finder
machinery and no project rules, produces no verdict, and its output is a
disclosure (the affected finding's outcomeNote plus a terminal block),
never a finding. The command refuses an artifact without outcomes, one
with no `fixed` finding, and empty hunks beside a ledger that claims a fix.

Closes #10154

* fix(review): close round-1 fix-audit holes (#10169)

Co-authored-by: Qwen-Coder <[email protected]>

* fix(review): close round-2 fix-delta holes (#10169)

* fix(review): close round-3 fix-delta holes (#10169)

* fix(review): close round-4 fix-delta holes (#10169)

* fix(review): close round-5 fix-delta holes (#10169)

* fix(review): fail closed on fix-delta blind spots and capture notes (#10169)

Close the round-6 Criticals structurally instead of per entrance:

- The blind-spot probe now answers in two states — confirmed dirt and
  unresolved paths — instead of one folded flag. Unopenable directories,
  failed inner probes and over-budget walks are disclosed at every
  comparison and never enter the snapshot baseline, the exclusion
  families are applied to what the ignored-directory walk discovers,
  and the empty-diff all-clear is hedged to what `git add -A` captures.
- The `add -A` capture is ruled on the child's own stderr line-by-line
  (spawnSync keeps stderr on exit-0 paths too): only the zero-commit
  nested-repository error, the embedded-repository notice with its hints,
  and the autocrlf normalisation warnings are tolerated — any other note
  refuses the snapshot and names the gap.
- The hunks artifact is written as git's raw patch bytes; `-z` names are
  decoded one by one, so non-UTF-8 fix content and filenames survive.

* fix(review): close round-7 and round-8 fix-delta holes (#10169)

- Refuse a `git add` child that did not exit normally (killed by timeout
  or buffer overflow): its notes are a partial capture, and ruling on
  them recorded HEAD's tree as the snapshot baseline (R5-2).
- Raise the `add -A` spawnSync maxBuffer to the 512 MiB ceiling every
  other git spawn in this tree uses, so a large autocrlf tree's warnings
  cannot kill the child mid-capture (R7-7).
- Pin LANG/LC_ALL to C for the review git children: the tolerated-note
  patterns match git's English rendering, and translated catalogs turned
  every tolerated shape into a hard refusal (R7-5).
- Render git-facing paths in git's `/` separator: the in-tree git-dir
  exclusion pathspec (R7-8), the exclusion matching and walk-discovered
  disclosure names, which compare against git-originated `/`-separated
  names in reporting and baseline identity (R7-6, R8-1).
- Fix the suite's absence assertions to name the all-clear the command
  actually prints; the old phrase appears in no output, leaving the
  never-all-clear-beside-a-blind-spot contract unpinned (R7-9).
- Skip the two POSIX-only fixtures on the Windows lane (R7-1, R7-2) and
  normalize the recorded snapshot root before comparing it (R7-3).
- Carve the empty-hunks refusal out of the fix-audit blanket refusal
  rule in the skill: it is a ledger/tree mismatch whose message directs
  a correction, not an audit failure to move past (R7-10).

* fix(review): close round-9 and round-10 fix-delta holes (#10169)

Resolve the outstanding Criticals on `fix-delta` and the fix-audit
refusal, and merge origin/main (the one conflict — the `review`
demandCommand message — is resolved by keeping BOTH new subcommands,
main's `emit-workflow` and this PR's `fix-delta`).

R9-1: pin `-c core.quotePath=false` on the hunks `diff-tree` so a
non-ASCII file name arrives raw in the hunks headers exactly as it does
in the summary; the default quoted form gave the fix audit two
spellings of one file.

R9-2: exclude the command's own `--out`/`--since` paths from capture,
comparison and probe whenever they resolve inside the repository — the
name families only cover what the REVIEW flow writes, and a
non-canonical in-repo side file was entering the hunks as bookkeeping.

R5-1 (structural): discover nested repositories from the index's own
mode-160000 gitlinks, not status entries alone — assume-unchanged /
skip-worktree bits hide dirt from BOTH status runs; confirm an empty
inner status against the index's tags instead of reading it as clean;
treat unknown-type (DT_UNKNOWN) dirents in the ignored-directory walk
as unreadable instead of silently skipping them. Uninitialized gitlinks
still stay quiet.

R8-2: resolve a symlink's TARGET against the family / in-tree-git-dir
exclusion at both probe sites, so a link planted at a non-family name
cannot reach the review's own worktrees past the exclusion.

R8-3: reassemble multi-line zero-commit `git add` notes at line
boundaries before matching; a nested repo whose name contains a newline
is tolerated as promised, not refused.

R7-10: replace the empty-hunks refusal's impossible "re-take the
snapshot before the first edit" remedy with the no-recovery disclosure
— at refusal time the edits are already in the tree — in both the skill
and the fix-audit prompt, and re-pin the tests to the new wording.

Also harden the suite teardown against the detached auto-gc race the
11k-file tree triggers (rmSync retry).

Every fix lands with its own witness; mutation probes confirm each
guard turns its test red when removed.

* fix(review): refuse side-path symlink writes, close blind-spot entrances (#10169)

* fix(review): close round-11 fix-delta holes (#10169)

R11-1: pass --binary to the hunks diff-tree. Without it a binary-content
edit entered the hunks — the command's sole output — as a bare
"Binary files ... differ" stub: no patch data, not git apply-replayable,
while the summary still reported the file. Witness: a NUL-byte fixture
edit must arrive as a GIT binary patch.

R5-1: key the blind-spot identity on the raw path bytes (the latin1
byte<->char bijection) instead of the lossy display decode — decodePath
is not injective, and a clean nested repo named bytes C3 A9 swallowed its
dirty sibling named byte E9 (both render 'é') through the `seen` mark,
printing the bare all-clear beside the landed edit. The persisted
baseline compares the same keys. Walk-discovered rels now join with
git's '/' on every platform so both discovery routes key identically.

R5-1 (round-7 entrance): refuse the spawn UTF-8 coercion in the inner
probe — a name the bytes cannot represent would reach the child mangled
to U+FFFD and probe a planted decoy in place of the real repository.
The probe fails for it instead; the failure direction over-warns.

R11-2: failure-couple the Step 6B fix-audit block in the skill — `&&`
between the hunks producer and the auditor prompt, plus the branch for
the producer's failure: fix-delta writes its hunks only as its final
act, so a failed producer leaves whatever an interrupted earlier run
wrote at the same deterministic path, and the auditor must not run over
it. Re-pinned in the skill test beside the producer/consumer pins.

Every fix lands with its own witness; mutation probes confirm each guard
turns its test red when removed.

* fix(review): close the fix-audit's blind spots and its claim-vs-edit gaps

Round-15 review findings on the Step 6B fix audit, addressed at the
mechanism rather than entrance by entrance.

fix-delta — the probe no longer trusts the tree it measures:

- Every probe child carries `-c core.fsmonitor=` and `--work-tree <path>`.
  A repository discovered in the working tree owns a `.git/config` that is
  writable as this user, and `core.fsmonitor` runs a command on `status`
  AND on `ls-files -v` — the measurement became the execution. A repo-local
  `core.worktree` redirected the same status at a pristine decoy, so the
  probe answered clean over an edit on disk; the work-tree pin outranks it,
  and a probe that cannot honour the pins answers `failed`, never `clean`.
- The baseline records a DIGEST of the state inside each dirty path, not a
  boolean. "Already dirty at snapshot time" is now a checkable claim: a
  level-2 gitlink that merely moved used to stamp its parent, after which a
  fix's real edit inside that parent was filed as dirt that was already
  there and the blind-spot warning went silent.
- The probe's status runs with the review's name families left IN, and
  prunes what it discovers by name instead. A nested repository planted at
  `sub/.qwen/tmp/qwen-review-*` fell out of the capture pathspec and out of
  the probe's at once; the families hold review FILES, never a repository,
  so only the worktree family (`review-pr-*`) prunes one.
- A symlink whose target merely CONTAINS a repository is walked, not
  returned from silently; the git-dir exclusion compares bytes rather than
  the non-injective display decode.
- Repo-local config that shapes the capture and the rendering cannot be
  overridden, so it is disclosed: `filter.<name>.clean`, `info/attributes`,
  `core.attributesFile` and an active `info/exclude` at both moments, and
  any changed path whose `diff` attribute resolves to `-diff` or a driver —
  the surface that turns a text fix's hunks into an unreadable binary patch.

agent-prompt — the ledger and the tree are cross-checked:

- Zero `fixed` outcomes no longer asserts "nothing was applied" without
  reading `--hunks`. Beside hunks that landed it is a ledger/tree mismatch,
  the mirror of the empty-hunks refusal, and the audit is not what to skip.
- Each `fixed` finding is reconciled against the hunk headers: one that no
  hunk corroborates is marked in the rendered entry (a fix may legitimately
  land elsewhere), and an input where none of them is corroborated is
  refused. The brief says what the marker means.

SKILL.md — the two claims that were false as written: the skip clause now
requires an empty hunks file as well as an empty `fixed` set, and the
interactive path rules per target instead of asserting a sweep that never
reaches a file review's plan — `file-review-…` is outside every cleanup
prefix by contract, so when that plan survives the audit runs there.

* fix(review): ask the attribute probe about the raw name bytes

`renderSteeringPaths` was fed `filesBetweenTrees`' DISPLAY names. A name
whose bytes are not UTF-8 renders through latin1, and re-encoding that
string as UTF-8 asks `check-attr` about a different path — one no rule
matches — so it resolved `unspecified` and the run answered "no steering"
for exactly the path it could not name. Fail-open, in the one direction
the disclosure exists to close.

`filesBetweenTrees` now hands back the raw name buffers and the display
decode happens at the reporting edge, where it belonged: the probe asks
about the bytes, the summary prints the rendering. Pinned by a
`bad<0xE9>.txt` fixture whose `-diff` rule is planted with the same bytes
— feeding the decode back in reds it.

* chore(review): smooth the claim-vs-edit refusal wording

* fix(review): derive the fix-delta prune from git's registry and pin the outer spawns

Round-16 findings on the fix audit, closed at the model rather than
entrance by entrance:

- R5-1: nothing prunes by name any more. The probe excludes the in-tree
  git dir and the review's own worktrees — repositories under the
  worktree family whose gitfile points into the audited repository's
  `worktrees/` registry — and walks or probes everything else, so a
  repository planted under a worktree family name, or one level under a
  side-file family directory, is discovered. The digest carries the
  repository's identity (`status --branch --show-stash`) and is kept for
  every probed path, so content committed or stashed inside a nested
  repository the trees record nothing of is disclosed.
- R16-1: every outer spawn against the audited repository carries the
  probe's pins (`--work-tree <root> -c core.fsmonitor=`) — `diff-tree`
  with a pathspec included, which loads the index — and root derivation
  is gated: the tree git names must contain the cwd, or a repo-local
  `core.worktree` redirect is refused.
- R16-2 / R16-3: `captureSteeringSurfaces` names `core.excludesFile`
  (when its file carries an active rule) and `filter.<name>.process`.
- R16-5: the tracked half of a family match is recorded after the
  family exclusion (`add -u` over the paths the throwaway index tracks,
  byte-exact through `--pathspec-from-file`), and the tree comparison
  runs under the literal excludes only.
- R13-2: `hunkHeaderPaths` admits git's C-quoted header productions,
  contributing nothing on a decode it cannot complete.
- R16-4 / R16-6: Step 6B enumerates the three ledger/tree-mismatch
  carve-outs and relays fix-delta's stderr qualifications under the
  Fix audit heading; DESIGN.md follows.

Also tolerates the "unable to index file" note newer gits (2.55) pair
with the zero-commit note, for the same path only.

* fix(review): anchor the fix-delta baseline and close the round-17 blind-spot entrances

Round-17 findings on the fix audit:

- R5-1: the registry check binds back — a review worktree is one whose
  `<common>/worktrees/<entry>/gitdir` names the probed path, so a gitfile
  merely pointing into a genuine entry is probed. A review worktree is
  walked rather than pruned on every discovery route, so a repository
  planted inside it is found. Two new transitions, `appeared` (answered
  now, no baseline) and `vanished` (baseline, no answer now), join the
  all-clear gate; the six transitions now cover every key of either
  digest map. The interior of a git directory is ruled out of scope and
  the all-clear line says so.
- R17-1: both digest maps are null-prototyped, so a repository named
  `__proto__` is an ordinary key on the probe side and the loaded record.
- R17-2: `hunkHeaderPaths` is hunk-aware — after `@@ -l,s +l,s @@` the
  counted body lines are consumed before header scanning resumes, so a
  deleted `-- a/<path>` content line can no longer corroborate a finding.
- R17-3: with a clean/process filter configured, `add`'s notes are ruled
  on their own lines (no multi-line reassembly a forged opener could
  absorb); the single-line zero-commit pairing stays, which keeps the
  audit for Git-LFS users on git >= 2.55.
- R17-4: `--snapshot` prints the full tree sha and a SHA-256 fingerprint
  of the record; `--since` requires `--fingerprint` and refuses a file
  whose bytes no longer match. Step 6B carries the printed hex into the
  `--since` call and never recomputes it from the file.

Two rounds of independent reverse audit before this commit: round 1
caught the LFS regression of the first cut (pairing disabled under a
filter) and the fingerprint-recompute loophole; round 2 found no
silence-direction defect and a DESIGN.md sentence that contradicted the
code, fixed here, plus the two route pins for the review-worktree walk.

* fix(review): classify review worktrees by the orchestrator's naming and close the round-18 entrances

Round-18 findings on the fix audit:

- R5-1: nothing in the tree classifies a review worktree any more — the
  registry lookup, its back-link and the family-name match are gone.
  `fix-delta --review-worktree <path>` (repeatable) names the worktrees
  this flow created; those are walked for planted repositories and never
  probed, everything else is content and its dirt disclosed. A `--fix`
  run names none. The digest's status is pinned to `core.quotePath=true`
  so a non-UTF-8 name cannot collapse two interior states into one hash.
- R18-1: the mode guard counts presence; an empty `--since` is refused.
- R18-2: a link resolving to the audited root, or a walk re-entering it,
  is recognised by filesystem identity (dev/ino) and never probed as its
  own nested repository.
- R18-3: the side-path redirect check runs again before each write,
  covers the ancestor chain of an in-repository side path (bounded by
  the checkout, from the nearest existing component), and the writes
  open with O_NOFOLLOW where the platform has it.
- R18-4: `check-attr diff` is asked about a rename's source names too.
- R18-5: root derivation also requires the git dir discovered from the
  cwd to be the git dir the derived root belongs to.
- R18-6: the capture pins `core.autocrlf=false` (and `core.safecrlf=false`
  beside it); the nested-repository probes keep git's own view of
  "modified", for the reason stated in DESIGN.md.

Found by the reverse audits before this commit rather than by the
review: in a repository that ignores `.qwen/` — this one does — the
skill's own in-tree `--out` made `add -A` exit 1 on the negative pathspec
item, so every fix audit refused there. Ignored side paths now stay out
of the capture's pathspec (`check-ignore`), pinned by a test in the exact
skill shape.

Two rounds of independent reverse audit: round 1 found the ignored side
path refusal, a resolved-spelling root check that a differently-cased
link defeats on APFS, and a `safecrlf=true` refusal under the autocrlf
pin — all fixed here; round 2 found no silence-direction defect and a
DESIGN.md sentence describing the rejected root check, corrected.

* fix(review): close the round-20 fix-delta and fix-audit entrances

- fix-delta: key the blind-spot walk on filesystem identity — one
  physical directory walked, one physical repository probed, one entry
  budget shared by every walk of the run — so a link cycle inside an
  ignored directory cannot mint tens of thousands of synthetic probes
  (R20-14).
- fix-delta: close the blind-spot state matrix. `--ignored=matching`'s
  `!` entries ride the digest but never count as dirt; discovery stat
  failures are ruled by errno so only ENOENT skips silently (ELOOP and
  its kin disclose); and the baseline persists the unresolved paths, so
  an unresolved-then-gone path is its own transition that gates the
  bare all-clear (R5-1).
- fix-delta: derive the honest toplevel config-blind — walk the cwd up
  to the first `.git` entry (directory or gitfile) and refuse when it
  is not the root git named — plus refuse the git-dir re-entry
  signature, closing the subtree and planted-gitfile-ancestor
  `core.worktree` redirects the containment+identity gate passed
  (R18-5). The nested probe's status is likewise refused when its
  toplevel is not the path it was asked about.
- fix-delta: disclose a tracked family-named path the fix renamed away
  — the hunks can only certify the bare deletion (R19-1) — and take the
  house 512 MiB maxBuffer at the shared git opts so the steering
  enumeration cannot overflow into silence (R19-2).
- agent-prompt: decode C-quoted path tokens by code point, so an
  astral character in a quoted name no longer decodes to U+FFFD pairs
  (R19-3).
- agent-prompt: drop the wholesale "no hunk corroborates any fixed
  finding" refusal — a fix can legitimately land in files no finding
  names, and the two states are indistinguishable to the command, so
  the all-unmatched case is annotated and built; SKILL.md, the brief,
  and the user docs rule it the same (R20-26).
- skill/docs: state the fix audit's reach precisely — the local/file
  `--fix` path where `fix.effective` runs; the #9793 incident happened
  on the posted-comment path #10153 covers (R20-1).

Each new guard carries a pin that reds when the guard is removed
(proven per guard); the full review suite passes apart from the eight
pre-existing macOS-only failures that fail identically on the base.

* fix(review): close the round-19/20 fix-audit findings with a state matrix and config-blind gates

fix-delta:
- The comparison is a closed 4×4 matrix (dirty/clean/unresolved/absent at
  both moments); unresolved paths are persisted for disclosure so U→A is
  reachable; a status-discovered path whose interior probe fails is
  unresolved, never "dirty without a digest".
- Ignored (`! `) entries of a nested repository ride its digest but are not
  dirt; its collapsed entries take the top level's routing entry for entry
  (a directory that IS a repository is probed, one that holds repositories
  is walked, a slashless entry may be a link); an ignored entry appearing or
  vanishing is disclosed by the interior-moved note.
- Nested probe: `.git` must resolve (through a link) to the git dir git
  discovers from inside; a clean/process filter in any non-user scope of
  the merged config (own config, include.path/includeIf, per-worktree; read
  from `-z` fields so a newline in a value cannot forge a scope, and an
  answer that does not pair off is unresolved, not "no filter") makes the
  repository unresolved; errno-keyed catches (only ENOENT silent);
  FIFO/socket/device dirents classified.
- Walks are keyed on filesystem identity (dev:ino; no identity on ino 0),
  with a per-walk budget and a per-run cap.
- Root gate is config-blind: the derived root must be the directory of the
  first `.git` git's own discovery accepts at or above the cwd (a gitfile,
  or a directory whose HEAD validates).
- Tracked family-named paths deleted between the trees are disclosed.
- Every git wrapper carries the 512 MiB maxBuffer; an unreadable filter
  enumeration is disclosed as such.

agent-prompt: C-quoted header names decode by code point; the wholesale
"no fixed finding corroborated" refusal is replaced by per-entry annotation;
only a hunks file with no header line is refused.

SKILL.md/DESIGN.md/docs: reach stated exactly (local/file --fix path; the
posted-comment path is #10153's); carve-outs are the two ledger/tree
refusals plus the annotation rule; core.ignoreCase named as a residual.

Verified: fix-delta 122/129 locally (7 non-UTF-8-name fixtures are EILSEQ on
APFS) and all 129 in node:22 (git 2.39.5); agent-prompt 324; SKILL 63;
review-directory suite 5898 passed; 24 mutants each killed by one pin; two
rounds of independent reverse audit before commit, the second closing a
nested collapsed entry that IS a repository, the global-filter scope ruling
and the HEAD validation.

* fix(review): close the round-21/22 fix-audit findings — hooks, discovery bounds and invented deletions

fix-delta:
- Hooks are steering the tree carries: every spawn now pins
  `core.hooksPath` at a path that cannot exist, and the capture's
  `check-ignore` — the one working-tree-measuring spawn without them —
  takes the probe pins, so neither `core.fsmonitor` nor a
  `post-index-change` hook runs inside a measurement (R21-1, R21-2).
- A nested repository's collapsed entries take the top level's routing
  entry for entry, so a repository under an ignored path OF a nested
  repository is discovered rather than all-cleared over; identity dedupe
  goes through the house `hasVerifiableInode` predicate, so a filesystem
  reporting no inode walks and probes rather than collapsing every
  directory into one; and the walk is bounded to the audited repository,
  so a directory link out of the tree is named as scope and never
  baselined — by bytes and identity, since Node's portable realpathSync
  cannot read a path byte no UTF-8 decode accepts (R5-1, three
  entrances).
- A `.git` entry planted inside the working tree narrowed every reading to
  a subtree: the run is refused when an enclosing checkout answers for the
  same git dir, which no submodule or linked worktree produces (R18-5).
- The walk budget is charged per directory OPENED, not per dirent: this
  checkout's own node_modules (8,174 directories, 84,566 entries) spent
  the ceiling on every run, so `node_modules` was disclosed as
  unresolvable every time and the all-clear could never print (R22-1).
- A family-named path the user staged without committing is captured from
  the user's index too — the throwaway index seeded from HEAD cannot see
  it, so a fix's edit to it produced an empty delta (R22-2).
- A deletion the capture invented — a path git now reports ignored whose
  file is still on disk — is dropped from the hunks and disclosed, so the
  auditor's sole input never asserts an edit the fix did not make; the
  ignore test is what keeps a file the fix replaced with a directory of
  the same name in the hunks (R22-3).

SKILL.md: the no-`fixed`-beside-landed-hunks refusal names its out-of-band
cause and gets an exit that is not inventing a `fixed` outcome (R21-3).

Verified: fix-delta 131/138 locally (7 non-UTF-8-name fixtures are EILSEQ
on APFS) and all of them in node:22 (git 2.39.5); agent-prompt 331; SKILL
64; 38 mutants each killed by one pin; measured in this checkout that the
walk no longer discloses node_modules on every run; reverse-audited before
commit, which closed the invented-deletion classification, the byte-safe
root bound and the out-of-root scope bucket.

* fix(review): close the round-23 fix-audit findings

- fix-delta: the staged-family re-inclusion and the ghost classifier
  test the ENTRY with `lstatSync` (drop only on ENOENT), so a staged or
  untracked DANGLING symlink is no longer dropped from both trees /
  skipped by the classifier — git records a link (mode 120000) whether
  or not its target exists (R22-2, R23-3).
- fix-delta: `ghostDeletions` asks `check-ignore` with `--no-index`:
  the question is whether the RULES hide the path, and without it the
  user's index outranked them, so a staged-but-uncommitted file was
  never recognised as a capture-invented deletion (R22-3).
- fix-delta: `assertCompleteCapture` splits the shared stderr on the
  note boundary too (`/\n|(?=(?:error|fatal|warning|hint): )/`): a
  filter child that omits its trailing newline merged its bytes with
  git's next note, and the prefix-anchored tolerance absorbed the note
  that proves a path was skipped (R23-2).
- fix-delta: `isGitEntry` asks git (`rev-parse --git-dir`) instead of
  approximating `validate_headref` — `ref:` with zero whitespace and
  uppercase SHAs are git's to rule, not a regex's — and gate 3 walks
  every strict ancestor holding a `.git` path UNVALIDATED, comparing
  git dirs, because a validating predicate's miss stood the gate down
  (R18-5).
- fix-delta: one classifier at every walk/probe entrance (R5-1):
  `escapesRoot` is tri-state (inside / outside / unresolvable — an
  unresolvable link rides `unresolved`, never `outOfRoot`), consulted
  by `probeLinkedRepo`, `probeNestedInterior` and `walkAndProbe` alike;
  a link to an out-of-root REPOSITORY is still probed (its uncommitted
  dirt gates) but rides the outOfRoot bucket, so a commit inside a
  foreign store reads as scope rather than a move inside the audited
  tree; the status-entry route registers the physical repository in
  `state.probed`; the nested interior sweeps its own index for tracked
  symlinks; the in-tree git-dir comparison is byte-exact; and where the
  inode cannot answer, identity falls back to the resolved spelling.
- skill/cli: the out-of-band exception is keyed on OWNERSHIP, not
  path/finding overlap — a foreign write can land in a path a finding
  names, and the overlap-keyed exception instructed falsifying the
  ledger there — and the empty-hunks refusal names the third cause
  (the edit landed where the capture cannot see it) in both the ruling
  and the message (R21-3).

Each new guard carries a pin that reds when the guard is removed
(proven per guard; the non-UTF-8 byte-shadow case runs on Linux, like
its siblings). Suites: fix-delta 142 passed on macOS (the 9 failures
are the pre-existing EILSEQ/teardown class, identical on the base),
the rest of the review directory 5706 passed, agent-prompt 331, SKILL
64, tsc/eslint/prettier clean.

* fix(review): carry the capture's pathspec as bytes through stdin

The capture's exclusion reached `add -A` as argv: spawn args coerce a
name that is not valid UTF-8 to U+FFFD, so an in-tree git dir named with
such bytes (a `--separate-git-dir` the user chose) fell out of the
exclusion, and the capture recorded the audited repository's own objects
as edits — caught on Linux CI by the round-23 byte-shadow pin
(`probes a repository whose name decodes to the in-tree git dir name`,
whose planted repo sits exactly at the mangled name). The `add -A` call
now reads the pathspec with `--pathspec-from-file=- --pathspec-file-nul`,
the same channel the tracked re-inclusion already uses, with the git-dir
entry carried in `inTreeGitDirBytes`' raw form.

* fix(review): stop excluding the in-tree git dir by its decoded name in the probe pathspec

The probe's status/diff pathspec carried the in-tree git dir through
argv, which coerces a non-UTF-8 name to U+FFFD: beside a
`--separate-git-dir` named `gd-<0xE9>`, the exclusion matched a
lookalike directory (`gd-<EF BF BD>`, valid UTF-8) and hid exactly the
content the probe exists to see — the Linux run of the round-23
byte-shadow pin caught it. The probe pathspec now drops the git dir
entirely: `probeExcluded` prunes it byte-exactly on every discovery
route, and the trees never contain it (the capture's exclusion is the
raw-bytes stdin pathspec). The byte form becomes the one exported
pathspec (`capturePathspecBytes`), and the test pins move with it.

* fix(review): close the round-24/25 blind-spot and capture-invention entrances

The fix audit's measurement mis-answered a shape per route, each route
assuming another had ruled it:

- probeNestedRepo — the funnel every discovery route git-spawns, digests
  and baselines through — carried no root-containment ruling of its own,
  so an index gitlink whose worktree is a link out of the tree (and a
  repository one level inside an out-of-root link target) was baselined
  as this tree's content. The funnel rules the reach first now: the
  audited root returns, an unresolvable path rides unresolved, an outside
  one is recorded as scope — and probed all the same, keeping the link
  route's deliberate probe of out-of-root dirt.
- A discovered link whose target is not a directory was dropped
  unclassified; the reach ruling now precedes the directory test on the
  link route and inside the ignored-directory walk alike.
- A tracked file whose worktree copy is a symlink carries an N... sub
  token and an unchanged index mode, so neither the S-token gate nor the
  index sweep routed it anywhere; the record's worktree mode (120000)
  routes it through the link classifier now.
- The nested status spawn pins core.trustctime (a nested repository's own
  config answered clean over a same-size, mtime-restored edit), and is
  ruled on stderr as well as exit code: an exit-0 "could not open
  directory" warning certified clean over a subtree nobody read. The
  index-bit confirmation recurses to the depth the status was taken at,
  bounded by the probe run's visited/budget state.
- isAuditedRoot's lexical fallback compared a latin1 decode of the path
  bytes and failed open on a non-ASCII root; it compares bytes.
- inTreeGitDirBytes accepted '\' as the root/git-dir boundary byte on
  every platform; on POSIX a sibling '<root>\packages' git dir then read
  as the in-tree 'packages/', dropping that subtree from capture and
  probe. The byte is win32's separator spelling only.
- The T2-side transitions (appeared/movedInside/vanished) keyed the scope
  exemption on the union of both moments — a path that was a link at
  snapshot time and holds an in-tree repository now is content of this
  tree and is no longer exempted on the baseline's say-so. The scope note
  keys on freshDirt, so pre-existing dirt on an out-of-root path falls
  back to the note instead of cancelling into a bare all-clear.
- The capture-invention classifier was deletion-only: an ignore rule
  REMOVED between the moments admitted pre-existing untracked content as
  full-file additions. The snapshot records what the rules hid
  (ls-files --others --ignored), and the addition side is ruled against
  that record — the first moment's rule set is gone by --since. The
  deletion side now refuses a ghost when the path holds a directory: a
  real replacement the fix made, not the capture's invention.
- The file-target plan family (file-review-*) joins the excluded side
  families, so a Step 6B re-run on a file target stops capturing the
  audit's own brief/input/launch records as the hunks it audits.
- recover-findings filters the fix-audit key from the sections channel
  too: its disclosures are not findings, and a resumed run re-audits from
  a fresh snapshot, so nothing is lost.

Every entrance carries a red-proven test (guard removed, witness red,
guard restored); the pins the findings named stay green — the all-clear
gate's freshOutOfRoot keying, the literal pathspec's glob-name case, the
three neighbouring ghost cases, and the byte-shadow pathspec pin.

* test(review): skip the unreadable-interior witness where permissions cannot bite

win32 has no POSIX permission bits to make the directory unreadable and
root bypasses them everywhere, so the fixture's precondition cannot be
constructed there — the same guard the suite's other
unreadable-directory witnesses carry.

* docs(review): name the channel the fix-delta snapshot fingerprint prints on

The Step 6B contract said "prints one line" without saying where; the
line goes to stderr (writeStderrLine), and an orchestrator capturing
only stdout loses the fingerprint and walks into the "Never recompute
it from the file" prohibition with no recovery path. Pinned in
SKILL.test.ts.

* fix(review): close round 26's capture, probe and protocol entrances

The R26 review of the fix audit's measurement found one leak per layer:

- The family re-inclusion trusted "the index holds it, so it is user
  content" — and Step 6B's own artifacts (the outcomes/findings rebuild
  between the two moments) arrive exactly that way when the user staged
  `.qwen` in a checkout that does not ignore it. The re-inclusion now
  drops the flow's own bookkeeping by name, and every path it still
  admits is disclosed on its own line.
- inRepoSidePaths decided containment lexically against the canonical
  root, so a side path spelled through a symlinked prefix (every macOS
  /tmp path) read as outside and the side file was never excluded — and
  the redirect guard's ancestor walk stood down over the same spelling.
  Containment now goes through repoRelativeOf (canonical, with the
  not-yet-existing leaf resolved through its nearest ancestor), while the
  redirect guard judges each symlink component of the typed spelling by
  where its parent canonically sits: a link inside the checkout must
  resolve inside it, a link whose parent is outside is the user's own
  layout.
- The capture's note ruling gated its strict per-line form on a filter
  being configured, but the tolerated notes embed raw path bytes — a
  nested repository named `A'error: 'B` forges the unterminated opener
  with no filter involved, and the reassembly absorbed a real failure
  behind it. The ruling is unconditional now, and the filtersConfigured
  plumbing is gone. (A zero-commit note split by a newline in the repo's
  own name now refuses — the failure direction over-warns.)
- The capture claimed content filters had no equivalent override;
  filterBlankEnv is exactly that. Repo-local filter commands are screened
  and blanked through GIT_CONFIG_* pairs on the capture's spawns and the
  discovery status (a planted `filter.*.clean` no longer executes as the
  reviewing user), while global filters (the user's own, e.g. git-lfs)
  stay.
- The blind-spot probe's discovery status ran through a wrapper that
  discarded stderr, so an exit-0 `could not open directory` over a
  subtree certified a partial enumeration as clean. The spawn now rides
  gitRawReport (raw stdout kept, stderr captured, status kept): a warning
  lands the named path (or the root, when the note's shape is unknown) in
  unresolved, never clean.
- probePins gains core.checkStat=default beside core.trustctime — a
  nested repository's own core.checkStat=minimal reopens the same
  stat-cache cell one knob over.
- The index-bit recursion treated an UNREADABLE level-2 checkout like an
  absent one; only ENOENT means "nothing there" now, and anything else is
  unconfirmable — never clean.
- The snapshot's hid-set unions ls-files --cached --ignored with
  --others: a staged-but-uncommitted ignored file was in the user's index
  and invisible to both, so a removed rule admitted it as a fabricated
  addition the classifier could not see.
- Tree-controlled strings (path names, config values) interpolate into
  the single-line protocol notes escaped — a config value or directory
  name carrying `\nfix-delta: …` forged a standalone protocol line,
  including a fingerprint receipt the orchestrator would keep over the
  real one. Escaping happens at the render boundary only; identity keys
  stay bytes.
- The subtree-narrowing gate keyed on an enclosing checkout answering for
  the SAME git dir; a planted `.git` gitfile naming ANY OTHER git dir
  narrowed every reading identically. A gitfile narrowing now requires
  reciprocal registration — a gitlink in the enclosing index, or a
  worktrees/<name>/gitdir entry naming this checkout's `.git` — and a
  planted gitfile is registered from nowhere. The same-git-dir refusal
  and the copied-worktree carve-out stand.

Each fix carries a red-proven test (guard removed, witness red, restored
green), including the two-directional ones: the newline-named zero-commit
repository test inverts from tolerated to refused, and the two redirect
re-check fixtures move their swap onto a GLOBAL filter — the one channel
the blanking deliberately leaves executing.

* fix(review): narrow the file-target family's own records out of the re-inclusion too

R26-1's narrowing keyed on the qwen-review-{target}-* suffixes the
finding enumerated; the file-target plan family carries the same flow
bookkeeping — the plan report and the role-keyed prompt records under
its -prompts directory — and a staged copy of either rode the capture
identically. Same contract: the names the flow writes are dropped by
name, user content under the family still re-includes, and the
disclosure line still names everything admitted. Test extended with
both file-review shapes; removing the narrowing reddens it.

* test(review): pin the fix-audit wave emit-workflow builds for Step 6B

Step 6B now dispatches the auditor as a one-agent batch manifest through
emit-workflow, so pin that the batch path builds it verbatim and without
a worktree pin — a local or file plan carries no worktreePath, and the
audit must read the working tree the fix was applied in, not a review
tree.

* fix(review): close the round-10 capture entrances and anchor the hunks hand-off

R10-1: the redirect check lstat'd only the prefixes of the excluded
directories, so a symlink planted at a family-matching NAME under
.qwen/tmp redirected every side file the flow writes under it; lstat the
family entries themselves and refuse one that resolves to a directory.

R5-1: two new entrances to the false bare all-clear. A TRACKED symlink
reaching a git repository emits no status entry, so the walk never found
the repo behind it — probe an out-of-root link target that holds one
instead of only naming the scope. A nested repository's own mode-160000
gitlinks take the root's index-sweep ruling, so a dead interior gitlink
is unresolved rather than silently skipped.

Also from the deferred list: fix-delta --since now fingerprints the hunks
file it writes, and agent-prompt --role fix-audit reads the hunks only
against --hunks-fingerprint, closing the tree-writable rewrite window
between the two processes. Flow bookkeeping is derived from the Step 1
plan path (the plan file and its prompt-record directory) instead of a
hand-listed suffix set, and the staged half of the family re-inclusion is
gated fail-closed on the snapshot's own record of what it re-included.
A filter screen that cannot be read to the bottom now refuses the capture
rather than blanking nothing, and the capture pins core.fileMode=true so
an exec-bit edit survives a repo-local fileMode=false.

* fix(review): seed the second fix-delta capture from the snapshot tree and keep the capture out of nested repositories

The `--since` capture is seeded from the snapshot's own tree instead of
from HEAD. Seeded from HEAD at both moments, the comparison also carried
every path the tracked set gained or lost between the moments (a commit
in the window) and every path an ignore rule written in the window hid
from `add -A`, and a deletion classifier had to guess, per record, which
of the two had made it — one entrance per round (a rule hiding an
embedded repository's gitlink; a HEAD gate asked after the move). With
the first tree as the second seed an entry the first capture recorded is
an entry the second one holds whatever the rules say now, so a deletion
in the hunks is a path gone from the disk and nothing else: the deletion
classifier and its note are removed. What the seed cannot carry — a
HEAD-tracked path absent at the snapshot and on disk again — is
re-admitted off the snapshot's recorded HEAD. A commit in the window is
disclosed as a moved HEAD and withholds the bare all-clear; so is a
record that names no HEAD, or one whose HEAD the repository no longer
holds. The addition-side classifier records what the rules hid by kind
— files, links, nested repositories (a `sub/` listing, or a staged
gitlink typed off its index mode) — and reads an addition as a rule's
removal only when its kind matches what stood there; a file or a link
the fix put in a hidden repository's or file's place rides the hunks.
The re-admission skips a path that now sits behind a link, inside a
repository the capture recorded as a gitlink, or under a component that
became a plain file, instead of dying on the pathspec.

`git add -A` decides whether a gitlink is modified by running a status
inside the checkout, and that child executes the checkout's own
repo-local filters, fsmonitor command and hooks — measured, and no `-c`
on the parent reaches it. The seed's gitlinks are now excluded from
`add -A` by pathspec and refreshed by hand off `rev-parse HEAD` with
`update-index --index-info`, entry for entry as git rules them; both
discovery statuses run `--ignore-submodules=all`; every gitlink is
probed by the index sweep after its own config has been screened, with
gitlinks ordered before symlinks so a repository answers under its
registered name. A checkout whose `.git` git does not accept as its own
— a hollow directory, a gitfile naming an enclosing checkout's git dir —
stands rather than being refreshed off the HEAD discovery would find by
walking up.

Also: an empty gitlink checkout (a clone's, or a non-recursive
`submodule update --init`'s at level 2) is skipped like an absent one at
both levels, read with readdirSync rather than existsSync; a nested
repository's skip-worktree bits take the sparse-checkout exemption
`local-anchor.ts` already pays for; every name that reaches a probed
repository is recorded against its filesystem identity and `--since`
reads the baseline by identity too — only where both names resolve to
the same place now, so a rename or an inode reused after a delete stays
disclosed — and a route that changed is not a vanished-plus-appeared
pair; the discovery-status and `add` refusals are
escaped at the render boundary; and the fix auditor's input renders the
finding's path through `inertPath`.

* fix(review): close the round-29 fix-delta findings and the audit-found siblings

The capture's gitlink refresh writes a null OID as long as the
repository's object names (64 hex under sha256), and leaves an entry
standing when the checkout's HEAD is of the other length. The scratch
directory's parent is resolved from `rev-parse --absolute-git-dir` as
bytes, with only git's one trailing newline removed; a git dir whose
name cannot be spelled into `GIT_INDEX_FILE` falls back to the system
temp directory when that is outside the tree, and refuses otherwise.

`core.ignoreCase=false` is pinned on every spawn that measures a working
tree — the capture's and the nested-repository probes' — wherever that
tree's filesystem is case-sensitive: a `true` there is never git's own,
and under it `add -A` and a nested `status` fold a case-colliding sibling
into silence. The probe is read-only, once per path, on the tree's own
volume: its `.git` entry lstat'd under `.GIT`, with ENOENT, a different
inode, an unverifiable inode, or a hard-linked gitfile read as sensitive.

The hidden set's `--cached` half probes the entry before typing it, so a
staged gitlink whose checkout is gone is recorded nowhere. Both family
listings read their recorded mode: a mode-160000 entry is never handed
to `add -u` or `add -A -f` (an explicit gitlink pathspec runs a status
inside the checkout, measured), and is named on stderr once; the staged
half hands `add -f` only a path that lstats and names what it left out.
A baseline recorded through a link out of the tree is withdrawn when the
probe no longer reaches the name as scope, so a removed or replaced
external link routes as vanished or appeared, and the identity alias
reads the withdrawn baseline rather than the snapshot.

The nested-repository probe asks about skip-worktree bits before it
rules on dirt, so a hand-set bit cannot hide an edit behind pre-existing
dirt; the sparse-checkout exemption is granted only where the rules
govern the worktree (every unflagged tracked path in-rules, with the
index's gitlinks kept out of both sets), and the ungoverned or unaskable
paths are named on stderr beside `git sparse-checkout reapply`.

SKILL.md routes "edits no outcome owns" one way — a foreign write leaves
the ledger alone; only an unrecorded fix of a finding is a ledger to
correct — with pins. Six new tests use a spawn-only nested-repo helper
so they run on the Windows lane; the newline-name and exec-bit cases are
gated `win32`; case-sensitivity cases skip on an insensitive volume.

* docs(review): tell the fix-audit agent apart from the fix-audit round

With #10136 on the branch two things answer to "fix audit": the PR
re-review's narrowed round, read off the plan's `incremental.posture`,
and Step 6B's one agent over the hunks a local `--fix` applied. Step 6B
now says which one it is and why the two never meet in one run (the
round needs a pull-request target, where `fix.effective` is false), so
a reader cannot carry the round's convergence carve-out into a local
`--fix` review. DESIGN.md records the same; SKILL.test.ts pins the
sentence.

* refactor(review): state the fix-delta scope instead of certifying it

Thirty review rounds went into making `fix-delta` certify that its hunks
were the whole edit: nested-repository digests, ignored-path and symlink
classification, sparse/skip-worktree bits, redirected excludes, filter
screening, record fingerprints. fix-delta.ts grew from 222 to 5,680
lines and held 142 of the loop's 185 Criticals, each round's fixes
opening the next round's entrances — for a check whose output is a
disclosure that changes no verdict.

Replace the certification with a fixed scope printed on every `--since`
run: the hunks hold what `git add -A` records in this repository, and an
edit inside a submodule or nested repository, or to a gitignored file,
is named as outside it. What stays is what the audit needs: the
throwaway-index capture, the review's own side files excluded (both the
name and the directory form, at any depth, plus the command's own
--out/--since), the second capture seeded from the snapshot tree, and a
moved-HEAD disclosure. HEAD is now read once and the capture is seeded
from that sha, so the record and the tree describe one moment (R30-1).

agent-prompt drops --hunks-fingerprint and the C-quoted patch-path
parser; whether a fixed finding's edit is among the hunks is now the
auditor's check, which has both in front of it. SKILL.md Step 6B,
DESIGN.md and the user docs follow; lib/worktree.ts is back to main and
lib/git.ts keeps only gitWithEnv.

* fix(review): keep fix-delta working under .qwen/ ignore rules

Five everyday shapes the shrink regressed, each measured in a scratch
repository:

- A literal exclude for --out/--since under an ignored directory made
  `add` refuse the whole capture ("The following paths are ignored"),
  so wherever `.qwen/tmp` is ignored — qwen-code's own `.qwen/*`, the
  `.qwen/` rule /setup-github writes, a bare `tmp/` — the audit never
  ran. A side file an ignore rule already hides is no longer excluded
  (add -A cannot capture it anyway).
- The throwaway index lived under os.tmpdir(); a TMPDIR inside the
  working tree captured the index itself. It now lives under the
  absolute git dir, which also holds in a linked worktree or submodule.
- `core.autocrlf` printed one conversion warning per file into the
  stderr the orchestrator relays, and past Node's 1 MiB default the add
  was killed (ENOBUFS). The add pins core.safecrlf=false (the stored
  blob is unchanged) and gitWithEnv takes gitRaw's 512 MiB ceiling.
- In a cone-mode sparse checkout an untracked file outside the cone made
  `add` exit 1; the capture passes --sparse. Its snapshot cost in very
  large sparse checkouts is measured and stated in DESIGN.md.
- The fix-audit input showed a finding's first location only, so a fix
  landing at its second location read as unattested. Every location is
  listed and the brief (and the ledger-note template) ask about any.

Names on stderr now go through inertPath, the header check requires the
patch to open with `diff --git`, the user docs tell this agent apart from
the fix-audit-shaped review round, and every guard has a witness that
goes red when it is removed (43 mutants), including runs from a
subdirectory and from a linked worktree.

* fix(review): make the fix-delta scope line say what the capture does

R31-1: the scope line claimed coverage the capture does not deliver. It
now describes the capture as it behaves: the hunks hold the files HEAD
tracks and every other file no ignore rule hides; an edit to a gitignored
file HEAD does not track, or to any path in the review's .qwen/tmp name
families (tracked or not), is out of scope; and a hunk shows a file as
git stores it (a binary file as `Binary files … differ`, a Git LFS file
as its pointer). SKILL.md, DESIGN.md and the user docs relay the same
wording, and tests pin each qualification against the behaviour.

The command's own --out/--since files are now excluded from the diff
range only, never from a capture. `add` refuses a pathspec whose literal
prefix names an ignored path, which is why the previous version asked
`check-ignore` first — and asked it of the user's index, so a file HEAD
tracks but the user's index dropped leaked into the hunks (triage
finding). `diff-tree` has no such refusal, so the probe is gone.

The unreachable `(no location)` branch in renderFixAuditInput is gone;
validateFindings guarantees a location.

---------

Co-authored-by: Qwen Code Autofix <[email protected]>
Co-authored-by: Qwen-Coder <[email protected]>
Co-authored-by: qwen-code-dev-bot <[email protected]>
Co-authored-by: probe <probe@local>
Co-authored-by: wenshao <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autofix/needs-human The autofix loop stopped on this PR — a human must re-arm, split, merge, or close it review/self-reported The linked issue was opened by the PR author (self-reported)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

review: adapt the re-review shape once the posture is critical-only — audit the fix commits instead of re-fanning the full territory

6 participants