Skip to content

chore(cli,mcp,lib,ci,docs)!: move coverage functionality to patchcov - #2202

Merged
newhoggy merged 1 commit into
mainfrom
issue-2200-remove-coverage
Oct 6, 2026
Merged

newhoggy merged 1 commit into
mainfrom
issue-2200-remove-coverage

Conversation

@newhoggy

@newhoggy newhoggy commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Description

Remove coverage functionality now maintained in rust-works/patchcov. The CLI no longer advertises or accepts coverage, the library no longer exports omni_dev::coverage, and MCP no longer registers coverage_diff.

CI uses the already-published action-works/omni-dev-coverage-check@v2.0, which installs patchcov 0.1.1. The Coverage check name, 30% line gate, PR comment and baseline settings stay intact.

Type of Change

  • Breaking change
  • Maintenance / CI migration

Related Issue

Closes #2200

Implementation plan

Changes Made

  • Delete coverage library/CLI/MCP implementation, dedicated tests and fixtures, .omni-dev/coverage.yaml, and docs/coverage.md.
  • Remove module exports, CLI dispatch/global ownership, MCP router registration/tool inventory, and the JaCoCo MCP integration test.
  • Migrate all 307 existing source markers to patchcov: coverage, preserving regions and reasons; remove the old build-script marker lint.
  • Remove the coverage scope and move its historical commit-lint fixture to the expected unknown-scope cases.
  • Remove active documentation references, update release guidance and both release skill copies, and add an Unreleased Removed migration entry.
  • Accept only the coverage entry/subtree removal in the help snapshot. Keep historical ADRs, historical changelog entries, archived commit subjects, shared dependencies and general coverage artifact ignores.

Testing

Commands run from the explicit issue worktree, with explicit manifest paths for standalone Cargo commands:

  • bash scripts/build.sh: build, formatting, all-target/all-feature Clippy with -D warnings, and default tests pass (13,157 passed; one ignored).
  • cargo test --features mcp: passes (14,047 passed; one ignored), including tool inventory and help snapshot checks.
  • cargo doc --no-deps --document-private-items: passes, emitting 172 rustdoc warnings.
  • actionlint .github/workflows/ci.yml, bash -n scripts/build.sh, git diff --check: pass.
  • Released patchcov 0.1.1: patchcov lint-markers -C "$WT" --include '**/*.rs' passes; downloaded binary checksum verified.
  • omni-dev config scopes lint --root src --root editors --root .github: 675 files, zero violations.
  • Strict commit-message lint and python3 scripts/check_changelog.py --base origin/main: pass.
  • CLI rejects coverage with exit code 2.
  • cargo package --allow-dirty --no-verify --offline: 9.8 MiB compressed, below the 10 MiB cap. Packaging warns about the intentionally excluded evaluation example and yanked chacha20 0.10.0 in the existing lockfile.

The first MCP run failed index-based scope lint before deletions were staged; the rerun passes. A sandboxed default run failed mock-server socket tests and hung; it was stopped, and the full script passes with local socket access. GitHub CI supplies hosted coverage results and Linux/Windows validation; no local coverage percentage is claimed.

Checklist

  • Followed project style and PR guidelines
  • Reviewed the committed diff against origin/main...HEAD
  • Updated documentation and changelog
  • Default and MCP test suites pass
  • Published patchcov-based action verified before migration

Performance Impact

Coverage-only code is removed; remaining runtime logic is unchanged. No benchmarks needed.

Security Considerations

No authentication or data-handling behavior changes. Existing shared dependencies retain callers (including quick-xml in launchd support).

Breaking Changes

Replace omni-dev coverage diff, merge and lint-markers with the corresponding patchcov commands. Replace coverage library/MCP integrations separately. Patchcov configuration lives at .patchcov/config.yaml, and markers use patchcov: coverage.

Delete directly as recommended by the issue; no deprecation stub. This requires the next pre-1.0 minor release; version changes and publication are outside this PR.

Deployment Notes

The coverage workflow installs patchcov independently of omni-dev releases. No deployment action required beyond merging this PR through the normal process.

Additional Notes

One committed-diff review found no actionable findings; none fixed or skipped. No implementation-plan departures. The corpus fixture adjustment was incorporated into the plan. Historical ADR-0046/0047 examples and archived commit subjects remain as historical data.

Hosted coverage and cross-platform results remain pending CI. Rustdoc warnings and the existing yanked dependency warning are unrelated follow-ups, outside this removal. The final test build also emits a linker warning that its __eh_frame exceeds the 16 MiB compact-unwind limit; tests still pass.

Remove the coverage command tree, library module, MCP tool, dedicated
fixtures and repository configuration now maintained by patchcov.

Upgrade the coverage action to its published patchcov-based v2.0 while
keeping the Coverage check name and line gate. Migrate existing source
markers so exclusions still apply, remove the old build-script lint,
and update help snapshots, documentation and the retired scope fixture.

BREAKING CHANGE: replace omni-dev coverage commands with patchcov diff,
merge and lint-markers. The coverage_diff MCP tool and omni_dev::coverage
library module are removed. Source markers now use patchcov: coverage.

Closes #2200
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown

Coverage

Total: 97.93% 🟢 0.1 pp vs main

Comparing 7e58a96..8275975 (merge-base → PR head)

