Skip to content

docs: fix false documentation, relocate internal pages, add link/placement CI guards (#2654)#2686

Merged
acoliver merged 16 commits into
mainfrom
issue2654
Jul 25, 2026
Merged

docs: fix false documentation, relocate internal pages, add link/placement CI guards (#2654)#2686
acoliver merged 16 commits into
mainfrom
issue2654

Conversation

@acoliver

@acoliver acoliver commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

Addresses the documentation audit in #2654. Delivers the mechanically-verifiable half of that audit plus the CI enforcement that keeps it from regressing. The subjective prose rewrites of very large pages are tracked separately in #2685.

This PR does not close #2654 — see "Scope" below.

Why

The audit found user documentation asserting behavior the code does not implement, internal engineering records in public navigation, and broken repo-relative links with no CI to catch them.

I verified every audit claim against source rather than taking it at face value. Several were wrong or understated:

Audit claim Verified reality
3 broken relative links 15, across 8 files
Telemetry init "is commented out; source changes required to enable" False. configConstructor.ts:499 calls initializeTelemetry unconditionally; sdk.ts:44 early-returns only when disabled, then starts a real NodeSDK
22 files in dev-docs/ 23 (one landed after the audit)

Correctness fixes

docs/telemetry.md was wrong in four separate ways:

  • Claimed telemetry cannot work without editing source. It works; exporters are file (when an outfile is set) or console, and no OTLP/network exporter exists in the code path.
  • Every event and metric identifier used llxprt_cli.*. Real values are llxprt_code.* (packages/telemetry/src/telemetry/constants.ts). All 29 identifiers now verified to exist as real constants.
  • Disable instruction said to omit --telemetry. That does not disable it — configBuilder.ts:83 is argv.telemetry ?? settings.telemetry.enabled, so persisted settings win. The real session override is --no-telemetry.
  • Overstated tracing: the SDK registers only HttpInstrumentation and there are no startSpan calls.

Also reconciled docs/cli/configuration.md and docs/cli/enterprise.md, which still promised OTLP/gcp export the SDK cannot perform — the audit explicitly required telemetry docs be non-contradictory.

docs/tool-parsing.md documented /toolformat text, but the command rejects it (valid: openai|anthropic|deepseek|qwen|kimi|gemma|hermes|xml|llama|auto). It also presented enableTextToolCallParsing / textToolCallModels as working controls; those have no production consumer, so the page now says so plainly.

docs/Uninstall.md named gemini-cli and led with deleting the entire npx cache. Now leads with the supported channels (npm global, Homebrew), demotes cache clearing to optional troubleshooting with a collateral-deletion warning, derives the Windows cache path from npm config get cache instead of hard-coding it, and stops implying one directory removal deletes all state.

docs/hooks/best-practices.md had an orphaned JavaScript fragment rendering outside any code fence, duplicated security guidance (SECRET_PATTERNS defined twice), a broken link, and a false claim that telemetry.logPrompts gates hook I/O logging (it does not — loggers.ts:274-290). The #using-hooks-securely anchor is preserved because docs/extension.md links to it.

Placement

Relocated six internal documents to dev-docs/ with all inbound links updated:

From To
docs/architecture/message-bus-architecture.md dev-docs/architecture/message-bus.md
docs/hooks/architecture.md dev-docs/hooks/architecture.md
docs/tool-output-format.md dev-docs/tools/tool-output-format.md
docs/tool-parsing.md (internals) dev-docs/providers/text-tool-call-parsing.md
docs/merge-notes/batch21-25-skipped.md dev-docs/merge-notes/2026-01-06-batches21-25-skipped.md
docs/plans/2026-01-03-welcome-onboarding.md dev-docs/plans/archive/2026-01-03-welcome-onboarding.md

A short user-facing docs/tool-parsing.md remains, covering only the runtime command and troubleshooting.

Deleted docs/cli/keyboard-shortcuts.md: a stale orphan that carries KEYBINDINGS-AUTOGEN markers but is not the generator's target (generate-keybindings-doc.ts writes only docs/keyboard-shortcuts.md) and is referenced by nothing.

Prevention

Two new guards, wired into ci.yml and scripts/lint-all.sh:

  • npm run lint:doc-links — validates every repo-relative link and heading anchor across docs/, dev-docs/, and root-level Markdown. Root coverage matters: it caught a bad link I introduced in CONTRIBUTING.md plus 3 pre-existing ones that only-scanning-docs/ would have missed.
  • npm run lint:doc-placement — rejects internal-only directories reappearing in docs/ and plan/requirement bookkeeping markers outside code fences.

Both use the marked lexer (already a declared root dependency) rather than hand-rolled parsing. The first implementation was hand-rolled and had real bypasses — a 4-space-indented ``` was treated as a fence, silently hiding broken links after it. CommonMark compliance now covers indented code, fence delimiter/length matching, titled and parenthesized destinations, angle-bracket references, multi-backtick spans, setext headings, duplicate-heading suffixes, and non-ASCII anchors. Both guards fail fast on an unreadable root instead of passing vacuously, and target resolution is confined to the repository.

82 behavioral tests run the real scripts against real fixture trees and assert real exit codes — no filesystem mocks. Includes negative controls for every bypass found in review.

Scope

In scope: correctness/safety fixes, the six relocations, and the prevention tooling. Deferred to #2685: prose rewrites and splits of agent-api.md (1373 lines), mcp-server.md (730), approval-mode-to-policies.md (734), quick-reference.md (667), the hook-tutorial consolidation (1592 combined), plus sandbox.md tone and the message-bus/todo-system/memport/deployment splits.

This split keeps mechanically-verifiable fixes separate from prose judgement and keeps the diff reviewable. The placement guard already enforces the placement half of the deferred work mechanically. #2654 stays open until #2685 lands.

Verification

Check Result
npm run lint PASS (exit 0)
npm run lint:doc-links / lint:doc-placement PASS
npm run lint:eslint-guard PASS — no suppressions, no threshold changes
npm run typecheck PASS
npx prettier --check . PASS
npm run build PASS
82 new tests PASS

Bypass reproduction, before and after:

printf '# P\n\n    ```\n[missing](./nope.md)\n' > docs/page.md
# before: doc-links guard PASSED (exit 0)  <- silently missed
# after:  doc-links guard FAILED (exit 1)

Pre-existing failures (not caused by this PR)

Two failures exist that this PR does not introduce, proven rather than assumed:

  • npm run test: 17 failures in packages/cli and vscode-ide-companion. This PR changes zero files under packages/. I created a clean worktree at base commit 3a12f02e5 and ran the same suites there: 12 failures reproduce with no changes applied.
  • ollamakimi smoke test: fails with SyntaxError: Export named 'onExit' not found in module .../signal-exit/index.js. Reproduced on a fully clean tree (all changes stashed) with the identical error. ink depends on CommonJS signal-exit@3.0.7, which Bun's ESM interop cannot resolve a named export from. Worth its own issue.

Also corrected during review: two cases where an emoji filter had mangled pre-existing content (docs/EMOJI-FILTER.md examples and / glyphs in lint-all.sh).

Relates to #2654. Follow-up: #2685.

Summary by CodeRabbit

  • Documentation
    • Reworked telemetry guidance to clarify local-only collection, defaults, privacy, CLI controls, and event names.
    • Expanded uninstall instructions with Homebrew support, verification, data removal, and safer cache-clearing guidance.
    • Updated tool-call parsing, authentication migration, enterprise configuration, hook privacy, and command-argument documentation.
    • Refreshed documentation links and reorganized references; removed the outdated keyboard-shortcuts page.
  • Quality
    • Added automated checks and tests for broken links, misplaced internal documentation, and documentation accuracy.
    • Integrated the new documentation checks into linting and CI.

@github-actions github-actions Bot added the maintainer:e2e:ok Trusted contributor; maintainer-approved E2E run label Jul 25, 2026
@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR adds documentation link and placement guards, integrates them into local and CI linting, adds behavioral and repository-invariant tests, and revises documentation for telemetry, uninstalling, tool parsing, migrations, links, and internal-content placement.

Changes

Documentation validation

Layer / File(s) Summary
Link and placement guards
scripts/check-doc-links.ts, scripts/check-doc-placement.ts, scripts/doc-links/*
Adds Markdown link extraction, repository target resolution, heading-fragment validation, symlink-aware scanning, and checks for forbidden documentation locations and internal markers.
Lint integration and configuration
package.json, scripts/lint-all.sh, .github/workflows/ci.yml, tsconfig.scripts.json, scripts/legacy-paths/*
Registers both guards in package scripts, local linting, CI, TypeScript inclusion, and legacy-path exclusions.

Validation coverage

Layer / File(s) Summary
Guard and repository tests
scripts/tests/doc-guard-helpers.ts, scripts/tests/doc-links-guard.test.ts, scripts/tests/doc-placement-guard.test.ts, scripts/tests/doc-tree-invariants.test.ts, scripts/tests/telemetry-doc-accuracy.test.ts
Adds real-process tests for link parsing, fragments, directories, symlinks, placement markers, repository structure, telemetry documentation, and reporting behavior.

Documentation updates

Layer / File(s) Summary
Telemetry and hook guidance
docs/telemetry.md, docs/cli/configuration.md, docs/cli/enterprise.md, docs/hooks/best-practices.md
Documents disabled-by-default, local-only telemetry, file or console output, event naming, CLI overrides, and hook I/O logging semantics.
User and developer documentation
docs/Uninstall.md, docs/tool-parsing.md, docs/cli/*, docs/hooks/index.md, docs/message-bus.md, docs/migration/*, CONTRIBUTING.md, CHANGELOG.md, docs/agent-api.md, docs/release-notes/*
Revises uninstall, tool parsing, migration, contribution, architecture, sandbox, skills, authentication, and release guidance while removing internal plan metadata and updating links.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related issues

  • #2685: The PR implements the referenced documentation-audit work, including link and placement guards, documentation restructuring, and factual corrections.

Suggested labels: ci/cd

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The PR includes an unrelated NOTICE-file URL tweak in packages/vscode-ide-companion that is outside the documentation audit scope. Remove the NOTICE-file tweak or justify it as a separate maintenance change so the PR stays focused on the documentation audit.
Docstring Coverage ⚠️ Warning Docstring coverage is 47.30% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the PR’s main changes: doc fixes, internal page relocation, and new link/placement CI guards.
Description check ✅ Passed The description covers rationale, scope, verification, linked issue context, and what was explicitly deferred.
Linked Issues check ✅ Passed The PR delivers the linked issue’s in-scope audit work: doc corrections, six relocations, link repairs, guards, and tests.
📋 Issue Planner

Built with CodeRabbit's Coding Plans for faster development and fewer bugs.

View plan used: #2654

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue2654

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

LLxprt PR Review – PR #2686

Issue Alignment

Resolves the mechanical half of #2654. The PR fixes all 10 broken repo-relative links, relocates six internal docs from docs/ to dev-docs/, deletes two stale user-facing records, rewrites docs/telemetry.md and docs/Uninstall.md to match verified source behavior, repairs docs/hooks/best-practices.md (orphaned fragment, duplicated security section, false logPrompts claim), and adds CI guards that prevent regression. Evidence: review/diffs/scripts__tests__doc-tree-invariants.test.ts.diff encodes the exact relocated paths and factual assertions; review/diffs/docs__telemetry.md.diff removes the false "commented out" claim.

Side Effects

  • CI now runs lint:doc-links and lint:doc-placement (.github/workflows/ci.yml, scripts/lint-all.sh).
  • scripts/legacy-paths/config.ts allowlist updated for new dev-docs/plans/archive/ and dev-docs/merge-notes/ paths.
  • package.json gains two npm scripts; tsconfig.scripts.json includes the new guard modules.
  • Minor non-doc change: packages/vscode-ide-companion/NOTICES.txt URL scheme fixed from git:// to https://.

Code Quality

New guard scripts (scripts/check-doc-links.ts, scripts/check-doc-placement.ts) are idiomatic Node/Bun, use marked's lexer for correct CommonMark parsing, and handle edge cases: symlink cycles, percent-encoding, HTML comments, fenced code inside list items/blockquotes, and GitHub heading slugs including CJK/duplicate headings. Error handling is explicit (RootMissingError, ENOENT surfacing). No lint loosening or suppressions.

Tests and Coverage

Coverage impact: increase. Five new test suites (doc-links-guard, doc-placement-guard, doc-tree-invariants, telemetry-doc-accuracy, plus shared doc-guard-helpers) exercise real behavior against real fixture directories and the real repo. Tests avoid mock theater: they spawn the actual guard scripts via execFile, write real Markdown to temp dirs, and assert exit codes/stdout. Edge cases covered include malformed fragments, symlinked roots, non-Markdown fragment targets, and HTML-comment marker hiding.

Verdict

Ready. The implementation is tightly aligned with the issue, the new CI guards are mechanically enforceable, and the test suite is behavioral and comprehensive. No remediation needed.

Comment thread scripts/check-doc-placement.ts Fixed
…guards (#2654)

The documentation audit in #2654 found user pages asserting behavior the code
does not implement, internal engineering records sitting in public navigation,
and broken repo-relative links with nothing to catch them. Verifying the audit's
own claims against source showed some were understated: it reported 3 broken
links where there were 15, and its central telemetry claim was backwards.

Correct the false documentation. Telemetry is not "commented out requiring
source changes" -- initializeTelemetry is called unconditionally and starts a
real SDK when enabled, exporting to file or console only, with no network
exporter in the code path. Every documented event and metric name was wrong
(llxprt_cli.* vs the actual llxprt_code.*), the disable instruction was wrong
(persisted settings survive omitting --telemetry; --no-telemetry is the real
override), and tracing was overstated. Reconcile configuration.md and
enterprise.md, which still promised OTLP export the SDK cannot perform.
docs/tool-parsing.md documented a /toolformat value the command rejects and
presented two settings with no production consumer as working controls.
Uninstall.md named the wrong product and led with deleting the entire npx cache.

Relocate six internal documents to dev-docs/ with inbound links updated, and
delete docs/cli/keyboard-shortcuts.md, a stale orphan no generator targets and
nothing references.

Add two guards so this cannot silently regress. lint:doc-links validates every
repo-relative link and heading anchor across docs/, dev-docs/ and root-level
Markdown; lint:doc-placement rejects internal-only directories and plan
bookkeeping markers in docs/. Both use the marked lexer rather than hand-rolled
parsing, so indented code, fence delimiters, titled and parenthesized
destinations, and multi-byte anchors are handled per CommonMark, and both fail
fast on an unreadable root instead of passing vacuously.

The audit's remaining prose rewrites of large pages are tracked in #2685; this
does not close #2654.
@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

OpenCodeReview — PR #2686

  • Reviewed head SHA: 2bfc91ffc970ea2635929d8cd6f2784407a6d844
  • Merge base: 6bc8010207cd6c0046e812df609c0d20c9ad808c
  • OCR version: open-code-review v1.7.16 (a0b49d5b) linux/amd64 built at: 2026-07-24T15:49:28Z https://github.com/alibaba/open-code-review
  • Phase: review
  • Exit code: 0
  • Run: https://github.com/vybestack/llxprt-code/actions/runs/30167918477
  • 11 finding(s) (11 posted inline).
  • Artifacts: ocr-review-output contains raw JSON, stdout, stderr, preview, phase, and exit-code diagnostics.

The vscode-ide-companion 'prepare' script regenerates NOTICES.txt on every
install. The committed copy recorded ip-address's legacy git:// repository URL,
while a fresh dependency resolution emits the normalized https:// form, so the
regenerated file no longer matched what was checked in.

This only surfaced now because touching package.json invalidates the CI install
cache, which re-runs 'prepare'. PRs that leave package.json alone reuse the
cache and never regenerate the file, hiding the drift.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 9

🧹 Nitpick comments (2)
scripts/check-doc-links.ts (1)

192-200: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove the dead entryUrl === import.meta.url check. fileURLToPath(...) returns a path, so that comparison can never pass; only the endsWith('check-doc-links.ts') branch gates main(). Mirror check-doc-placement.ts or switch to import.meta.main.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/check-doc-links.ts` around lines 192 - 200, Remove the dead entryUrl
=== import.meta.url comparison from the main execution guard in
check-doc-links.ts, including any now-unused entryUrl conversion. Preserve the
existing check-doc-links.ts filename gate, or use the established
import.meta.main pattern consistent with check-doc-placement.ts.
scripts/tests/doc-links-guard.test.ts (1)

401-418: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Guard symlink test against unprivileged Windows.

symlinkSync(..., 'dir') can throw EPERM on unprivileged Windows. Based on learnings, symlink-based fixtures elsewhere in scripts/tests are guarded with describe.skipIf(process.platform === 'win32'); this block should follow the same pattern for local-dev consistency.

🔧 Proposed fix
-    describe('symlink policy', () => {
+    describe.skipIf(process.platform === 'win32')('symlink policy', () => {

Based on learnings (acoliver, PR 2260, scripts/tests/verify-bun-workspace-links.test.ts:93-96): "avoid running them on unprivileged Windows because they commonly throw EPERM... Guard these tests with describe.skipIf(process.platform === 'win32')".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/tests/doc-links-guard.test.ts` around lines 401 - 418, Guard the
symlink policy test suite by changing its describe wrapper to skip when
process.platform is 'win32', while preserving the existing test and symlink
validation behavior on other platforms.

Source: Learnings

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/cli/skills.md`:
- Line 15: Update the LLXPRT context link in the skills documentation sentence
to use the corrected sibling target ./llxprt-md.md, or the repository’s
canonical equivalent, instead of ../tools/memory.md.

In `@docs/telemetry.md`:
- Around line 60-63: Update the disable-telemetry documentation to reference
settings.telemetry.enabled instead of settings.enabled, matching the
configuration builder and surrounding documentation.

In `@docs/tool-parsing.md`:
- Around line 118-121: Add the text language identifier to the fenced examples
in docs/tool-parsing.md, including the fences around the TOOL_REQUEST examples
at the referenced sections, so each opening fence uses ```text and documentation
lint passes.
- Around line 17-23: Reclassify `gemma` in the format table so it is listed
under Text-based formats alongside `hermes`, `xml`, and `llama`, rather than
Structured (JSON). Keep the existing format name and all other table entries
unchanged.

In `@docs/Uninstall.md`:
- Around line 37-42: Update the “npx does not install anything” section in
Uninstall.md to distinguish that npx creates no permanent or global installation
while still downloading package contents into the npm cache. Replace the
inaccurate “installs nothing on your system” wording and preserve the existing
guidance about optionally clearing the cache.

In `@scripts/check-doc-links.ts`:
- Around line 61-68: Update the link-handling function’s external-link branch so
the isIgnored result has an observable effect consistent with the intended
.lycheeignore filtering; remove the redundant unconditional return and ensure
ignored and non-ignored external links follow their distinct documented
outcomes.
- Around line 81-121: Update the directory branch in the local-link check to
resolve whichever supported entry file actually exists, index.md or README.md,
before passing it to checkFragment. Preserve the existing missing-index
violation and ensure directory links with fragments validate against the
resolved file without attempting to read a nonexistent index.md.

In `@scripts/doc-links/file-scanner.ts`:
- Around line 252-290: Update isFile, isDirectory, and pathExists in
file-scanner.ts to use statSync instead of lstatSync so symlinked files and
directories are followed. Keep dirHasIndex unchanged so its existing checks
inherit the symlink-aware behavior.

In `@scripts/doc-links/markdown-links.ts`:
- Around line 130-155: Update extractTokenLines to recurse through a token’s
nested tokens and items before falling back to its raw text, while preserving
CODE_TOKEN_TYPES filtering through walkNonCodeTokens. Ensure container tokens
such as paragraphs, blockquotes, and list items do not emit raw source
containing nested code spans or fenced blocks, while leaf tokens still
contribute their raw text.

---

Nitpick comments:
In `@scripts/check-doc-links.ts`:
- Around line 192-200: Remove the dead entryUrl === import.meta.url comparison
from the main execution guard in check-doc-links.ts, including any now-unused
entryUrl conversion. Preserve the existing check-doc-links.ts filename gate, or
use the established import.meta.main pattern consistent with
check-doc-placement.ts.

In `@scripts/tests/doc-links-guard.test.ts`:
- Around line 401-418: Guard the symlink policy test suite by changing its
describe wrapper to skip when process.platform is 'win32', while preserving the
existing test and symlink validation behavior on other platforms.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: fb66230d-3801-4806-ac83-13557dfaa76a

📥 Commits

Reviewing files that changed from the base of the PR and between 6bc8010 and 1cc65f8.

⛔ Files ignored due to path filters (9)
  • dev-docs/architecture/message-bus.md is excluded by !dev-docs/**
  • dev-docs/documentation-style-guide.md is excluded by !dev-docs/**
  • dev-docs/hooks/architecture.md is excluded by !dev-docs/**
  • dev-docs/merge-notes/2026-01-06-batches21-25-skipped.md is excluded by !dev-docs/**
  • dev-docs/plans/archive/2026-01-03-welcome-onboarding.md is excluded by !dev-docs/**
  • dev-docs/providers/text-tool-call-parsing.md is excluded by !dev-docs/**
  • dev-docs/telemetry-internals.md is excluded by !dev-docs/**
  • dev-docs/tools/tool-output-format.md is excluded by !dev-docs/**
  • project-plans/issue2654/plan.md is excluded by !project-plans/**
📒 Files selected for processing (36)
  • .github/workflows/ci.yml
  • CHANGELOG.md
  • CONTRIBUTING.md
  • docs/EMOJI-FILTER.md
  • docs/Uninstall.md
  • docs/agent-api.md
  • docs/cli/configuration.md
  • docs/cli/enterprise.md
  • docs/cli/google-cloud-auth.md
  • docs/cli/keyboard-shortcuts.md
  • docs/cli/profiles.md
  • docs/cli/skills.md
  • docs/cli/tutorials/skills-getting-started.md
  • docs/hooks/best-practices.md
  • docs/hooks/index.md
  • docs/message-bus.md
  • docs/migration/approval-mode-to-policies.md
  • docs/migration/stateless-provider-v2.md
  • docs/release-notes/2025Q4.md
  • docs/telemetry.md
  • docs/tool-parsing.md
  • package.json
  • scripts/check-doc-links.ts
  • scripts/check-doc-placement.ts
  • scripts/doc-links/file-scanner.ts
  • scripts/doc-links/heading-slugger.ts
  • scripts/doc-links/lycheeignore.ts
  • scripts/doc-links/markdown-links.ts
  • scripts/legacy-paths/config.ts
  • scripts/lint-all.sh
  • scripts/tests/doc-guard-helpers.ts
  • scripts/tests/doc-links-guard.test.ts
  • scripts/tests/doc-placement-guard.test.ts
  • scripts/tests/doc-tree-invariants.test.ts
  • scripts/tests/telemetry-doc-accuracy.test.ts
  • tsconfig.scripts.json
💤 Files with no reviewable changes (2)
  • docs/cli/keyboard-shortcuts.md
  • docs/EMOJI-FILTER.md

Comment thread docs/cli/skills.md
Comment thread docs/telemetry.md
Comment thread docs/tool-parsing.md Outdated
Comment thread docs/tool-parsing.md Outdated
Comment thread docs/Uninstall.md Outdated
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/doc-links/file-scanner.ts
Comment thread scripts/doc-links/markdown-links.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
scripts/tests/telemetry-doc-accuracy.test.ts (1)

106-114: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Derive these documentation claims from source behavior. These assertions only match prose, so a change to the telemetry default, CLI precedence, or hook-I/O behavior can leave stale docs green. Assert the relevant source contract first, then verify the documentation reflects it.

Also applies to: 143-152

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/tests/telemetry-doc-accuracy.test.ts` around lines 106 - 114, Update
the telemetry documentation tests around the default and CLI precedence cases to
first assert the corresponding source behavior, including telemetry hook I/O
behavior where covered by the additional assertions, then verify
docs/telemetry.md reflects those contracts. Anchor the source checks to the
existing telemetry configuration and CLI-handling symbols, preserving the
current documentation checks while ensuring stale prose cannot pass after
behavior changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@scripts/tests/telemetry-doc-accuracy.test.ts`:
- Around line 106-114: Update the telemetry documentation tests around the
default and CLI precedence cases to first assert the corresponding source
behavior, including telemetry hook I/O behavior where covered by the additional
assertions, then verify docs/telemetry.md reflects those contracts. Anchor the
source checks to the existing telemetry configuration and CLI-handling symbols,
preserving the current documentation checks while ensuring stale prose cannot
pass after behavior changes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 82d2046f-05e1-4f8a-bdff-8a20e2007a82

📥 Commits

Reviewing files that changed from the base of the PR and between 1cc65f8 and 898234a.

⛔ Files ignored due to path filters (9)
  • dev-docs/architecture/message-bus.md is excluded by !dev-docs/**
  • dev-docs/documentation-style-guide.md is excluded by !dev-docs/**
  • dev-docs/hooks/architecture.md is excluded by !dev-docs/**
  • dev-docs/merge-notes/2026-01-06-batches21-25-skipped.md is excluded by !dev-docs/**
  • dev-docs/plans/archive/2026-01-03-welcome-onboarding.md is excluded by !dev-docs/**
  • dev-docs/providers/text-tool-call-parsing.md is excluded by !dev-docs/**
  • dev-docs/telemetry-internals.md is excluded by !dev-docs/**
  • dev-docs/tools/tool-output-format.md is excluded by !dev-docs/**
  • project-plans/issue2654/plan.md is excluded by !project-plans/**
📒 Files selected for processing (37)
  • .github/workflows/ci.yml
  • CHANGELOG.md
  • CONTRIBUTING.md
  • docs/EMOJI-FILTER.md
  • docs/Uninstall.md
  • docs/agent-api.md
  • docs/cli/configuration.md
  • docs/cli/enterprise.md
  • docs/cli/google-cloud-auth.md
  • docs/cli/keyboard-shortcuts.md
  • docs/cli/profiles.md
  • docs/cli/skills.md
  • docs/cli/tutorials/skills-getting-started.md
  • docs/hooks/best-practices.md
  • docs/hooks/index.md
  • docs/message-bus.md
  • docs/migration/approval-mode-to-policies.md
  • docs/migration/stateless-provider-v2.md
  • docs/release-notes/2025Q4.md
  • docs/telemetry.md
  • docs/tool-parsing.md
  • package.json
  • packages/vscode-ide-companion/NOTICES.txt
  • scripts/check-doc-links.ts
  • scripts/check-doc-placement.ts
  • scripts/doc-links/file-scanner.ts
  • scripts/doc-links/heading-slugger.ts
  • scripts/doc-links/lycheeignore.ts
  • scripts/doc-links/markdown-links.ts
  • scripts/legacy-paths/config.ts
  • scripts/lint-all.sh
  • scripts/tests/doc-guard-helpers.ts
  • scripts/tests/doc-links-guard.test.ts
  • scripts/tests/doc-placement-guard.test.ts
  • scripts/tests/doc-tree-invariants.test.ts
  • scripts/tests/telemetry-doc-accuracy.test.ts
  • tsconfig.scripts.json
💤 Files with no reviewable changes (2)
  • docs/cli/keyboard-shortcuts.md
  • docs/EMOJI-FILTER.md
🚧 Files skipped from review as they are similar to previous changes (29)
  • docs/hooks/index.md
  • docs/cli/tutorials/skills-getting-started.md
  • docs/message-bus.md
  • docs/migration/stateless-provider-v2.md
  • docs/release-notes/2025Q4.md
  • scripts/lint-all.sh
  • scripts/legacy-paths/config.ts
  • scripts/doc-links/lycheeignore.ts
  • tsconfig.scripts.json
  • docs/migration/approval-mode-to-policies.md
  • CHANGELOG.md
  • docs/cli/google-cloud-auth.md
  • CONTRIBUTING.md
  • .github/workflows/ci.yml
  • docs/agent-api.md
  • docs/cli/skills.md
  • scripts/tests/doc-placement-guard.test.ts
  • package.json
  • scripts/doc-links/heading-slugger.ts
  • docs/hooks/best-practices.md
  • docs/cli/enterprise.md
  • scripts/check-doc-links.ts
  • docs/telemetry.md
  • scripts/check-doc-placement.ts
  • docs/cli/configuration.md
  • docs/Uninstall.md
  • scripts/tests/doc-tree-invariants.test.ts
  • scripts/doc-links/file-scanner.ts
  • scripts/tests/doc-links-guard.test.ts

Comment thread scripts/check-doc-links.ts Outdated
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts Outdated
Comment thread scripts/check-doc-links.ts
Comment thread scripts/doc-links/markdown-links.ts
Comment thread scripts/doc-links/markdown-links.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts Outdated
Comment thread scripts/tests/doc-tree-invariants.test.ts Outdated
acoliver added 3 commits July 25, 2026 05:23
Guard correctness (these guards are this PR's anti-regression mechanism,
so unsound guards defeat the purpose):

- doc-placement no longer strips HTML comments before scanning. Issue #2654's
  core complaint was bookkeeping markers hidden in HTML comments in
  docs/agent-api.md; stripping comments meant re-adding that exact line would
  report PASSED. Hidden markers are the primary case to catch, not to exempt.
  This also removes the unsound sanitizing regex behind CodeQL alert 176
  (js/incomplete-multi-character-sanitization) by deleting it rather than
  patching it. Removing 'html' from the code-token exclusion was also required,
  since marked emits HTML comments as html tokens.
- Removed the 15 bookkeeping comment lines the fixed guard now correctly flags.
- doc-links resolves whichever of index.md/README.md exists before validating a
  directory-link fragment. Previously a README.md-only directory plus an anchor
  threw an uncaught ENOENT that aborted the run and discarded every violation
  already collected.
- Link-target existence checks now follow symlinks, so a symlinked page is no
  longer reported as missing. Directory-walk loop protection is unchanged.
- Fenced code nested in lists and blockquotes is now stripped. Container tokens
  carry verbatim .raw, so recursing only after the raw fallback re-emitted
  fenced content and produced false positives against the guard's own advice to
  "put inside a code fence".
- Removed dead .lycheeignore filtering whose result was discarded, and the
  now-unused module. External links are never fetched, so the filter could not
  affect any outcome.

Documentation accuracy:

- telemetry.md: settings.telemetry.enabled, not settings.enabled.
- tool-parsing.md: gemma is hybrid, not JSON. Tool declarations are JSON but
  responses are text-delimited, which the page's own example already showed.
- tool-parsing.md: label fenced examples so markdownlint MD040 passes.
- Uninstall.md: npx creates no permanent install but does populate the npm
  cache; "installs nothing" was wrong.

Allowlist the single intentional legacy ~/.llxprt reference in Uninstall.md,
matching existing narrow entries for other migration-explanation docs. It exists
so users can find and delete the pre-migration directory.
- extractConstantValues used '([^']+)' so a constant defined as '' would be
  skipped, letting a documented-but-empty name look absent. Use '*'.
- The logPrompts assertion's alternation had no grouping, so JS read it as
  (logPrompts.*does.*not.*control) OR (does.*not.*govern). The second branch
  could match anywhere in the file and pass the test for unrelated prose.
  Group the alternation and make the gaps lazy so both branches stay anchored
  to logPrompts.
These tests assert the ABSENCE of bookkeeping markers, so a silently
skipped directory or unreadable file made the assertion vacuously true --
a permissions problem would have looked like a clean tree. Narrow both
catches to ENOENT (a path removed mid-walk) and rethrow everything else.
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/tests/doc-links-guard.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 59.17% 59.17% 60.54% 82.47%
Core 79.08% 79.08% 76.61% 84.14%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   59.17 |    82.47 |   60.54 |   59.17 |                   
 src               |   83.95 |     80.2 |   94.11 |   83.95 |                   
  cli.tsx          |   85.87 |    77.77 |     100 |   85.87 | ...92-293,340-342 
  ...tBootstrap.ts |   96.77 |    85.71 |     100 |   96.77 | 67                
  cliBootstrap.tsx |   82.31 |     75.6 |     100 |   82.31 | ...46-151,176-181 
  ...oviderInit.ts |   81.63 |    72.13 |     100 |   81.63 | ...52-254,270-273 
  cliSandbox.ts    |    94.3 |    89.47 |     100 |    94.3 | ...56-157,163-165 
  ...nBootstrap.ts |   71.42 |    63.63 |   83.33 |   71.42 | ...54-264,269-270 
  ...nalSession.ts |   52.86 |       60 |   83.33 |   52.86 | ...10,213-217,221 
  ...st-helpers.ts |       0 |        0 |       0 |       0 | 1-50              
  ...ractiveCli.ts |   90.26 |    84.95 |   90.47 |   90.26 | ...28-530,560-561 
  ...liCommands.ts |   97.29 |       70 |     100 |   97.29 | 40-41             
  ...CliSupport.ts |   91.87 |    82.05 |     100 |   91.87 | ...74,392-393,469 
  ...viderGuard.ts |    98.3 |    94.73 |     100 |    98.3 | 106               
  ...activeAuth.ts |     100 |      100 |     100 |     100 |                   
 src/auth          |      75 |    66.66 |     100 |      75 |                   
  ...gs-adapter.ts |      75 |    66.66 |     100 |      75 | 71-73,76,82-91    
 src/commands      |   78.35 |      100 |   44.44 |   78.35 |                   
  extensions.tsx   |   55.88 |      100 |       0 |   55.88 | 25-38,42          
  hooks.ts         |   61.53 |      100 |       0 |   61.53 | 14-17,20          
  mcp.ts           |   94.11 |      100 |      50 |   94.11 | 26                
  skills.tsx       |     100 |      100 |     100 |     100 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
 ...nds/extensions |   74.22 |    93.08 |   67.69 |   74.22 |                   
  config.ts        |   93.93 |    91.83 |     100 |   93.93 | ...72-173,204-209 
  disable.ts       |     100 |      100 |     100 |     100 |                   
  enable.ts        |     100 |      100 |     100 |     100 |                   
  install.ts       |   80.48 |    76.92 |    87.5 |   80.48 | ...63,199,202-209 
  link.ts          |   64.81 |    83.33 |      25 |   64.81 | 31,54-65,67-72    
  list.ts          |      90 |      100 |   33.33 |      90 | 35-37             
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   72.13 |      100 |      70 |   72.13 | 32-80,218-222,225 
  uninstall.ts     |   78.43 |      100 |   66.66 |   78.43 | 54-59,62-66       
  update.ts        |   10.06 |      100 |       0 |   10.06 | ...73-192,194-199 
  utils.ts         |   13.33 |      100 |       0 |   13.33 | 29-60             
  validate.ts      |   90.47 |       90 |      80 |   90.47 | 70-73,80,135-139  
 .../hooks/scripts |       0 |        0 |       0 |       0 |                   
  on-start.js      |       0 |        0 |       0 |       0 | 1-8               
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.js       |       0 |        0 |       0 |       0 | 1-60              
 ...commands/hooks |    7.18 |      100 |       0 |    7.18 |                   
  migrate.ts       |    7.18 |      100 |       0 |    7.18 | ...00-210,212-214 
 src/commands/mcp  |   96.95 |    86.15 |   94.44 |   96.95 |                   
  add.ts           |   99.56 |    93.33 |     100 |   99.56 | 142               
  list.ts          |   90.51 |    82.14 |      80 |   90.51 | ...13-115,148-150 
  remove.ts        |     100 |    71.42 |     100 |     100 | 21-25             
 ...ommands/skills |    60.4 |    96.66 |   31.25 |    60.4 |                   
  disable.ts       |      54 |      100 |   33.33 |      54 | 40-52,54-63       
  enable.ts        |   72.22 |      100 |   33.33 |   72.22 | 33-37,39-43       
  install.ts       |   42.69 |      100 |      25 |   42.69 | ...72-101,103-110 
  list.ts          |   84.84 |    92.85 |   33.33 |   84.84 | 69-70,83-87,89-91 
  uninstall.ts     |   57.89 |      100 |   33.33 |   57.89 | 47-64,66-71       
 src/config        |   86.71 |    84.17 |    91.6 |   86.71 |                   
  ...deResolver.ts |   94.64 |    95.45 |     100 |   94.64 | 47-49             
  auth.ts          |   84.21 |    82.35 |     100 |   84.21 | 17-18,21-22,52-53 
  cliArgParser.ts  |   93.36 |    91.11 |     100 |   93.36 | ...22-223,286-289 
  config.ts        |   97.48 |     91.3 |     100 |   97.48 | 216-217,231-235   
  configBuilder.ts |   92.77 |    95.45 |   81.81 |   92.77 | ...64-265,353-361 
  ...mentLoader.ts |    83.6 |    53.84 |     100 |    83.6 | ...33-135,143-146 
  extension.ts     |   75.45 |    89.93 |   81.81 |   75.45 | ...87-988,991-992 
  ...iveContext.ts |   93.79 |    91.66 |     100 |   93.79 | 78,80,86-91,231   
  ...iateConfig.ts |   97.47 |      100 |     100 |   97.47 | 155-157           
  keyBindings.ts   |     100 |      100 |     100 |     100 |                   
  ...CopyEngine.ts |   70.74 |    55.81 |     100 |   70.74 | ...24,329,338-341 
  ...malization.ts |    77.1 |     61.9 |     100 |    77.1 | ...22-323,332-333 
  ...lFsHelpers.ts |   79.68 |       80 |      90 |   79.68 | ...45,154,163-173 
  ...rverConfig.ts |   83.33 |    94.44 |     100 |   83.33 | 23-39             
  ...nciliation.ts |   84.26 |    78.14 |     100 |   84.26 | ...1072,1110-1114 
  ...ationTypes.ts |       0 |        0 |       0 |       0 | 1                 
  pathMigration.ts |   88.42 |    89.31 |     100 |   88.42 | ...52-759,788-793 
  paths.ts         |     100 |      100 |     100 |     100 |                   
  policy.ts        |   80.76 |      100 |      50 |   80.76 | 45-49             
  ...figRuntime.ts |   90.09 |    89.13 |     100 |   90.09 | ...82-589,600-603 
  ...Ephemerals.ts |   70.27 |    66.66 |      75 |   70.27 | 31-32,44-52       
  ...eBootstrap.ts |   92.25 |    89.14 |     100 |   92.25 | ...01-803,812-813 
  profileRepair.ts |   81.66 |       75 |     100 |   81.66 | 42-49,95-97       
  ...Resolution.ts |   78.66 |    76.74 |     100 |   78.66 | ...87-290,303-311 
  ...pplication.ts |   92.48 |       80 |     100 |   92.48 | ...,95-96,113,183 
  ...elResolver.ts |      96 |    96.87 |     100 |      96 | 58-59,96          
  reconcileLock.ts |   89.07 |    70.37 |     100 |   89.07 | ...49-150,153-154 
  sandboxConfig.ts |   69.81 |    51.48 |   88.46 |   69.81 | ...80-581,593-594 
  ...oxProfiles.ts |    8.53 |      100 |       0 |    8.53 | 47-48,51-129      
  settingPaths.ts  |     100 |      100 |     100 |     100 |                   
  ...validation.ts |   86.99 |    80.62 |     100 |   86.99 | ...02,404,406,408 
  settings.ts      |   83.55 |    86.73 |   69.23 |   83.55 | ...74-475,522-523 
  ...ingsLegacy.ts |    70.9 |    81.81 |     100 |    70.9 | 48-52,56-67       
  ...ingsLoader.ts |   94.11 |    81.39 |     100 |   94.11 | ...78,108-109,137 
  settingsMerge.ts |   99.51 |    95.65 |     100 |   99.51 | 128-129           
  ...Migrations.ts |   95.67 |    91.66 |     100 |   95.67 | 22-24,48-49,55-56 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...Governance.ts |   95.12 |    91.17 |     100 |   95.12 | 46-47,128-131     
  ...tedFolders.ts |   95.58 |       96 |     100 |   95.58 | 93,120-126        
  welcomeConfig.ts |   22.41 |      100 |       0 |   22.41 | ...71,74-79,82-83 
  yargsOptions.ts  |   98.74 |    96.77 |    87.5 |   98.74 | 144,153-156       
 ...fig/extensions |   78.21 |    84.27 |   88.97 |   78.21 |                   
  consent.ts       |   88.03 |    85.71 |     100 |   88.03 | ...77-378,381-382 
  ...ionConsent.ts |   87.38 |    76.66 |     100 |   87.38 | ...,64-67,113-116 
  ...Enablement.ts |   94.05 |       96 |     100 |   94.05 | ...14-220,283-285 
  ...sionLoader.ts |   89.76 |    85.18 |     100 |   89.76 | ...25-526,546-547 
  ...onSettings.ts |     100 |      100 |     100 |     100 |                   
  github.ts        |   61.73 |    81.73 |      68 |   61.73 | ...49-650,660-663 
  hookSchema.ts    |      97 |    91.66 |     100 |      97 | 147-148,210       
  ...reResolver.ts |   80.53 |    80.59 |    90.9 |   80.53 | ...44,347-348,356 
  ...ntegration.ts |   55.31 |    84.78 |      50 |   55.31 | ...61,402,426-427 
  ...ingsPrompt.ts |      73 |    94.73 |      80 |      73 | 92-121            
  ...ngsStorage.ts |   85.57 |    77.19 |     100 |   85.57 | ...05-306,324-327 
  update.ts        |   69.52 |    52.94 |   85.71 |   69.52 | ...73-201,218-226 
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   95.55 |       90 |     100 |   95.55 | 33-34             
 ...ettings-schema |   99.79 |       60 |     100 |   99.79 |                   
  schema-core.ts   |     100 |      100 |     100 |     100 |                   
  ...extensions.ts |     100 |      100 |     100 |     100 |                   
  ...a-security.ts |   99.44 |       50 |     100 |   99.44 | 16-17             
  schema-tail.ts   |   99.52 |       50 |     100 |   99.52 | 13-14             
  schema-ui.ts     |     100 |      100 |     100 |     100 |                   
  schema.ts        |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/constants     |     100 |      100 |     100 |     100 |                   
  historyLimits.ts |     100 |      100 |     100 |     100 |                   
 src/extensions    |   65.02 |    61.81 |      75 |   65.02 |                   
  ...utoUpdater.ts |   65.02 |    61.81 |      75 |   65.02 | ...69-470,479,481 
 ...egration-tests |   71.66 |    83.33 |   85.71 |   71.66 |                   
  ...st-helpers.ts |       0 |        0 |       0 |       0 | 1-79              
  test-utils.ts    |   91.97 |     86.2 |    92.3 |   91.97 | ...45,263-264,274 
 src/launcher      |   94.63 |    86.12 |   90.19 |   94.63 |                   
  ...ate-policy.ts |     100 |      100 |     100 |     100 |                   
  ...y-resolver.ts |   91.39 |    92.85 |   85.71 |   91.39 | 121-128           
  bun-launcher.ts  |   96.31 |    85.96 |   88.88 |   96.31 | 35-43             
  ...h-resolver.ts |   93.79 |    81.81 |    90.9 |   93.79 | ...14-316,339-340 
 ...viders/logging |   89.31 |     92.5 |   69.23 |   89.31 |                   
  ...rvice-impl.ts |   44.44 |      100 |       0 |   44.44 | 21-22,25-30,36-37 
  git-stats.ts     |   96.46 |     92.5 |     100 |   96.46 | 154-155,195-196   
 src/runtime       |   73.15 |    66.66 |   73.68 |   73.15 |                   
  ...chedClient.ts |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   71.95 |    64.28 |   72.22 |   71.95 | ...64-386,402-404 
 src/services      |   85.91 |       85 |   94.87 |   85.91 |                   
  ...mandLoader.ts |   80.74 |    73.33 |      80 |   80.74 | ...07-121,165-183 
  ...andService.ts |     100 |      100 |     100 |     100 |                   
  ...mandLoader.ts |   91.91 |    86.27 |     100 |   91.91 | ...11-216,303-310 
  ...omptLoader.ts |    67.7 |    68.96 |     100 |    67.7 | ...73,179-185,200 
  ...tArgParser.ts |     100 |    94.28 |     100 |     100 | 42,72             
  performResume.ts |   89.11 |    89.18 |     100 |   89.11 | ...59-262,268-269 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |      98 |     93.1 |     100 |      98 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.88 |    92.72 |     100 |   97.88 | 88-89,273-274     
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...o-continuation |   86.84 |    84.09 |   94.73 |   86.84 |                   
  ...ionService.ts |   86.84 |    84.09 |   94.73 |   86.84 | ...16,583,609-610 
 src/session       |   82.09 |    83.01 |   86.66 |   82.09 |                   
  debugLog.ts      |      60 |       50 |     100 |      60 | 12-16             
  ...rReporting.ts |   79.68 |    86.36 |     100 |   79.68 | 39-41,44-52,59-60 
  ...ractiveUI.tsx |   84.57 |      100 |   71.42 |   84.57 | ...62-264,274-283 
  ...rReporting.ts |     100 |      100 |     100 |     100 |                   
  ...iveSession.ts |   78.91 |       55 |      75 |   78.91 | ...51-254,271-288 
  ...tListeners.ts |     100 |      100 |     100 |     100 |                   
  ...alHandlers.ts |   81.37 |    88.57 |      90 |   81.37 | ...,94-97,112-113 
  ...nalCleanup.ts |   85.71 |       50 |     100 |   85.71 | 21                
 src/test-utils    |   76.81 |    82.25 |   37.68 |   76.81 |                   
  assertions.ts    |   76.47 |       50 |     100 |   76.47 | ...40,49-50,59-60 
  async.ts         |       0 |        0 |       0 |       0 | 1-34              
  ...eExtension.ts |     100 |      100 |     100 |     100 |                   
  ...omMatchers.ts |   22.22 |      100 |       0 |   22.22 | 19-49             
  inkFrame.ts      |      65 |    66.66 |   66.66 |      65 | 31-32,40-44       
  mockAgent.ts     |     100 |      100 |      50 |     100 |                   
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  regex.ts         |     100 |      100 |     100 |     100 |                   
  render.tsx       |   93.96 |    96.66 |   24.48 |   93.96 | ...54-159,266-267 
  ...e-testing.tsx |       0 |        0 |       0 |       0 | 1-56              
  ...iderConfig.ts |       0 |        0 |       0 |       0 | 1-19              
 src/ui            |      49 |       93 |   28.84 |      49 |                   
  App.tsx          |   35.84 |      100 |       0 |   35.84 | 70-101,107-114    
  AppContainer.tsx |     100 |      100 |     100 |     100 |                   
  ...erRuntime.tsx |   17.15 |    33.33 |   16.66 |   17.15 | 73-414            
  ...tionNudge.tsx |       8 |      100 |       0 |       8 | 29-104            
  cliUiRuntime.ts  |   94.75 |    97.14 |   26.61 |   94.75 | ...50,706,723,726 
  colors.ts        |   37.14 |      100 |   20.33 |   37.14 | ...03-304,306-307 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  debug.ts         |     100 |      100 |     100 |     100 |                   
  ...derOptions.ts |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   88.63 |       84 |     100 |   88.63 | 18,20-21,28-29    
  ...ntsEnabled.ts |     100 |      100 |     100 |     100 |                   
  ...submission.ts |     100 |      100 |     100 |     100 |                   
  ...lobalState.ts |     100 |      100 |     100 |     100 |                   
  ...tic-colors.ts |   78.94 |      100 |      60 |   78.94 | 15-16,24-25       
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/commands   |   72.32 |    78.57 |   78.94 |   72.32 |                   
  aboutCommand.ts  |   82.84 |       50 |   91.66 |   82.84 | ...92-193,195-196 
  authCommand.ts   |    58.9 |    79.54 |   81.25 |    58.9 | ...91-641,653-656 
  ...urlCommand.ts |      68 |       75 |     100 |      68 | 47-62             
  bugCommand.ts    |   71.42 |    30.76 |     100 |   71.42 | ...00-111,146-154 
  chatCommand.ts   |   70.06 |    80.28 |   66.66 |   70.06 | ...53-554,602-613 
  ...Validation.ts |     100 |     91.6 |     100 |     100 | ...08,218,234,361 
  clearCommand.ts  |   86.66 |    85.71 |     100 |   86.66 | 81-88             
  ...essCommand.ts |   93.47 |    86.04 |     100 |   93.47 | ...,67-71,111-112 
  ...nueCommand.ts |     100 |      100 |     100 |     100 |                   
  copyCommand.ts   |     100 |      100 |     100 |     100 |                   
  debugCommands.ts |   13.81 |      100 |       0 |   13.81 | ...52,459,466,473 
  ...st-helpers.ts |   89.81 |     91.3 |   54.54 |   89.81 | ...4,96-97,99-100 
  ...icsCommand.ts |   78.08 |    51.64 |   94.11 |   78.08 | ...11-514,529-534 
  ...ticsTokens.ts |   92.05 |    90.24 |     100 |   92.05 | ...,63-68,103-104 
  ...ryCommand.tsx |    89.5 |    84.84 |     100 |    89.5 | ...26-134,201-209 
  docsCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...extCommand.ts |   96.22 |    89.65 |     100 |   96.22 | 220-225           
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...onsCommand.ts |   41.27 |    88.09 |    62.5 |   41.27 | ...23-380,390-538 
  ...ionSection.ts |   83.33 |    93.33 |     100 |   83.33 | 28-34             
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   79.49 |    80.82 |   92.85 |   79.49 | ...02,511-512,626 
  ideCommand.ts    |   69.87 |    74.28 |   69.23 |   69.87 | ...36-237,240-255 
  initCommand.ts   |   81.01 |    71.42 |   66.66 |   81.01 | 38-42,44-91       
  keyCommand.ts    |   91.33 |    84.44 |     100 |   91.33 | ...86,465-470,592 
  ...ileCommand.ts |    10.9 |      100 |       0 |    10.9 | 22-46,53-141      
  ...ingCommand.ts |   10.27 |      100 |       0 |   10.27 | ...19-572,589-601 
  logoutCommand.ts |   56.52 |    66.66 |      75 |   56.52 | ...-84,97-103,108 
  lspCommand.ts    |    93.8 |    85.36 |     100 |    93.8 | 43,95-100         
  mcpAuth.ts       |   90.43 |       80 |   66.66 |   90.43 | 32-41,86-87       
  mcpCommand.ts    |   96.25 |    87.87 |     100 |   96.25 | 87-92             
  mcpDisplay.ts    |   84.12 |    81.73 |   93.75 |   84.12 | ...47-448,492-493 
  memoryCommand.ts |   87.45 |    75.47 |     100 |   87.45 | ...47,235-249,298 
  modelCommand.ts  |   98.92 |    93.02 |     100 |   98.92 | 120               
  mouseCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...onsCommand.ts |    93.9 |    88.88 |     100 |    93.9 | 58-62             
  ...iesCommand.ts |   97.79 |    87.75 |     100 |   97.79 | 24,34-35          
  ...acyCommand.ts |   61.53 |      100 |       0 |   61.53 | 22-26             
  ...ileCommand.ts |   59.14 |    55.55 |   63.63 |   59.14 | ...90-531,552-568 
  profileLoad.ts   |   52.08 |       60 |    87.5 |   52.08 | ...45,172,183-187 
  ...adBalancer.ts |   81.36 |    84.61 |     100 |   81.36 | ...20-321,347-352 
  ...ileSchemas.ts |   67.11 |    81.81 |     100 |   67.11 | ...18-230,262-267 
  ...derCommand.ts |    57.8 |       42 |      80 |    57.8 | ...80-381,390-395 
  quitCommand.ts   |   29.26 |      100 |       0 |   29.26 | 18-50             
  ...oreCommand.ts |   90.27 |    83.33 |     100 |   90.27 | ...70-175,208-213 
  setCommand.ts    |   86.32 |    84.28 |     100 |   86.32 | ...91-200,217-222 
  ...mandSchema.ts |   71.57 |    81.81 |   84.61 |   71.57 | ...05,232-240,295 
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  setupCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   90.47 |    82.85 |     100 |   90.47 | ...13-216,223-227 
  skillsCommand.ts |   82.78 |       75 |     100 |   82.78 | ...91-292,305-306 
  statsCommand.ts  |   57.25 |    86.66 |   58.33 |   57.25 | ...04-216,234-235 
  statsQuota.ts    |   79.47 |       75 |   83.33 |   79.47 | ...15-316,349-353 
  ...entCommand.ts |   76.72 |    69.73 |   81.81 |   76.72 | ...09-615,626-632 
  tasksCommand.ts  |   75.83 |       75 |     100 |   75.83 | ...51-156,202-210 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  todoCommand.ts   |    78.5 |    71.62 |     100 |    78.5 | ...48-460,468-472 
  ...Formatters.ts |   48.93 |    71.42 |   33.33 |   48.93 | ...5,70-86,92-113 
  ...Operations.ts |   77.06 |       75 |   85.71 |   77.06 | ...10-424,430-437 
  ...matCommand.ts |   26.66 |      100 |       0 |   26.66 | 33-92             
  ...keyCommand.ts |   98.88 |     92.3 |     100 |   98.88 | 34                
  ...ileCommand.ts |    99.1 |    94.11 |     100 |    99.1 | 36                
  toolsCommand.ts  |   86.71 |    73.23 |     100 |   86.71 | ...64,295,326-327 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ileCommand.ts |   27.77 |        0 |       0 |   27.77 | 11-23             
  vimCommand.ts    |   44.44 |      100 |       0 |   44.44 | 15-25             
 ...ommands/schema |   96.06 |    92.54 |   94.11 |   96.06 |                   
  index.ts         |   95.84 |    91.58 |     100 |   95.84 | ...07-211,222-223 
  schemaHelpers.ts |   97.02 |    96.22 |     100 |   97.02 | 67-68,115-117     
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/ui/components |    11.9 |    38.56 |    7.51 |    11.9 |                   
  AboutBox.tsx     |   13.25 |      100 |       0 |   13.25 | ...80-102,106-134 
  AnsiOutput.tsx   |    8.33 |      100 |       0 |    8.33 | 25-90             
  AppHeader.tsx    |   21.87 |      100 |       0 |   21.87 | 27-57             
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  AuthDialog.tsx   |    5.22 |      100 |       0 |    5.22 | ...27-232,235-314 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-63              
  ...Indicator.tsx |   15.15 |      100 |       0 |   15.15 | 17-47             
  ...firmation.tsx |   15.97 |      100 |       0 |   15.97 | 60-135,144-209    
  ...tsDisplay.tsx |    12.5 |      100 |       0 |    12.5 | ...6,60-65,69-142 
  CliSpinner.tsx   |       0 |        0 |       0 |       0 | 1-22              
  Composer.tsx     |     8.1 |      100 |       0 |     8.1 | 17-32,45-100      
  ...entPrompt.tsx |   18.75 |      100 |       0 |   18.75 | 21-51             
  ...ryDisplay.tsx |   21.05 |      100 |       0 |   21.05 | 17-35             
  ...ryDisplay.tsx |    4.65 |      100 |       0 |    4.65 | 30-108,111-175    
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-37              
  ...gProfiler.tsx |   16.86 |      100 |       0 |   16.86 | ...73-118,122-222 
  ...esDisplay.tsx |   10.52 |      100 |       0 |   10.52 | 24-82             
  ...ogManager.tsx |    5.82 |      100 |       0 |    5.82 | 72-802,806-830    
  ...ngsDialog.tsx |   13.02 |      100 |       0 |   13.02 | ...49-173,177-248 
  ...rBoundary.tsx |   10.07 |        0 |       0 |   10.07 | ...26-171,189-204 
  ...ustDialog.tsx |   16.34 |      100 |       0 |   16.34 | ...2,70-81,84-143 
  Footer.tsx       |    12.6 |        0 |       0 |    12.6 | ...49-653,657-726 
  Header.tsx       |    17.5 |      100 |       0 |    17.5 | 22-62             
  Help.tsx         |    6.84 |      100 |       0 |    6.84 | ...87-190,194-206 
  ...emDisplay.tsx |   11.66 |      100 |       0 |   11.66 | 54-246,249-287    
  ...usDisplay.tsx |       0 |        0 |       0 |       0 | 1-47              
  InputPrompt.tsx  |     100 |       75 |     100 |     100 | 45                
  ...tsDisplay.tsx |    4.36 |      100 |       0 |    4.36 | ...32-226,229-292 
  ...utManager.tsx |       0 |        0 |       0 |       0 | 1-99              
  ...ileDialog.tsx |    8.33 |      100 |       0 |    8.33 | ...8,72-81,85-152 
  ...Indicator.tsx |   14.92 |      100 |       0 |   14.92 | 21-25,35-97       
  ...ingDialog.tsx |    6.68 |      100 |       0 |    6.68 | ...66-383,387-436 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |    3.82 |      100 |       0 |    3.82 | ...79-752,756-842 
  ...tsDisplay.tsx |    3.82 |      100 |       0 |    3.82 | 32-206,209-260    
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | ...08-139,142-177 
  ...odeDialog.tsx |     7.4 |      100 |       0 |     7.4 | 32-141            
  ...ustDialog.tsx |    5.53 |      100 |       0 |    5.53 | ...36-273,278-313 
  PrepareLabel.tsx |   13.33 |      100 |       0 |   13.33 | 20-48             
  ...ailDialog.tsx |   11.36 |      100 |       0 |   11.36 | ...93-499,503-576 
  ...ineEditor.tsx |    4.34 |      100 |       0 |    4.34 | ...66-552,555-630 
  ...istDialog.tsx |    3.84 |      100 |       0 |    3.84 | ...95-758,761-789 
  ...derDialog.tsx |    2.58 |      100 |       0 |    2.58 | 58-408,411-426    
  ...Indicator.tsx |       0 |        0 |       0 |       0 | 1-21              
  ...ngSpinner.tsx |   33.33 |      100 |       0 |   33.33 | 29-48             
  ...eKeyInput.tsx |       0 |        0 |       0 |       0 | 1-149             
  ...serDialog.tsx |    9.56 |      100 |       0 |    9.56 | ...52-603,611-670 
  ...ryDisplay.tsx |      10 |      100 |       0 |      10 | 21-28,31-75       
  ...ngsDialog.tsx |    9.75 |      100 |       0 |    9.75 | 29-105            
  ...putPrompt.tsx |   14.28 |      100 |       0 |   14.28 | 19-58             
  ...Indicator.tsx |   44.44 |      100 |       0 |   44.44 | 12-17             
  ...MoreLines.tsx |   30.43 |      100 |       0 |   30.43 | 18-38             
  ...estHelpers.ts |       0 |        0 |       0 |       0 | 1-201             
  StatsDisplay.tsx |    7.75 |      100 |       0 |    7.75 | ...21-635,638-709 
  ...usDisplay.tsx |       0 |        0 |       0 |       0 | 1-59              
  StickyHeader.tsx |    7.14 |      100 |       0 |    7.14 | 20-78             
  ...nsDisplay.tsx |    5.83 |      100 |       0 |    5.83 | 39-91,105-181     
  Table.tsx        |    6.77 |      100 |       0 |    6.77 | 31-36,39-99       
  ThemeDialog.tsx  |    3.96 |      100 |       0 |    3.96 | 51-441,444-500    
  ...dGradient.tsx |      25 |      100 |       0 |      25 | 27-46             
  Tips.tsx         |      16 |      100 |       0 |      16 | 17-45             
  TodoPanel.tsx    |     5.9 |      100 |       0 |     5.9 | ...87-244,247-296 
  ...tsDisplay.tsx |   10.05 |      100 |       0 |   10.05 | ...88-227,230-259 
  ToolsDialog.tsx  |   10.63 |      100 |       0 |   10.63 | ...5,41-47,50-123 
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...ionDialog.tsx |    6.08 |      100 |       0 |    6.08 | 18-104,110-161    
  ...romptHooks.ts |   87.47 |    65.51 |     100 |   87.47 | ...44-348,364-371 
  ...eyHandlers.ts |   24.33 |    33.33 |      50 |   24.33 | ...75-577,581-606 
  ...mptRender.tsx |   53.05 |     31.7 |   72.72 |   53.05 | ...02,314-322,343 
  ...PromptText.ts |   31.08 |    55.55 |   28.57 |   31.08 | ...25-175,179-199 
  ...romptTypes.ts |       0 |        0 |       0 |       0 | 1                 
  ...logActions.ts |    2.59 |      100 |       0 |    2.59 | ...92-562,565-602 
  ...logDisplay.ts |    4.28 |      100 |       0 |    4.28 | 25-120,125-184    
  ...logHelpers.ts |    7.64 |      100 |       0 |    7.64 | ...76-194,201-214 
  ...ialogHooks.ts |     2.8 |      100 |       0 |     2.8 | ...99-600,633-808 
  ...ogKeypress.ts |    1.69 |      100 |       0 |    1.69 | 35-387,482-679    
  ...ialogTypes.ts |       0 |        0 |       0 |       0 | 1                 
  ...alogViews.tsx |    4.13 |      100 |       0 |    4.13 | 31-133,167-378    
  todo-utils.ts    |       0 |        0 |       0 |       0 | 1-7               
 ...leCreateWizard |   19.55 |       75 |    1.13 |   19.55 |                   
  ...aramsStep.tsx |   13.42 |      100 |       0 |   13.42 | ...33-246,258-342 
  ...ationStep.tsx |    7.23 |      100 |       0 |    7.23 | ...35-571,583-651 
  ...onfigStep.tsx |   13.33 |      100 |       0 |   13.33 | 20-26,37-117      
  ...electStep.tsx |    9.73 |      100 |       0 |    9.73 | ...12-279,295-340 
  ...ationMenu.tsx |       0 |        0 |       0 |       0 | 1-102             
  ...eSaveStep.tsx |    7.73 |      100 |       0 |    7.73 | ...75-304,316-394 
  ...ssSummary.tsx |   12.12 |      100 |       0 |   12.12 | 23-88             
  ...electStep.tsx |   18.18 |      100 |       0 |   18.18 | 29-96             
  TextInput.tsx    |    6.56 |      100 |       0 |    6.56 | ...99-109,117-200 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.tsx        |   14.17 |      100 |       0 |   14.17 | ...97-226,235-319 
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |    15.2 |    83.33 |    7.69 |    15.2 | ...65-367,372-389 
  validation.ts    |   11.23 |      100 |       0 |   11.23 | ...97-104,107-111 
 ...gentManagement |    4.22 |      100 |       0 |    4.22 |                   
  ...entWizard.tsx |    2.91 |      100 |       0 |    2.91 | 30-232,237-312    
  ...ionWizard.tsx |    1.44 |      100 |       0 |    1.44 | 30-592,595-676    
  ...eteDialog.tsx |    5.88 |      100 |       0 |    5.88 | 14-94,104-146     
  ...tEditForm.tsx |    1.77 |      100 |       0 |    1.77 | 30-619,622-640    
  ...tListMenu.tsx |    2.94 |      100 |       0 |    2.94 | 15-264,267-348    
  ...tMainMenu.tsx |   16.66 |      100 |       0 |   16.66 | 22-62             
  ...gerDialog.tsx |    2.39 |      100 |       0 |    2.39 | 29-600,603-679    
  ...tShowView.tsx |    4.76 |      100 |       0 |    4.76 | 25-183,186-243    
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...comeOnboarding |   13.67 |        0 |       0 |   13.67 |                   
  ...ethodStep.tsx |   16.86 |      100 |       0 |   16.86 | 38-123            
  ...ationStep.tsx |    7.35 |      100 |       0 |    7.35 | ...1,59-95,98-177 
  ...etionStep.tsx |    9.84 |      100 |       0 |    9.84 | ...,89-99,103-179 
  ...electStep.tsx |   12.12 |      100 |       0 |   12.12 | ...3,67-75,79-143 
  ...electStep.tsx |   34.48 |      100 |       0 |   34.48 | 51-120            
  SkipExitStep.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...omeDialog.tsx |   11.76 |      100 |       0 |   11.76 | 51-118,121-166    
  WelcomeStep.tsx  |    10.2 |      100 |       0 |    10.2 | 23-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
 ...nents/messages |    18.9 |       90 |   15.06 |    18.9 |                   
  AiMessage.tsx    |   14.51 |      100 |       0 |   14.51 | 28-95             
  ...geContent.tsx |   20.83 |      100 |       0 |   20.83 | 26-46             
  ...onMessage.tsx |   12.28 |      100 |       0 |   12.28 | 24-86             
  DiffRenderer.tsx |    3.59 |      100 |       0 |    3.59 | ...81-412,415-433 
  ErrorMessage.tsx |   22.22 |      100 |       0 |   22.22 | 16-31             
  InfoMessage.tsx  |   17.24 |      100 |       0 |   17.24 | 19-44             
  ...rlMessage.tsx |   11.36 |      100 |       0 |   11.36 | 18-65             
  ...geMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...ckDisplay.tsx |      20 |      100 |       0 |      20 | 43-64             
  ...onMessage.tsx |    3.04 |      100 |       0 |    3.04 | 36-552,557-636    
  ...upMessage.tsx |    7.55 |      100 |       0 |    7.55 | ...76-269,273-348 
  ToolMessage.tsx  |    4.37 |      100 |       0 |    4.37 | 38-342,358-428    
  ...ltDisplay.tsx |   92.03 |    88.23 |     100 |   92.03 | 55-69,238-240     
  ToolShared.tsx   |   64.61 |       90 |   33.33 |   64.61 | 78-99,102-105     
  UserMessage.tsx  |     100 |      100 |     100 |     100 |                   
  ...llMessage.tsx |   36.36 |      100 |       0 |   36.36 | 17-25             
  ...ngMessage.tsx |    23.8 |      100 |       0 |    23.8 | 17-34             
 ...ponents/shared |    42.3 |    62.09 |   40.77 |    42.3 |                   
  ...ctionList.tsx |    4.31 |      100 |       0 |    4.31 | 36-123,128-206    
  MaxSizedBox.tsx  |   49.79 |    56.75 |   70.58 |   49.79 | ...63-666,670-673 
  ...tonSelect.tsx |   12.76 |      100 |       0 |   12.76 | 66-113            
  ...lableList.tsx |    5.15 |      100 |       0 |    5.15 | 40-267            
  ...ist.hooks.tsx |    3.81 |      100 |       0 |    3.81 | ...70-795,798-835 
  ...lizedList.tsx |   11.49 |      100 |       0 |   11.49 | 28-112            
  ...List.types.ts |     100 |      100 |     100 |     100 |                   
  ...operations.ts |   75.54 |    48.14 |     100 |   75.54 | ...32-233,256-265 
  ...er-reducer.ts |   34.01 |    49.01 |   36.66 |   34.01 | ...30,632,644,687 
  buffer-types.ts  |     100 |      100 |     100 |     100 |                   
  text-buffer.ts   |   75.97 |    78.26 |    29.5 |   75.97 | ...33-635,654-660 
  ...formations.ts |   42.85 |    71.42 |      80 |   42.85 | ...32-139,163-209 
  ...n-handlers.ts |   33.99 |    61.53 |   23.25 |   33.99 | ...47-755,758-762 
  ...st-helpers.ts |       0 |        0 |       0 |       0 | 1-33              
  ...er-actions.ts |   93.84 |     87.5 |     100 |   93.84 | 91-93,100         
  visual-layout.ts |    90.2 |    72.34 |     100 |    90.2 | ...48-350,372-373 
  ...navigation.ts |   53.38 |    61.53 |   73.68 |   53.38 | ...45-366,389-411 
 ...mponents/views |    9.79 |      100 |       0 |    9.79 |                   
  ChatList.tsx     |   20.58 |      100 |       0 |   20.58 | 24-55             
  ...sionsList.tsx |     7.5 |      100 |       0 |     7.5 | 19-103            
  HooksList.tsx    |   10.67 |      100 |       0 |   10.67 | ...18-129,132-147 
  SkillsList.tsx   |    5.79 |      100 |       0 |    5.79 | 18-103            
 src/ui/constants  |   55.94 |     90.9 |      50 |   55.94 |                   
  ...ollections.ts |     100 |      100 |     100 |     100 |                   
  tips.ts          |       0 |        0 |       0 |       0 | 1-163             
 src/ui/containers |       0 |        0 |       0 |       0 |                   
  ...ontroller.tsx |       0 |        0 |       0 |       0 | 1-357             
  UIStateShell.tsx |       0 |        0 |       0 |       0 | 1-15              
 ...ainer/builders |   98.38 |      100 |   83.33 |   98.38 |                   
  ...dUIActions.ts |     100 |      100 |     100 |     100 |                   
  buildUIState.ts  |     100 |      100 |     100 |     100 |                   
  ...onsBuilder.ts |   66.66 |      100 |       0 |   66.66 | 20-21             
  ...ateBuilder.ts |   66.66 |      100 |       0 |   66.66 | 20-21             
 ...ontainer/hooks |    56.6 |    87.54 |   59.37 |    56.6 |                   
  ...pBootstrap.ts |   93.24 |    58.33 |     100 |   93.24 | ...41-248,252-254 
  useAppDialogs.ts |   41.31 |      100 |   42.85 |   41.31 | ...63,182-399,419 
  ...ntHandlers.ts |     100 |      100 |     100 |     100 |                   
  useAppInput.ts   |    5.43 |      100 |       0 |    5.43 | 102-507,510-514   
  useAppLayout.ts  |    7.69 |      100 |       0 |    7.69 | 93-308,311-314    
  ...reenAction.ts |   13.63 |      100 |       0 |   13.63 | 23-41             
  ...nSelection.ts |      20 |      100 |       0 |      20 | 27-48             
  ...hestration.ts |     100 |      100 |     100 |     100 |                   
  ...references.ts |      10 |      100 |       0 |      10 | 51-104            
  ...itHandling.ts |   89.79 |      100 |     100 |   89.79 | 131-139,143       
  ...textBridge.ts |   33.33 |      100 |       0 |   33.33 | 23-30             
  ...tartHotkey.ts |   26.66 |      100 |       0 |   26.66 | 23-33             
  ...omptSubmit.ts |     100 |      100 |     100 |     100 |                   
  ...utHandling.ts |   98.18 |       90 |     100 |   98.18 | 49,148            
  ...yBootstrap.ts |      30 |      100 |       0 |      30 | 28-34             
  ...eybindings.ts |   86.36 |    78.18 |     100 |   86.36 | ...02-204,248-249 
  ...easurement.ts |   15.38 |      100 |       0 |   15.38 | 45-95             
  ...reshAction.ts |   79.45 |     37.5 |     100 |   79.45 | 61,91-94,96-105   
  ...untimeSync.ts |   96.17 |    96.96 |     100 |   96.17 | 204-209           
  ...elTracking.ts |   34.69 |      100 |     100 |   34.69 | 51-95             
  ...laceholder.ts |      15 |      100 |       0 |      15 | 13-18,21-34       
  ...rorTimeout.ts |   17.64 |      100 |       0 |   17.64 | 24-39             
  ...astructure.ts |   73.91 |      100 |      20 |   73.91 | 53,57,61,75-83    
  ...ebugLogger.ts |   17.24 |      100 |       0 |   17.24 | 23-51             
  ...ialization.ts |   98.88 |    94.73 |     100 |   98.88 | 88                
  ...sAutoReset.ts |     100 |       90 |     100 |     100 | 42                
  ...andActions.ts |     100 |      100 |     100 |     100 |                   
  ...eshManager.ts |     100 |      100 |     100 |     100 |                   
  ...uationFlow.ts |    7.14 |      100 |       0 |    7.14 | 57-160            
  ...csTracking.ts |   95.78 |    80.64 |     100 |   95.78 | ...22-123,174-175 
  ...uthBridges.ts |   17.94 |      100 |   33.33 |   17.94 | ...13-138,142-146 
 src/ui/contexts   |   53.55 |    80.89 |   49.01 |   53.55 |                   
  ...chContext.tsx |   88.23 |    66.66 |     100 |   88.23 | 27-28             
  FocusContext.tsx |       0 |        0 |       0 |       0 | 1-11              
  ...ssContext.tsx |    83.3 |    87.89 |    87.5 |    83.3 | ...21-522,572-573 
  MouseContext.tsx |   78.82 |       75 |      80 |   78.82 | ...00-101,111-117 
  ...erContext.tsx |   94.44 |    63.63 |     100 |   94.44 | 125-128           
  ...owContext.tsx |   21.42 |      100 |   33.33 |   21.42 | 34,40-88          
  ...meContext.tsx |   45.27 |    57.14 |      50 |   45.27 | ...47-248,256-257 
  ...lProvider.tsx |    91.8 |    74.62 |     100 |    91.8 | ...94-495,507-508 
  ...onContext.tsx |    3.64 |      100 |       0 |    3.64 | ...04-459,464-471 
  ...teContext.tsx |       0 |        0 |       0 |       0 | 1-57              
  ...gsContext.tsx |      50 |      100 |       0 |      50 | 15-20             
  ...ngContext.tsx |   42.85 |      100 |       0 |   42.85 | 15-22             
  TodoContext.tsx  |   54.54 |      100 |       0 |   54.54 | 28-31,33-36,39-40 
  TodoProvider.tsx |    3.57 |      100 |       0 |    3.57 | 28-185,188-218    
  ...llContext.tsx |     100 |      100 |       0 |     100 |                   
  ...lProvider.tsx |    6.75 |      100 |       0 |    6.75 | 24-118            
  ...nsContext.tsx |      25 |      100 |       0 |      25 | 204-215,218-223   
  ...teContext.tsx |      50 |       50 |      50 |      50 | 251-260,265-266   
  ...deContext.tsx |   11.11 |      100 |       0 |   11.11 | 30-82,85-90       
 src/ui/editors    |   98.18 |     87.5 |     100 |   98.18 |                   
  ...ngsManager.ts |   98.18 |     87.5 |     100 |   98.18 | 59                
 src/ui/hooks      |   67.99 |    85.66 |   68.31 |   67.99 |                   
  ...st-helpers.ts |   91.47 |    81.25 |   68.57 |   91.47 | ...62-163,182-186 
  ...dProcessor.ts |   82.75 |    86.88 |   77.77 |   82.75 | ...02-204,257-269 
  ...sorHelpers.ts |   83.03 |    80.35 |   96.29 |   83.03 | ...50-658,704-705 
  ...rceHelpers.ts |      56 |       50 |   71.42 |      56 | ...68-275,280-288 
  ...etionUtils.ts |   53.36 |    88.23 |   64.28 |   53.36 | 57-207,335        
  index.ts         |       0 |        0 |       0 |       0 | 1-9               
  keyToAnsi.ts     |    42.5 |      100 |       0 |    42.5 | 27-37,47-61       
  ...etionUtils.ts |     100 |    66.66 |     100 |     100 | 49                
  ...dProcessor.ts |   95.61 |       80 |     100 |   95.61 | ...87-288,420-424 
  ...ndHandlers.ts |   17.68 |    27.27 |   22.22 |   17.68 | ...47-648,653-662 
  ...dPathUtils.ts |   96.87 |    92.85 |     100 |   96.87 | ...25-227,271-272 
  ...dProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...sorSupport.ts |   68.85 |    70.83 |   66.66 |   68.85 | ...81-284,302-309 
  ...tionEffect.ts |   90.44 |    84.28 |   92.85 |   90.44 | ...33-434,447-448 
  ...etionTypes.ts |       0 |        0 |       0 |       0 | 1                 
  toolMapping.ts   |   90.81 |    88.88 |   93.33 |   90.81 | ...95-207,226-228 
  ...st-helpers.ts |   75.93 |    75.86 |      24 |   75.93 | ...76-277,279-280 
  ...nateBuffer.ts |      50 |      100 |       0 |      50 | 16-18             
  ...dScrollbar.ts |   97.82 |      100 |     100 |   97.82 | 153-155           
  ...st-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |    92.5 |    89.51 |     100 |    92.5 | ...96-597,600-601 
  ...uthCommand.ts |   96.42 |    66.66 |     100 |   96.42 | 21                
  ...tIndicator.ts |     100 |     92.3 |     100 |     100 | 57                
  useBanner.ts     |     100 |    83.33 |     100 |     100 | 22,48             
  ...chedScroll.ts |   16.66 |      100 |       0 |   16.66 | 14-32             
  ...ketedPaste.ts |      20 |      100 |       0 |      20 | 20-38             
  ...ompletion.tsx |   97.24 |    82.75 |    90.9 |   97.24 | ...05-207,210-211 
  useCompletion.ts |    92.4 |     87.5 |     100 |    92.4 | 68-69,93-94,98-99 
  ...leMessages.ts |   96.15 |       90 |     100 |   96.15 | 56-57,63          
  ...ntHandlers.ts |   31.25 |      100 |     100 |   31.25 | 43-70,74-82       
  ...fileDialog.ts |   16.12 |      100 |       0 |   16.12 | 17-47             
  ...orSettings.ts |   11.86 |      100 |       0 |   11.86 | 31-87             
  ...AutoUpdate.ts |    8.33 |      100 |       0 |    8.33 | 18-64             
  ...ionUpdates.ts |   75.17 |    80.64 |   77.77 |   75.17 | ...60-261,289-303 
  ...erDetector.ts |     100 |      100 |     100 |     100 |                   
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |   84.67 |    86.95 |     100 |   84.67 | ...12-114,130-131 
  ...BranchName.ts |     100 |       95 |     100 |     100 | 54                
  ...oryManager.ts |   96.61 |    93.18 |     100 |   96.61 | ...70-171,214-215 
  ...splayState.ts |     100 |      100 |     100 |     100 |                   
  ...stListener.ts |   12.12 |      100 |       0 |   12.12 | 18-51             
  ...ivityTimer.ts |   76.19 |    66.66 |     100 |   76.19 | 30-35             
  ...putHistory.ts |    92.5 |    85.71 |     100 |    92.5 | 62-63,71,93-95    
  ...storyStore.ts |     100 |    94.11 |     100 |     100 | 67                
  useKeypress.ts   |   88.88 |       75 |     100 |   88.88 | 31-32             
  ...rdProtocol.ts |       0 |        0 |       0 |       0 | 1-26              
  ...fileDialog.ts |     5.4 |      100 |       0 |     5.4 | 23-69,72-143      
  ...gIndicator.ts |     100 |      100 |     100 |     100 |                   
  useLogger.ts     |   94.11 |      100 |     100 |   94.11 | 28                
  ...oryMonitor.ts |     100 |      100 |     100 |     100 |                   
  useMouse.ts      |   77.77 |    66.66 |     100 |   77.77 | 31-34             
  useMouseClick.ts |     100 |      100 |     100 |     100 |                   
  ...eSelection.ts |     2.2 |      100 |       0 |     2.2 | 51-378,381-427    
  ...hestration.ts |     100 |      100 |     100 |     100 |                   
  ...oviderInfo.ts |       0 |        0 |       0 |       0 | 1-85              
  ...odifyTrust.ts |    9.09 |      100 |       0 |    9.09 | 43-134            
  ...raseCycler.ts |   79.72 |    73.33 |     100 |   79.72 | ...69,75-76,92-94 
  ...cySettings.ts |   85.14 |    77.77 |     100 |   85.14 | ...,75-79,109-120 
  ...Management.ts |    1.48 |      100 |       0 |    1.48 | 22-609,612-674    
  ...Completion.ts |   43.07 |    55.55 |      50 |   43.07 | ...92-305,336-345 
  ...iderDialog.ts |    5.71 |      100 |       0 |    5.71 | 39-77,80-151      
  ...lScheduler.ts |   76.42 |    97.36 |      75 |   76.42 | ...85,301-317,474 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  useResponsive.ts |     100 |      100 |     100 |     100 |                   
  ...ompletion.tsx |   69.56 |      100 |     100 |   69.56 | 45-47,51-66,78-81 
  useRewind.ts     |     100 |      100 |     100 |     100 |                   
  ...ectionList.ts |   89.78 |     89.1 |     100 |   89.78 | ...17-423,443-447 
  useSession.ts    |       0 |        0 |       0 |       0 | 1-23              
  ...ionBrowser.ts |     100 |      100 |     100 |     100 |                   
  ...serHelpers.ts |   95.79 |    85.21 |   97.36 |   95.79 | ...37-639,762-763 
  ...erKeypress.ts |   89.87 |    97.29 |   94.11 |   89.87 | 101-108,130-145   
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...hallowMemo.ts |      10 |      100 |       0 |      10 | 9-22,35-47        
  ...ellHistory.ts |   92.24 |    78.78 |     100 |   92.24 | ...82,130-131,141 
  ...Completion.ts |   97.07 |    81.25 |     100 |   97.07 | 71-73,101-102     
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-64              
  ...cessorCore.ts |   74.13 |       60 |     100 |   74.13 | ...20,157,177-204 
  ...ompletion.tsx |   96.77 |    81.39 |     100 |   96.77 | ...,93-94,340-348 
  ...leCallback.ts |     100 |      100 |     100 |     100 |                   
  ...tateAndRef.ts |   59.09 |      100 |     100 |   59.09 | 23-31             
  ...oryRefresh.ts |     100 |      100 |     100 |     100 |                   
  ...rminalSize.ts |   10.34 |      100 |       0 |   10.34 | 15-44,49-85       
  ...emeCommand.ts |    4.29 |      100 |       0 |    4.29 | 25-122,125-199    
  useTimer.ts      |    87.5 |    85.71 |     100 |    87.5 | 44-45,50-52       
  ...ntinuation.ts |   91.24 |    89.74 |     100 |   91.24 | ...27-128,154-164 
  ...ePreserver.ts |   57.14 |      100 |      80 |   57.14 | 58-76             
  ...oolsDialog.ts |    3.62 |      100 |       0 |    3.62 | 25-97,100-183     
  ...erGuidance.ts |   92.85 |    85.71 |     100 |   92.85 | 28-29             
  ...Onboarding.ts |    1.92 |      100 |       0 |    1.92 | 79-403,406-487    
  ...eMigration.ts |   11.66 |      100 |       0 |   11.66 | 15-74             
  vim.ts           |   85.73 |     87.8 |    90.9 |   85.73 | ...07-716,832-834 
 ...ks/agentStream |   82.81 |    78.54 |   82.08 |   82.81 |                   
  ...Dispatcher.ts |   47.55 |    35.55 |   56.25 |   47.55 | ...60,362,399-432 
  ...ersistence.ts |    98.3 |    95.34 |     100 |    98.3 | 160-162           
  ...tProcessor.ts |      78 |    77.77 |      80 |      78 | ...47-158,161-163 
  contextLimit.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  queryPreparer.ts |   63.63 |    46.66 |     100 |   63.63 | ...47-148,151-165 
  streamUtils.ts   |   93.43 |     87.4 |   91.66 |   93.43 | ...94-310,486-488 
  thoughtState.ts  |   93.33 |    68.75 |     100 |   93.33 | 70-71,76-77       
  ...ionHandler.ts |     100 |      100 |     100 |     100 |                   
  ...reparation.ts |   96.42 |    88.88 |     100 |   96.42 | 44                
  types.ts         |       0 |        0 |       0 |       0 | 1-17              
  ...ventStream.ts |   85.03 |    88.46 |      60 |   85.03 | ...73-287,306-307 
  ...gentStream.ts |     100 |      100 |      80 |     100 |                   
  ...mLifecycle.ts |   84.25 |    63.33 |      80 |   84.25 | ...31-232,261-266 
  ...hestration.ts |   99.18 |      100 |   88.88 |   99.18 | 112-113           
  ...ntHandlers.ts |   70.92 |    95.83 |   84.21 |   70.92 | ...39,448-457,516 
  ...treamState.ts |   79.53 |       50 |     100 |   79.53 | ...76,197,233-234 
  ...ubmitQuery.ts |   94.34 |    87.75 |   85.71 |   94.34 | ...81-482,504-506 
 src/ui/layouts    |   83.55 |    56.89 |   83.33 |   83.55 |                   
  ...AppLayout.tsx |   81.18 |    71.42 |   83.33 |   81.18 | ...91-205,321-359 
  ...utHelpers.tsx |   86.31 |     54.9 |   95.23 |   86.31 | ...88-789,810-838 
  ...ainContent.ts |   23.52 |      100 |       0 |   23.52 | 16-22,25-28,31-34 
 ...noninteractive |   74.07 |      100 |    7.14 |   74.07 |                   
  ...eractiveUi.ts |   74.07 |      100 |    7.14 |   74.07 | 17-19,23-24,27-28 
 src/ui/privacy    |   18.77 |        0 |       0 |   18.77 |                   
  ...acyNotice.tsx |       0 |        0 |       0 |       0 | 1-140             
  ...acyNotice.tsx |       0 |        0 |       0 |       0 | 1-59              
  ...acyNotice.tsx |   12.19 |      100 |       0 |   12.19 | 16-62             
  ...acyNotice.tsx |   35.42 |      100 |       0 |   35.42 | 77-172,180-235    
  ...acyNotice.tsx |      20 |      100 |       0 |      20 | 23-59,62-64       
  ...acyNotice.tsx |   13.04 |      100 |       0 |   13.04 | 22-73             
 src/ui/reducers   |    79.5 |    91.66 |      50 |    79.5 |                   
  appReducer.ts    |     100 |      100 |     100 |     100 |                   
  ...ionReducer.ts |       0 |        0 |       0 |       0 | 1-52              
 src/ui/state      |   52.63 |    30.76 |      50 |   52.63 |                   
  extensions.ts    |   52.63 |    30.76 |      50 |   52.63 | ...28,130,134-149 
 src/ui/themes     |   99.04 |    85.65 |   97.61 |   99.04 |                   
  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   |     100 |      100 |     100 |     100 |                   
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  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 |                   
  green-screen.ts  |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  ...c-resolver.ts |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-compat.ts  |     100 |       50 |     100 |     100 | 79                
  theme-manager.ts |   88.55 |    82.81 |     100 |   88.55 | ...03-312,317-318 
  theme.ts         |   99.09 |     81.3 |   94.11 |   99.09 | 282-283,702-703   
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/types      |       0 |        0 |       0 |       0 |                   
  ...ngMetadata.ts |       0 |        0 |       0 |       0 |                   
 src/ui/utils      |   63.33 |    89.51 |   74.26 |   63.33 |                   
  ...Colorizer.tsx |    5.64 |      100 |       0 |    5.64 | ...27-168,180-249 
  ...olePatcher.ts |   72.09 |      100 |   83.33 |   72.09 | 50-61             
  ...nRenderer.tsx |   96.88 |    87.87 |     100 |   96.88 | ...69-271,275-277 
  ...wnDisplay.tsx |       5 |      100 |       0 |       5 | ...90-717,728-732 
  ...eRenderer.tsx |   11.17 |      100 |       0 |   11.17 | ...34-387,394-427 
  ...tGenerator.ts |     100 |    95.83 |   83.33 |     100 | 136               
  ...ketedPaste.ts |      60 |      100 |       0 |      60 | 13-14,17-18       
  clipboard.ts     |   97.29 |    84.61 |     100 |   97.29 | 40                
  ...boardUtils.ts |   62.44 |    76.74 |   83.33 |   62.44 | ...49-263,333-335 
  commandUtils.ts  |   93.02 |    94.44 |   96.15 |   93.02 | ...31-235,316-324 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  displayUtils.ts  |     100 |      100 |     100 |     100 |                   
  formatters.ts    |   90.47 |    95.23 |     100 |   90.47 | 57-60             
  fuzzyFilter.ts   |     100 |    96.55 |     100 |     100 | 84                
  highlight.ts     |   77.69 |    97.29 |      60 |   77.69 | 146-172,176-181   
  ...xportUtils.ts |   98.52 |    94.11 |     100 |   98.52 | 137-138           
  ...storyItems.ts |   99.23 |    93.75 |     100 |   99.23 | 109               
  input.ts         |   84.28 |    94.44 |   66.66 |   84.28 | 73-80,106-113     
  isNarrowWidth.ts |      50 |      100 |       0 |      50 | 13-14             
  ...nUtilities.ts |   66.66 |     87.5 |     100 |   66.66 | 75-94,103-104     
  modelIdentity.ts |   99.23 |    98.18 |   84.61 |   99.23 | 169               
  mouse.ts         |   83.05 |    72.41 |     100 |   83.05 | ...94,201,214-215 
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  ...opDetector.ts |       0 |        0 |       0 |       0 | 1-210             
  responsive.ts    |   73.39 |    76.66 |   83.33 |   73.39 | ...00-108,111-125 
  rewindFileOps.ts |   92.38 |    71.79 |     100 |   92.38 | ...48-251,291-295 
  ...putHandler.ts |   94.44 |    91.12 |     100 |   94.44 | ...15-316,386-387 
  ...ityManager.ts |   94.92 |    85.71 |    90.9 |   94.92 | ...28,352,380,391 
  ...alContract.ts |     100 |      100 |     100 |     100 |                   
  terminalLinks.ts |     100 |      100 |     100 |     100 |                   
  ...colCleanup.ts |   95.23 |       75 |     100 |   95.23 | 38                
  ...lSequences.ts |     100 |      100 |     100 |     100 |                   
  terminalSetup.ts |   10.72 |      100 |    7.14 |   10.72 | 80-419            
  textUtils.ts     |    93.7 |    92.15 |   88.88 |    93.7 | 20-25,156-157     
  ...Formatters.ts |       0 |        0 |       0 |       0 | 1-50              
  ...icsTracker.ts |     100 |    94.44 |     100 |     100 | 38                
  ui-sizing.ts     |      16 |      100 |       0 |      16 | 11-23,26-36       
  updateCheck.ts   |     100 |    94.11 |     100 |     100 | 35,46             
 src/utils         |   62.96 |    88.91 |   75.89 |   62.96 |                   
  ...ionContext.ts |   76.92 |       75 |     100 |   76.92 | 38-41,63-66,81-84 
  ...Formatting.ts |   94.36 |    93.75 |     100 |   94.36 | 49-50,71-72       
  bootstrap.ts     |     100 |      100 |     100 |     100 |                   
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   68.25 |       80 |      60 |   68.25 | ...67-69,72,86-95 
  coalesce.ts      |     100 |      100 |     100 |     100 |                   
  commands.ts      |   51.78 |    71.42 |     100 |   51.78 | 25-26,57-85       
  commentJson.ts   |    92.3 |     92.5 |     100 |    92.3 | 94-102            
  ...ScopeUtils.ts |   27.58 |      100 |       0 |   27.58 | 24-41,58-86       
  ...icSettings.ts |   88.07 |    88.09 |     100 |   88.07 | ...73,85-88,91-94 
  ...arResolver.ts |   96.72 |    96.42 |     100 |   96.72 | 118-119           
  errors.ts        |   94.87 |       88 |     100 |   94.87 | 53-54,95-96       
  events.ts        |     100 |      100 |     100 |     100 |                   
  ...lativeTime.ts |     100 |      100 |     100 |     100 |                   
  gitCommitInfo.ts |   90.27 |      100 |     100 |   90.27 | 78-80,103,110-112 
  gitUtils.ts      |   93.54 |       85 |     100 |   93.54 | 61-62,77-80       
  ...AutoUpdate.ts |   69.37 |    80.76 |   77.77 |   69.37 | ...67-268,282-347 
  ...lationInfo.ts |   99.49 |     98.3 |     100 |   99.49 | 59                
  math.ts          |   66.66 |      100 |       0 |   66.66 | 15                
  ...stentState.ts |   95.31 |    84.21 |     100 |   95.31 | 42,63-64          
  readStdin.ts     |   81.03 |    91.66 |   83.33 |   81.03 | 32-39,51-53       
  refusalNotice.ts |     100 |      100 |     100 |     100 |                   
  relaunch.ts      |     100 |      100 |     100 |     100 |                   
  resolvePath.ts   |   66.66 |       25 |     100 |   66.66 | 12-13,16,18-19    
  ...containers.ts |    4.86 |      100 |       0 |    4.86 | ...36-656,660-686 
  ...entrypoint.ts |    9.87 |      100 |       0 |    9.87 | 19-48,51-100      
  sandbox-env.ts   |   74.65 |    77.14 |   66.66 |   74.65 | ...52-153,161-162 
  sandbox-exec.ts  |    8.73 |      100 |    12.5 |    8.73 | 56-321,338-427    
  sandbox-image.ts |    3.96 |      100 |       0 |    3.96 | 12-128            
  ...box-podman.ts |   74.67 |    94.73 |   77.77 |   74.67 | ...50-260,326-399 
  ...x-seatbelt.ts |   28.02 |       50 |   22.22 |   28.02 | ...15-216,226-352 
  sandbox-ssh.ts   |   78.92 |    81.13 |     100 |   78.92 | ...07-308,372-376 
  sandbox.ts       |   13.23 |      100 |       0 |   13.23 | 47-111            
  ...st-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...ionCleanup.ts |   88.88 |    84.21 |     100 |   88.88 | ...42-243,326-327 
  sessionUtils.ts  |    8.86 |      100 |       0 |    8.86 | 52-122,129-143    
  settingsUtils.ts |   85.67 |    91.34 |   94.28 |   85.67 | ...61-489,528-529 
  ...ttingSaver.ts |    1.92 |      100 |       0 |    1.92 | 11-32,40-85       
  skillSettings.ts |   86.13 |       88 |     100 |   86.13 | 99-107,134-138    
  skillUtils.ts    |   71.33 |    70.96 |   83.33 |   71.33 | ...88-189,203-224 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdinSafety.ts   |   91.39 |    86.48 |     100 |   91.39 | ...66-167,170,245 
  terminalTheme.ts |     100 |      100 |     100 |     100 |                   
  typeGuards.ts    |   65.38 |      100 |      75 |   65.38 | 26-34             
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  version.ts       |     100 |      100 |     100 |     100 |                   
  windowTitle.ts   |     100 |      100 |     100 |     100 |                   
 src/utils/privacy |   66.15 |       70 |   76.19 |   66.15 |                   
  ...taRedactor.ts |   81.91 |    71.42 |      80 |   81.91 | ...08-610,616-637 
  ...acyManager.ts |       0 |        0 |       0 |       0 | 1-176             
 ...ed-integration |   74.53 |    75.75 |   77.14 |   74.53 |                   
  ...temService.ts |     100 |      100 |     100 |     100 |                   
  ...tent-utils.ts |    8.62 |       50 |   14.28 |    8.62 | ...06-115,118-164 
  zed-helpers.ts   |      42 |    55.55 |      50 |      42 | ...59-166,168-170 
  ...h-resolver.ts |   73.33 |       56 |   96.15 |   73.33 | ...43-650,654-680 
  ...st-helpers.ts |    98.4 |      100 |   56.66 |    98.4 | 184-186           
  ...ol-handler.ts |   87.65 |     80.9 |   96.15 |   87.65 | ...16-318,365-378 
  ...ntegration.ts |   79.56 |    79.39 |   80.95 |   79.56 | ...13-814,842-844 
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   79.08 |    84.14 |   76.61 |   79.08 |                   
 src               |     100 |      100 |     100 |     100 |                   
  ...-factories.ts |     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/adapters      |     100 |      100 |     100 |     100 |                   
  ...eamAdapter.ts |     100 |      100 |     100 |     100 |                   
 src/code_assist   |   80.88 |    80.57 |   82.14 |   80.88 |                   
  codeAssist.ts    |   17.24 |      100 |       0 |   17.24 | 22-44,51-59       
  ...orAdapters.ts |   92.26 |    71.11 |   88.88 |   92.26 | ...05-207,272-275 
  converter.ts     |   95.54 |    93.02 |     100 |   95.54 | 186-190,219-220   
  ...nAIWrapper.ts |     100 |      100 |     100 |     100 |                   
  ...al-storage.ts |   95.86 |    79.48 |     100 |   95.86 | 27-28,86,110,139  
  server.ts        |   48.16 |    72.72 |      50 |   48.16 | ...15-256,259-262 
  setup.ts         |   86.09 |    73.07 |     100 |   86.09 | ...57-159,183-189 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/commands      |     100 |      100 |     100 |     100 |                   
  extensions.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/config        |   70.21 |     79.9 |   58.45 |   70.21 |                   
  ...tLifecycle.ts |   80.34 |    97.05 |      80 |   80.34 | ...49-253,262-286 
  ...skServices.ts |    9.19 |      100 |       0 |    9.19 | ...5,62-80,89-129 
  config.ts        |    62.9 |    80.41 |      60 |    62.9 | ...92-801,826-846 
  configBase.ts    |   68.81 |    72.09 |   72.72 |   68.81 | ...48-255,257-261 
  ...igBaseCore.ts |   69.07 |    94.52 |   44.23 |   69.07 | ...35-836,838-839 
  ...onstructor.ts |   96.93 |    89.06 |     100 |   96.93 | ...97-498,501-502 
  ...estHarness.ts |   93.15 |    95.45 |   83.33 |   93.15 | 229-239,245-248   
  configTypes.ts   |      58 |      100 |      50 |      58 | 215-255           
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...ngsHelpers.ts |   62.16 |       40 |     100 |   62.16 | ...31,35-36,42-43 
  index.ts         |       0 |        0 |       0 |       0 | 1-41              
  ...ntegration.ts |   63.22 |    75.47 |   73.68 |   63.22 | ...17,434,443,452 
  models.ts        |     100 |      100 |     100 |     100 |                   
  ...rSingleton.ts |   76.22 |    70.37 |   56.25 |   76.22 | ...94,397-400,408 
  ...entManager.ts |   50.76 |    68.91 |   65.21 |   50.76 | ...54-655,681-705 
  ...ingsParser.ts |   41.37 |    33.33 |     100 |   41.37 | 31-48             
  ...tryFactory.ts |   84.08 |    77.77 |   71.42 |   84.08 | ...71,465,483-499 
  types.ts         |       0 |        0 |       0 |       0 |                   
 ...nfirmation-bus |   88.88 |    66.66 |   66.66 |   88.88 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-2               
  message-bus.ts   |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   80.31 |    78.18 |    87.5 |   80.31 |                   
  ...ssionTypes.ts |       0 |        0 |       0 |       0 | 1-90              
  ...ntContract.ts |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   97.43 |    92.59 |     100 |   97.43 | 92-93             
  ...okTriggers.ts |   47.39 |     61.9 |   66.66 |   47.39 | ...51,253,299-304 
  ...igBoundary.ts |       0 |        0 |       0 |       0 | 1                 
  ...okTriggers.ts |   96.09 |    84.37 |     100 |   96.09 | ...22,161,208,250 
  logger.ts        |   78.22 |    80.19 |   94.44 |   78.22 | ...56-470,513-525 
  prompts.ts       |   84.36 |    63.29 |    91.3 |   84.36 | ...60,563,624-625 
  subagentTypes.ts |   83.11 |    68.42 |   77.77 |   83.11 | ...03-304,319-320 
  tokenLimits.ts   |     100 |      100 |     100 |     100 |                   
  ...erContract.ts |     100 |      100 |     100 |     100 |                   
  turn.ts          |     100 |      100 |     100 |     100 |                   
 ...re/compression |   29.71 |    33.33 |   14.28 |   29.71 |                   
  ...nDirective.ts |    6.25 |      100 |       0 |    6.25 | 22-62             
  types.ts         |   34.96 |    33.33 |   16.66 |   34.96 | ...20-421,434-436 
 src/debug         |   61.53 |        0 |       0 |   61.53 |                   
  ...ionManager.ts |     100 |      100 |     100 |     100 |                   
  DebugLogger.ts   |     100 |      100 |     100 |     100 |                   
  FileOutput.ts    |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |       0 |        0 |       0 |       0 | 1-6               
  ...FileOutput.ts |       0 |        0 |       0 |       0 | 1-6               
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/filters       |   97.79 |    95.52 |     100 |   97.79 |                   
  EmojiFilter.ts   |   97.79 |    95.52 |     100 |   97.79 | ...55-156,363-364 
 src/hooks         |    84.3 |    85.37 |   82.08 |    84.3 |                   
  errors.ts        |     100 |      100 |     100 |     100 |                   
  ...Aggregator.ts |   90.55 |    81.33 |    87.5 |   90.55 | ...58,377,379,381 
  ...sContracts.ts |       0 |        0 |       0 |       0 | 1                 
  ...entHandler.ts |   91.43 |     87.3 |   93.75 |   91.43 | ...50,782-788,833 
  hookPlanner.ts   |   98.79 |    93.33 |     100 |   98.79 | 103               
  hookRegistry.ts  |   97.19 |    88.31 |     100 |   97.19 | ...97,399,401,403 
  hookRunner.ts    |   84.88 |    87.14 |   86.95 |   84.88 | ...37-439,502-505 
  hookSystem.ts    |    64.2 |    88.88 |      65 |    64.2 | ...49-351,364-366 
  ...Translator.ts |   94.11 |    75.67 |     100 |   94.11 | ...68,479,524,529 
  ...Validators.ts |    92.4 |    89.83 |     100 |    92.4 | 57-59,78-80       
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ssion-hook.ts |   88.88 |    33.33 |     100 |   88.88 | 24,30             
  trustedHooks.ts  |   20.77 |        0 |       0 |   20.77 | ...6,82-90,96-109 
  types.ts         |   63.63 |    89.13 |   60.71 |   63.63 | ...08-509,520-521 
 ...oks/test-utils |       0 |        0 |       0 |       0 |                   
  ...igWithHook.ts |       0 |        0 |       0 |       0 | 1-137             
 src/interfaces    |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 |                   
  ....interface.ts |       0 |        0 |       0 |       0 |                   
 src/llm-types     |   92.44 |    90.72 |   98.46 |   92.44 |                   
  afcHistory.ts    |   79.26 |    68.96 |     100 |   79.26 | ...99-100,102-103 
  ...ssageInput.ts |   86.09 |     86.2 |   97.29 |   86.09 | ...61-462,489-490 
  finishReasons.ts |   97.56 |    83.33 |     100 |   97.56 | 153-154           
  geminiContent.ts |       0 |        0 |       0 |       0 |                   
  grounding.ts     |       0 |        0 |       0 |       0 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  jsonSchema.ts    |     100 |      100 |     100 |     100 |                   
  modelEnvelope.ts |     100 |      100 |     100 |     100 |                   
  modelRequest.ts  |       0 |        0 |       0 |       0 |                   
  ...erApiError.ts |     100 |      100 |     100 |     100 |                   
  ...Embeddings.ts |       0 |        0 |       0 |       0 |                   
  toolCall.ts      |     100 |    98.14 |     100 |     100 | 216               
  ...eclaration.ts |     100 |      100 |     100 |     100 |                   
 src/models        |   89.01 |       90 |   92.68 |   89.01 |                   
  hydration.ts     |    47.1 |    64.28 |      50 |    47.1 | ...09-110,180-260 
  index.ts         |     100 |      100 |     100 |     100 |                   
  profiles.ts      |     100 |      100 |     100 |     100 |                   
  ...ntegration.ts |   95.34 |    89.74 |     100 |   95.34 | ...36-137,200-201 
  registry.ts      |   92.76 |    89.06 |      96 |   92.76 | ...72-273,399-403 
  schema.ts        |     100 |      100 |     100 |     100 |                   
  transformer.ts   |     100 |      100 |     100 |     100 |                   
 src/parsers       |   80.75 |    80.71 |   92.85 |   80.75 |                   
  ...CallParser.ts |   84.59 |     80.4 |    92.3 |   84.59 | ...09-810,813-814 
  ...rg-parsing.ts |   83.37 |    85.71 |   90.47 |   83.37 | ...23-425,501-502 
  ...ll-helpers.ts |   73.94 |     79.5 |   92.85 |   73.94 | ...07-508,514-535 
  ...rser-utils.ts |      76 |    73.33 |     100 |      76 | ...09-110,114-119 
 src/policy        |   73.02 |    76.19 |   88.46 |   73.02 |                   
  config.ts        |   68.24 |    77.19 |   86.36 |   68.24 | ...29,385,462-463 
  index.ts         |     100 |      100 |     100 |     100 |                   
  policy-engine.ts |     100 |      100 |     100 |     100 |                   
  ...cy-helpers.ts |   88.88 |    66.66 |     100 |   88.88 | 31-39             
  ...-stringify.ts |     100 |      100 |     100 |     100 |                   
  toml-loader.ts   |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
 src/prompt-config |   83.12 |    86.82 |   83.57 |   83.12 |                   
  ...lateEngine.ts |    94.7 |    89.24 |     100 |    94.7 | ...32-435,446-449 
  index.ts         |       0 |      100 |     100 |       0 | 5-42              
  prompt-cache.ts  |    99.1 |    97.43 |     100 |    99.1 | 236-237           
  ...st-helpers.ts |   77.14 |    42.85 |     100 |   77.14 | ...32,42-43,52-53 
  ...-installer.ts |   85.81 |    82.92 |   92.85 |   85.81 | ...23-827,834-835 
  prompt-loader.ts |    90.9 |    92.56 |   92.85 |    90.9 | ...13-530,540-541 
  ...t-resolver.ts |   50.38 |       84 |      50 |   50.38 | ...22-423,428-527 
  ...pt-service.ts |   85.32 |    83.18 |   80.95 |   85.32 | ...28,545-552,583 
  ...delegation.ts |   93.54 |     90.9 |     100 |   93.54 | 34-35             
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...onfig/defaults |   56.38 |    46.03 |   85.41 |   56.38 |                   
  core-defaults.ts |      48 |     41.5 |   78.57 |      48 | ...55,365,371-379 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...est-loader.ts |   81.81 |       80 |     100 |   81.81 | ...02-108,116-120 
  ...t-warnings.ts |    92.3 |    33.33 |     100 |    92.3 | 18-19             
  ...r-defaults.ts |   52.51 |    35.29 |   84.61 |   52.51 | ...24,334,340-345 
  ...e-defaults.ts |     100 |      100 |     100 |     100 |                   
  tool-defaults.ts |   55.74 |     42.3 |   84.61 |   55.74 | ...82-283,295-300 
 ...nfig/installer |   90.88 |    85.31 |     100 |   90.88 |                   
  ...operations.ts |   82.53 |    80.39 |     100 |   82.53 | ...81-285,301-302 
  ...resolution.ts |   96.63 |    92.59 |     100 |   96.63 | ...70-271,317-318 
  ...tory-utils.ts |   95.42 |    90.38 |     100 |   95.42 | ...14-117,154,175 
  file-writer.ts   |   89.47 |    76.66 |     100 |   89.47 | ...96,116,121-122 
  ...operations.ts |   97.46 |    94.44 |     100 |   97.46 | 48-49             
  ...-expansion.ts |   85.82 |    78.72 |     100 |   85.82 | ...66-167,169-170 
 ...onfig/resolver |   36.86 |    60.86 |   51.85 |   36.86 |                   
  ...ry-scanner.ts |    4.04 |      100 |       0 |    4.04 | ...98-159,163-207 
  fs-adapter.ts    |   39.06 |    66.66 |      50 |   39.06 | ...37,42-47,51-88 
  name-utils.ts    |   71.69 |       60 |   78.57 |   71.69 | ...03-204,208-218 
 src/prompts       |      30 |      100 |      25 |      30 |                   
  mcp-prompts.ts   |   28.57 |      100 |       0 |   28.57 | 11-15             
  ...t-registry.ts |   30.23 |      100 |   28.57 |   30.23 | ...43,49-56,69-74 
 src/recording     |    90.2 |     86.2 |   98.09 |    90.2 |                   
  ...ntegration.ts |    83.9 |       75 |     100 |    83.9 | ...31-132,143-144 
  ReplayEngine.ts  |   95.78 |       91 |     100 |   95.78 | ...37-342,502-509 
  ...nDiscovery.ts |   91.62 |    87.75 |     100 |   91.62 | ...44-345,360-361 
  ...ockManager.ts |   86.24 |    83.33 |     100 |   86.24 | ...18,233,260-261 
  ...ingService.ts |   82.97 |    92.45 |   95.65 |   82.97 | ...57,390-391,395 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   91.12 |       90 |   92.85 |   91.12 | 190-200,227-230   
  resumeSession.ts |   93.19 |    89.65 |     100 |   93.19 | ...10-215,246-247 
  ...eanupUtils.ts |      90 |    69.23 |     100 |      90 | ...40-241,267,280 
  ...Management.ts |   88.23 |    85.71 |     100 |   88.23 | 94,108-112        
  types.ts         |       0 |        0 |       0 |       0 |                   
 src/resources     |   95.23 |     92.3 |     100 |   95.23 |                   
  ...e-registry.ts |   95.23 |     92.3 |     100 |   95.23 | 34-35             
 src/runtime       |   85.81 |    89.23 |      82 |   85.81 |                   
  ...imeContext.ts |     100 |      100 |     100 |     100 |                   
  ...timeLoader.ts |   86.85 |    73.68 |   81.81 |   86.85 | ...14,218,244-247 
  ...ntimeState.ts |   95.66 |    90.78 |     100 |   95.66 | ...03-504,544-545 
  ...ionContext.ts |   83.54 |    93.33 |   71.42 |   83.54 | ...55-156,167-174 
  ...imeContext.ts |   75.86 |    97.82 |   63.33 |   75.86 | ...03-308,310-317 
  index.ts         |       0 |        0 |       0 |       0 | 1-19              
  ...imeContext.ts |      70 |       90 |     100 |      70 | 88-108            
  ...meAdapters.ts |    90.9 |    93.93 |   93.75 |    90.9 | 82-88,93-97       
  ...ateFactory.ts |     100 |    97.14 |     100 |     100 | 130               
  ...imeAdapter.ts |   80.55 |    85.71 |   88.88 |   80.55 | 62-69,84-85,88-93 
 ...time/contracts |       0 |        0 |       0 |       0 |                   
  ...lureReason.ts |       0 |        0 |       0 |       0 | 1                 
  ...kContracts.ts |       0 |        0 |       0 |       0 | 1                 
  ...ningOutput.ts |       0 |        0 |       0 |       0 | 1                 
  ...torFactory.ts |       0 |        0 |       0 |       0 | 1                 
  RuntimeModel.ts  |       0 |        0 |       0 |       0 | 1                 
  ...meProvider.ts |       0 |        0 |       0 |       0 | 1                 
  ...oviderChat.ts |       0 |        0 |       0 |       0 | 1                 
  ...derManager.ts |       0 |        0 |       0 |       0 | 1                 
  ...eTokenizer.ts |       0 |        0 |       0 |       0 | 1                 
  ...zerFactory.ts |       0 |        0 |       0 |       0 | 1                 
  ...tryContext.ts |       0 |        0 |       0 |       0 | 1                 
  index.ts         |       0 |        0 |       0 |       0 | 1                 
 ...runtime/errors |   94.87 |    85.71 |   66.66 |   94.87 |                   
  ...viderError.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-14              
 src/safety        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  pathValidator.ts |     100 |      100 |     100 |     100 |                   
 src/scheduler     |      90 |       80 |      50 |      90 |                   
  liveOutput.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/services      |   84.74 |    86.28 |   88.83 |   84.74 |                   
  ...ardService.ts |   94.23 |    93.75 |     100 |   94.23 | 70,74-75          
  ...utoTrigger.ts |   97.33 |    95.83 |     100 |   97.33 | 127-128           
  ...askManager.ts |   95.81 |    93.93 |     100 |   95.81 | 151-157,365-366   
  ...derService.ts |   98.98 |    97.05 |     100 |   98.98 | 173               
  ...y-analyzer.ts |   83.51 |    79.85 |   87.09 |   83.51 | ...13-641,647-648 
  ...extManager.ts |     100 |    96.29 |     100 |     100 | 63                
  ...nitization.ts |    98.7 |    96.87 |     100 |    98.7 | 172-173           
  ...eryService.ts |     100 |      100 |     100 |     100 |                   
  ...temService.ts |     100 |      100 |     100 |     100 |                   
  ...ts-service.ts |      50 |      100 |       0 |      50 | 41-42,48-49       
  gitService.ts    |   86.72 |    86.95 |      80 |   86.72 | ...34-137,141-145 
  index.ts         |       0 |        0 |       0 |       0 | 1-23              
  ...ionService.ts |   96.43 |    95.08 |     100 |   96.43 | ...27-428,438-439 
  ...pExecution.ts |   88.42 |    78.57 |   83.33 |   88.42 | 65-66,92-100      
  ...lCpHelpers.ts |   87.83 |    87.75 |     100 |   87.83 | ...91,194,253-259 
  ...ionService.ts |   71.21 |    88.23 |    62.5 |   71.21 | ...83-306,365-378 
  ...utionTypes.ts |       0 |        0 |       0 |       0 | 1                 
  ...lExitGuard.ts |     100 |      100 |     100 |     100 |                   
  ...utputUtils.ts |   95.65 |    95.23 |     100 |   95.65 | 34-35             
  ...rocessKill.ts |   88.57 |    88.88 |     100 |   88.57 | 38-41             
  ...yExecution.ts |   96.15 |    93.33 |     100 |   96.15 | 110-111,132-134   
  ...PtyHelpers.ts |   87.03 |    76.19 |    87.5 |   87.03 | ...22,153-154,210 
  ...yLifecycle.ts |   87.68 |    78.12 |   94.73 |   87.68 | ...21,324,378-380 
  shellPtyState.ts |       0 |        0 |       0 |       0 | 1                 
  ...xt-tracker.ts |   94.87 |    88.88 |   85.71 |   94.87 | 54-55             
  ...er-service.ts |       0 |        0 |       0 |       0 | 1-161             
  ...er-service.ts |   68.47 |    48.48 |      80 |   68.47 | ...85-289,311-314 
 ...rvices/history |   83.97 |    87.01 |   87.83 |   83.97 |                   
  ...Converters.ts |    87.7 |    86.33 |      84 |    87.7 | ...50,427-433,491 
  HistoryEvents.ts |       0 |        0 |       0 |       0 |                   
  ...oryService.ts |   85.99 |    90.36 |   86.79 |   85.99 | ...16-717,796-797 
  IContent.ts      |   95.29 |    87.87 |     100 |   95.29 | 287-288,313-314   
  ...calToolIds.ts |   96.87 |    94.11 |     100 |   96.87 | 36-37             
  ...ebugLogger.ts |   62.41 |       68 |   85.71 |   62.41 | ...33-145,158-162 
  ...Validation.ts |     100 |      100 |     100 |     100 |                   
  ...CloneUtils.ts |   73.07 |    88.46 |   83.33 |   73.07 | ...98-101,106-118 
  ...textWindow.ts |   91.42 |    55.55 |     100 |   91.42 | 59,61-62          
  ...ryCuration.ts |     100 |      100 |     100 |     100 |                   
  ...EventTypes.ts |       0 |        0 |       0 |       0 |                   
  ...erPipeline.ts |     100 |      100 |     100 |     100 |                   
  historyQuery.ts  |   63.63 |       50 |     100 |   63.63 | 27-30             
  ...Estimation.ts |   44.68 |    82.14 |      50 |   44.68 | ...87-196,202-251 
  ...zerAdapter.ts |     100 |     87.5 |     100 |     100 | 73                
  ...malization.ts |    91.7 |    87.12 |     100 |    91.7 | ...26-431,477-485 
  ...oolPairing.ts |   98.59 |     87.5 |     100 |   98.59 | 103               
 src/skills        |   74.53 |    80.31 |   77.77 |   74.53 |                   
  ...lDiscovery.ts |     100 |      100 |     100 |     100 |                   
  skillLoader.ts   |   59.42 |    78.94 |   76.92 |   59.42 | ...16-351,363-373 
  skillManager.ts  |   89.68 |    80.88 |   77.27 |   89.68 | ...94-395,401-402 
 src/storage       |   98.69 |    96.87 |     100 |   98.69 |                   
  ...FileWriter.ts |     100 |      100 |     100 |     100 |                   
  ...nceService.ts |   98.65 |    96.87 |     100 |   98.65 | 291-292           
  ...ey-storage.ts |     100 |      100 |     100 |     100 |                   
  secure-store.ts  |     100 |      100 |     100 |     100 |                   
  sessionTypes.ts  |     100 |      100 |     100 |     100 |                   
 src/telemetry     |   15.45 |        0 |       0 |   15.45 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...-exporters.ts |       0 |        0 |       0 |       0 | 1-6               
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-17              
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-110             
  loggers.ts       |     100 |      100 |     100 |     100 |                   
  metrics.ts       |     100 |      100 |     100 |     100 |                   
  sdk.ts           |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  uiTelemetry.ts   |     100 |      100 |     100 |     100 |                   
 src/test-utils    |   53.38 |    60.56 |   23.07 |   53.38 |                   
  config.ts        |   83.45 |    88.23 |   20.83 |   83.45 | ...,94-99,176-179 
  index.ts         |       0 |        0 |       0 |       0 | 1-9               
  mock-tool.ts     |       0 |        0 |       0 |       0 | 1-159             
  ...aceContext.ts |       0 |        0 |       0 |       0 | 1-32              
  ...allOptions.ts |   81.62 |    51.61 |   54.54 |   81.62 | ...83,196,225-228 
  runtime.ts       |   47.03 |    33.33 |    8.82 |   47.03 | ...17-279,287-350 
  tools.ts         |   45.94 |    81.81 |   38.09 |   45.94 | ...15-227,230-237 
 src/todo          |   12.86 |      100 |       0 |   12.86 |                   
  todoFormatter.ts |   12.86 |      100 |       0 |   12.86 | ...03,206-219,222 
 src/tools         |   81.61 |    81.15 |      92 |   81.61 |                   
  ...ey-storage.ts |   81.61 |    81.15 |      92 |   81.61 | ...31-436,445-450 
 ...tools-adapters |   48.51 |    75.53 |   39.41 |   48.51 |                   
  ...iceAdapter.ts |   61.22 |    83.33 |    62.5 |   61.22 | ...52,55-60,65-68 
  ...iceAdapter.ts |   27.58 |      100 |      40 |   27.58 | 21-26,29-37,40-45 
  ...iceAdapter.ts |   22.58 |      100 |      40 |   22.58 | 18-25,28-43,46-47 
  ...iceAdapter.ts |   13.95 |      100 |       0 |   13.95 | ...76,79-80,83-98 
  ...BusAdapter.ts |   73.07 |     90.9 |   81.81 |   73.07 | ...02-126,145-151 
  ...iceAdapter.ts |      60 |      100 |       0 |      60 | ...27,36-37,40-41 
  ...iceAdapter.ts |   53.84 |      100 |      40 |   53.84 | 17-18,21-22,26-27 
  ...ostAdapter.ts |   19.33 |      100 |    8.69 |   19.33 | ...25-241,244-246 
  ...iceAdapter.ts |   15.58 |      100 |       0 |   15.58 | ...9,82-84,87-102 
  ...iceAdapter.ts |     100 |      100 |     100 |     100 |                   
  ...iceAdapter.ts |   55.03 |     69.9 |   68.96 |   55.03 | ...48-891,896-899 
  ...iceAdapter.ts |   76.66 |    66.66 |   57.14 |   76.66 | 49-53,56-57       
  ...ostAdapter.ts |   30.18 |      100 |   13.04 |   30.18 | ...83-189,192-193 
  ...ageAdapter.ts |   46.15 |      100 |       0 |   46.15 | ...33,36-37,40-41 
  ...ostAdapter.ts |   67.74 |      100 |   54.54 |   67.74 | ...57,60-61,64-65 
  ...iceHelpers.ts |   57.71 |       50 |      70 |   57.71 | ...95-196,200-201 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/utils         |   84.29 |    86.62 |   85.59 |   84.29 |                   
  LruCache.ts      |    82.6 |      100 |   71.42 |    82.6 | 29-30,33-34       
  asyncIterator.ts |   73.07 |    84.61 |   66.66 |   73.07 | ...71,75-86,93-94 
  bfsFileSearch.ts |   93.61 |    92.85 |     100 |   93.61 | 36-44             
  browser.ts       |    8.69 |      100 |       0 |    8.69 | 17-53             
  bunPtyAdapter.ts |   88.76 |    84.78 |   84.21 |   88.76 | ...27-532,551-554 
  channel.ts       |     100 |      100 |     100 |     100 |                   
  ...pointUtils.ts |      95 |    91.66 |     100 |      95 | 142-149           
  debugLogger.ts   |     100 |      100 |     100 |     100 |                   
  delay.ts         |     100 |      100 |     100 |     100 |                   
  editor.ts        |   95.47 |    90.38 |    90.9 |   95.47 | ...38-239,241-242 
  ...entContext.ts |     100 |      100 |     100 |     100 |                   
  errorParsing.ts  |   92.12 |     87.5 |   95.65 |   92.12 | ...87,218,302-303 
  ...rReporting.ts |   82.35 |       75 |     100 |   82.35 | ...40-142,150-155 
  errors.ts        |   70.12 |     92.3 |   31.25 |   70.12 | ...27-128,189-213 
  events.ts        |   67.54 |      100 |    64.7 |   67.54 | ...41-346,352-355 
  exitCodes.ts     |     100 |      100 |     100 |     100 |                   
  ...sionLoader.ts |   80.98 |    63.88 |   92.85 |   80.98 | ...70-171,224-232 
  fetch.ts         |   24.32 |        0 |       0 |   24.32 | 23-28,32-86,89-90 
  fileDiffUtils.ts |   94.87 |     90.9 |     100 |   94.87 | 25-26             
  fileUtils.ts     |   93.83 |    90.06 |   95.23 |   93.83 | ...00,469,503-509 
  formatters.ts    |   18.18 |      100 |       0 |   18.18 | 8-16              
  ...eUtilities.ts |   91.17 |    80.39 |   94.11 |   91.17 | ...77-381,415-425 
  ...rStructure.ts |   95.57 |    94.59 |     100 |   95.57 | ...15-216,376-381 
  getPty.ts        |   70.83 |       75 |      50 |   70.83 | 43-49             
  ...noreParser.ts |     100 |      100 |     100 |     100 |                   
  ...ineChanges.ts |       0 |        0 |       0 |       0 | 1-348             
  gitUtils.ts      |   42.55 |    71.42 |      50 |   42.55 | 32-33,40-44,53-80 
  googleErrors.ts  |   77.01 |    73.21 |     100 |   77.01 | ...08,346-347,364 
  ...uotaErrors.ts |   94.94 |    87.25 |     100 |   94.94 | ...76-277,315-316 
  ide-trust.ts     |      60 |      100 |       0 |      60 | 14-15             
  ...rePatterns.ts |     100 |    96.55 |     100 |     100 | 257               
  ...ionManager.ts |     100 |    88.88 |     100 |     100 | 24                
  ...edit-fixer.ts |       0 |        0 |       0 |       0 | 1-157             
  ...yDiscovery.ts |   84.11 |    79.85 |   82.35 |   84.11 | ...76-777,791-802 
  ...tProcessor.ts |   97.19 |    91.86 |   94.44 |   97.19 | ...11-312,406-407 
  ...Inspectors.ts |       0 |        0 |       0 |       0 | 1-39              
  output-format.ts |   64.22 |       92 |      80 |   64.22 | 239-240,250-295   
  package.ts       |     100 |      100 |     100 |     100 |                   
  ...erCoercion.ts |   80.89 |       80 |     100 |   80.89 | ...47-348,351-352 
  partUtils.ts     |   97.29 |    95.55 |     100 |   97.29 | 53-54             
  pathReader.ts    |   22.58 |      100 |       0 |   22.58 | ...22,28-29,41-60 
  paths.ts         |   83.58 |    84.33 |   78.94 |   83.58 | ...91-292,307-317 
  ...rDetection.ts |   52.05 |    78.94 |   83.33 |   52.05 | ...03-104,114-115 
  refusalNotice.ts |     100 |      100 |     100 |     100 |                   
  ...archTarget.ts |   89.58 |    69.23 |     100 |   89.58 | 45-47,65-66       
  retry.ts         |   83.76 |    86.53 |   92.59 |   83.76 | ...85-988,993-994 
  ...thResolver.ts |     100 |      100 |     100 |     100 |                   
  runtime.ts       |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  sanitization.ts  |     100 |      100 |     100 |     100 |                   
  ...aValidator.ts |   91.22 |    76.36 |     100 |   91.22 | ...51-352,368-379 
  ...r-launcher.ts |   91.15 |    81.81 |     100 |   91.15 | ...97,215,217-218 
  session.ts       |     100 |      100 |     100 |     100 |                   
  shell-parser.ts  |   87.64 |    80.53 |     100 |   87.64 | ...99-600,669-670 
  shell-utils.ts   |   85.99 |     92.7 |      88 |   85.99 | ...51-652,814-822 
  ...Completion.ts |   94.21 |    92.15 |     100 |   94.21 | 71-77             
  stdio.ts         |   83.83 |    56.52 |     100 |   83.83 | ...25-129,138-142 
  ...dleTimeout.ts |   98.48 |    94.59 |     100 |   98.48 | 131-132           
  ...amWatchdog.ts |     100 |    97.87 |   88.23 |     100 | 106               
  summarizer.ts    |   98.14 |       90 |     100 |   98.14 | 98                
  ...emEncoding.ts |   94.96 |    88.88 |     100 |   94.96 | ...10,142-143,197 
  terminal.ts      |   34.09 |      100 |       0 |   34.09 | ...55,58-59,62-66 
  ...Serializer.ts |    98.2 |    92.75 |     100 |    98.2 | ...,98-99,181-183 
  testUtils.ts     |      50 |      100 |   33.33 |      50 | ...47,53-58,64-66 
  textUtils.ts     |    12.5 |      100 |       0 |    12.5 | 15-34             
  thoughtUtils.ts  |     100 |      100 |     100 |     100 |                   
  tool-utils.ts    |   68.64 |    77.77 |      80 |   68.64 | ...34-135,156-180 
  ...putLimiter.ts |   95.14 |    81.63 |     100 |   95.14 | ...5-66,78-79,113 
  unicodeUtils.ts  |     100 |      100 |     100 |     100 |                   
  ...untManager.ts |   88.52 |    86.48 |     100 |   88.52 | ...,83-88,104-106 
  version.ts       |     100 |      100 |     100 |     100 |                   
  ...aceContext.ts |   96.85 |    95.23 |    92.3 |   96.85 | 95-96,110-111     
 ...ils/filesearch |   89.81 |    91.52 |   94.59 |   89.81 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |    84.9 |    85.71 |   66.66 |    84.9 | ...12-114,128-133 
  fileSearch.ts    |   86.48 |    89.21 |     100 |   86.48 | ...11-312,360-361 
  ignore.ts        |     100 |      100 |     100 |     100 |                   
  result-cache.ts  |     100 |      100 |     100 |     100 |                   
-------------------|---------|----------|---------|---------|-------------------

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

The relocated-document invariants listed six new dev-docs paths but only
five old docs/ paths, leaving the asymmetry unexplained and one case
unverified. docs/tool-parsing.md is not simply deleted: its internals
moved to dev-docs/providers/text-tool-call-parsing.md while the docs/
path was deliberately reused for a short user-facing settings page.

Document why that path is absent from oldPaths and add a test asserting
the page still exists and defers to the dev-docs internals page, so the
reuse is an enforced invariant rather than a silent gap.

Also record why the slug character class keeps underscore: GitHub
preserves it, so dropping it would break existing anchors.
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts Outdated
Comment thread scripts/check-doc-links.ts
Comment thread scripts/doc-links/file-scanner.ts Outdated
Comment thread scripts/tests/doc-links-guard.test.ts
Comment thread scripts/tests/doc-links-guard.test.ts
Comment thread scripts/tests/doc-links-guard.test.ts Outdated
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Review of the doc guards surfaced several real defects:

The module entry check compared a filesystem path against a file: URL,
so it could never match and the guard relied entirely on a filename
suffix fallback. Compare like-to-like instead.

assertRootExists used lstatSync, contradicting the module's documented
policy of following symlinks, so a symlinked documentation root was
rejected as "not a directory". processSymlink likewise tested the
symlink's own name for a .md extension rather than the resolved target,
silently skipping links inside a symlink named notes.txt.

checkLocalFragment re-read the source file that scanFile had already
read, and fragmentMatches re-lexed a document for every fragment link
pointing at it. Thread the already-read content and an explicitly
passed slug cache through instead; no module-level mutable state.

Two assertions could pass for the wrong reason: the telemetry
precedence test iterated a possibly-empty match list without asserting
it was non-empty, and the startSpan check was unanchored so a mere
mention in a comment would fail it.

Also rename stripFencedBlocks to stripCodeTokens, since it strips
inline code spans as well, correct the parseTarget contract comment to
describe same-file fragment links, widen CI detection beyond the exact
string "true", and drop an unreferenced test fixture.
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/doc-links/file-scanner.ts
Comment thread scripts/doc-links/heading-slugger.ts
Comment thread scripts/tests/doc-links-guard.test.ts Outdated
Comment thread scripts/tests/doc-tree-invariants.test.ts Outdated
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts Outdated
acoliver added 2 commits July 25, 2026 08:05
Review flagged the default branch of tokenText as able to double-count,
and it does. marked's inline tokens such as strong and em expose BOTH a
flattened text property and a nested tokens array covering the same
content, so taking both yielded "boldbold" for "**bold**". Every heading
containing bold, italic, code, or a link therefore produced a corrupted
slug, and valid anchors pointing at those headings were reported as
broken. Prefer the nested tokens and fall back to text only for leaf
tokens.

Added a regression test covering all four markup kinds and confirmed by
reverting the fix that it fails without it.

Also tighten three assertions that could pass for the wrong reason:
the multi-break test now requires every broken link on the line rather
than any one of them; the instrumentation check asserts the exact
contents of the instrumentations array, since the documentation claims
HTTP is the only one; and the constant-extraction check asserts both
lists are non-empty instead of comparing against an arbitrary count that
ordinary refactoring would break.

The malformed-destination case was split out and renamed. Its original
name claimed both links were detected, but the unclosed parenthesis makes
the first bracket pair ordinary text under CommonMark, so only the second
is a link. The test now states what it actually verifies: that the scan
continues past the malformed destination.

Drops a duplicated docs/tool-parsing.md existence assertion.
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/check-doc-links.ts Outdated
Comment thread scripts/check-doc-links.ts
Comment thread scripts/doc-links/file-scanner.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Review flagged that the tokenText fallback lets raw markup into slugs,
and it does. marked emits each inline tag as its own html token whose
text is the literal markup, so "## Hello <span>world</span>" slugged to
hello-spanworldspan and the guard rejected the valid anchor
#hello-world. GitHub renders the HTML and slugs only the visible text.
Skip html tokens; the surrounding text tokens already carry the visible
content.

Verified end-to-end before and after, and confirmed the new regression
test fails when the html case is removed.

Also make dirContains match directories only. It used
readdirSync().includes(), so a plain file named docs/architecture would
have satisfied the "internal directory is absent" assertions. Confirmed
by creating such a file: the weakened helper passes, the fixed one
fails.

Documents that searchRepoForMarker inspects only .md files and excludes
project-plans, and that extractConstantValues assumes the single-quoted
literals Prettier enforces here.
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/doc-links/heading-slugger.ts
Comment thread scripts/doc-links/file-scanner.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts Outdated
Comment thread scripts/tests/doc-tree-invariants.test.ts Outdated
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Three narrow gaps in the test-side scanners, all confirmed against the
real tree before changing anything.

The fence-balance check counted only exactly three backticks, but docs
in this repo use four-backtick fences to wrap examples that themselves
contain fences, and tilde fences appear in dev-docs. Count any run of
three or more backticks or tildes.

The marker scanner matched .md case-sensitively while the guard's own
isMarkdown() lowercases first, so the two disagreed about which files
exist. Align the scanner with the guard.

EVENT_ENHANCED_CONVERSATION_RESPONSE wraps onto a second line in
constants.ts, so the extractor's newline-spanning behavior is load
bearing rather than incidental. Assert that constant is extracted;
verified the assertion fails when the regex stops spanning newlines.
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/doc-links/file-scanner.ts
Comment thread scripts/doc-links/markdown-links.ts
Comment thread scripts/tests/doc-guard-helpers.ts
Comment thread scripts/tests/doc-guard-helpers.ts
Comment thread scripts/tests/doc-guard-helpers.ts
Comment thread scripts/tests/doc-links-guard.test.ts Outdated
Comment thread scripts/tests/doc-placement-guard.test.ts
Comment thread docs/cli/configuration.md Outdated
Comment thread docs/hooks/index.md Outdated
Comment thread docs/migration/approval-mode-to-policies.md Outdated
Comment thread docs/migration/approval-mode-to-policies.md Outdated
Comment thread docs/migration/stateless-provider-v2.md Outdated
Comment thread docs/release-notes/2025Q4.md Outdated
Comment thread docs/agent-api.md Outdated
Comment thread docs/emoji-filter.md
Comment thread docs/telemetry.md Outdated
stripCodeTokens drops both code lines and blank lines, so the returned
array cannot be indexed to recover a source line number. The only
current caller does a whole-document search and is unaffected, but the
contract was undocumented, so a future caller could reasonably assume
alignment and report wrong positions. Say so explicitly.

Also rename a fragment test whose name and comment described a leading
hash inside the fragment text, which is not what the test exercises. It
covers cross-file fragment resolution against the target's headings.
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/doc-links/markdown-links.ts
Comment thread scripts/doc-links/markdown-links.ts
Comment thread scripts/tests/doc-guard-helpers.ts
Comment thread scripts/tests/doc-guard-helpers.ts
Comment thread scripts/tests/doc-links-guard.test.ts
Comment thread scripts/tests/doc-links-guard.test.ts
Comment thread scripts/tests/doc-links-guard.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts Outdated
…nces

Fixes the nine review findings on this PR.

Telemetry (docs/telemetry.md):
The page led with "telemetry is disabled by default", which was misleading in
both directions. It implied the always-on local session aggregation was gated
by telemetry.enabled (it is not - loggers.ts aggregateLocally() runs
unconditionally), while burying the far more important fact that no export
path exists at all. Now leads with "never sends telemetry anywhere", then
separates the always-on in-memory /stats layer from the opt-in OTEL
file/console layer. Also documents that --telemetry-target,
--telemetry-otlp-endpoint and --telemetry-otlp-protocol are accepted but inert,
since no exporter reads them.

Removed the corresponding false startup tip ("Send telemetry data to a local
file or GCP") and the tip advertising the inert OTLP endpoint setting.

Audience separation:
Removed seven docs/ -> dev-docs/ links. User-facing pages should not route
readers into contributor documentation; several of these were introduced by the
relocation earlier in this PR.

Moved docs/agent-api.md to dev-docs/ and added an explicit instability notice.
It was presented as a public embeddable API but carries no stability guarantee.

Deleted docs/migration/stateless-provider-v2.md and docs/release-notes/2025Q4.md
(both fully orphaned, no inbound links) and delinked the two historical
CHANGELOG references rather than rewriting released-version history.

Stale/incorrect references:
- configuration.md advertised a gemini-cli-sandbox image; the real image is
  ghcr.io/vybestack/llxprt-code/sandbox.
- Replaced two absolute github.com blob/tree links, which escape the site when
  docs are published to vybestack.dev.
- Renamed docs/EMOJI-FILTER.md to docs/emoji-filter.md to match its peers.

Guard coverage:
Added invariants so these cannot regress: no docs/ page may link into
dev-docs/, and no docs/ page may deep-link to a GitHub blob/tree URL. Both were
mutation-tested to confirm they fail on injected violations. The emoji filename
assertion reads the directory rather than using existsSync, which cannot detect
case on macOS. Doc guard suite: 101 tests passing.
The fence-balance check anchored at column 0, so a code block indented by
one to three spaces (legal per CommonMark) matched zero fences and the
modulo assertion passed vacuously. Allow the optional indent so indented
fences are actually counted.
Comment thread scripts/check-doc-links.ts Outdated
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/check-doc-links.ts Outdated
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/check-doc-placement.ts
Comment thread scripts/tests/doc-links-guard.test.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts Outdated
Four review findings that were real defects rather than style preferences:

- scripts/check-doc-links.ts: scanFile discarded the underlying read error
  and reported a bare "unreadable file", making a CI failure impossible to
  diagnose from the log. Include the error message.

- scripts/check-doc-placement.ts: dirExists treated every statSync error as
  "directory absent". A forbidden directory that exists but is unreadable
  (EACCES, ELOOP) would therefore pass the guard - a false negative, which is
  the worst outcome for a guard. Only ENOENT is a real absence; rethrow the
  rest.

- scripts/check-doc-placement.ts: hasBookkeepingPrefix would spin forever on
  an empty prefix, since indexOf('') returns the same index and the loop never
  advances. Latent today because PREFIX_MARKER_DISPLAYS is non-empty.

- scripts/tests/doc-tree-invariants.test.ts: the GitHub deep-link assertion
  hardcoded the vybestack/llxprt-code slug, so a rename or fork would silently
  turn it into a no-op. Derive owner/repo from package.json repository.url and
  fail loudly if it cannot be parsed. Verified still catching violations by
  injecting one. Also type `entries` as Dirent[] instead of implicit any.
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/check-doc-links.ts
Comment thread scripts/doc-links/file-scanner.ts
Comment thread scripts/doc-links/file-scanner.ts
Comment thread scripts/doc-links/markdown-links.ts
Comment thread scripts/tests/doc-placement-guard.test.ts Outdated
Comment thread scripts/tests/doc-tree-invariants.test.ts
Comment thread scripts/tests/doc-tree-invariants.test.ts Outdated
Comment thread scripts/tests/telemetry-doc-accuracy.test.ts
The audience-separation assertions only matched inline `](dest)` links, so a
reference definition (`[id]: ../dev-docs/...`) could reintroduce exactly the
docs -> dev-docs leak this PR removes without failing the suite. Both checks
now match either form; each was mutation-tested by injecting a reference
definition into docs/index.md and confirming it fails.

Also hoist repoBlobOrTreePattern() out of the filter callback (it re-reads and
parses package.json on every call, and the pattern carries no /g state), and
rename the PLAN_ prefix test, which claimed to exercise case-insensitivity
while asserting an already-uppercase marker against a case-sensitive check.
Comment on lines +94 to +97
// Containment check: resolved target must stay within the repository root
if (!isWithinRoot(absTarget, root)) {
return `${target} resolves outside the repository`;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Potential path traversal via symlinks: isWithinRoot only checks the path string prefix and does not resolve symlinks before containment. If a symlink exists inside docs/ or dev-docs/ pointing outside the repository root (e.g., docs/secret -&gt; /etc), links like secret/passwd will resolve to a path string still within the repo prefix, but will actually access files outside the repo via the symlink. Consider canonicalizing the target with fs.realpath before performing the containment check, or rejecting symlink targets that resolve outside the root.

Comment on lines +160 to +163
function relativePath(absPath: string): string {
const { root } = getRoots();
return relative(root, absPath).replace(/\\/g, '/');
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

relativePath() calls getRoots() on every invocation, which re-reads the DOC_GUARD_ROOT environment variable and re-resolves the root directory path. Since it is called for every broken link found, this causes redundant environment lookups and path resolution, and could yield inconsistent results if the environment variable were mutated during execution. Refactor relativePath to accept the already-resolved root as a parameter, and call getRoots() only once in main().

Comment on lines +147 to +158
function getFragmentContext(
filePath: string,
slugCache: SlugCache,
): FragmentContext {
let ctx = slugCache.get(filePath);
if (ctx === undefined) {
const content = readFileText(filePath);
ctx = { content, slugs: extractHeadingSlugs(content) };
slugCache.set(filePath, ctx);
}
return ctx;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

getFragmentContext() calls readFileText() without error handling. If a target Markdown file is deleted, moved, or becomes unreadable (EACCES, EISDIR, encoding error) after the initial file list is collected, the script will throw an uncaught exception and crash instead of reporting a clean broken-link error. Wrap the readFileText call in a try/catch and return a Break entry describing the unreadable target, similar to the error handling in scanFile().

Comment on lines +143 to +149
function checkMarkers(root: string): readonly Violation[] {
const docsDir = join(root, 'docs');
const files = collectMarkdownFiles([docsDir]);
const violations: Violation[] = [];
for (const file of files) {
const content = readFileText(file);
const markers = findMarkerViolations(content);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

readFileText(file) can throw for unreadable files (e.g., permission changes, race conditions, transient I/O errors), but checkMarkers does not handle that failure. If any single markdown file becomes unreadable during the scan, the entire script crashes with an unhandled exception instead of reporting a clean violation or continuing. Wrap the read in a try/catch and either report the unreadable file as a violation or skip it with a warning so the guard remains robust in CI.

Comment on lines +111 to +126
function processSymlink(full: string, out: string[], seen: Set<string>): void {
const realFull = safeRealpath(full);
if (realFull === undefined) return; // broken symlink — skip
if (seen.has(realFull)) return; // cycle protection
seen.add(realFull);
try {
const stat = lstatSync(realFull);
if (stat.isDirectory()) {
walkDir(realFull, out, seen);
} else if (stat.isFile() && isMarkdown(realFull)) {
out.push(full);
}
} catch {
// broken or unreadable symlink target — skip
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Files inside symlinked directories are collected with their real filesystem paths (walkDir(realFull, ...)), while symlinked files are collected with their symlink paths (out.push(full)). This inconsistency means relative links inside symlinked directories are resolved against the real directory structure instead of the symlinked structure. If a symlink points to a directory with a different layout, links that work through the symlink path may be falsely reported as broken. Consider tracking the original symlink path and resolving relative links from that path instead of the real path.

Comment on lines +509 to +514
it('fails when docs/ root does not exist', async () => {
// beforeEach pre-creates docs/ and dev-docs/; remove docs/ to test
rmSync(join(fx.root(), 'docs'), { recursive: true, force: true });
await runDocLinksGuard(fx.root(), 1);
// The guard must fail (non-zero), proving fail-fast works
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The 'missing root (fail-fast)' test calls await runDocLinksGuard(fx.root(), 1) without asserting the exit code. If the guard throws instead of returning, Vitest will report an unhandled error rather than a passing assertion. Destructure and assert the result to make the intent explicit, matching the pattern used by every other test in this file.

// describe blocks even when useTempDir is called multiple times.
const ref: { root: string } = { root: '' };
beforeEach(() => {
ref.root = mkdtempSync(join(tmpdir(), 'doc-guard-'));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The template for mkdtempSync must include at least 6 trailing 'X' characters. The current template 'doc-guard-' doesn't meet this requirement and will throw an error. This breaks all tests using useTempDir().

Comment on lines +116 to +124
const result = await execFileAsync(RUNTIME, [scriptPath], {
cwd: REPO_ROOT,
env,
encoding: 'utf8',
timeout: 30_000,
maxBuffer: 10 * 1024 * 1024,
});
stdout = result.stdout;
stderr = result.stderr;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

util.promisify(execFile) resolves to a tuple [stdout, stderr], not an object with stdout and stderr properties. Accessing result.stdout will always be undefined, causing the guard output to be lost and the return value to contain undefined instead of the actual output.

Comment on lines +43 to +45
const err = error as { code?: string };
const isMissingOrDenied =
err.code === 'ENOENT' || err.code === 'EACCES' || err.code === 'ENOEXEC';

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The error cast error as { code?: string } is too narrow because execFileSync errors can have a numeric code (non-zero exit code). When bun --version exits with a non-zero code (e.g., corrupted installation), err.code is a number, so isMissingOrDenied is false and the error is re-thrown instead of returning false. This prevents graceful skipping of Bun-dependent tests when bun is installed but broken.

Comment on lines +25 to +27
function readFile(relPath: string): string {
return readFileSync(join(repoRoot, relPath), 'utf8');
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The local helper readFile(relPath) shadows the conceptual fs.readFile namespace and may momentarily suggest the async Promise-based API. Renaming it to something more specific, such as readRepoFile, would make the synchronous, repo-root-scoped nature explicit and reduce cognitive friction.

@acoliver
acoliver merged commit 35369bb into main Jul 25, 2026
25 of 31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer:e2e:ok Trusted contributor; maintainer-approved E2E run

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Audit documentation audience, placement, and writing standards

2 participants