| src/app.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | App::new | :88 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | App::is_running | :143 |
| src/bookmarks.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | BookmarkStore::new | :36 |
| ✓ | 3.1 | 3 | ████████░░ 80.0% | BookmarkStore::load | :42 |
| ✓ | 6.0 | 6 | ██████████ 100.0% | BookmarkStore::save | :66 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | BookmarkStore::toggle | :100 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | BookmarkStore::len | :113 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | BookmarkStore::is_empty | :119 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | BookmarkStore::contains | :125 |
| src/client/cache.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | CachingClient::new | :43 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | CachingClient::is_enabled | :55 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | CachingClient::patchsets_key | :60 |
| ✓ | 5.3 | 4 | ██████░░░░ 57.1% | CachingClient::read_single | :71 |
| ✓ | 4.0 | 4 | █████████░ 90.9% | CachingClient::read_keyed | :82 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | CachingClient::store_single | :97 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | CachingClient::store_keyed | :107 |
| ✓ | 5.0 | 5 | ██████████ 100.0% | CachingClient::patchsets | :136 |
| ✓ | 5.0 | 5 | ██████████ 100.0% | CachingClient::stats | :151 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | CachingClient::messages | :182 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | CachingClient::patch_detail | :186 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | CachingClient::message_detail | :190 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | CachingClient::review | :194 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | CachingClient::review_log | :198 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | CachingClient::stats_timeline | :202 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | CachingClient::stats_reviews | :209 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | CachingClient::stats_tools | :213 |
| ✓ | 5.0 | 5 | ██████████ 100.0% | CachingClient::clear_cache | :217 |
| src/client/error.rs |
| ✓ | 10.3 | 10 | █████████░ 85.7% | ApiError::fmt | :44 |
| ✓ | 12.0 | 3 | ░░░░░░░░░░ 0.0% | ApiError::source | :77 |
| src/client/http.rs |
| ✓ | 3.0 | 3 | ██████████ 100.0% | HttpClient::new | :32 |
| ✓ | 10.1 | 9 | ████████░░ 75.9% | HttpClient::get | :50 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | HttpClient::compute_backoff | :128 |
| ✓ | 3.0 | 3 | ██████████ 100.0% | HttpClient::list_query | :153 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | HttpClient::id_query | :168 |
| ✓ | 12.0 | 3 | ░░░░░░░░░░ 0.0% | HttpClient::review_query | :173 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | is_retryable_status | :186 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | make_deser_error | :191 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::lists | :200 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | HttpClient::patchsets | :204 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::messages | :208 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | HttpClient::patch_detail | :212 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::patchset_summary | :216 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::message_detail | :220 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::review | :224 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::review_log | :228 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | HttpClient::stats | :233 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::stats_timeline | :237 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::stats_reviews | :247 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | HttpClient::stats_tools | :251 |
| src/client/mock.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | MockClient::new | :33 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | MockClient::set_patchsets | :45 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | MockClient::set_stats | :52 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | MockClient::set_lists | :59 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | MockClient::set_patch_detail | :66 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | MockClient::set_messages | :73 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | MockClient::set_message_detail | :80 |
| ✓ | 5.0 | 5 | ██████████ 100.0% | MockClient::take_result | :87 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | MockClient::default | :106 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | MockClient::lists | :113 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | MockClient::patchsets | :117 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | MockClient::messages | :121 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | MockClient::patch_detail | :125 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | MockClient::patchset_summary | :129 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | MockClient::message_detail | :133 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | MockClient::review | :137 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | MockClient::review_log | :143 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | MockClient::stats | :149 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | MockClient::stats_timeline | :153 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | MockClient::stats_reviews | :162 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | MockClient::stats_tools | :168 |
| src/client/types.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | ListParams::default | :17 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | RetryConfig::default | :50 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | RetryConfig::from_remote | :63 |
| src/cmd.rs |
| ✓ | 2.0 | 2 | ██████████ 100.0% | spawn_fetch | :62 |
| ✓ | 15.0 | 15 | ██████████ 98.7% | execute | :92 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | no_remote_error | :201 |
| src/config/cache.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | default_ttl | :7 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | CacheConfig::default | :23 |
| src/config/error.rs |
| ✓ | 9.0 | 9 | ██████████ 100.0% | ConfigError::fmt | :17 |
| ✓ | 4.0 | 4 | ██████████ 100.0% | ConfigError::source | :36 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | ConfigError::from | :46 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | ConfigError::from | :52 |
| ✓ | 4.0 | 4 | ██████████ 100.0% | ConfigWarning::fmt | :74 |
| src/config/keys.rs |
| ✓ | 25.0 | 25 | ██████████ 100.0% | KeyAction::label | :70 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | KeyCombo::new | :112 |
| ✓ | 8.0 | 8 | ██████████ 100.0% | KeyCombo::parse | :120 |
| ✓ | 24.0 | 24 | ██████████ 100.0% | KeyCombo::fmt | :155 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | KeybindingsConfig::action_for | :268 |
| ✓ | 3.0 | 3 | ██████████ 100.0% | KeybindingsConfig::default | :274 |
| ✓ | 3.0 | 3 | █████████░ 86.7% | KeybindingsConfig::deserialize | :316 |
| src/config/mod.rs |
| ✓ | 2.0 | 2 | ██████████ 100.0% | Config::from_toml | :96 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | Config::resolved_editor | :104 |
| src/config/paths.rs |
| ✓ | 1.0 | 1 | ████████░░ 81.2% | AppPaths::resolve | :31 |
| src/config/remote.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | default_timeout | :6 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | default_retries | :11 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | RemoteConfig::fixture | :41 |
| src/config/theme.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | ColorValue::color | :19 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | ColorValue::default | :25 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | ColorValue::fmt | :31 |
| ✓ | 22.0 | 22 | ██████████ 100.0% | parse_color | :39 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | ColorValue::deserialize | :84 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | ColorPalette::default | :124 |
| src/event.rs |
| ✓ | 19.7 | 14 | ███████░░░ 69.2% | handle_event | :46 |
| ✓ | 6.0 | 6 | ██████████ 100.0% | handle_search_key | :88 |
| ✓ | 25.0 | 25 | ██████████ 100.0% | action_to_message | :111 |
| src/main.rs |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | main | :16 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | init_tracing | :169 |
| src/models/common.rs |
| ✓ | 5.6 | 5 | ███████░░░ 71.4% | Severity::fmt | :33 |
| ✓ | 3.0 | 3 | ██████████ 100.0% | PatchId::fmt | :100 |
| src/models/fixtures.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | Patchset::fixture | :12 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | Patch::fixture | :40 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | Review::fixture | :55 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | EmailMessage::fixture | :71 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | EmailMessage::fixture_with_diff | :89 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | PatchsetDetail::fixture | :112 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | ServerStats::fixture | :143 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | MailingList::fixture | :157 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | ThreadMessage::fixture | :167 |
| src/models/pagination.rs |
| ✓ | 2.0 | 2 | ████████░░ 83.3% | Paginated::total_pages | :43 |
| src/models/patch.rs |
| ✓ | 6.6 | 6 | ████████░░ 75.0% | PatchStatus::fmt | :23 |
| ✓ | 7.0 | 7 | ██████████ 100.0% | PatchStatus::deserialize | :35 |
| src/models/patchset.rs |
| ✓ | 17.2 | 10 | ██████░░░░ 58.3% | PatchsetStatus::fmt | :39 |
| ✓ | 11.0 | 11 | ██████████ 100.0% | PatchsetStatus::deserialize | :55 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | FindingCounts::total | :96 |
| ✓ | 5.5 | 5 | ███████░░░ 72.7% | FindingCounts::max_severity | :102 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | FindingCounts::is_empty | :118 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | Patchset::author | :206 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | Patchset::subject | :212 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | Patchset::deserialize | :218 |
| src/models/review.rs |
| ✓ | 12.1 | 8 | ██████░░░░ 60.0% | ReviewStatus::fmt | :27 |
| ✓ | 9.0 | 9 | ██████████ 100.0% | ReviewStatus::deserialize | :41 |
| src/tui.rs |
| ✓ | 1.0 | 1 | ██████████ 100.0% | Tui::new | :55 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | Tui::next | :144 |
| ✓ | 6.0 | 2 | ░░░░░░░░░░ 0.0% | Tui::exit | :158 |
| ✓ | 12.0 | 3 | ░░░░░░░░░░ 0.0% | Tui::draw | :171 |
| ✓ | 6.0 | 2 | ░░░░░░░░░░ 0.0% | Tui::suspend | :188 |
| ✓ | 20.0 | 4 | ░░░░░░░░░░ 0.0% | Tui::resume | :201 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | Tui::drain_events | :226 |
| ✓ | 3.0 | 3 | █████████░ 85.7% | Tui::reset | :231 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | Tui::drop | :245 |
| src/ui.rs |
| ✓ | 9.3 | 8 | ███████░░░ 72.7% | view | :22 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | panel_border_color | :69 |
| ✓ | 9.6 | 9 | ████████░░ 80.6% | render_sidebar | :82 |
| ✓ | 8.4 | 8 | ████████░░ 82.4% | build_main_title | :170 |
| ✓ | 8.9 | 8 | ████████░░ 75.9% | render_main_pane | :220 |
| ✓ | 8.8 | 7 | ███████░░░ 66.7% | status_color | :332 |
| ✓ | 4.0 | 4 | ██████████ 100.0% | format_date | :348 |
| ✓ | 10.0 | 10 | █████████░ 94.1% | format_findings | :376 |
| ✓ | 5.1 | 5 | ████████░░ 82.9% | build_patchset_row | :415 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | centered_rect | :461 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | render_message_table | :472 |
| ✓ | 8.0 | 8 | ██████████ 100.0% | classify_diff_line | :530 |
| ✓ | 4.0 | 4 | ██████████ 100.0% | classify_review_line | :566 |
| ✓ | 2.0 | 2 | ██████████ 100.0% | strip_review_quoting | :588 |
| ✓ | 8.0 | 8 | ██████████ 100.0% | message_detail_lines | :601 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | render_message_detail | :665 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | render_loading_dialog | :695 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | render_help_overlay | :740 |
| ✓ | 2.0 | 1 | ░░░░░░░░░░ 0.0% | render_detail_view | :778 |
| ✓ | 7.1 | 7 | █████████░ 88.1% | detail_header_lines | :812 |
| ✓ | 8.2 | 8 | █████████░ 86.4% | detail_patches_lines | :887 |
| ✓ | 3.0 | 3 | ████████░░ 82.8% | detail_thread_lines | :963 |
| src/update.rs |
| ✓ | 5.0 | 5 | ██████████ 100.0% | handle_view_raw_log | :255 |
| ✓ | 8.0 | 8 | ██████████ 95.8% | handle_back | :296 |
| ✓ | 3.1 | 3 | ████████░░ 77.8% | handle_toggle_list_content | :324 |
| ✓ | 3.0 | 3 | █████████░ 91.7% | handle_messages_loaded | :341 |
| ✓ | 3.3 | 3 | ███████░░░ 68.8% | handle_message_detail_loaded | :361 |
| ✓ | 3.6 | 3 | ██████░░░░ 60.0% | handle_view_baseline_log | :382 |
| ✓ | 9.2 | 9 | █████████░ 85.7% | handle_page_nav | :401 |
| ✓ | 3.0 | 3 | █████████░ 85.7% | handle_bookmark_toggle | :434 |
| ✓ | 13.8 | 13 | ████████░░ 83.3% | compute_comment_positions | :459 |
| ✓ | 7.0 | 7 | ██████████ 100.0% | handle_comment_nav | :529 |
| ✓ | 11.0 | 11 | █████████░ 94.1% | handle_search | :565 |
| ✓ | 3.0 | 3 | █████████░ 92.3% | handle_patchsets_loaded | :613 |
| ✓ | 7.8 | 6 | ██████░░░░ 63.3% | handle_select | :635 |
| ✓ | 3.0 | 3 | █████████░ 89.5% | handle_detail_loaded | :675 |
| ✓ | 3.0 | 3 | ██████████ 100.0% | handle_stats_loaded | :703 |
| ✓ | 3.2 | 3 | ███████░░░ 72.7% | handle_lists_loaded | :719 |
| ✓ | 17.1 | 17 | █████████░ 93.2% | handle_scroll | :735 |
| ✓ | 11.0 | 11 | █████████░ 93.5% | handle_sidebar_scroll | :791 |
| ✓ | 5.0 | 5 | █████████░ 93.8% | handle_sidebar_select | :831 |
| ✓ | 1.0 | 1 | ██████████ 100.0% | handle_bookmark_filter_toggle | :853 |
| ✓ | 10.0 | 10 | ██████████ 100.0% | status_sort_key | :860 |
| ✓ | 6.0 | 6 | █████████░ 92.0% | apply_sort | :876 |
| ✓ | 6.0 | 6 | ██████████ 100.0% | handle_sort_cycle | :906 |
| ✓ | 3.0 | 3 | ██████████ 100.0% | handle_reverse_sort | :921 |
| ✓ | 1.0 | 1 | ██████████ 97.1% | switch_remote | :933 |
| tests/api_integration.rs |
| ✓ | 2.0 | 1 | — | test_remote | :13 |
| ✓ | 2.0 | 1 | — | patchsets_json | :24 |
| ✓ | 2.0 | 1 | — | stats_json | :47 |
| ✓ | 2.0 | 1 | — | fetches_patchsets_successfully | :59 |
| ✓ | 2.0 | 1 | — | fetches_stats_successfully | :79 |
| ✓ | 2.0 | 1 | — | handles_404_without_retry | :95 |
| ✓ | 2.0 | 1 | — | handles_500_with_retry | :111 |
| ✓ | 2.0 | 1 | — | handles_malformed_json | :126 |
| ✓ | 2.0 | 1 | — | fetches_patch_detail_successfully | :140 |
| ✓ | 6.0 | 2 | — | FailThenSucceed::respond | :177 |
| ✓ | 2.0 | 1 | — | retries_on_500_then_succeeds | :190 |
| tests/app_integration.rs |
| ✓ | 6.0 | 2 | — | app_with_remotes | :12 |