File Before After Δ
src/cli/drive.rs 99.69% 99.74% 🟢 0.05 pp
src/utils/settings.rs 99.29% 99.34% 🟢 0.05 pp
src/drive/lease/restore.rs 98.87% 98.95% 🟢 0.08 pp
src/gmail/draft_edit.rs 99.92% 100% 🟢 0.08 pp
src/jev/route.rs 99.4% 99.48% 🟢 0.09 pp
src/drive/sheets/delete_duplicates.rs 99.1% 99.19% 🟢 0.09 pp
src/drive/sheets/api.rs 99.51% 99.61% 🟢 0.1 pp
src/github_metrics/incremental.rs 99.23% 99.34% 🟢 0.11 pp
src/drive/sheets/developer_metadata.rs 99.09% 99.2% 🟢 0.11 pp
src/cli/gmail/draft/update.rs 99.88% 100% 🟢 0.12 pp
src/cli/gmail/draft/create.rs 99.82% 99.94% 🟢 0.12 pp
src/drive/sheets/grid_range.rs 99.73% 99.86% 🟢 0.13 pp
src/jev/exists.rs 99.86% 100% 🟢 0.14 pp
src/drive/sheets/trim_whitespace.rs 97.7% 97.87% 🟢 0.17 pp
src/drive/sheets/structure.rs 98.72% 98.93% 🟢 0.21 pp
src/drive/sheets/cell_format.rs 99.78% 100% 🟢 0.22 pp
src/daemon/services/worktrees/divergence.rs 99.75% 100% 🟢 0.25 pp
src/claude/client.rs 95.16% 95.42% 🟢 0.25 pp
src/cli/sessions.rs 98.26% 98.53% 🟢 0.27 pp
src/drive/docs/named_range.rs 99.7% 100% 🟢 0.3 pp
src/drive/docs/write.rs 98.86% 99.19% 🟢 0.32 pp
src/drive/sheets/named_range.rs 99.63% 99.96% 🟢 0.33 pp
src/drive/lease/ledger.rs 99.49% 99.83% 🟢 0.34 pp
src/drive/sheets/auto_fill.rs 99.46% 99.82% 🟢 0.36 pp
src/cli/drive/lease.rs 98.97% 99.34% 🟢 0.37 pp
src/drive/sheets/text_to_columns.rs 99.57% 99.95% 🟢 0.37 pp
src/cli/drive/sheets/values.rs 99.6% 100% 🟢 0.4 pp
src/cli/drive/trash.rs 99.59% 100% 🟢 0.41 pp
src/drive/sheets/banding.rs 99.41% 99.84% 🟢 0.43 pp
src/drive/sheets/dimension_group.rs 99.54% 100% 🟢 0.46 pp
src/cli/claude_wrap/diagnostics.rs 98.59% 99.06% 🟢 0.47 pp
src/drive/sync.rs 99.53% 100% 🟢 0.47 pp
src/drive/docs/table.rs 99.46% 100% 🟢 0.54 pp
src/drive/sheets/randomize_range.rs 99.26% 100% 🟢 0.74 pp
src/drive/docs/anchor.rs 99.21% 100% 🟢 0.79 pp
src/utils/secret_env.rs 99.14% 100% 🟢 0.86 pp
src/drive/sheets/target_gate.rs 98.37% 99.38% 🟢 1.01 pp
src/drive/sheets/sort_range.rs 98.93% 100% 🟢 1.07 pp
src/cli/claude_wrap.rs 95.28% 96.73% 🟢 1.45 pp
src/cli/worktrees/ui/terminal/pty.rs 95.56% 97.09% 🟢 1.53 pp
src/utils/secret_env/command.rs 98.43% 100% 🟢 1.57 pp
src/drive/sheets/embedded_object.rs 98.07% 99.64% 🟢 1.58 pp
src/drive/sheets/find_replace.rs 98.16% 100% 🟢 1.84 pp
src/cli/gmail/sync_all.rs 95.24% 98.45% 🟢 3.2 pp
src/sessions/watcher.rs 93.36% 97.55% 🟢 4.19 pp
src/drive/test_support.rs 95.68% 100% 🟢 4.32 pp
src/cli/ai/jev/route.rs 94.21% 99.52% 🟢 5.32 pp
src/cli/ai/jev/verify_decision.rs 70.41% 95.2% 🟢 24.79 pp
🔇 269 ignored region(s), 0 tolerated region(s)

ignore removes the lines from both reports; tolerate keeps them in the reported percentage but scores them against the baseline, so a cross-run flip cannot move a delta. Regions are read from each revision's own source.

File Kind Lines Rev Reason
src/claude/client.rs ignore 815-827 head process-bound: hardcodes SystemEnv with no injectable seam (unlike create_default_claude_client_with's tested Default arm, which this mirrors) and has no in-crate caller; testing it would mean mutating real process env for shared credential vars
src/cli/ai/jev/route.rs ignore 176-251 head RouteCommand::execute is the process-bound wiring shell; fetch_docs, run_route_with_reference_fetch_failures, render_output_with_style and terminal_style_with provide its deterministic seams
src/cli/ai/jev/route.rs ignore 325-330 head the SystemEnv/stdout probe is process-bound; terminal_style_with is exhaustively covered through its injected environment and TTY seam
src/cli/ai/jev/route.rs ignore 882 head guards this test's assumption; the parse above always fails on --ignore-closed with --allow-closed
src/cli/ai/jev/route.rs ignore 914 head guards this test's assumption; the parse above always fails on a malformed --ladder-definition
src/cli/ai/jev/verify_decision.rs ignore 89-142 head VerifyDecisionCommand::execute is the process-bound wiring shell; fetch_input and run_verify provide its deterministic seams
src/cli/claude_wrap.rs ignore 160-170 head process-bound wiring shell: it joins this process's own stdin/stdout and reads the real OMNI_DEV_CLAUDE_WRAP_LOG, which a test must not take over (see the note on run/wrap in the tests module); wrap_io_diagnostics beneath it is covered directly
src/cli/claude_wrap.rs ignore 716-720 head resolve_socket fails only when the platform has no data directory to put the default socket in (no resolvable home), which a test cannot reproduce on macOS or Linux; the fail-open return is what keeps the wrapper forwarding
src/cli/claude_wrap.rs ignore 773-777 head to_value on an ObserveRequest fails only for a non-UTF-8 cwd, and the tracker takes cwd from a JSON string, so it is always UTF-8; the arm exists so a future non-string field cannot silently drop the report
src/cli/claude_wrap/diagnostics.rs ignore 60 head Builder::spawn fails only when the OS refuses a new thread (resource exhaustion), which a test cannot provoke; the fail-open return is what keeps the wrapper forwarding
src/cli/drive.rs ignore 2407 head guards this test's assumption; the parse above always yields DriveSubcommands::Sync for a sync argv
src/cli/drive/lease.rs ignore 564-568 head a sheet restore's fresh backup is always a DriveCopy — restore.rs's own recheck refuses unless the target is still a spreadsheet, and acquire() only ever takes a Bytes backup of a non-native target; this arm exists solely for exhaustiveness over the shared LeaseBackup enum
src/cli/drive/lease.rs ignore 1274-1277 head guards this test helper against misuse; every call site below passes an acquire subcommand
src/cli/drive/lease.rs ignore 1288-1291 head guards this test helper against misuse; every call site below passes a prune subcommand
src/cli/drive/sheets/values.rs ignore 208 head this closing brace of the if let Some(...) = last (no else) reports 0 hits under llvm-cov even though both inner branches are exercised (csv_interior_blank_line_before_an_unterminated_last_row_is_kept hits the insert path, csv_single_trailing_newline_adds_no_row hits the no-insert path); last is always Some once missing_final_newline is true, since the loop above always runs at least once for non-empty content, so there is no reachable skip path — the same llvm-cov region-attribution artifact on an if-let's closing brace as src/utils/settings.rs:1096
src/cli/drive/trash.rs ignore 168 head guards this test's assumption; the parse above always yields a trash or untrash subcommand
src/cli/gmail/draft/create.rs ignore 2088-2092 head never called: every test using UnreadableStdin gives an HTML body, so resolve_body returns before reading stdin; the panic exists to fail loudly if that ever changes
src/cli/gmail/draft/update.rs ignore 261 head this closing brace reports 0 hits under llvm-cov regardless of test count — verified locally: run_update_sets_a_checked_from_and_keeps_everything_else and run_update_to_the_nameless_primary_leaves_from_to_gmail both complete the block above successfully (proven by the outer if-let's own closing brace and the following let drafts = ... line both measuring as hit), yet this specific inner brace, immediately after a statement with two chained ? operators, never registers a hit; an llvm-cov region-attribution artifact, not an untested path
src/cli/gmail/sync_all.rs ignore 213-246 head SyncAllCommand::execute is the process-bound wiring shell: it loads the real ~/.omni-dev settings and builds clients against the real Gmail host; run_sync_all, load_gmail_sync_config and validate_accounts are its tested seams
src/cli/sessions.rs ignore 273-276 head resolve_socket fails only when the platform has no data directory to put the default socket in (no resolvable home), which a test cannot reproduce on macOS or Linux; the sink is fail-open by design, so this is the same silent return as every other skipped hook
src/cli/sessions.rs ignore 283 head wire returns None only through the serialization failure ignored in wire() itself (a non-UTF-8 cwd, which a hook payload cannot carry), so this arm is unreachable for the same reason
src/cli/sessions.rs ignore 403-410 head to_value on an ObserveRequest fails only for a non-UTF-8 cwd, and the hook payload's cwd is deserialized from a JSON string, so it is always UTF-8; the arm exists so a future non-string field cannot silently drop the report
src/cli/sessions.rs ignore 3529 head the arm above always matches: parse() above always parses an install-hooks argv into SessionsSubcommands::InstallHooks
src/cli/sessions.rs ignore 3533 head the arm above always matches: parse() above always parses an uninstall-hooks argv into SessionsSubcommands::UninstallHooks
src/cli/worktrees/ui/terminal/pty.rs ignore 311-318 head the closure runs only in the forked child between fork and exec, and exec discards that process's coverage counters before they can be flushed, so llvm-cov reports 0 hits on these lines however often the tests run it (CI measured the whole body uncovered on PR #2169); the reset is checked by behaviour instead, in the_well_behaved_test_passes_when_the_test_process_ignores_sighup
src/daemon/services/worktrees/divergence.rs ignore 346 head only runs if a started computation never sets its flag within 2s, which fails the calling test; a passing run never takes it
src/drive/docs/anchor.rs ignore 351 head map_boundary is only called with a byte offset inside the text its runs concatenate, so the loop always returns first; the Err keeps the function total without a panic
src/drive/docs/anchor.rs ignore 404 head a match never contains the paragraph's closing newline (find rejects a needle with one) and collect verified the last run ends at it, so the index always lies inside the paragraph; kept as defence on the write boundary
src/drive/docs/anchor.rs ignore 463 head a container switch between two paragraphs of one container is always a table, and the paragraph before it has protected_newline, so the check below refuses the range before the walk reaches a foreign paragraph; kept as defence in depth
src/drive/docs/anchor.rs ignore 488 head lo and hi are regex match boundaries mapped through whole runs, so neither falls inside a surrogate pair; kept as defence in the UTF-16 arithmetic
src/drive/docs/anchor.rs ignore 496 head end is the end of the last anchor, which lies inside a run the loop above visits, and a gap before it already returned UnsafeRange, so the cursor always reaches it; kept as defence in depth
src/drive/docs/anchor.rs ignore 577 head collect verified every paragraph has a final run ending at p.end, and the loop above leaves cursor at that run's end, so it always matches; kept as defence in depth on the write boundary
src/drive/docs/anchor.rs ignore 648 head collect refuses a paragraph whose last run does not end at the paragraph's end, and the loop above leaves cursor on the last run's end, so cursor always equals p.end here; kept as defence in depth on the write boundary
src/drive/docs/named_range.rs ignore 214 head the Create branch above always returns, so a Create mutation never reaches the ID lookup; the arm exists solely for exhaustiveness
src/drive/docs/named_range.rs ignore 283 head the Create branch above always returns, so a Create mutation never reaches this match; the arm exists solely for exhaustiveness
src/drive/docs/table.rs ignore 329 head rows, cells and paragraphs are each checked above to start at or after the previous one's end, so the half-open cell ranges are pairwise disjoint and at most one contains the index; kept as defence in depth on the write boundary
src/drive/docs/table.rs ignore 349 head an Insert edit returned from the branch above, so only a Dimension edit reaches here; the else-arm exists only to destructure the already-known variant
src/drive/docs/table.rs ignore 386 head validate already refuses a Dimension edit carrying InsertTable before resolve reads the document, so this arm exists solely for exhaustiveness over TableVerb
src/drive/docs/write.rs ignore 942-946 head preview is built by the payload match above, so a Table payload always carries a WouldEditTable preview; this arm exists solely for exhaustiveness over the shared WriteResult enum
src/drive/docs/write.rs ignore 960-964 head preview is built by the NamedRange payload match above, so a NamedRange payload always carries WouldMutateNamedRange; this arm exists solely for exhaustiveness over the shared WriteResult enum
src/drive/docs/write.rs ignore 991-995 head preview is built by the payload match above, so an Insert/Delete/List payload always carries its matching edit preview; this arm exists solely for exhaustiveness over the shared WriteResult enum
src/drive/docs/write.rs ignore 2343 head anchored_payloads yields only Insert and Delete
src/drive/lease/ledger.rs ignore 1109-1113 head mutate_locked refuses before ever calling the closure, so its body never runs — a hit here is a regression, not a coverage gap
src/drive/lease/restore.rs ignore 1261-1265 head every test using this double refuses before authenticating; a hit here is a regression, not a coverage gap
src/drive/sheets/api.rs ignore 1492 head the assertion arm only fires if the outcome type regresses, in which case the test has already failed
src/drive/sheets/auto_fill.rs ignore 584 head unreachable by construction: source_grid.sheet_id was itself resolved from this same workbook by resolve_grid_range above, so find_sheet_by_id always finds it
src/drive/sheets/auto_fill.rs ignore 802 head every call site resolves grid from a range already checked with grid_range::is_bounded, or computes it from one via compute_destination, which only ever produces a fully bounded range from a fully bounded source; this else-arm exists only to unwrap the shared Option fields
src/drive/sheets/auto_fill.rs ignore 815 head unreachable by construction: compose rejects only a sheet-prefixed or whole-sheet range, and the numeric {start}:{end} built just above is neither
src/drive/sheets/auto_fill.rs ignore 1471 head guards this test's assumption; build_request always returns AutoFill
src/drive/sheets/auto_fill.rs ignore 1488 head guards this test's assumption; build_request always returns AutoFill
src/drive/sheets/auto_fill.rs ignore 2688 head guards this test's assumption; the mocked response above always leads to WouldChange
src/drive/sheets/auto_fill.rs ignore 2736 head guards this test's assumption; the mocked response above always leads to WouldChange
src/drive/sheets/auto_fill.rs ignore 2774 head guards this test's assumption; the mocked response above always leads to WouldChange
src/drive/sheets/auto_fill.rs ignore 2828 head guards this test's assumption; the mocked response above always leads to WouldChange
src/drive/sheets/banding.rs ignore 763 head resolve_sheet_target always resolves AddBanding to a range or has already returned its refusal; this else-arm exists only to unwrap the shared Option
src/drive/sheets/banding.rs ignore 796 head find_existing_banded_range returns Some for UpdateBanding or has already returned RefusedBandedRangeNotFound; this else-arm exists only to unwrap the shared Option
src/drive/sheets/banding.rs ignore 1233 head guards this test's assumption; build_request always returns AddBanding for a BandingVerb::AddBanding verb
src/drive/sheets/banding.rs ignore 1261 head guards this test's assumption; build_request always returns AddBanding for a BandingVerb::AddBanding verb
src/drive/sheets/banding.rs ignore 1302 head guards this test's assumption; build_request always returns UpdateBanding for a BandingVerb::UpdateBanding verb
src/drive/sheets/banding.rs ignore 1342 head guards this test's assumption; build_request always returns UpdateBanding for a BandingVerb::UpdateBanding verb
src/drive/sheets/banding.rs ignore 1373 head guards this test's assumption; build_request always returns UpdateBanding for a BandingVerb::UpdateBanding verb
src/drive/sheets/banding.rs ignore 1398 head guards this test's assumption; build_request always returns UpdateBanding for a BandingVerb::UpdateBanding verb
src/drive/sheets/banding.rs ignore 1511 head guards this test's assumption; build_request always returns UpdateBanding for a BandingVerb::UpdateBanding verb
src/drive/sheets/banding.rs ignore 1524 head guards this test's assumption; build_request always returns DeleteBanding for a BandingVerb::DeleteBanding verb
src/drive/sheets/banding.rs ignore 2026 head guards this test's assumption; only reached when the refusal regresses
src/drive/sheets/cell_format.rs ignore 294 head this closing brace reports 0 hits under llvm-cov regardless of test count — verified locally: render_line_covers_background_bold_number_note_and_validation and render_line_covers_italic_strikethrough_underline_foreground_alignment_and_bare_validation both complete the block above (the pattern and no-pattern pushes both measure as hit), yet this specific brace, closing the format_type.is_empty() check, never registers a hit; the same llvm-cov region-attribution artifact as src/utils/settings.rs:1096
src/drive/sheets/delete_duplicates.rs ignore 1405 head this let-else panic only runs if the match failed to bind the expected variant; an open-ended range always refuses here
src/drive/sheets/developer_metadata.rs ignore 1249 head guards this test's assumption; the multi-row span above always fails resolve_location with RefusedInvalidLocation
src/drive/sheets/developer_metadata.rs ignore 2637 head guards this test's assumption; a start of 0 above always fails resolve_location with RefusedInvalidLocation
src/drive/sheets/dimension_group.rs ignore 469 head find_sheet_id only ever returns an id it read out of this same workbook's sheets, so a lookup by that id in the same workbook always succeeds; this else-arm exists only to unwrap the shared Option
src/drive/sheets/dimension_group.rs ignore 716-718 head resolve_for_update returns Ok only with exactly one group, or the caller has already returned RefusedDimensionGroupNotFound/RefusedAmbiguousDimensionGroup; this else-arm exists only to unwrap the shared enum
src/drive/sheets/dimension_group.rs ignore 735-737 head resolve_for_delete returns Ok only as MaybeOne, or the caller has already returned RefusedDimensionGroupNotFound; this else-arm exists only to unwrap the shared enum
src/drive/sheets/dimension_group.rs ignore 1218 head guards this test's assumption; resolve_for_update always returns RefusedAmbiguousDimensionGroup for more than one candidate with no depth given
src/drive/sheets/dimension_group.rs ignore 1301 head guards this test's assumption; build_request always returns AddDimensionGroup for a DimensionGroupVerb::AddDimensionGroup verb
src/drive/sheets/dimension_group.rs ignore 1321 head guards this test's assumption; build_request always returns UpdateDimensionGroup for a DimensionGroupVerb::UpdateDimensionGroup verb
src/drive/sheets/dimension_group.rs ignore 1339 head guards this test's assumption; build_request always returns DeleteDimensionGroup for a DimensionGroupVerb::DeleteDimensionGroup verb
src/drive/sheets/dimension_group.rs ignore 1841 head guards this test's assumption; the mounted workbook has no sheet titled Q1
src/drive/sheets/embedded_object.rs ignore 1264 head build_plan only calls build_add_chart after matching verb as EmbeddedObjectVerb::AddChart; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 1367 head the series_ranges.len() != 1 check immediately above has already returned, so the pop always yields Some; this else-arm exists only to unwrap it
src/drive/sheets/embedded_object.rs ignore 1608 head merge_chart_spec is only ever called from build_update_chart, which build_plan reaches only after matching verb as EmbeddedObjectVerb::UpdateChart; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 1688 head merge_pie_chart is only ever called from merge_chart_spec, which has already destructured the same verb as EmbeddedObjectVerb::UpdateChart; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 1762 head merge_basic_chart is only ever called from merge_chart_spec, which has already destructured the same verb as EmbeddedObjectVerb::UpdateChart; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 1938 head build_plan only calls build_add_slicer after matching verb as EmbeddedObjectVerb::AddSlicer; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 2004-2006 head build_plan only calls build_update_slicer after matching verb as EmbeddedObjectVerb::UpdateSlicer; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 2291 head build_plan only calls build_move_chart after matching verb as EmbeddedObjectVerb::MoveChart; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 2362 head build_plan only calls build_move_slicer after matching verb as EmbeddedObjectVerb::MoveSlicer; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 2407 head build_plan only calls build_update_chart_border after matching verb as EmbeddedObjectVerb::UpdateChartBorder; this else-arm exists only to destructure the already-known variant
src/drive/sheets/embedded_object.rs ignore 2421 head validate_verb already refuses UpdateChartBorder { color: None, clear: false, .. } before build_plan is ever reached, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 2736 head every row of the table above pairs its raw value with the kind parse_chart_type returns for it, so the mismatch arm only fires if one of the two assertions above would already have failed
src/drive/sheets/embedded_object.rs ignore 2950 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 2961 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 2972 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 2986 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3089 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3112 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3129 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3150 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3171 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3183 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3432 head this test always constructs verb as EmbeddedObjectVerb::UpdateChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3449 head this test always constructs verb as EmbeddedObjectVerb::UpdateChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3467 head this test always constructs verb as EmbeddedObjectVerb::UpdateChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3520 head this test always constructs verb as EmbeddedObjectVerb::UpdateChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3569 head this test always constructs verb as EmbeddedObjectVerb::UpdateChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3598 head this test always constructs verb as EmbeddedObjectVerb::UpdateChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 3623 head this test always constructs verb as EmbeddedObjectVerb::UpdateChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4150 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4797 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4810 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4830 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4845 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4858 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4873 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4882 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4895 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4908 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4930 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 4951 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5070 head update_chart_verb_with's only callers pass an EmbeddedObjectVerb::UpdateChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5094 head update_chart_verb_with's only callers pass an EmbeddedObjectVerb::UpdateChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5109 head update_chart_verb_with's only callers pass an EmbeddedObjectVerb::UpdateChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5125 head update_chart_verb_with's only callers pass an EmbeddedObjectVerb::UpdateChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5143 head update_chart_verb_with's only callers pass an EmbeddedObjectVerb::UpdateChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5161 head update_chart_verb_with's only callers pass an EmbeddedObjectVerb::UpdateChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5188 head update_chart_verb_with's only callers pass an EmbeddedObjectVerb::UpdateChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5233 head update_chart_verb_with's only callers pass an EmbeddedObjectVerb::UpdateChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5364 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5441 head add_slicer_verb always returns an EmbeddedObjectVerb::AddSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5472 head add_slicer_verb always returns an EmbeddedObjectVerb::AddSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5566 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5576 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5586 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5596 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5606 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5620 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5675 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5684 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5739 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5753 head update_slicer_verb always builds an EmbeddedObjectVerb::UpdateSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5805 head callers always pass a verb built by move_chart_verb, which is always MoveChart
src/drive/sheets/embedded_object.rs ignore 5812 head callers always pass a verb built by move_slicer_verb, which is always MoveSlicer
src/drive/sheets/embedded_object.rs ignore 5856 head move_chart_verb always builds an EmbeddedObjectVerb::MoveChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5888 head move_chart_verb always builds an EmbeddedObjectVerb::MoveChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5912 head move_chart_verb always builds an EmbeddedObjectVerb::MoveChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5955 head move_chart_verb always builds an EmbeddedObjectVerb::MoveChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5971 head move_chart_verb always builds an EmbeddedObjectVerb::MoveChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 5986 head move_slicer_verb always builds an EmbeddedObjectVerb::MoveSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6025 head move_chart_verb always builds an EmbeddedObjectVerb::MoveChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6040 head move_slicer_verb always builds an EmbeddedObjectVerb::MoveSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6056 head move_chart_verb always builds an EmbeddedObjectVerb::MoveChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6090 head move_slicer_verb always builds an EmbeddedObjectVerb::MoveSlicer, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6169 head update_chart_border_verb always builds an EmbeddedObjectVerb::UpdateChartBorder, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6187 head update_chart_border_verb always builds an EmbeddedObjectVerb::UpdateChartBorder, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6199 head update_chart_border_verb always builds an EmbeddedObjectVerb::UpdateChartBorder, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6211 head update_chart_border_verb always builds an EmbeddedObjectVerb::UpdateChartBorder, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6690 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 6865 head add_chart_verb_with's only callers pass an EmbeddedObjectVerb::AddChart, so this arm can never run
src/drive/sheets/embedded_object.rs ignore 7134 head this test always constructs verb as EmbeddedObjectVerb::AddChart above, so this arm can never run
src/drive/sheets/filter.rs ignore 643 head find_existing_filter_view returns Some for UpdateFilterView or has already returned RefusedFilterViewNotFound; this else-arm exists only to unwrap the shared Option
src/drive/sheets/filter.rs ignore 693 head resolve_sheet_target returns Some for SetBasicFilter or has already returned its refusal; this else-arm exists only to unwrap the shared Option
src/drive/sheets/filter.rs ignore 711 head resolve_sheet_target returns Some for ClearBasicFilter or has already returned its refusal; this else-arm exists only to unwrap the shared Option
src/drive/sheets/filter.rs ignore 723 head resolve_sheet_target returns Some for AddFilterView or has already returned its refusal; this else-arm exists only to unwrap the shared Option
src/drive/sheets/filter.rs ignore 745 head update_write is built for UpdateFilterView above or has already returned its refusal; this else-arm exists only to unwrap the shared Option
src/drive/sheets/filter.rs ignore 3932 head this arm only fires if the match failed to bind the expected variant; the assertion below it pins the same variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 306-310 head request_scope only returns None for a Range target paired with no grid, but resolve_target's Range arm always returns Ok with Some(grid) alongside it; this arm exists only to unwrap the shared Option
src/drive/sheets/find_replace.rs ignore 393-397 head validate_scope_syntax already refuses --all-sheets combined with --sheet before resolve_target is ever reached; this arm exists only as a defensive re-check
src/drive/sheets/find_replace.rs ignore 403-407 head validate_scope_syntax's scope_count check already guarantees --range is unset whenever --whole-sheet is set, before resolve_target is ever reached; this arm exists only as a defensive re-check
src/drive/sheets/find_replace.rs ignore 410-414 head validate_scope_syntax already refuses --whole-sheet without --sheet before resolve_target is ever reached; this arm exists only as a defensive re-check
src/drive/sheets/find_replace.rs ignore 503 head record_attempt is only called when !opts.dry_run, and WouldChange is only ever returned when opts.dry_run is true, so this arm can never run
src/drive/sheets/find_replace.rs ignore 843 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 856 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 870 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 894 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 914 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 933 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 951 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 1091 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 1155 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/find_replace.rs ignore 1581 head assert_eq!'s message args are only evaluated on failure, and this test always passes
src/drive/sheets/grid_range.rs ignore 1122 head a sheet-only composition always fails at the split_sheet_prefix check above; not_found is never reached in this test
src/drive/sheets/named_range.rs ignore 489 head existing is always Some for UpdateNamedRange: find_existing_named_range above either returns it or refuses and returns early
src/drive/sheets/named_range.rs ignore 541 head existing is always Some for DeleteNamedRange: find_existing_named_range_target above either returns it or refuses and returns early
src/drive/sheets/named_range.rs ignore 564 head new_grid is always Some for AddNamedRange: resolve_grid above either returns it or refuses and returns early
src/drive/sheets/named_range.rs ignore 579 head existing is always Some for UpdateNamedRange: find_existing_named_range above either returns it or refuses and returns early
src/drive/sheets/named_range.rs ignore 590 head existing is always Some for DeleteNamedRange: find_existing_named_range above either returns it or refuses and returns early
src/drive/sheets/named_range.rs ignore 1270 head find_existing_named_range always returns RefusedAmbiguousName here; this test's mounted workbook always has two matching names
src/drive/sheets/named_range.rs ignore 1356 head check_new_name_available always returns RefusedDuplicateName here; this test's new_name always collides with a different named range
src/drive/sheets/named_range.rs ignore 1381 head check_new_name_available always returns RefusedDuplicateName here; this test's new_name always collides with two different named ranges
src/drive/sheets/paste.rs ignore 701 head extents are bounded and non-empty by construction; the fallback exists so an invariant break degrades instead of panicking
src/drive/sheets/pivot.rs ignore 1953 head dry_run plus a fully-allowing gate always reaches WouldChange here; this branch is a safety net against an unexpected refusal, not a coverage gap
src/drive/sheets/randomize_range.rs ignore 678 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/randomize_range.rs ignore 740 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/randomize_range.rs ignore 879 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/randomize_range.rs ignore 916 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/randomize_range.rs ignore 938 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/randomize_range.rs ignore 954 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/randomize_range.rs ignore 979 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 790 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 879 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 894 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 911 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 928 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 942 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 957 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 1087 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 1121 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 1142 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 1158 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/sort_range.rs ignore 1183 head this let-else panic only runs if the match failed to bind the expected variant; this test always constructs that exact variant, so the branch never executes
src/drive/sheets/structure.rs ignore 1868-1870 head validate_verb_args refuses an UpdateSheetProperties verb that set none of its six properties before structure_inner ever reaches build_request, and every one of those six pushes a fields entry, so fields is never empty here
src/drive/sheets/structure.rs ignore 1962-1966 head every call site matches on the verb as UpdateWorkbookProperties before calling workbook_properties_summary, so this else-arm exists only to destructure the already-known variant
src/drive/sheets/structure.rs ignore 6255 head guards this test's assumption; validate_verb_args always refuses --tab-color with --clear-tab-color as RefusedInvalidRange
src/drive/sheets/structure.rs ignore 6307 head guards this test's assumption; check_freeze_bound always refuses a negative --freeze-rows as RefusedInvalidRange
src/drive/sheets/structure.rs ignore 6335 head guards this test's assumption; check_freeze_bound always refuses a --freeze-rows at or above the sheet's known row count as RefusedInvalidRange
src/drive/sheets/structure.rs ignore 6435 head guards this test's assumption; check_freeze_bound always refuses a negative --freeze-columns as RefusedInvalidRange
src/drive/sheets/structure.rs ignore 6462 head guards this test's assumption; check_freeze_bound always refuses a --freeze-columns at or above the sheet's known column count as RefusedInvalidRange
src/drive/sheets/structure.rs ignore 6508 head guards this test's assumption; validate_verb_args always refuses an update-sheet-properties verb that set no property as RefusedInvalidRange
src/drive/sheets/structure.rs ignore 8052 head build_request always returns UpdateSpreadsheetProperties for an UpdateWorkbookProperties verb, so this else-arm exists only to unwrap the shared enum
src/drive/sheets/structure.rs ignore 8076 head build_request always returns UpdateSpreadsheetProperties for an UpdateWorkbookProperties verb, so this else-arm exists only to unwrap the shared enum
src/drive/sheets/structure.rs ignore 8104 head build_request always returns UpdateSpreadsheetProperties for an UpdateWorkbookProperties verb, so this else-arm exists only to unwrap the shared enum
src/drive/sheets/structure.rs ignore 8156 head guards this test's assumption; a dry run against an allowed target always reaches WouldChange here
src/drive/sheets/structure.rs ignore 8236 head guards this test's assumption; an apply against an allowed target with a mocked batchUpdate always reaches Changed here
src/drive/sheets/target_gate.rs ignore 550 head every operation is granted by the mounted rule, so resolve_all always returns Gated here; this branch is a safety net against an unexpected refusal, not a coverage gap
src/drive/sheets/target_gate.rs ignore 581 head the target has a visible parent with a matching folder rule, so resolve_all always returns Gated here; this branch is a safety net against an unexpected refusal, not a coverage gap
src/drive/sheets/target_gate.rs ignore 609 head the target has a visible parent with a matching folder rule, so resolve_all always returns Gated here; this branch is a safety net against an unexpected refusal, not a coverage gap
src/drive/sheets/target_gate.rs ignore 645 head every operation is granted by a mounted rule, so resolve_all always returns Gated here; this branch is a safety net against an unexpected refusal, not a coverage gap
src/drive/sheets/target_gate.rs ignore 722 head the file rule gives sheets-structure something to deny rather than find nothing, so resolve_all always returns Gated here; this branch is a safety net against an unexpected refusal, not a coverage gap
src/drive/sheets/text_to_columns.rs ignore 1502 head this match's catch-all only runs if build_request failed to return the request variant this test constructs it to build; that never happens, so the branch never executes
src/drive/sheets/text_to_columns.rs ignore 1514 head this match's catch-all only runs if build_request failed to return the request variant this test constructs it to build; that never happens, so the branch never executes
src/drive/sheets/text_to_columns.rs ignore 1584 head would_change_outcome always constructs a WouldChange result, so this catch-all identity arm never runs
src/drive/sheets/text_to_columns.rs ignore 1667 head from_lease_failed always returns Failed; this test's catch-all guards that assumption and never runs
src/drive/sheets/text_to_columns.rs ignore 2308 head this test's mocked responses always drive a WouldChange outcome; this catch-all guards that assumption and never runs
src/drive/sheets/text_to_columns.rs ignore 2403 head this test's mocked responses always drive a Changed outcome; this catch-all guards that assumption and never runs
src/drive/sheets/text_to_columns.rs ignore 2858 head this test's mocked responses always drive a Changed outcome; this catch-all guards that assumption and never runs
src/drive/sheets/trim_whitespace.rs ignore 1315 head this let-else panic only runs if the match failed to bind the expected variant; the mocked run always produces it
src/drive/sheets/trim_whitespace.rs ignore 1436 head this let-else panic only runs if the match failed to bind the expected variant; the mocked run always produces it
src/drive/sheets/validation.rs ignore 1793 head guards this test's assumption; only reached when the refusal regresses
src/drive/sync.rs ignore 110 head every caller passes one of the five literal actions above; the arm only guards against a future caller adding a sixth without a counter
src/drive/sync.rs ignore 473 head TOCTOU only: safe_path above already ran this identical lstat on the leaf and fails on any non-NotFound error, so a deterministic test cannot reach it
src/drive/test_support.rs ignore 315-321 head only runs if a function mutates a Drive env var without EnvGuard::take(); offenders.is_empty() below is this test's whole point
src/drive/test_support.rs ignore 329 head assert! message args only evaluate when the condition is false, i.e. an offender was found
src/github_issues.rs ignore 579 head validated by the citation parser; every ItemRef reaching here already has a project of the form owner/repo
src/github_metrics/incremental.rs ignore 1207 head guards this test's assumption; the last attempt treats a raced search as a file not found, so it always plans
src/gmail/draft_edit.rs ignore 634 head unreachable: a delimiter line's start is always the position right after some previous line's '\n' (either the outer while loop's line_end, or 0 for the very first line), so it always ends with '\n'; this arm exists solely for exhaustiveness over the byte-slice check
src/jev/citations.rs ignore 127 head unreachable: both call sites (find_citations, first_citation) already filtered out the only alternative with no numbered group (other_url) via number_end before calling this
src/jev/exists.rs ignore 190 head Child::kill returns Ok for a child that has exited but not been reaped, and wait() only runs after this call, so only an OS-level failure such as EPERM reaches this arm; it exists so that failure is logged rather than silently dropped
src/jev/route.rs ignore 310 head defensive: the embedded questions YAML always has all three stage keys, pinned by stage_questions_are_the_tested_wording
src/jev/route.rs ignore 320 head defensive: every embedded stage question is a choice question, pinned by stage_questions_are_the_tested_wording
src/jev/route.rs ignore 328 head defensive: no embedded or custom tier is ever named none, the one fixed criterion (stage_design's no-design-work option)
src/jev/route.rs ignore 1804 head unreachable: https is a special scheme per the WHATWG URL spec, so a URL that already passed the scheme check above can never be cannot-be-a-base and path_segments() is always Some
src/jev/route.rs ignore 1970 head assert_eq!'s message args are only evaluated on failure, and this test always passes
src/jev/route.rs ignore 1980 head assert_eq!'s message args are only evaluated on failure, and this test always passes
src/jev/route.rs ignore 1981 head assert_eq!'s message args are only evaluated on failure, and this test always passes
src/jev/route.rs ignore 3369 head guards this test helper against misuse; every call site below passes an already-routed outcome
src/jev/route.rs ignore 3575 head guards this test's assumption; the mocked response above always answers with a routed outcome
src/jev/route.rs ignore 3639 head guards this test's assumption; the mocked response above always leaves gemini's answers missing
src/sessions/watcher.rs ignore 148-151 head read_dir yields an Err entry only on an I/O fault (EIO, a vanished directory mid-iteration), which a test cannot provoke; the scan counts it and moves on, the same handling as the unreadable project directory below
src/sessions/watcher.rs ignore 159-162 head read_dir yields an Err entry only on an I/O fault (EIO, a vanished directory mid-iteration), which a test cannot provoke; the scan counts it and moves on, the same handling as the unreadable project directory above
src/sessions/watcher.rs ignore 174-177 head DirEntry::metadata does not follow symlinks, so it fails only when the entry vanished between read_dir and the stat, a race a test cannot provoke; the scan counts it and moves on
src/sessions/watcher.rs ignore 183-186 head Metadata::modified fails only on a platform with no mtime, and every supported one (Linux, macOS) has it
src/sessions/watcher.rs ignore 250-254 head spawn_blocking's JoinError needs the scan closure to panic or the runtime to shut down mid-scan; scan has no panicking path, and the runtime outlives the watcher, whose token is cancelled first
src/utils/secret_env.rs ignore 936-944 head the loop above runs this 4 times and every mode fails the same way; verified locally that llvm-cov still reports 0 hits on the matches!( line — a region-attribution artifact on the nested assert!/matches! macro call, not an untested path
src/utils/secret_env.rs ignore 1366 head exercised by strip_test_modules_ignores_braces_in_literals_and_comments's '{' char literal; verified locally that llvm-cov still reports 0 hits — a region-attribution artifact on this closing brace, not an untested path
src/utils/secret_env.rs ignore 1421 head only runs if an unregistered secret-shaped literal exists; the assert below that unknown is empty is this test's whole point, so a passing run never takes this branch
src/utils/secret_env.rs ignore 1479-1481 head only runs if a registered secret is read through a plain accessor outside this module; offenders.is_empty() below is this test's whole point
src/utils/secret_env.rs ignore 1525 head only runs if a _FILE companion collides with an existing variable; collisions.is_empty() below is this test's whole point
src/utils/secret_env.rs ignore 1556 head only runs if a stray file names the companion; strays.is_empty() below is this test's whole point
src/utils/secret_env/command.rs ignore 281-290 head try_wait on a live, owned child fails only if waitpid itself errors (ECHILD/EINTR from outside the process); no in-process test can provoke it, and the arm only reaps and reports
src/utils/settings.rs ignore 1235 head this closing brace reports 0 hits under llvm-cov regardless of test count — verified locally: upsert_account_writes_a_secret_into_its_file_not_settings and several other tests complete the block above (the push on the line just before, and entry.remove(*key) right after, both measure as hit), yet this specific brace, immediately after an if-let whose scrutinee ends in a ? operator, never registers a hit; an llvm-cov region-attribution artifact, not an untested path

Patch coverage

No new executable lines added by this diff.

📦 Full per-file coverage summary · run summary

@newhoggy
newhoggy added this pull request to the merge queue Oct 6, 2026
Merged via the queue into main with commit 83085b7 Oct 6, 2026
19 checks passed
@newhoggy
newhoggy deleted the issue-2200-remove-coverage branch October 6, 2026 13:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore(coverage): remove coverage functionality, now provided by rust-works/patchcov

1 participant