From db0f0f89778d3016f899a55b95a7647bdc769fc8 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 22 Sep 2026 15:02:07 +0200 Subject: [PATCH 01/10] chore(rustqual): Add structural quality gate `just qual` runs rustqual across the workspace and `just qual-ci` gates CI on it, failing when a change adds findings beyond the committed baselines. The bar for new code is "no worse than what is already there" rather than an absolute score: the workspace carries known findings, and a score target would push contributors toward suppressing rather than fixing. The check runs as two passes because rustqual's DRY dimension is all-or-nothing. Disabling `[duplicates]` also disables DRY-002 dead code and DRY-006 dead types, while leaving it on fires DRY-003 roughly 2038 times inside `*_tests.rs`, on the repeated setup blocks that keep each `#[test]` self-contained. `.config/rustqual/config.toml` therefore covers every dimension except DRY across the full workspace, and `dry.toml` covers DRY over production code only. Excluding test files from that second pass costs nothing: DRY-002 already ignores calls from `#[cfg(test)]` code, so the dead-code count is identical with and without them. Three `qual:allow(complexity, magic_numbers)` markers cover the provider model catalogues in `jp_llm`, where context windows, output limits and cutoff dates are data maintained against each provider's published documentation rather than constants worth naming. They cut the main pass from 498 magic-number findings to 193. Refresh the baselines with `just qual-baseline` after a change that deliberately moves the count, and commit the result alongside it so the diff shows what moved. Signed-off-by: Jean Mertz --- .config/rustqual/baseline-dry.json | 3889 +++++++++++++++++++++++ .config/rustqual/baseline.json | 3879 ++++++++++++++++++++++ .config/rustqual/config.toml | 35 + .config/rustqual/dry.toml | 56 + .github/workflows/rust.yml | 4 +- crates/jp_llm/src/provider/anthropic.rs | 2 + crates/jp_llm/src/provider/google.rs | 3 + crates/jp_llm/src/provider/openai.rs | 2 + justfile | 37 +- 9 files changed, 7905 insertions(+), 2 deletions(-) create mode 100644 .config/rustqual/baseline-dry.json create mode 100644 .config/rustqual/baseline.json create mode 100644 .config/rustqual/config.toml create mode 100644 .config/rustqual/dry.toml diff --git a/.config/rustqual/baseline-dry.json b/.config/rustqual/baseline-dry.json new file mode 100644 index 000000000..ebb971199 --- /dev/null +++ b/.config/rustqual/baseline-dry.json @@ -0,0 +1,3889 @@ +{ + "version": 2, + "quality_score": 0.6253090341843414, + "iosp_score": 0.799166449596249, + "violations": 771, + "total": 5426, + "complexity_warnings": 0, + "magic_number_warnings": 0, + "nesting_depth_warnings": 0, + "function_length_warnings": 0, + "unsafe_warnings": 0, + "error_handling_warnings": 0, + "duplicate_groups": 20, + "dead_code_warnings": 256, + "dead_type_warnings": 32, + "fragment_groups": 46, + "boilerplate_warnings": 0, + "srp_struct_warnings": 0, + "srp_module_warnings": 0, + "wildcard_import_warnings": 10, + "sdp_violations": 0, + "coupling_warnings": 0, + "coupling_cycles": 0, + "tq_no_assertion_warnings": 0, + "tq_no_sut_warnings": 0, + "tq_untested_warnings": 0, + "tq_uncovered_warnings": 0, + "tq_untested_logic_warnings": 0, + "structural_srp_warnings": 0, + "structural_coupling_warnings": 0, + "total_findings": 1164, + "violation_details": [ + { + "name": "ConversationStream::config_unsets", + "file": "crates/jp_conversation/src/stream.rs", + "line": 246 + }, + { + "name": "ConversationStream::trim_chat_request", + "file": "crates/jp_conversation/src/stream.rs", + "line": 274 + }, + { + "name": "ConversationStream::current_turn_mut", + "file": "crates/jp_conversation/src/stream.rs", + "line": 576 + }, + { + "name": "ConversationStream::pop_while", + "file": "crates/jp_conversation/src/stream.rs", + "line": 809 + }, + { + "name": "ConversationStream::remove_orphaned_inquiry_responses", + "file": "crates/jp_conversation/src/stream.rs", + "line": 988 + }, + { + "name": "ConversationStream::remove_orphaned_inquiry_requests", + "file": "crates/jp_conversation/src/stream.rs", + "line": 1030 + }, + { + "name": "ConversationStream::normalize_turn_starts", + "file": "crates/jp_conversation/src/stream.rs", + "line": 1077 + }, + { + "name": "ConversationStream::sanitize_orphaned_tool_calls", + "file": "crates/jp_conversation/src/stream.rs", + "line": 1164 + }, + { + "name": "ConversationStream::from_legacy_events", + "file": "crates/jp_conversation/src/stream.rs", + "line": 1573 + }, + { + "name": "strip_schema", + "file": "crates/jp_conversation/src/compat.rs", + "line": 256 + }, + { + "name": "strip_schema_type", + "file": "crates/jp_conversation/src/compat.rs", + "line": 272 + }, + { + "name": "strip_struct", + "file": "crates/jp_conversation/src/compat.rs", + "line": 436 + }, + { + "name": "Documents::try_to_xml", + "file": "crates/jp_conversation/src/thread.rs", + "line": 236 + }, + { + "name": "IterTurns<'a>::new", + "file": "crates/jp_conversation/src/stream/turn_iter.rs", + "line": 66 + }, + { + "name": "ConversationStream::extend", + "file": "crates/jp_conversation/src/stream/iter.rs", + "line": 44 + }, + { + "name": "deserialize", + "file": "crates/jp_conversation/src/stream/config_delta.rs", + "line": 200 + }, + { + "name": "fold", + "file": "crates/jp_conversation/src/stream/config_delta.rs", + "line": 249 + }, + { + "name": "apply", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 162 + }, + { + "name": "affected_items", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 292 + }, + { + "name": "apply_mechanical", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 386 + }, + { + "name": "collect_turn_origins", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 441 + }, + { + "name": "assign_turn_indices", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 473 + }, + { + "name": "strip_tool_request", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 602 + }, + { + "name": "build_tool_calls", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 657 + }, + { + "name": "EventPayload::deserialize", + "file": "crates/jp_conversation/src/stream/entry.rs", + "line": 152 + }, + { + "name": "StoredEvent::deserialize", + "file": "crates/jp_conversation/src/stream/entry.rs", + "line": 305 + }, + { + "name": "EventId::random", + "file": "crates/jp_conversation/src/event_id.rs", + "line": 81 + }, + { + "name": "decode_event_value", + "file": "crates/jp_conversation/src/storage.rs", + "line": 99 + }, + { + "name": "decode_string", + "file": "crates/jp_conversation/src/storage.rs", + "line": 137 + }, + { + "name": "decode_map_strings", + "file": "crates/jp_conversation/src/storage.rs", + "line": 157 + }, + { + "name": "ToolCallResponse::deserialize", + "file": "crates/jp_conversation/src/event/tool_call.rs", + "line": 98 + }, + { + "name": "TerminalCapability::detect", + "file": "crates/jp_printer/src/region.rs", + "line": 135 + }, + { + "name": "WindowBuffer::push", + "file": "crates/jp_printer/src/region.rs", + "line": 538 + }, + { + "name": "RegionEntry::rows", + "file": "crates/jp_printer/src/region.rs", + "line": 753 + }, + { + "name": "RegionStack::release", + "file": "crates/jp_printer/src/region.rs", + "line": 978 + }, + { + "name": "RegionStack::resume", + "file": "crates/jp_printer/src/region.rs", + "line": 1038 + }, + { + "name": "RegionStack::erase", + "file": "crates/jp_printer/src/region.rs", + "line": 1061 + }, + { + "name": "RegionStack::redraw", + "file": "crates/jp_printer/src/region.rs", + "line": 1087 + }, + { + "name": "RegionStack::redraw_if_top", + "file": "crates/jp_printer/src/region.rs", + "line": 1166 + }, + { + "name": "filter_line", + "file": "crates/jp_printer/src/region.rs", + "line": 1210 + }, + { + "name": "visible_sgr", + "file": "crates/jp_printer/src/region.rs", + "line": 1245 + }, + { + "name": "truncate_row", + "file": "crates/jp_printer/src/region.rs", + "line": 1330 + }, + { + "name": "main", + "file": "crates/jp_printer/src/bin/region_probe.rs", + "line": 38 + }, + { + "name": "Printer::status_region", + "file": "crates/jp_printer/src/printer.rs", + "line": 277 + }, + { + "name": "Printer::track_pending", + "file": "crates/jp_printer/src/printer.rs", + "line": 670 + }, + { + "name": "Printer::send", + "file": "crates/jp_printer/src/printer.rs", + "line": 733 + }, + { + "name": "Worker::run", + "file": "crates/jp_printer/src/printer.rs", + "line": 1003 + }, + { + "name": "Worker::process_task_instant", + "file": "crates/jp_printer/src/printer.rs", + "line": 1124 + }, + { + "name": "Worker::process_task", + "file": "crates/jp_printer/src/printer.rs", + "line": 1173 + }, + { + "name": "Worker::write_task", + "file": "crates/jp_printer/src/printer.rs", + "line": 1189 + }, + { + "name": "Sink::new", + "file": "crates/jp_printer/src/printer.rs", + "line": 1278 + }, + { + "name": "DelayControl::effective_delay", + "file": "crates/jp_printer/src/printer.rs", + "line": 1590 + }, + { + "name": "Content::fmt", + "file": "crates/jp_attachment_internal/src/selector.rs", + "line": 47 + }, + { + "name": "Selector::from_str", + "file": "crates/jp_attachment_internal/src/selector.rs", + "line": 171 + }, + { + "name": "Entry::to_url", + "file": "crates/jp_attachment_internal/src/lib.rs", + "line": 89 + }, + { + "name": "fetch_conversation", + "file": "crates/jp_attachment_internal/src/lib.rs", + "line": 201 + }, + { + "name": "uri_to_entry", + "file": "crates/jp_attachment_internal/src/lib.rs", + "line": 301 + }, + { + "name": "render_stream", + "file": "crates/jp_attachment_internal/src/lib.rs", + "line": 331 + }, + { + "name": "AnsiState::update", + "file": "crates/jp_term/src/ansi.rs", + "line": 114 + }, + { + "name": "AnsiState::restore_sequence", + "file": "crates/jp_term/src/ansi.rs", + "line": 187 + }, + { + "name": "visible_text", + "file": "crates/jp_term/src/ansi.rs", + "line": 343 + }, + { + "name": "advance_column", + "file": "crates/jp_term/src/ansi.rs", + "line": 370 + }, + { + "name": "list", + "file": "crates/jp_term/src/table.rs", + "line": 120 + }, + { + "name": "details", + "file": "crates/jp_term/src/table.rs", + "line": 230 + }, + { + "name": "detail_pretty_row", + "file": "crates/jp_term/src/table.rs", + "line": 269 + }, + { + "name": "details_markdown", + "file": "crates/jp_term/src/table.rs", + "line": 292 + }, + { + "name": "detail_markdown_rows", + "file": "crates/jp_term/src/table.rs", + "line": 323 + }, + { + "name": "md_row", + "file": "crates/jp_term/src/table.rs", + "line": 349 + }, + { + "name": "truncate_to_width", + "file": "crates/jp_term/src/width.rs", + "line": 65 + }, + { + "name": "wrap_ranges", + "file": "crates/jp_term/src/width.rs", + "line": 132 + }, + { + "name": "Storage::persist_conversation", + "file": "crates/jp_storage/src/lib.rs", + "line": 195 + }, + { + "name": "adopt_partition", + "file": "crates/jp_storage/src/lib.rs", + "line": 791 + }, + { + "name": "adopt_conversation_dir", + "file": "crates/jp_storage/src/lib.rs", + "line": 812 + }, + { + "name": "import_external_copy", + "file": "crates/jp_storage/src/lib.rs", + "line": 866 + }, + { + "name": "copy_dir_all", + "file": "crates/jp_storage/src/lib.rs", + "line": 919 + }, + { + "name": "FsStorageBackend::sanitize", + "file": "crates/jp_storage/src/backend/fs.rs", + "line": 284 + }, + { + "name": "deep_merge_values", + "file": "crates/jp_storage/src/value.rs", + "line": 36 + }, + { + "name": "Storage::load_conversation_stream", + "file": "crates/jp_storage/src/load.rs", + "line": 179 + }, + { + "name": "Storage::load_conversation_metadata_batch", + "file": "crates/jp_storage/src/load.rs", + "line": 289 + }, + { + "name": "Storage::validate_conversations", + "file": "crates/jp_storage/src/validate.rs", + "line": 116 + }, + { + "name": "collapse_blank_lines", + "file": "crates/jp_attachment_http_content/src/lib.rs", + "line": 189 + }, + { + "name": "PluginKind::binaries", + "file": "crates/jp_plugin/src/registry.rs", + "line": 113 + }, + { + "name": "ProtocolLogLayer::on_event", + "file": "crates/plugins/command/serve-web/src/log_layer.rs", + "line": 90 + }, + { + "name": "PluginClient::start_conversation", + "file": "crates/plugins/command/serve-web/src/client.rs", + "line": 199 + }, + { + "name": "render_events", + "file": "crates/plugins/command/serve-web/src/render.rs", + "line": 158 + }, + { + "name": "serve", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 116 + }, + { + "name": "TurnForm::parse", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 317 + }, + { + "name": "start_turn", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 348 + }, + { + "name": "NewConversationForm::parse", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 497 + }, + { + "name": "start_conversation", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 531 + }, + { + "name": "run_server", + "file": "crates/plugins/command/serve-web/src/main.rs", + "line": 111 + }, + { + "name": "group_by_namespace", + "file": "crates/plugins/command/serve-web/src/views/new.rs", + "line": 135 + }, + { + "name": "SystemLauncher::launch", + "file": "crates/plugins/command/gui/src/launch.rs", + "line": 41 + }, + { + "name": "handle_command", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 322 + }, + { + "name": "compose_missing", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 423 + }, + { + "name": "with_show_alias", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 815 + }, + { + "name": "migrate", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 949 + }, + { + "name": "execute", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 1182 + }, + { + "name": "vocabulary_listing", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 1462 + }, + { + "name": "row", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 1636 + }, + { + "name": "read_message", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 1698 + }, + { + "name": "project_turns", + "file": "crates/jp_ffi/src/display.rs", + "line": 83 + }, + { + "name": "PartialRequestConfig::assign", + "file": "crates/jp_config/src/assistant/request.rs", + "line": 157 + }, + { + "name": "MaxResponseBytes::from", + "file": "crates/jp_config/src/assistant/request.rs", + "line": 332 + }, + { + "name": "PartialInstructionsConfig::assign", + "file": "crates/jp_config/src/assistant/instructions.rs", + "line": 57 + }, + { + "name": "InstructionsConfig::to_section", + "file": "crates/jp_config/src/assistant/instructions.rs", + "line": 114 + }, + { + "name": "PartialExampleConfig::assign", + "file": "crates/jp_config/src/assistant/instructions.rs", + "line": 180 + }, + { + "name": "PartialContrastConfig::assign", + "file": "crates/jp_config/src/assistant/instructions.rs", + "line": 231 + }, + { + "name": "PartialSectionConfigOrString::assign", + "file": "crates/jp_config/src/assistant/sections.rs", + "line": 41 + }, + { + "name": "SectionConfig::render", + "file": "crates/jp_config/src/assistant/sections.rs", + "line": 143 + }, + { + "name": "PartialSectionConfig::assign", + "file": "crates/jp_config/src/assistant/sections.rs", + "line": 166 + }, + { + "name": "wrap_cdata_if_needed", + "file": "crates/jp_config/src/assistant/sections.rs", + "line": 223 + }, + { + "name": "PartialExtendingRelativePath::assign", + "file": "crates/jp_config/src/types/extending_path.rs", + "line": 93 + }, + { + "name": "PartialExtendingRelativePath::delta", + "file": "crates/jp_config/src/types/extending_path.rs", + "line": 107 + }, + { + "name": "PartialRelativePathWithStrategy::assign", + "file": "crates/jp_config/src/types/extending_path.rs", + "line": 138 + }, + { + "name": "PartialCommandConfigOrString::assign", + "file": "crates/jp_config/src/types/command.rs", + "line": 76 + }, + { + "name": "PartialCommandConfigOrString::from_str", + "file": "crates/jp_config/src/types/command.rs", + "line": 141 + }, + { + "name": "CommandConfigOrString::command", + "file": "crates/jp_config/src/types/command.rs", + "line": 181 + }, + { + "name": "PartialCommandConfig::assign", + "file": "crates/jp_config/src/types/command.rs", + "line": 274 + }, + { + "name": "split_command_words", + "file": "crates/jp_config/src/types/command.rs", + "line": 321 + }, + { + "name": "mask_template_spans", + "file": "crates/jp_config/src/types/command.rs", + "line": 344 + }, + { + "name": "restore_spans", + "file": "crates/jp_config/src/types/command.rs", + "line": 436 + }, + { + "name": "PolicySpec

::deserialize", + "file": "crates/jp_config/src/types/policy_spec.rs", + "line": 103 + }, + { + "name": "PolicySpec

::from_str", + "file": "crates/jp_config/src/types/policy_spec.rs", + "line": 161 + }, + { + "name": "PartialMergeableVec::delta", + "file": "crates/jp_config/src/types/vec.rs", + "line": 273 + }, + { + "name": "PartialMergeableString::assign", + "file": "crates/jp_config/src/types/string.rs", + "line": 82 + }, + { + "name": "PartialMergeableString::delta", + "file": "crates/jp_config/src/types/string.rs", + "line": 110 + }, + { + "name": "PartialMergedString::assign", + "file": "crates/jp_config/src/types/string.rs", + "line": 240 + }, + { + "name": "PartialMergeableMap::delta", + "file": "crates/jp_config/src/types/map.rs", + "line": 244 + }, + { + "name": "merge_values", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 97 + }, + { + "name": "merge_as_map", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 142 + }, + { + "name": "merge_as_vec", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 173 + }, + { + "name": "strip_annotations", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 238 + }, + { + "name": "JsonValue::assign", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 280 + }, + { + "name": "PartialInterruptConfig::assign", + "file": "crates/jp_config/src/interrupt.rs", + "line": 319 + }, + { + "name": "PartialStreamingInterruptConfig::assign", + "file": "crates/jp_config/src/interrupt.rs", + "line": 335 + }, + { + "name": "PartialToolInterruptConfig::assign", + "file": "crates/jp_config/src/interrupt.rs", + "line": 348 + }, + { + "name": "PartialConversationConfig::assign", + "file": "crates/jp_config/src/conversation.rs", + "line": 120 + }, + { + "name": "PartialInquiryConfig::assign", + "file": "crates/jp_config/src/conversation.rs", + "line": 233 + }, + { + "name": "collect_config_segments", + "file": "crates/jp_config/src/util.rs", + "line": 207 + }, + { + "name": "load_partial_at_path_with_max_depth", + "file": "crates/jp_config/src/util.rs", + "line": 293 + }, + { + "name": "PartialAssistantConfig::assign", + "file": "crates/jp_config/src/assistant.rs", + "line": 98 + }, + { + "name": "PartialCommandPluginConfig::assign", + "file": "crates/jp_config/src/plugins/command.rs", + "line": 90 + }, + { + "name": "PartialLlmProviderConfig::assign", + "file": "crates/jp_config/src/providers/llm.rs", + "line": 101 + }, + { + "name": "PartialGoogleConfig::assign", + "file": "crates/jp_config/src/providers/llm/google.rs", + "line": 26 + }, + { + "name": "PartialOpenrouterConfig::assign", + "file": "crates/jp_config/src/providers/llm/openrouter.rs", + "line": 35 + }, + { + "name": "PartialCerebrasConfig::assign", + "file": "crates/jp_config/src/providers/llm/cerebras.rs", + "line": 50 + }, + { + "name": "PartialOllamaConfig::assign", + "file": "crates/jp_config/src/providers/llm/ollama.rs", + "line": 25 + }, + { + "name": "PartialLlamacppConfig::assign", + "file": "crates/jp_config/src/providers/llm/llamacpp.rs", + "line": 25 + }, + { + "name": "PartialDeepseekConfig::assign", + "file": "crates/jp_config/src/providers/llm/deepseek.rs", + "line": 26 + }, + { + "name": "AnthropicConfig::validate", + "file": "crates/jp_config/src/providers/llm/anthropic.rs", + "line": 86 + }, + { + "name": "PartialAnthropicConfig::assign", + "file": "crates/jp_config/src/providers/llm/anthropic.rs", + "line": 109 + }, + { + "name": "PartialOpenaiConfig::assign", + "file": "crates/jp_config/src/providers/llm/openai.rs", + "line": 34 + }, + { + "name": "PartialStdioConfig::assign", + "file": "crates/jp_config/src/providers/mcp.rs", + "line": 168 + }, + { + "name": "PartialChecksumConfig::assign", + "file": "crates/jp_config/src/providers/mcp.rs", + "line": 225 + }, + { + "name": "PartialAppConfig::assign", + "file": "crates/jp_config/src/lib.rs", + "line": 234 + }, + { + "name": "AppConfig::fields", + "file": "crates/jp_config/src/lib.rs", + "line": 500 + }, + { + "name": "AppConfig::addressable", + "file": "crates/jp_config/src/lib.rs", + "line": 541 + }, + { + "name": "PartialStyleConfig::assign", + "file": "crates/jp_config/src/style.rs", + "line": 100 + }, + { + "name": "PartialPluginsConfig::assign", + "file": "crates/jp_config/src/plugins.rs", + "line": 46 + }, + { + "name": "PartialCodeConfig::assign", + "file": "crates/jp_config/src/style/code.rs", + "line": 62 + }, + { + "name": "PartialLockWaitConfig::assign", + "file": "crates/jp_config/src/style/lock_wait.rs", + "line": 45 + }, + { + "name": "PartialTypewriterConfig::assign", + "file": "crates/jp_config/src/style/typewriter.rs", + "line": 60 + }, + { + "name": "DelayDuration::deserialize", + "file": "crates/jp_config/src/style/typewriter.rs", + "line": 149 + }, + { + "name": "PartialMcpStartupConfig::assign", + "file": "crates/jp_config/src/style/mcp_startup.rs", + "line": 72 + }, + { + "name": "PartialInlineCodeConfig::assign", + "file": "crates/jp_config/src/style/inline_code.rs", + "line": 31 + }, + { + "name": "PartialToolCallConfig::assign", + "file": "crates/jp_config/src/style/tool_call.rs", + "line": 123 + }, + { + "name": "PartialToolProgressConfig::assign", + "file": "crates/jp_config/src/style/tool_call.rs", + "line": 137 + }, + { + "name": "PartialPreparingConfig::assign", + "file": "crates/jp_config/src/style/tool_call.rs", + "line": 152 + }, + { + "name": "PartialProgressConfig::assign", + "file": "crates/jp_config/src/style/streaming.rs", + "line": 58 + }, + { + "name": "PartialStreamingConfig::assign", + "file": "crates/jp_config/src/style/streaming.rs", + "line": 104 + }, + { + "name": "PartialMarkdownConfig::assign", + "file": "crates/jp_config/src/style/markdown.rs", + "line": 103 + }, + { + "name": "PartialReasoningConfig::assign", + "file": "crates/jp_config/src/style/reasoning.rs", + "line": 75 + }, + { + "name": "PartialUserConfig::assign", + "file": "crates/jp_config/src/user.rs", + "line": 32 + }, + { + "name": "PartialEditorConfig::assign", + "file": "crates/jp_config/src/editor.rs", + "line": 118 + }, + { + "name": "PartialInlineEditorConfig::assign", + "file": "crates/jp_config/src/editor.rs", + "line": 174 + }, + { + "name": "PartialModelIdOrAliasConfig::assign", + "file": "crates/jp_config/src/model/id.rs", + "line": 44 + }, + { + "name": "PartialModelIdOrAliasConfig::delta", + "file": "crates/jp_config/src/model/id.rs", + "line": 63 + }, + { + "name": "PartialModelIdOrAliasConfig::finalize_in_place", + "file": "crates/jp_config/src/model/id.rs", + "line": 235 + }, + { + "name": "resolve_alias_chain", + "file": "crates/jp_config/src/model/id.rs", + "line": 297 + }, + { + "name": "resolve_partial_alias_chain", + "file": "crates/jp_config/src/model/id.rs", + "line": 324 + }, + { + "name": "PartialModelIdConfig::assign", + "file": "crates/jp_config/src/model/id.rs", + "line": 364 + }, + { + "name": "deserialize", + "file": "crates/jp_config/src/model/id/alias.rs", + "line": 20 + }, + { + "name": "deserialize_collecting_other", + "file": "crates/jp_config/src/model/parameters.rs", + "line": 179 + }, + { + "name": "PartialParametersConfig::assign", + "file": "crates/jp_config/src/model/parameters.rs", + "line": 219 + }, + { + "name": "PartialReasoningConfig::assign", + "file": "crates/jp_config/src/model/parameters.rs", + "line": 387 + }, + { + "name": "PartialCustomReasoningConfig::assign", + "file": "crates/jp_config/src/model/parameters.rs", + "line": 466 + }, + { + "name": "ConfigFile::merge_delta", + "file": "crates/jp_config/src/fs.rs", + "line": 155 + }, + { + "name": "deep_merge_toml", + "file": "crates/jp_config/src/fs.rs", + "line": 203 + }, + { + "name": "PartialTemplateConfig::assign", + "file": "crates/jp_config/src/template.rs", + "line": 29 + }, + { + "name": "KvAssignment::assign_to_entry", + "file": "crates/jp_config/src/assignment.rs", + "line": 293 + }, + { + "name": "KvAssignment::assign_to_mergeable_entry", + "file": "crates/jp_config/src/assignment.rs", + "line": 398 + }, + { + "name": "KvAssignment::try_from_env", + "file": "crates/jp_config/src/assignment.rs", + "line": 452 + }, + { + "name": "KvAssignment::try_merge_object", + "file": "crates/jp_config/src/assignment.rs", + "line": 642 + }, + { + "name": "KvAssignment::try_some_mergeable_vec", + "file": "crates/jp_config/src/assignment.rs", + "line": 1163 + }, + { + "name": "KvAssignment::try_vec_of_nested", + "file": "crates/jp_config/src/assignment.rs", + "line": 1231 + }, + { + "name": "flatten_recursive", + "file": "crates/jp_config/src/assignment.rs", + "line": 1338 + }, + { + "name": "missing_key", + "file": "crates/jp_config/src/assignment.rs", + "line": 1600 + }, + { + "name": "PartialProviderConfig::assign", + "file": "crates/jp_config/src/providers.rs", + "line": 60 + }, + { + "name": "PartialModelConfig::assign", + "file": "crates/jp_config/src/model.rs", + "line": 41 + }, + { + "name": "PartialGenerateConfig::assign", + "file": "crates/jp_config/src/conversation/title/generate.rs", + "line": 40 + }, + { + "name": "PartialToolsConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 58 + }, + { + "name": "PartialToolsDefaultsConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 377 + }, + { + "name": "PartialToolConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 629 + }, + { + "name": "PartialToolParameterConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 862 + }, + { + "name": "PartialEnableConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 1861 + }, + { + "name": "PartialTitleConfig::assign", + "file": "crates/jp_config/src/conversation/title.rs", + "line": 40 + }, + { + "name": "LabelConfig::run", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 124 + }, + { + "name": "PartialLabelConfig::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 300 + }, + { + "name": "PartialLabelObject::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 389 + }, + { + "name": "PartialLabelValue::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 439 + }, + { + "name": "PartialLabelCommand::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 481 + }, + { + "name": "PartialApplyOn::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 509 + }, + { + "name": "PartialCompactionConfig::assign", + "file": "crates/jp_config/src/conversation/compaction.rs", + "line": 76 + }, + { + "name": "PartialCompactionRuleConfig::assign", + "file": "crates/jp_config/src/conversation/compaction.rs", + "line": 298 + }, + { + "name": "PartialSummaryConfig::assign", + "file": "crates/jp_config/src/conversation/compaction.rs", + "line": 384 + }, + { + "name": "PartialAccessConfig::assign", + "file": "crates/jp_config/src/conversation/tool/access.rs", + "line": 107 + }, + { + "name": "PartialFsRuleConfig::assign", + "file": "crates/jp_config/src/conversation/tool/access.rs", + "line": 208 + }, + { + "name": "PartialEnvRuleConfig::assign", + "file": "crates/jp_config/src/conversation/tool/access.rs", + "line": 286 + }, + { + "name": "PartialDisplayStyleConfig::assign", + "file": "crates/jp_config/src/conversation/tool/style.rs", + "line": 153 + }, + { + "name": "PartialErrorStyleConfig::assign", + "file": "crates/jp_config/src/conversation/tool/style.rs", + "line": 274 + }, + { + "name": "InlineResults::deserialize", + "file": "crates/jp_config/src/conversation/tool/style.rs", + "line": 370 + }, + { + "name": "PartialAttachmentConfig::assign", + "file": "crates/jp_config/src/conversation/attachment.rs", + "line": 31 + }, + { + "name": "PartialAttachmentObjectConfig::assign", + "file": "crates/jp_config/src/conversation/attachment.rs", + "line": 127 + }, + { + "name": "Workspace::resolvable_history", + "file": "crates/jp_workspace/src/session_mapping.rs", + "line": 132 + }, + { + "name": "Workspace::cleanup_stale_files", + "file": "crates/jp_workspace/src/session_mapping.rs", + "line": 295 + }, + { + "name": "generate_id_from_timestamp", + "file": "crates/jp_workspace/src/id.rs", + "line": 126 + }, + { + "name": "Workspace::open_inner", + "file": "crates/jp_workspace/src/lib.rs", + "line": 210 + }, + { + "name": "Workspace::load_conversation_index", + "file": "crates/jp_workspace/src/lib.rs", + "line": 369 + }, + { + "name": "Workspace::eager_load_conversation", + "file": "crates/jp_workspace/src/lib.rs", + "line": 470 + }, + { + "name": "Workspace::unarchive_conversation", + "file": "crates/jp_workspace/src/lib.rs", + "line": 927 + }, + { + "name": "Workspace::sync_conversation", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1035 + }, + { + "name": "Workspace::ensure_all_metadata_loaded", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1070 + }, + { + "name": "Workspace::test_lock", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1101 + }, + { + "name": "maybe_init_conversation", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1143 + }, + { + "name": "maybe_init_events", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1164 + }, + { + "name": "upsert_root", + "file": "crates/jp_workspace/src/roots.rs", + "line": 79 + }, + { + "name": "migrate_legacy_symlink", + "file": "crates/jp_workspace/src/roots.rs", + "line": 149 + }, + { + "name": "run", + "file": "crates/internal/build-registry/src/main.rs", + "line": 87 + }, + { + "name": "create", + "file": "crates/internal/ticket/src/store.rs", + "line": 169 + }, + { + "name": "vocabulary", + "file": "crates/internal/ticket/src/store.rs", + "line": 291 + }, + { + "name": "import", + "file": "crates/internal/ticket/src/store.rs", + "line": 394 + }, + { + "name": "slug", + "file": "crates/internal/ticket/src/store.rs", + "line": 723 + }, + { + "name": "escape", + "file": "crates/internal/ticket/src/import.rs", + "line": 51 + }, + { + "name": "unescaped", + "file": "crates/internal/ticket/src/parse.rs", + "line": 95 + }, + { + "name": "metadata", + "file": "crates/internal/ticket/src/parse.rs", + "line": 273 + }, + { + "name": "FileContent::add", + "file": "crates/jp_attachment_file_content/src/lib.rs", + "line": 39 + }, + { + "name": "FileContent::get", + "file": "crates/jp_attachment_file_content/src/lib.rs", + "line": 96 + }, + { + "name": "uri_to_pattern", + "file": "crates/jp_attachment_file_content/src/lib.rs", + "line": 309 + }, + { + "name": "Command::to_uri", + "file": "crates/jp_attachment_cmd_output/src/lib.rs", + "line": 32 + }, + { + "name": "Commands::get", + "file": "crates/jp_attachment_cmd_output/src/lib.rs", + "line": 109 + }, + { + "name": "Labels::from_tokens_lossy", + "file": "crates/jp_label/src/labels.rs", + "line": 194 + }, + { + "name": "ValueSetVisitor::visit_seq", + "file": "crates/jp_label/src/labels.rs", + "line": 358 + }, + { + "name": "Vocabulary::parse", + "file": "crates/jp_label/src/vocabulary.rs", + "line": 105 + }, + { + "name": "Vocabulary::resolve_against", + "file": "crates/jp_label/src/vocabulary.rs", + "line": 248 + }, + { + "name": "InlineSelect::prompt", + "file": "crates/jp_inquire/src/inline_select.rs", + "line": 108 + }, + { + "name": "InlineSelect::build_help_text", + "file": "crates/jp_inquire/src/inline_select.rs", + "line": 170 + }, + { + "name": "Vcr::cassette", + "file": "crates/jp_test/src/mock.rs", + "line": 78 + }, + { + "name": "modify_fixture", + "file": "crates/jp_test/src/mock.rs", + "line": 142 + }, + { + "name": "partialize_schema", + "file": "crates/contrib/schematic/src/internal.rs", + "line": 147 + }, + { + "name": "JsoncTemplateRenderer::render_array", + "file": "crates/contrib/schematic/src/schema/renderers/jsonc_template.rs", + "line": 43 + }, + { + "name": "JsoncTemplateRenderer::render_object", + "file": "crates/contrib/schematic/src/schema/renderers/jsonc_template.rs", + "line": 84 + }, + { + "name": "TomlTemplateRenderer::extract_sections", + "file": "crates/contrib/schematic/src/schema/renderers/toml_template.rs", + "line": 47 + }, + { + "name": "TomlTemplateRenderer::render_array", + "file": "crates/contrib/schematic/src/schema/renderers/toml_template.rs", + "line": 100 + }, + { + "name": "TomlTemplateRenderer::render_object", + "file": "crates/contrib/schematic/src/schema/renderers/toml_template.rs", + "line": 136 + }, + { + "name": "TomlTemplateRenderer::render", + "file": "crates/contrib/schematic/src/schema/renderers/toml_template.rs", + "line": 218 + }, + { + "name": "YamlTemplateRenderer::render_array", + "file": "crates/contrib/schematic/src/schema/renderers/yaml_template.rs", + "line": 41 + }, + { + "name": "YamlTemplateRenderer::render_object", + "file": "crates/contrib/schematic/src/schema/renderers/yaml_template.rs", + "line": 89 + }, + { + "name": "TemplateContext::indent", + "file": "crates/contrib/schematic/src/schema/renderers/template.rs", + "line": 117 + }, + { + "name": "TemplateContext::create_field_comment", + "file": "crates/contrib/schematic/src/schema/renderers/template.rs", + "line": 133 + }, + { + "name": "TemplateContext::get_stack_key", + "file": "crates/contrib/schematic/src/schema/renderers/template.rs", + "line": 209 + }, + { + "name": "TemplateContext::is_hidden", + "file": "crates/contrib/schematic/src/schema/renderers/template.rs", + "line": 234 + }, + { + "name": "SchemaGenerator::add_schema", + "file": "crates/contrib/schematic/src/schema/generator.rs", + "line": 26 + }, + { + "name": "Toc::parse", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 66 + }, + { + "name": "read_run", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 105 + }, + { + "name": "read_info", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 134 + }, + { + "name": "read_target", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 154 + }, + { + "name": "read_summary", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 184 + }, + { + "name": "read_processes", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 238 + }, + { + "name": "read_data", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 264 + }, + { + "name": "skip_to_end", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 338 + }, + { + "name": "TraceBundle::open", + "file": "crates/contrib/xct2cli/src/trace/mod.rs", + "line": 31 + }, + { + "name": "QueryResult::parse", + "file": "crates/contrib/xct2cli/src/trace/mod.rs", + "line": 81 + }, + { + "name": "CallgraphBuilder<'a>::build_symbolicator", + "file": "crates/contrib/xct2cli/src/analysis/callgraph.rs", + "line": 121 + }, + { + "name": "CallgraphBuilder<'a>::top_inclusive", + "file": "crates/contrib/xct2cli/src/analysis/callgraph.rs", + "line": 164 + }, + { + "name": "CallgraphBuilder<'a>::callees_of", + "file": "crates/contrib/xct2cli/src/analysis/callgraph.rs", + "line": 206 + }, + { + "name": "TraceBundle::pc_samples", + "file": "crates/contrib/xct2cli/src/analysis/samples.rs", + "line": 32 + }, + { + "name": "TraceBundle::callstacks", + "file": "crates/contrib/xct2cli/src/analysis/samples.rs", + "line": 88 + }, + { + "name": "HotspotsBuilder<'a>::run", + "file": "crates/contrib/xct2cli/src/analysis/hotspots.rs", + "line": 138 + }, + { + "name": "Xctrace::discover", + "file": "crates/contrib/xct2cli/src/xctrace.rs", + "line": 34 + }, + { + "name": "Xctrace::run", + "file": "crates/contrib/xct2cli/src/xctrace.rs", + "line": 64 + }, + { + "name": "Xctrace::run_args", + "file": "crates/contrib/xct2cli/src/xctrace.rs", + "line": 73 + }, + { + "name": "Symbolicator::resolve", + "file": "crates/contrib/xct2cli/src/symbol/macho.rs", + "line": 84 + }, + { + "name": "BinaryInfo::enumerate_slides", + "file": "crates/contrib/xct2cli/src/symbol/macho.rs", + "line": 224 + }, + { + "name": "TraceBundle::image_loads", + "file": "crates/contrib/xct2cli/src/symbol/macho.rs", + "line": 336 + }, + { + "name": "decode_dyld_map_a", + "file": "crates/contrib/xct2cli/src/symbol/macho.rs", + "line": 355 + }, + { + "name": "demangle", + "file": "crates/contrib/xct2cli/src/symbol/swift.rs", + "line": 41 + }, + { + "name": "load", + "file": "crates/contrib/xct2cli/src/symbol/swift.rs", + "line": 91 + }, + { + "name": "candidate_paths", + "file": "crates/contrib/xct2cli/src/symbol/swift.rs", + "line": 122 + }, + { + "name": "developer_dir", + "file": "crates/contrib/xct2cli/src/symbol/swift.rs", + "line": 139 + }, + { + "name": "RowReader::next_event", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 61 + }, + { + "name": "RowReader::read_node_prelude", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 128 + }, + { + "name": "RowReader::read_schema_body", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 180 + }, + { + "name": "RowReader::read_column", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 212 + }, + { + "name": "RowReader::read_row", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 259 + }, + { + "name": "RowReader::parse_cell_start", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 287 + }, + { + "name": "RowReader::parse_cell_empty", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 347 + }, + { + "name": "strip_environment", + "file": "crates/contrib/xct2cli/src/redact.rs", + "line": 30 + }, + { + "name": "format_markdown_with", + "file": "crates/contrib/comfort/src/format.rs", + "line": 130 + }, + { + "name": "format_source_impl", + "file": "crates/contrib/comfort/src/format.rs", + "line": 179 + }, + { + "name": "canonicalize_markdown", + "file": "crates/contrib/comfort/src/format.rs", + "line": 239 + }, + { + "name": "trim_blank_prefix_lines", + "file": "crates/contrib/comfort/src/format.rs", + "line": 276 + }, + { + "name": "collect_verbatim_block_ranges", + "file": "crates/contrib/comfort/src/format.rs", + "line": 323 + }, + { + "name": "align_tables", + "file": "crates/contrib/comfort/src/format.rs", + "line": 351 + }, + { + "name": "collect_table_replacements", + "file": "crates/contrib/comfort/src/format.rs", + "line": 391 + }, + { + "name": "render_aligned_table", + "file": "crates/contrib/comfort/src/format.rs", + "line": 471 + }, + { + "name": "extract_reference_links", + "file": "crates/contrib/comfort/src/format.rs", + "line": 609 + }, + { + "name": "prune_unused_reference_definitions", + "file": "crates/contrib/comfort/src/format.rs", + "line": 699 + }, + { + "name": "collect_referenced_labels", + "file": "crates/contrib/comfort/src/format.rs", + "line": 742 + }, + { + "name": "collect_inline_link_replacements", + "file": "crates/contrib/comfort/src/format.rs", + "line": 921 + }, + { + "name": "extract_existing_reference_definitions", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1010 + }, + { + "name": "collect_reference_definition_spans", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1064 + }, + { + "name": "collect_excluded_ranges_for_refdefs", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1128 + }, + { + "name": "parse_reference_definition", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1163 + }, + { + "name": "parse_quoted_title", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1298 + }, + { + "name": "protect_reference_form_links", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1362 + }, + { + "name": "collect_reference_form_link_ranges", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1462 + }, + { + "name": "reflow_markdown", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1569 + }, + { + "name": "ResolveIntraDocLinks::resolve", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1633 + }, + { + "name": "collect_paragraphs", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1713 + }, + { + "name": "continuation_prefix_from_ancestors", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1795 + }, + { + "name": "strip_block_quote_markers", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1865 + }, + { + "name": "walk_paragraphs_for_atomic_ranges", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1942 + }, + { + "name": "walk_inline_for_atomic_ranges", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1960 + }, + { + "name": "reflow_paragraph", + "file": "crates/contrib/comfort/src/format.rs", + "line": 2005 + }, + { + "name": "cli_main", + "file": "crates/contrib/comfort/src/lib.rs", + "line": 45 + }, + { + "name": "run", + "file": "crates/contrib/comfort/src/run.rs", + "line": 27 + }, + { + "name": "run_stdin", + "file": "crates/contrib/comfort/src/run.rs", + "line": 75 + }, + { + "name": "Block::reassemble", + "file": "crates/contrib/comfort/src/extract.rs", + "line": 60 + }, + { + "name": "find_blocks", + "file": "crates/contrib/comfort/src/extract.rs", + "line": 88 + }, + { + "name": "split_sentences", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 102 + }, + { + "name": "fold_line_breaks", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 207 + }, + { + "name": "collapse_whitespace", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 226 + }, + { + "name": "merge_abbreviation_splits", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 254 + }, + { + "name": "merge_quoted_punct_splits", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 274 + }, + { + "name": "is_abbreviation_ending", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 294 + }, + { + "name": "workspace_files", + "file": "crates/contrib/comfort/src/walk.rs", + "line": 19 + }, + { + "name": "expand_path", + "file": "crates/contrib/comfort/src/walk.rs", + "line": 55 + }, + { + "name": "walk_files", + "file": "crates/contrib/comfort/src/walk.rs", + "line": 63 + }, + { + "name": "SchemaType::get_default", + "file": "crates/contrib/schematic_types/src/schema_type.rs", + "line": 55 + }, + { + "name": "SchemaType::add_field", + "file": "crates/contrib/schematic_types/src/schema_type.rs", + "line": 137 + }, + { + "name": "EnumType::from_schemas", + "file": "crates/contrib/schematic_types/src/enums.rs", + "line": 38 + }, + { + "name": "Schema::nullify", + "file": "crates/contrib/schematic_types/src/schema.rs", + "line": 134 + }, + { + "name": "Schema::partialize", + "file": "crates/contrib/schematic_types/src/schema.rs", + "line": 166 + }, + { + "name": "is_default", + "file": "crates/contrib/schematic_types/src/schema.rs", + "line": 278 + }, + { + "name": "SchemaBuilder::build_root", + "file": "crates/contrib/schematic_types/src/schema_builder.rs", + "line": 34 + }, + { + "name": "SchemaBuilder::infer", + "file": "crates/contrib/schematic_types/src/schema_builder.rs", + "line": 184 + }, + { + "name": "Field<'_>::generate_from_partial_value", + "file": "crates/contrib/schematic_macros/src/config/field.rs", + "line": 149 + }, + { + "name": "Variant<'_>::generate_is_empty", + "file": "crates/contrib/schematic_macros/src/config/variant.rs", + "line": 28 + }, + { + "name": "Variant<'_>::generate_finalize_statement", + "file": "crates/contrib/schematic_macros/src/config/variant.rs", + "line": 124 + }, + { + "name": "Variant<'_>::generate_merge_statement", + "file": "crates/contrib/schematic_macros/src/config/variant.rs", + "line": 155 + }, + { + "name": "Variant<'_>::generate_from_partial_value", + "file": "crates/contrib/schematic_macros/src/config/variant.rs", + "line": 248 + }, + { + "name": "ConfigMacro<'_>::to_tokens", + "file": "crates/contrib/schematic_macros/src/config/mod.rs", + "line": 29 + }, + { + "name": "emit_schematic_impls", + "file": "crates/contrib/schematic_macros/src/config/mod.rs", + "line": 177 + }, + { + "name": "emit_config_impls", + "file": "crates/contrib/schematic_macros/src/config/mod.rs", + "line": 277 + }, + { + "name": "Container<'_>::generate_from_partial", + "file": "crates/contrib/schematic_macros/src/config/container.rs", + "line": 303 + }, + { + "name": "Container<'_>::generate_untagged_deserialize", + "file": "crates/contrib/schematic_macros/src/config/container.rs", + "line": 521 + }, + { + "name": "Field<'_>::from", + "file": "crates/contrib/schematic_macros/src/common/field.rs", + "line": 94 + }, + { + "name": "Field<'_>::get_name", + "file": "crates/contrib/schematic_macros/src/common/field.rs", + "line": 218 + }, + { + "name": "Field<'_>::get_aliases", + "file": "crates/contrib/schematic_macros/src/common/field.rs", + "line": 238 + }, + { + "name": "Field<'_>::generate_schema_type", + "file": "crates/contrib/schematic_macros/src/common/field.rs", + "line": 414 + }, + { + "name": "extract_inner_type", + "file": "crates/contrib/schematic_macros/src/common/field_value.rs", + "line": 18 + }, + { + "name": "FieldValue::nested", + "file": "crates/contrib/schematic_macros/src/common/field_value.rs", + "line": 92 + }, + { + "name": "Macro<'l>::from", + "file": "crates/contrib/schematic_macros/src/common/macros.rs", + "line": 105 + }, + { + "name": "Container<'_>::generate_schema", + "file": "crates/contrib/schematic_macros/src/common/container.rs", + "line": 93 + }, + { + "name": "generate_enum_schema", + "file": "crates/contrib/schematic_macros/src/common/container.rs", + "line": 173 + }, + { + "name": "extract_deprecated", + "file": "crates/contrib/schematic_macros/src/utils.rs", + "line": 139 + }, + { + "name": "Variant<'_>::from", + "file": "crates/contrib/schematic_macros/src/config_enum/variant.rs", + "line": 53 + }, + { + "name": "Variant<'_>::get_schema_type", + "file": "crates/contrib/schematic_macros/src/config_enum/variant.rs", + "line": 152 + }, + { + "name": "macro_impl", + "file": "crates/contrib/schematic_macros/src/config_enum/mod.rs", + "line": 33 + }, + { + "name": "collect_variant_tokens", + "file": "crates/contrib/schematic_macros/src/config_enum/mod.rs", + "line": 115 + }, + { + "name": "emit_enum_schematic_impl", + "file": "crates/contrib/schematic_macros/src/config_enum/mod.rs", + "line": 288 + }, + { + "name": "query_table", + "file": "crates/contrib/grizzly/src/fts.rs", + "line": 101 + }, + { + "name": "GrizzlyService::note_get", + "file": "crates/contrib/grizzly/src/server.rs", + "line": 149 + }, + { + "name": "GrizzlyService::note_search", + "file": "crates/contrib/grizzly/src/server.rs", + "line": 190 + }, + { + "name": "GrizzlyService::note_create", + "file": "crates/contrib/grizzly/src/server.rs", + "line": 224 + }, + { + "name": "urlencoded", + "file": "crates/contrib/grizzly/src/server.rs", + "line": 267 + }, + { + "name": "BearDb::open", + "file": "crates/contrib/grizzly/src/db.rs", + "line": 32 + }, + { + "name": "BearDb::open_readonly", + "file": "crates/contrib/grizzly/src/db.rs", + "line": 129 + }, + { + "name": "Note::to_xml_with_lines", + "file": "crates/contrib/grizzly/src/note.rs", + "line": 66 + }, + { + "name": "run", + "file": "crates/contrib/grizzly/src/main.rs", + "line": 103 + }, + { + "name": "execute", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 303 + }, + { + "name": "execute_fts", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 330 + }, + { + "name": "push_filters", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 375 + }, + { + "name": "get_filtered_note_ids", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 427 + }, + { + "name": "execute_like", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 460 + }, + { + "name": "build_match", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 567 + }, + { + "name": "extract_hits_and_snippet", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 608 + }, + { + "name": "make_snippet", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 677 + }, + { + "name": "fetch_metadata", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 716 + }, + { + "name": "merge_into_object", + "file": "crates/contrib/json_edit/src/merge.rs", + "line": 20 + }, + { + "name": "Object::set", + "file": "crates/contrib/json_edit/src/ast.rs", + "line": 111 + }, + { + "name": "Object::insert_member", + "file": "crates/contrib/json_edit/src/ast.rs", + "line": 213 + }, + { + "name": "escape_json_key", + "file": "crates/contrib/json_edit/src/ast.rs", + "line": 409 + }, + { + "name": "build_member", + "file": "crates/contrib/json_edit/src/ast.rs", + "line": 428 + }, + { + "name": "lex", + "file": "crates/contrib/json_edit/src/lexer.rs", + "line": 15 + }, + { + "name": "escape_css_value", + "file": "crates/contrib/bookworm/src/docs.rs", + "line": 253 + }, + { + "name": "walk_dirs", + "file": "crates/contrib/bookworm/src/dl.rs", + "line": 296 + }, + { + "name": "collapse_blank_lines", + "file": "crates/contrib/bookworm/src/util.rs", + "line": 24 + }, + { + "name": "index", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 39 + }, + { + "name": "recursive_walk", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 159 + }, + { + "name": "parse_rustdoc_file", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 200 + }, + { + "name": "check_if_redirection", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 351 + }, + { + "name": "check_if_inner_type_alias", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 383 + }, + { + "name": "Url::from", + "file": "crates/contrib/bookworm/src/mcp/tools.rs", + "line": 73 + }, + { + "name": "CrateUri::try_from", + "file": "crates/contrib/bookworm/src/mcp/tools.rs", + "line": 115 + }, + { + "name": "format_xml", + "file": "crates/contrib/bookworm/src/mcp/tools.rs", + "line": 189 + }, + { + "name": "write_xml_node", + "file": "crates/contrib/bookworm/src/mcp/tools.rs", + "line": 215 + }, + { + "name": "BookwormService::format_contents", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 49 + }, + { + "name": "BookwormService::crates_search", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 166 + }, + { + "name": "BookwormService::crate_search_items", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 186 + }, + { + "name": "BookwormService::crate_resource", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 225 + }, + { + "name": "BookwormService::crate_versions", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 257 + }, + { + "name": "BookwormService::crate_readme", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 279 + }, + { + "name": "collect_resources", + "file": "crates/contrib/bookworm/src/query/list_crate_source_resources.rs", + "line": 45 + }, + { + "name": "search_crate_type_definitions", + "file": "crates/contrib/bookworm/src/query/search_crate_type_definitions.rs", + "line": 17 + }, + { + "name": "get_crate_source_resource", + "file": "crates/contrib/bookworm/src/query/get_crate_source_resource.rs", + "line": 12 + }, + { + "name": "compaction_detail_item", + "file": "crates/jp_cli/src/format.rs", + "line": 134 + }, + { + "name": "compaction_policy_label", + "file": "crates/jp_cli/src/format.rs", + "line": 172 + }, + { + "name": "CompactFlag::from_arg_matches", + "file": "crates/jp_cli/src/cmd/compact_flag.rs", + "line": 134 + }, + { + "name": "CompactSpec::to_partial_rule", + "file": "crates/jp_cli/src/cmd/compact_flag.rs", + "line": 197 + }, + { + "name": "Fmt::run", + "file": "crates/jp_cli/src/cmd/config/fmt.rs", + "line": 23 + }, + { + "name": "Fmt::fmt_target", + "file": "crates/jp_cli/src/cmd/config/fmt.rs", + "line": 74 + }, + { + "name": "Show::run", + "file": "crates/jp_cli/src/cmd/config/show.rs", + "line": 20 + }, + { + "name": "config_skeleton", + "file": "crates/jp_cli/src/cmd/config/show.rs", + "line": 40 + }, + { + "name": "Set::run", + "file": "crates/jp_cli/src/cmd/config/set.rs", + "line": 27 + }, + { + "name": "Set::set_in_conversations", + "file": "crates/jp_cli/src/cmd/config/set.rs", + "line": 43 + }, + { + "name": "Set::set_in_file", + "file": "crates/jp_cli/src/cmd/config/set.rs", + "line": 76 + }, + { + "name": "Ls::run", + "file": "crates/jp_cli/src/cmd/workspace/ls.rs", + "line": 22 + }, + { + "name": "render", + "file": "crates/jp_cli/src/cmd/workspace/show.rs", + "line": 283 + }, + { + "name": "conversation_stats", + "file": "crates/jp_cli/src/cmd/workspace/show.rs", + "line": 381 + }, + { + "name": "resolve", + "file": "crates/jp_cli/src/cmd/workspace/target.rs", + "line": 212 + }, + { + "name": "stdin_id", + "file": "crates/jp_cli/src/cmd/workspace/target.rs", + "line": 505 + }, + { + "name": "Query::run_locked", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 434 + }, + { + "name": "Query::conversation_load_request", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 853 + }, + { + "name": "Query::build_conversation", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 870 + }, + { + "name": "Query::create_new_conversation", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 966 + }, + { + "name": "Query::acquire_lock", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 1285 + }, + { + "name": "await_mcp_servers", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 1694 + }, + { + "name": "claim_mcp_startup_region", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 1825 + }, + { + "name": "mcp_startup_line", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 1853 + }, + { + "name": "persist_config_reset", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2422 + }, + { + "name": "turn_config_delta", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2451 + }, + { + "name": "Query::apply_cli_config", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2472 + }, + { + "name": "build_sections", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2570 + }, + { + "name": "build_thread", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2598 + }, + { + "name": "apply_mounts", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2922 + }, + { + "name": "create_mount_effects", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2995 + }, + { + "name": "PendingStreamTrim::apply", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 3174 + }, + { + "name": "mount_access_seed", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 3333 + }, + { + "name": "read_piped_stdin", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 3437 + }, + { + "name": "Composer::compose", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 90 + }, + { + "name": "Composer::ask", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 135 + }, + { + "name": "Composer::buffer", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 180 + }, + { + "name": "run_plugin", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 291 + }, + { + "name": "spawn_plugin", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 450 + }, + { + "name": "stop_plugin", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 517 + }, + { + "name": "message_loop", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 599 + }, + { + "name": "run_query", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 689 + }, + { + "name": "prepare_turn", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 930 + }, + { + "name": "handle_request", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 1070 + }, + { + "name": "handle_write_draft", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 1449 + }, + { + "name": "handle_list_configs", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 1547 + }, + { + "name": "describe_plugin", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 2081 + }, + { + "name": "discover_plugins", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 2121 + }, + { + "name": "show_plugin_help", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 2180 + }, + { + "name": "run_external", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 2221 + }, + { + "name": "Update::run", + "file": "crates/jp_cli/src/cmd/plugin/update.rs", + "line": 14 + }, + { + "name": "Install::run", + "file": "crates/jp_cli/src/cmd/plugin/install.rs", + "line": 16 + }, + { + "name": "TimeThreshold::from_str", + "file": "crates/jp_cli/src/cmd/time.rs", + "line": 43 + }, + { + "name": "Resolver<'a>::automatic", + "file": "crates/jp_cli/src/cmd/label/resolve.rs", + "line": 90 + }, + { + "name": "Resolver<'a>::alias", + "file": "crates/jp_cli/src/cmd/label/resolve.rs", + "line": 154 + }, + { + "name": "run_command", + "file": "crates/jp_cli/src/cmd/label/resolve.rs", + "line": 302 + }, + { + "name": "parse_bound", + "file": "crates/jp_cli/src/cmd/turn_selection.rs", + "line": 53 + }, + { + "name": "parse_to_bound", + "file": "crates/jp_cli/src/cmd/turn_selection.rs", + "line": 111 + }, + { + "name": "TurnSet::new", + "file": "crates/jp_cli/src/cmd/turn_selection.rs", + "line": 278 + }, + { + "name": "TurnSelection::windows", + "file": "crates/jp_cli/src/cmd/turn_selection.rs", + "line": 651 + }, + { + "name": "Init::run", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 35 + }, + { + "name": "Init::maybe_ask_and_persist_user_name", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 128 + }, + { + "name": "Init::ask_run_mode", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 192 + }, + { + "name": "Init::ask_model", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 278 + }, + { + "name": "Init::detect_models", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 311 + }, + { + "name": "acquire_lock", + "file": "crates/jp_cli/src/cmd/lock.rs", + "line": 101 + }, + { + "name": "prompt_contention", + "file": "crates/jp_cli/src/cmd/lock.rs", + "line": 154 + }, + { + "name": "lock_holder_description", + "file": "crates/jp_cli/src/cmd/lock.rs", + "line": 197 + }, + { + "name": "claim_lock_region", + "file": "crates/jp_cli/src/cmd/lock.rs", + "line": 211 + }, + { + "name": "Resolved::grouped", + "file": "crates/jp_cli/src/cmd/label.rs", + "line": 123 + }, + { + "name": "expand_aliases", + "file": "crates/jp_cli/src/cmd/label.rs", + "line": 177 + }, + { + "name": "apply", + "file": "crates/jp_cli/src/cmd/label.rs", + "line": 271 + }, + { + "name": "ConversationLoadRequest::explicit_or_session", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 124 + }, + { + "name": "ConversationLoadRequest::explicit_or_session_with_config", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 138 + }, + { + "name": "ConversationLoadRequest::explicit_or_none", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 151 + }, + { + "name": "ConversationLoadRequest::explicit_or_previous", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 165 + }, + { + "name": "read_stdin_ids", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 614 + }, + { + "name": "resolve_targets", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 647 + }, + { + "name": "resolve_from_session_or_picker", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 734 + }, + { + "name": "format_relative", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 911 + }, + { + "name": "InterruptHandler

::collect_reply_inline", + "file": "crates/jp_cli/src/cmd/query/interrupt/handler.rs", + "line": 474 + }, + { + "name": "handle_streaming_interrupt", + "file": "crates/jp_cli/src/cmd/query/interrupt/signals.rs", + "line": 75 + }, + { + "name": "handle_tool_interrupt", + "file": "crates/jp_cli/src/cmd/query/interrupt/signals.rs", + "line": 261 + }, + { + "name": "TurnCoordinator::handle_streaming_event", + "file": "crates/jp_cli/src/cmd/query/turn/coordinator.rs", + "line": 271 + }, + { + "name": "claim_waiting_region", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 118 + }, + { + "name": "run_turn_loop", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 172 + }, + { + "name": "build_inquiry_backend", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 932 + }, + { + "name": "build_inquiry_overrides", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 1030 + }, + { + "name": "build_execution_plan", + "file": "crates/jp_cli/src/cmd/query/tool/pending.rs", + "line": 141 + }, + { + "name": "LlmInquiryBackend::inquire", + "file": "crates/jp_cli/src/cmd/query/tool/inquiry.rs", + "line": 217 + }, + { + "name": "ToolPrompter::prompt_ask", + "file": "crates/jp_cli/src/cmd/query/tool/prompter.rs", + "line": 270 + }, + { + "name": "stderr_sink", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 250 + }, + { + "name": "ToolCoordinator::pre_render_for_prompt", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 490 + }, + { + "name": "ToolCoordinator::resolve_tool_call_decision", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 549 + }, + { + "name": "ToolCoordinator::prepare", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 717 + }, + { + "name": "ToolCoordinator::render_approved_tool", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 777 + }, + { + "name": "ToolCoordinator::run_permission_phase", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 896 + }, + { + "name": "ToolCoordinator::execute_with_prompting", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 952 + }, + { + "name": "ToolCoordinator::handle_tool_result", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1521 + }, + { + "name": "ToolCoordinator::handle_prompt_answer", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1786 + }, + { + "name": "ToolCoordinator::handle_prompt_cancelled", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1846 + }, + { + "name": "ToolCoordinator::process_next_prompt", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1974 + }, + { + "name": "ToolExecutor::execute", + "file": "crates/jp_cli/src/cmd/query/tool/executor.rs", + "line": 215 + }, + { + "name": "Grep::run", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 180 + }, + { + "name": "Grep::collect_hits_for_id", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 339 + }, + { + "name": "Grep::render", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 450 + }, + { + "name": "Grep::render_hits", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 476 + }, + { + "name": "expand_scopes", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 719 + }, + { + "name": "collect_scope_hits", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 838 + }, + { + "name": "context_ranges", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 893 + }, + { + "name": "Row::windowed", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 996 + }, + { + "name": "window_row", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 1059 + }, + { + "name": "highlight", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 1136 + }, + { + "name": "render_group_heading", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 1204 + }, + { + "name": "Edit::run", + "file": "crates/jp_cli/src/cmd/conversation/edit.rs", + "line": 97 + }, + { + "name": "Edit::run_open_editor", + "file": "crates/jp_cli/src/cmd/conversation/edit.rs", + "line": 124 + }, + { + "name": "Edit::run_property_edit", + "file": "crates/jp_cli/src/cmd/conversation/edit.rs", + "line": 244 + }, + { + "name": "Compact::effective_rules", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 201 + }, + { + "name": "plan_rule_ranges", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 426 + }, + { + "name": "plan_compactions", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 579 + }, + { + "name": "timeline_lines", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 771 + }, + { + "name": "Compact::compact_one", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 913 + }, + { + "name": "Compact::preview_compaction", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 1026 + }, + { + "name": "Rm::conversation_load_request", + "file": "crates/jp_cli/src/cmd/conversation/rm.rs", + "line": 71 + }, + { + "name": "remove", + "file": "crates/jp_cli/src/cmd/conversation/rm.rs", + "line": 109 + }, + { + "name": "Ls::run", + "file": "crates/jp_cli/src/cmd/conversation/ls.rs", + "line": 147 + }, + { + "name": "Ls::build_conversation_row", + "file": "crates/jp_cli/src/cmd/conversation/ls.rs", + "line": 277 + }, + { + "name": "Ls::build_body", + "file": "crates/jp_cli/src/cmd/conversation/ls.rs", + "line": 360 + }, + { + "name": "build_header_row", + "file": "crates/jp_cli/src/cmd/conversation/ls.rs", + "line": 388 + }, + { + "name": "generate_summary", + "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", + "line": 44 + }, + { + "name": "summarize_stream", + "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", + "line": 114 + }, + { + "name": "summarize_events", + "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", + "line": 232 + }, + { + "name": "Fork::fork_each", + "file": "crates/jp_cli/src/cmd/conversation/fork.rs", + "line": 87 + }, + { + "name": "Path::run", + "file": "crates/jp_cli/src/cmd/conversation/path.rs", + "line": 34 + }, + { + "name": "resolve_paths", + "file": "crates/jp_cli/src/cmd/conversation/path.rs", + "line": 57 + }, + { + "name": "Title::title_one", + "file": "crates/jp_cli/src/cmd/conversation/title.rs", + "line": 78 + }, + { + "name": "Unarchive::run", + "file": "crates/jp_cli/src/cmd/conversation/unarchive.rs", + "line": 31 + }, + { + "name": "Unarchive::resolve_ids", + "file": "crates/jp_cli/src/cmd/conversation/unarchive.rs", + "line": 52 + }, + { + "name": "Label::conversation_load_request", + "file": "crates/jp_cli/src/cmd/conversation/label.rs", + "line": 98 + }, + { + "name": "Label::run", + "file": "crates/jp_cli/src/cmd/conversation/label.rs", + "line": 111 + }, + { + "name": "Print::print_conversation", + "file": "crates/jp_cli/src/cmd/conversation/print.rs", + "line": 138 + }, + { + "name": "Archive::conversation_load_request", + "file": "crates/jp_cli/src/cmd/conversation/archive.rs", + "line": 70 + }, + { + "name": "Archive::run", + "file": "crates/jp_cli/src/cmd/conversation/archive.rs", + "line": 79 + }, + { + "name": "Use::run", + "file": "crates/jp_cli/src/cmd/conversation/use_.rs", + "line": 67 + }, + { + "name": "Use::conversation_load_request", + "file": "crates/jp_cli/src/cmd/conversation/use_.rs", + "line": 178 + }, + { + "name": "Use::run_filtered", + "file": "crates/jp_cli/src/cmd/conversation/use_.rs", + "line": 190 + }, + { + "name": "ApprovalStore::load", + "file": "crates/jp_cli/src/access/approvals.rs", + "line": 55 + }, + { + "name": "compile_fs", + "file": "crates/jp_cli/src/access/compile.rs", + "line": 74 + }, + { + "name": "compile_tool_policy", + "file": "crates/jp_cli/src/access/compile.rs", + "line": 147 + }, + { + "name": "compile_policy", + "file": "crates/jp_cli/src/access/compile.rs", + "line": 174 + }, + { + "name": "Commands::run", + "file": "crates/jp_cli/src/cmd.rs", + "line": 65 + }, + { + "name": "Commands::name", + "file": "crates/jp_cli/src/cmd.rs", + "line": 142 + }, + { + "name": "Error::from", + "file": "crates/jp_cli/src/cmd.rs", + "line": 430 + }, + { + "name": "run", + "file": "crates/jp_cli/src/lib.rs", + "line": 413 + }, + { + "name": "run_inner", + "file": "crates/jp_cli/src/lib.rs", + "line": 591 + }, + { + "name": "drain_background_tasks", + "file": "crates/jp_cli/src/lib.rs", + "line": 835 + }, + { + "name": "print_plugin_help_section", + "file": "crates/jp_cli/src/lib.rs", + "line": 899 + }, + { + "name": "parse_error", + "file": "crates/jp_cli/src/lib.rs", + "line": 923 + }, + { + "name": "resolve_config", + "file": "crates/jp_cli/src/lib.rs", + "line": 999 + }, + { + "name": "effective_cfg_overrides", + "file": "crates/jp_cli/src/lib.rs", + "line": 1124 + }, + { + "name": "load_workspace", + "file": "crates/jp_cli/src/lib.rs", + "line": 1248 + }, + { + "name": "TurnRenderer::new", + "file": "crates/jp_cli/src/render/turn.rs", + "line": 110 + }, + { + "name": "TurnRenderer::render_turn", + "file": "crates/jp_cli/src/render/turn.rs", + "line": 168 + }, + { + "name": "TurnRenderer::reconfigure", + "file": "crates/jp_cli/src/render/turn.rs", + "line": 265 + }, + { + "name": "ToolRenderer::new", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 145 + }, + { + "name": "ToolRenderer::write_chrome", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 216 + }, + { + "name": "ToolRenderer::render_approved", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 291 + }, + { + "name": "ToolRenderer::render_custom_tool_call", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 315 + }, + { + "name": "ToolRenderer::start_progress", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 369 + }, + { + "name": "ToolRenderer::render_result", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 427 + }, + { + "name": "ToolRenderer::register", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 592 + }, + { + "name": "ToolRenderer::claim_preparing", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 652 + }, + { + "name": "format_args", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 717 + }, + { + "name": "format_args_custom", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 814 + }, + { + "name": "ChatRenderer::render_reasoning", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 314 + }, + { + "name": "ChatRenderer::handle_event", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 437 + }, + { + "name": "ChatRenderer::print_code", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 510 + }, + { + "name": "ChatRenderer::drain_buffer", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 726 + }, + { + "name": "ChatRenderer::enter_tool_call", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 827 + }, + { + "name": "build_role_header_line", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 910 + }, + { + "name": "indent_lines", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 956 + }, + { + "name": "Matcher::is_match", + "file": "crates/jp_cli/src/shared/search.rs", + "line": 295 + }, + { + "name": "Matcher::find_spans", + "file": "crates/jp_cli/src/shared/search.rs", + "line": 324 + }, + { + "name": "id_matches", + "file": "crates/jp_cli/src/shared/search.rs", + "line": 381 + }, + { + "name": "parse_schema_dsl", + "file": "crates/jp_cli/src/schema.rs", + "line": 77 + }, + { + "name": "SchemaType::to_json", + "file": "crates/jp_cli/src/schema.rs", + "line": 130 + }, + { + "name": "Parser<'a>::parse_field_list", + "file": "crates/jp_cli/src/schema.rs", + "line": 289 + }, + { + "name": "Parser<'a>::parse_array_type", + "file": "crates/jp_cli/src/schema.rs", + "line": 415 + }, + { + "name": "fields_to_json", + "file": "crates/jp_cli/src/schema.rs", + "line": 641 + }, + { + "name": "open", + "file": "crates/jp_cli/src/editor.rs", + "line": 223 + }, + { + "name": "edit_query", + "file": "crates/jp_cli/src/editor.rs", + "line": 277 + }, + { + "name": "build_history_text", + "file": "crates/jp_cli/src/editor.rs", + "line": 349 + }, + { + "name": "Ctx::configure_active_mcp_servers", + "file": "crates/jp_cli/src/ctx.rs", + "line": 239 + }, + { + "name": "AttachmentUrlOrPath::parse", + "file": "crates/jp_cli/src/parser.rs", + "line": 56 + }, + { + "name": "AttachmentUrlOrPath::from_str", + "file": "crates/jp_cli/src/parser.rs", + "line": 119 + }, + { + "name": "jp_id_shorthand_to_url", + "file": "crates/jp_cli/src/parser.rs", + "line": 143 + }, + { + "name": "QueryDocument<'_>::fmt", + "file": "crates/jp_cli/src/editor/parser.rs", + "line": 42 + }, + { + "name": "QueryDocument<'s>::try_from", + "file": "crates/jp_cli/src/editor/parser.rs", + "line": 122 + }, + { + "name": "override_to_record", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 73 + }, + { + "name": "scan_cfg_keywords", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 171 + }, + { + "name": "ConfigPipeline::new", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 273 + }, + { + "name": "ConfigPipeline::partial_with_conversation", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 334 + }, + { + "name": "config_search_roots", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 384 + }, + { + "name": "resolve_cfg_args", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 408 + }, + { + "name": "apply_cfg_args", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 521 + }, + { + "name": "build_partial_from_cfg_args", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 568 + }, + { + "name": "Client::get_tool", + "file": "crates/jp_mcp/src/client.rs", + "line": 184 + }, + { + "name": "Client::run_services", + "file": "crates/jp_mcp/src/client.rs", + "line": 263 + }, + { + "name": "Client::start_services", + "file": "crates/jp_mcp/src/client.rs", + "line": 298 + }, + { + "name": "Client::try_create_client", + "file": "crates/jp_mcp/src/client.rs", + "line": 378 + }, + { + "name": "Client::create_client", + "file": "crates/jp_mcp/src/client.rs", + "line": 400 + }, + { + "name": "render_stderr_tail", + "file": "crates/jp_mcp/src/client.rs", + "line": 560 + }, + { + "name": "MockEditorBackend::edit_text", + "file": "crates/jp_editor/src/lib.rs", + "line": 208 + }, + { + "name": "render", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 12 + }, + { + "name": "render_section", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 68 + }, + { + "name": "render_outline", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 107 + }, + { + "name": "render_block_continuations", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 136 + }, + { + "name": "render_resolution", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 200 + }, + { + "name": "render_commit", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 220 + }, + { + "name": "fetch", + "file": "crates/jp_attachment_agentic_shepherd/src/lib.rs", + "line": 101 + }, + { + "name": "Formatter::render_terminal", + "file": "crates/jp_md/src/format.rs", + "line": 277 + }, + { + "name": "Formatter::render_code_line", + "file": "crates/jp_md/src/format.rs", + "line": 381 + }, + { + "name": "apply_line_background", + "file": "crates/jp_md/src/format.rs", + "line": 499 + }, + { + "name": "background_survives", + "file": "crates/jp_md/src/format.rs", + "line": 559 + }, + { + "name": "TerminalFormatter<'a,'w>::format_item", + "file": "crates/jp_md/src/render.rs", + "line": 346 + }, + { + "name": "TerminalFormatter<'a,'w>::format_code_block", + "file": "crates/jp_md/src/render.rs", + "line": 427 + }, + { + "name": "highlight_code_block", + "file": "crates/jp_md/src/render.rs", + "line": 976 + }, + { + "name": "restore", + "file": "crates/jp_md/src/references.rs", + "line": 18 + }, + { + "name": "container_source", + "file": "crates/jp_md/src/references.rs", + "line": 123 + }, + { + "name": "format_table", + "file": "crates/jp_md/src/table.rs", + "line": 118 + }, + { + "name": "extract_table", + "file": "crates/jp_md/src/table.rs", + "line": 295 + }, + { + "name": "render_cell_content", + "file": "crates/jp_md/src/table.rs", + "line": 329 + }, + { + "name": "break_offsets", + "file": "crates/jp_md/src/table.rs", + "line": 451 + }, + { + "name": "truncate_to_visual_width", + "file": "crates/jp_md/src/table.rs", + "line": 500 + }, + { + "name": "wrap_to_visual_width", + "file": "crates/jp_md/src/table.rs", + "line": 563 + }, + { + "name": "flush_word", + "file": "crates/jp_md/src/table.rs", + "line": 631 + }, + { + "name": "hard_break_into", + "file": "crates/jp_md/src/table.rs", + "line": 699 + }, + { + "name": "Buffer::flush_events", + "file": "crates/jp_md/src/buffer.rs", + "line": 311 + }, + { + "name": "Buffer::flush_list_events", + "file": "crates/jp_md/src/buffer.rs", + "line": 404 + }, + { + "name": "Buffer::handle_buffering_paragraph", + "file": "crates/jp_md/src/buffer.rs", + "line": 620 + }, + { + "name": "Buffer::next", + "file": "crates/jp_md/src/buffer.rs", + "line": 1261 + }, + { + "name": "render_list_segment", + "file": "crates/jp_md/src/buffer.rs", + "line": 1463 + }, + { + "name": "strip_lines_indent", + "file": "crates/jp_md/src/buffer.rs", + "line": 1502 + }, + { + "name": "renumber_first_marker", + "file": "crates/jp_md/src/buffer.rs", + "line": 1525 + }, + { + "name": "last_inline_ground_state", + "file": "crates/jp_md/src/buffer.rs", + "line": 1727 + }, + { + "name": "TerminalWriter<'w>::new", + "file": "crates/jp_md/src/writer.rs", + "line": 121 + }, + { + "name": "TerminalWriter<'w>::merge_escapes", + "file": "crates/jp_md/src/writer.rs", + "line": 185 + }, + { + "name": "TerminalWriter<'w>::wrap_break", + "file": "crates/jp_md/src/writer.rs", + "line": 245 + }, + { + "name": "TerminalWriter<'w>::write_visible", + "file": "crates/jp_md/src/writer.rs", + "line": 340 + }, + { + "name": "TerminalWriter<'w>::restore_attrs_after_prefix", + "file": "crates/jp_md/src/writer.rs", + "line": 414 + }, + { + "name": "TerminalWriter<'w>::write_raw", + "file": "crates/jp_md/src/writer.rs", + "line": 595 + }, + { + "name": "indent_to_column", + "file": "crates/jp_md/src/writer.rs", + "line": 685 + }, + { + "name": "leading_heading", + "file": "crates/jp_md/src/heading.rs", + "line": 15 + }, + { + "name": "GithubAttachment::get", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 126 + }, + { + "name": "parse_uri", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 180 + }, + { + "name": "fetch_pr_diff", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 312 + }, + { + "name": "fetch_all_changed_files", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 396 + }, + { + "name": "synthesize_diff_from_files", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 447 + }, + { + "name": "compile_excludes", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 560 + }, + { + "name": "filter_diff", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 582 + }, + { + "name": "render_diff_header", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 634 + }, + { + "name": "render_reviews", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 718 + }, + { + "name": "Context::resolve", + "file": "crates/jp_tool/src/access.rs", + "line": 636 + }, + { + "name": "normalize_lexical", + "file": "crates/jp_tool/src/access.rs", + "line": 693 + }, + { + "name": "canonicalize_workspace_target", + "file": "crates/jp_tool/src/access.rs", + "line": 719 + }, + { + "name": "Terminal::open", + "file": "crates/jp_pty/src/terminal.rs", + "line": 113 + }, + { + "name": "Terminal::resize", + "file": "crates/jp_pty/src/terminal.rs", + "line": 276 + }, + { + "name": "onlcr", + "file": "crates/jp_pty/src/terminal.rs", + "line": 525 + }, + { + "name": "StreamError::from_eventsource", + "file": "crates/jp_llm/src/error.rs", + "line": 224 + }, + { + "name": "extract_retry_from_text", + "file": "crates/jp_llm/src/error.rs", + "line": 667 + }, + { + "name": "extract_retry_after", + "file": "crates/jp_llm/src/error.rs", + "line": 738 + }, + { + "name": "EventChain::ingest_normal", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 93 + }, + { + "name": "EventChain::ingest_merging", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 125 + }, + { + "name": "EventChain::trim_buffer", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 175 + }, + { + "name": "EventChain::attempt_merge", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 217 + }, + { + "name": "reconstruct_text", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 309 + }, + { + "name": "get_provider", + "file": "crates/jp_llm/src/provider.rs", + "line": 50 + }, + { + "name": "map_candidate", + "file": "crates/jp_llm/src/provider/google.rs", + "line": 731 + }, + { + "name": "process_schema", + "file": "crates/jp_llm/src/provider/google.rs", + "line": 914 + }, + { + "name": "StreamError::from", + "file": "crates/jp_llm/src/provider/google.rs", + "line": 1224 + }, + { + "name": "prepare_soft_force_retry_request", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 302 + }, + { + "name": "MultiProviderMetadata::from_details", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 408 + }, + { + "name": "Map::from", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 473 + }, + { + "name": "map_event", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 523 + }, + { + "name": "prepare_forced_tool_fallback", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 684 + }, + { + "name": "create_request", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 739 + }, + { + "name": "RequestMessages::try_from", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 1024 + }, + { + "name": "StreamError::from", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 1225 + }, + { + "name": "fetch_public_catalog", + "file": "crates/jp_llm/src/provider/cerebras.rs", + "line": 279 + }, + { + "name": "process_schema", + "file": "crates/jp_llm/src/provider/cerebras.rs", + "line": 608 + }, + { + "name": "handle_sse_event_sync", + "file": "crates/jp_llm/src/provider/cerebras.rs", + "line": 813 + }, + { + "name": "map_event", + "file": "crates/jp_llm/src/provider/ollama.rs", + "line": 148 + }, + { + "name": "create_request", + "file": "crates/jp_llm/src/provider/ollama.rs", + "line": 257 + }, + { + "name": "handle_sse_event_sync", + "file": "crates/jp_llm/src/provider/llamacpp.rs", + "line": 193 + }, + { + "name": "drain_extractor", + "file": "crates/jp_llm/src/provider/llamacpp.rs", + "line": 397 + }, + { + "name": "MockProvider::with_chunked_message", + "file": "crates/jp_llm/src/provider/mock.rs", + "line": 159 + }, + { + "name": "MockProvider::chat_completion_stream", + "file": "crates/jp_llm/src/provider/mock.rs", + "line": 242 + }, + { + "name": "force_tool_retry", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 574 + }, + { + "name": "soft_force_retry", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 655 + }, + { + "name": "resolve_cache_control", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 1171 + }, + { + "name": "create_request", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 1202 + }, + { + "name": "map_event", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 1942 + }, + { + "name": "Anthropic::try_from", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 1982 + }, + { + "name": "transform_schema", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 2017 + }, + { + "name": "map_content_start", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 2429 + }, + { + "name": "map_content_delta", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 2470 + }, + { + "name": "StreamError::from", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 2515 + }, + { + "name": "Openai::chat_completion_stream", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 121 + }, + { + "name": "synthesize_non_streaming_output_item_events", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 194 + }, + { + "name": "map_event", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1405 + }, + { + "name": "classify_stream_error", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1618 + }, + { + "name": "process_strict", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1760 + }, + { + "name": "run_tool_command", + "file": "crates/jp_llm/src/tool.rs", + "line": 484 + }, + { + "name": "forward_stderr", + "file": "crates/jp_llm/src/tool.rs", + "line": 598 + }, + { + "name": "parse_command_output", + "file": "crates/jp_llm/src/tool.rs", + "line": 634 + }, + { + "name": "ToolDefinition::execute", + "file": "crates/jp_llm/src/tool.rs", + "line": 793 + }, + { + "name": "ToolDefinition::execute_local", + "file": "crates/jp_llm/src/tool.rs", + "line": 853 + }, + { + "name": "coerce_object", + "file": "crates/jp_llm/src/tool.rs", + "line": 1105 + }, + { + "name": "coerce_value", + "file": "crates/jp_llm/src/tool.rs", + "line": 1113 + }, + { + "name": "apply_defaults_to", + "file": "crates/jp_llm/src/tool.rs", + "line": 1150 + }, + { + "name": "validate_arguments_against", + "file": "crates/jp_llm/src/tool.rs", + "line": 1188 + }, + { + "name": "tool_definitions", + "file": "crates/jp_llm/src/tool.rs", + "line": 1246 + }, + { + "name": "resolve_tool", + "file": "crates/jp_llm/src/tool.rs", + "line": 1299 + }, + { + "name": "resolve_mcp_tool", + "file": "crates/jp_llm/src/tool.rs", + "line": 1323 + }, + { + "name": "generate", + "file": "crates/jp_llm/src/title.rs", + "line": 127 + }, + { + "name": "title_instructions", + "file": "crates/jp_llm/src/title.rs", + "line": 256 + }, + { + "name": "structured_data", + "file": "crates/jp_llm/src/event_builder.rs", + "line": 53 + }, + { + "name": "EventBuilder::handle_part", + "file": "crates/jp_llm/src/event_builder.rs", + "line": 137 + }, + { + "name": "collect_with_retry", + "file": "crates/jp_llm/src/retry.rs", + "line": 65 + }, + { + "name": "retry_delay", + "file": "crates/jp_llm/src/retry.rs", + "line": 149 + }, + { + "name": "exponential_backoff", + "file": "crates/jp_llm/src/retry.rs", + "line": 184 + }, + { + "name": "from_config", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 37 + }, + { + "name": "with_overrides", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 60 + }, + { + "name": "validate_node", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 121 + }, + { + "name": "validate_node_inner", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 138 + }, + { + "name": "node_with_override", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 666 + }, + { + "name": "apply_config_fields", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 704 + }, + { + "name": "DescribeTools::execute", + "file": "crates/jp_llm/src/tool/builtin/describe_tools.rs", + "line": 78 + }, + { + "name": "Id::is_valid", + "file": "crates/jp_id/src/lib.rs", + "line": 31 + }, + { + "name": "TaskHandler::sync", + "file": "crates/jp_task/src/handler.rs", + "line": 61 + }, + { + "name": "PullsHandler::fetch_review_comments", + "file": "crates/jp_github/src/handlers.rs", + "line": 342 + }, + { + "name": "build_http_client", + "file": "crates/jp_github/src/client.rs", + "line": 340 + }, + { + "name": "BearNotes::query_to_uri", + "file": "crates/jp_attachment_bear_note/src/lib.rs", + "line": 27 + }, + { + "name": "BearNotes::get", + "file": "crates/jp_attachment_bear_note/src/lib.rs", + "line": 155 + } + ] +} \ No newline at end of file diff --git a/.config/rustqual/baseline.json b/.config/rustqual/baseline.json new file mode 100644 index 000000000..a316ccf59 --- /dev/null +++ b/.config/rustqual/baseline.json @@ -0,0 +1,3879 @@ +{ + "version": 2, + "quality_score": 0.6833534994426864, + "iosp_score": 0.9043294351828813, + "violations": 769, + "total": 11178, + "complexity_warnings": 142, + "magic_number_warnings": 193, + "nesting_depth_warnings": 27, + "function_length_warnings": 355, + "unsafe_warnings": 62, + "error_handling_warnings": 158, + "duplicate_groups": 0, + "dead_code_warnings": 0, + "dead_type_warnings": 0, + "fragment_groups": 0, + "boilerplate_warnings": 264, + "srp_struct_warnings": 33, + "srp_module_warnings": 166, + "wildcard_import_warnings": 0, + "sdp_violations": 0, + "coupling_warnings": 0, + "coupling_cycles": 0, + "tq_no_assertion_warnings": 0, + "tq_no_sut_warnings": 14, + "tq_untested_warnings": 96, + "tq_uncovered_warnings": 0, + "tq_untested_logic_warnings": 0, + "structural_srp_warnings": 41, + "structural_coupling_warnings": 7, + "total_findings": 2404, + "violation_details": [ + { + "name": "ConversationStream::config_unsets", + "file": "crates/jp_conversation/src/stream.rs", + "line": 246 + }, + { + "name": "ConversationStream::trim_chat_request", + "file": "crates/jp_conversation/src/stream.rs", + "line": 274 + }, + { + "name": "ConversationStream::current_turn_mut", + "file": "crates/jp_conversation/src/stream.rs", + "line": 576 + }, + { + "name": "ConversationStream::pop_while", + "file": "crates/jp_conversation/src/stream.rs", + "line": 809 + }, + { + "name": "ConversationStream::remove_orphaned_inquiry_responses", + "file": "crates/jp_conversation/src/stream.rs", + "line": 988 + }, + { + "name": "ConversationStream::remove_orphaned_inquiry_requests", + "file": "crates/jp_conversation/src/stream.rs", + "line": 1030 + }, + { + "name": "ConversationStream::normalize_turn_starts", + "file": "crates/jp_conversation/src/stream.rs", + "line": 1077 + }, + { + "name": "ConversationStream::sanitize_orphaned_tool_calls", + "file": "crates/jp_conversation/src/stream.rs", + "line": 1164 + }, + { + "name": "ConversationStream::from_legacy_events", + "file": "crates/jp_conversation/src/stream.rs", + "line": 1573 + }, + { + "name": "strip_schema", + "file": "crates/jp_conversation/src/compat.rs", + "line": 256 + }, + { + "name": "strip_schema_type", + "file": "crates/jp_conversation/src/compat.rs", + "line": 272 + }, + { + "name": "strip_struct", + "file": "crates/jp_conversation/src/compat.rs", + "line": 436 + }, + { + "name": "Documents::try_to_xml", + "file": "crates/jp_conversation/src/thread.rs", + "line": 236 + }, + { + "name": "IterTurns<'a>::new", + "file": "crates/jp_conversation/src/stream/turn_iter.rs", + "line": 66 + }, + { + "name": "ConversationStream::extend", + "file": "crates/jp_conversation/src/stream/iter.rs", + "line": 44 + }, + { + "name": "deserialize", + "file": "crates/jp_conversation/src/stream/config_delta.rs", + "line": 200 + }, + { + "name": "fold", + "file": "crates/jp_conversation/src/stream/config_delta.rs", + "line": 249 + }, + { + "name": "apply", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 162 + }, + { + "name": "affected_items", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 292 + }, + { + "name": "apply_mechanical", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 386 + }, + { + "name": "collect_turn_origins", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 441 + }, + { + "name": "assign_turn_indices", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 473 + }, + { + "name": "strip_tool_request", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 602 + }, + { + "name": "build_tool_calls", + "file": "crates/jp_conversation/src/stream/projection.rs", + "line": 657 + }, + { + "name": "EventPayload::deserialize", + "file": "crates/jp_conversation/src/stream/entry.rs", + "line": 152 + }, + { + "name": "StoredEvent::deserialize", + "file": "crates/jp_conversation/src/stream/entry.rs", + "line": 305 + }, + { + "name": "EventId::random", + "file": "crates/jp_conversation/src/event_id.rs", + "line": 81 + }, + { + "name": "decode_event_value", + "file": "crates/jp_conversation/src/storage.rs", + "line": 99 + }, + { + "name": "decode_string", + "file": "crates/jp_conversation/src/storage.rs", + "line": 137 + }, + { + "name": "decode_map_strings", + "file": "crates/jp_conversation/src/storage.rs", + "line": 157 + }, + { + "name": "ToolCallResponse::deserialize", + "file": "crates/jp_conversation/src/event/tool_call.rs", + "line": 98 + }, + { + "name": "TerminalCapability::detect", + "file": "crates/jp_printer/src/region.rs", + "line": 135 + }, + { + "name": "WindowBuffer::push", + "file": "crates/jp_printer/src/region.rs", + "line": 538 + }, + { + "name": "RegionEntry::rows", + "file": "crates/jp_printer/src/region.rs", + "line": 753 + }, + { + "name": "RegionStack::release", + "file": "crates/jp_printer/src/region.rs", + "line": 978 + }, + { + "name": "RegionStack::resume", + "file": "crates/jp_printer/src/region.rs", + "line": 1038 + }, + { + "name": "RegionStack::erase", + "file": "crates/jp_printer/src/region.rs", + "line": 1061 + }, + { + "name": "RegionStack::redraw", + "file": "crates/jp_printer/src/region.rs", + "line": 1087 + }, + { + "name": "RegionStack::redraw_if_top", + "file": "crates/jp_printer/src/region.rs", + "line": 1166 + }, + { + "name": "filter_line", + "file": "crates/jp_printer/src/region.rs", + "line": 1210 + }, + { + "name": "visible_sgr", + "file": "crates/jp_printer/src/region.rs", + "line": 1245 + }, + { + "name": "truncate_row", + "file": "crates/jp_printer/src/region.rs", + "line": 1330 + }, + { + "name": "main", + "file": "crates/jp_printer/src/bin/region_probe.rs", + "line": 38 + }, + { + "name": "Printer::status_region", + "file": "crates/jp_printer/src/printer.rs", + "line": 277 + }, + { + "name": "Printer::track_pending", + "file": "crates/jp_printer/src/printer.rs", + "line": 670 + }, + { + "name": "Printer::send", + "file": "crates/jp_printer/src/printer.rs", + "line": 733 + }, + { + "name": "Worker::run", + "file": "crates/jp_printer/src/printer.rs", + "line": 1003 + }, + { + "name": "Worker::process_task_instant", + "file": "crates/jp_printer/src/printer.rs", + "line": 1124 + }, + { + "name": "Worker::process_task", + "file": "crates/jp_printer/src/printer.rs", + "line": 1173 + }, + { + "name": "Worker::write_task", + "file": "crates/jp_printer/src/printer.rs", + "line": 1189 + }, + { + "name": "Sink::new", + "file": "crates/jp_printer/src/printer.rs", + "line": 1278 + }, + { + "name": "DelayControl::effective_delay", + "file": "crates/jp_printer/src/printer.rs", + "line": 1590 + }, + { + "name": "Content::fmt", + "file": "crates/jp_attachment_internal/src/selector.rs", + "line": 47 + }, + { + "name": "Selector::from_str", + "file": "crates/jp_attachment_internal/src/selector.rs", + "line": 171 + }, + { + "name": "Entry::to_url", + "file": "crates/jp_attachment_internal/src/lib.rs", + "line": 89 + }, + { + "name": "fetch_conversation", + "file": "crates/jp_attachment_internal/src/lib.rs", + "line": 201 + }, + { + "name": "uri_to_entry", + "file": "crates/jp_attachment_internal/src/lib.rs", + "line": 301 + }, + { + "name": "render_stream", + "file": "crates/jp_attachment_internal/src/lib.rs", + "line": 331 + }, + { + "name": "AnsiState::update", + "file": "crates/jp_term/src/ansi.rs", + "line": 114 + }, + { + "name": "AnsiState::restore_sequence", + "file": "crates/jp_term/src/ansi.rs", + "line": 187 + }, + { + "name": "visible_text", + "file": "crates/jp_term/src/ansi.rs", + "line": 343 + }, + { + "name": "advance_column", + "file": "crates/jp_term/src/ansi.rs", + "line": 370 + }, + { + "name": "list", + "file": "crates/jp_term/src/table.rs", + "line": 120 + }, + { + "name": "details", + "file": "crates/jp_term/src/table.rs", + "line": 230 + }, + { + "name": "detail_pretty_row", + "file": "crates/jp_term/src/table.rs", + "line": 269 + }, + { + "name": "details_markdown", + "file": "crates/jp_term/src/table.rs", + "line": 292 + }, + { + "name": "detail_markdown_rows", + "file": "crates/jp_term/src/table.rs", + "line": 323 + }, + { + "name": "md_row", + "file": "crates/jp_term/src/table.rs", + "line": 349 + }, + { + "name": "truncate_to_width", + "file": "crates/jp_term/src/width.rs", + "line": 65 + }, + { + "name": "wrap_ranges", + "file": "crates/jp_term/src/width.rs", + "line": 132 + }, + { + "name": "Storage::persist_conversation", + "file": "crates/jp_storage/src/lib.rs", + "line": 195 + }, + { + "name": "adopt_partition", + "file": "crates/jp_storage/src/lib.rs", + "line": 791 + }, + { + "name": "adopt_conversation_dir", + "file": "crates/jp_storage/src/lib.rs", + "line": 812 + }, + { + "name": "import_external_copy", + "file": "crates/jp_storage/src/lib.rs", + "line": 866 + }, + { + "name": "copy_dir_all", + "file": "crates/jp_storage/src/lib.rs", + "line": 919 + }, + { + "name": "FsStorageBackend::sanitize", + "file": "crates/jp_storage/src/backend/fs.rs", + "line": 284 + }, + { + "name": "deep_merge_values", + "file": "crates/jp_storage/src/value.rs", + "line": 36 + }, + { + "name": "Storage::load_conversation_stream", + "file": "crates/jp_storage/src/load.rs", + "line": 179 + }, + { + "name": "Storage::load_conversation_metadata_batch", + "file": "crates/jp_storage/src/load.rs", + "line": 289 + }, + { + "name": "Storage::validate_conversations", + "file": "crates/jp_storage/src/validate.rs", + "line": 116 + }, + { + "name": "collapse_blank_lines", + "file": "crates/jp_attachment_http_content/src/lib.rs", + "line": 189 + }, + { + "name": "PluginKind::binaries", + "file": "crates/jp_plugin/src/registry.rs", + "line": 113 + }, + { + "name": "ProtocolLogLayer::on_event", + "file": "crates/plugins/command/serve-web/src/log_layer.rs", + "line": 90 + }, + { + "name": "PluginClient::start_conversation", + "file": "crates/plugins/command/serve-web/src/client.rs", + "line": 199 + }, + { + "name": "render_events", + "file": "crates/plugins/command/serve-web/src/render.rs", + "line": 158 + }, + { + "name": "serve", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 116 + }, + { + "name": "TurnForm::parse", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 317 + }, + { + "name": "start_turn", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 348 + }, + { + "name": "NewConversationForm::parse", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 497 + }, + { + "name": "start_conversation", + "file": "crates/plugins/command/serve-web/src/routes.rs", + "line": 531 + }, + { + "name": "run_server", + "file": "crates/plugins/command/serve-web/src/main.rs", + "line": 111 + }, + { + "name": "group_by_namespace", + "file": "crates/plugins/command/serve-web/src/views/new.rs", + "line": 135 + }, + { + "name": "SystemLauncher::launch", + "file": "crates/plugins/command/gui/src/launch.rs", + "line": 41 + }, + { + "name": "handle_command", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 322 + }, + { + "name": "compose_missing", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 423 + }, + { + "name": "with_show_alias", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 815 + }, + { + "name": "migrate", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 949 + }, + { + "name": "execute", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 1182 + }, + { + "name": "vocabulary_listing", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 1462 + }, + { + "name": "row", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 1636 + }, + { + "name": "read_message", + "file": "crates/plugins/command/ticket/src/main.rs", + "line": 1698 + }, + { + "name": "project_turns", + "file": "crates/jp_ffi/src/display.rs", + "line": 83 + }, + { + "name": "PartialRequestConfig::assign", + "file": "crates/jp_config/src/assistant/request.rs", + "line": 157 + }, + { + "name": "MaxResponseBytes::from", + "file": "crates/jp_config/src/assistant/request.rs", + "line": 332 + }, + { + "name": "PartialInstructionsConfig::assign", + "file": "crates/jp_config/src/assistant/instructions.rs", + "line": 57 + }, + { + "name": "InstructionsConfig::to_section", + "file": "crates/jp_config/src/assistant/instructions.rs", + "line": 114 + }, + { + "name": "PartialExampleConfig::assign", + "file": "crates/jp_config/src/assistant/instructions.rs", + "line": 180 + }, + { + "name": "PartialContrastConfig::assign", + "file": "crates/jp_config/src/assistant/instructions.rs", + "line": 231 + }, + { + "name": "PartialSectionConfigOrString::assign", + "file": "crates/jp_config/src/assistant/sections.rs", + "line": 41 + }, + { + "name": "SectionConfig::render", + "file": "crates/jp_config/src/assistant/sections.rs", + "line": 143 + }, + { + "name": "PartialSectionConfig::assign", + "file": "crates/jp_config/src/assistant/sections.rs", + "line": 166 + }, + { + "name": "wrap_cdata_if_needed", + "file": "crates/jp_config/src/assistant/sections.rs", + "line": 223 + }, + { + "name": "PartialExtendingRelativePath::assign", + "file": "crates/jp_config/src/types/extending_path.rs", + "line": 93 + }, + { + "name": "PartialExtendingRelativePath::delta", + "file": "crates/jp_config/src/types/extending_path.rs", + "line": 107 + }, + { + "name": "PartialRelativePathWithStrategy::assign", + "file": "crates/jp_config/src/types/extending_path.rs", + "line": 138 + }, + { + "name": "PartialCommandConfigOrString::assign", + "file": "crates/jp_config/src/types/command.rs", + "line": 76 + }, + { + "name": "PartialCommandConfigOrString::from_str", + "file": "crates/jp_config/src/types/command.rs", + "line": 141 + }, + { + "name": "CommandConfigOrString::command", + "file": "crates/jp_config/src/types/command.rs", + "line": 181 + }, + { + "name": "PartialCommandConfig::assign", + "file": "crates/jp_config/src/types/command.rs", + "line": 274 + }, + { + "name": "split_command_words", + "file": "crates/jp_config/src/types/command.rs", + "line": 321 + }, + { + "name": "mask_template_spans", + "file": "crates/jp_config/src/types/command.rs", + "line": 344 + }, + { + "name": "restore_spans", + "file": "crates/jp_config/src/types/command.rs", + "line": 436 + }, + { + "name": "PolicySpec

::deserialize", + "file": "crates/jp_config/src/types/policy_spec.rs", + "line": 103 + }, + { + "name": "PolicySpec

::from_str", + "file": "crates/jp_config/src/types/policy_spec.rs", + "line": 161 + }, + { + "name": "PartialMergeableVec::delta", + "file": "crates/jp_config/src/types/vec.rs", + "line": 273 + }, + { + "name": "PartialMergeableString::assign", + "file": "crates/jp_config/src/types/string.rs", + "line": 82 + }, + { + "name": "PartialMergeableString::delta", + "file": "crates/jp_config/src/types/string.rs", + "line": 110 + }, + { + "name": "PartialMergedString::assign", + "file": "crates/jp_config/src/types/string.rs", + "line": 240 + }, + { + "name": "PartialMergeableMap::delta", + "file": "crates/jp_config/src/types/map.rs", + "line": 244 + }, + { + "name": "merge_values", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 97 + }, + { + "name": "merge_as_map", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 142 + }, + { + "name": "merge_as_vec", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 173 + }, + { + "name": "strip_annotations", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 238 + }, + { + "name": "JsonValue::assign", + "file": "crates/jp_config/src/types/json_value.rs", + "line": 280 + }, + { + "name": "PartialInterruptConfig::assign", + "file": "crates/jp_config/src/interrupt.rs", + "line": 319 + }, + { + "name": "PartialStreamingInterruptConfig::assign", + "file": "crates/jp_config/src/interrupt.rs", + "line": 335 + }, + { + "name": "PartialToolInterruptConfig::assign", + "file": "crates/jp_config/src/interrupt.rs", + "line": 348 + }, + { + "name": "PartialConversationConfig::assign", + "file": "crates/jp_config/src/conversation.rs", + "line": 120 + }, + { + "name": "PartialInquiryConfig::assign", + "file": "crates/jp_config/src/conversation.rs", + "line": 233 + }, + { + "name": "collect_config_segments", + "file": "crates/jp_config/src/util.rs", + "line": 207 + }, + { + "name": "load_partial_at_path_with_max_depth", + "file": "crates/jp_config/src/util.rs", + "line": 293 + }, + { + "name": "PartialAssistantConfig::assign", + "file": "crates/jp_config/src/assistant.rs", + "line": 98 + }, + { + "name": "PartialCommandPluginConfig::assign", + "file": "crates/jp_config/src/plugins/command.rs", + "line": 90 + }, + { + "name": "PartialLlmProviderConfig::assign", + "file": "crates/jp_config/src/providers/llm.rs", + "line": 101 + }, + { + "name": "PartialGoogleConfig::assign", + "file": "crates/jp_config/src/providers/llm/google.rs", + "line": 26 + }, + { + "name": "PartialOpenrouterConfig::assign", + "file": "crates/jp_config/src/providers/llm/openrouter.rs", + "line": 35 + }, + { + "name": "PartialCerebrasConfig::assign", + "file": "crates/jp_config/src/providers/llm/cerebras.rs", + "line": 50 + }, + { + "name": "PartialOllamaConfig::assign", + "file": "crates/jp_config/src/providers/llm/ollama.rs", + "line": 25 + }, + { + "name": "PartialLlamacppConfig::assign", + "file": "crates/jp_config/src/providers/llm/llamacpp.rs", + "line": 25 + }, + { + "name": "PartialDeepseekConfig::assign", + "file": "crates/jp_config/src/providers/llm/deepseek.rs", + "line": 26 + }, + { + "name": "AnthropicConfig::validate", + "file": "crates/jp_config/src/providers/llm/anthropic.rs", + "line": 86 + }, + { + "name": "PartialAnthropicConfig::assign", + "file": "crates/jp_config/src/providers/llm/anthropic.rs", + "line": 109 + }, + { + "name": "PartialOpenaiConfig::assign", + "file": "crates/jp_config/src/providers/llm/openai.rs", + "line": 34 + }, + { + "name": "PartialStdioConfig::assign", + "file": "crates/jp_config/src/providers/mcp.rs", + "line": 168 + }, + { + "name": "PartialChecksumConfig::assign", + "file": "crates/jp_config/src/providers/mcp.rs", + "line": 225 + }, + { + "name": "PartialAppConfig::assign", + "file": "crates/jp_config/src/lib.rs", + "line": 234 + }, + { + "name": "AppConfig::fields", + "file": "crates/jp_config/src/lib.rs", + "line": 500 + }, + { + "name": "AppConfig::addressable", + "file": "crates/jp_config/src/lib.rs", + "line": 541 + }, + { + "name": "PartialStyleConfig::assign", + "file": "crates/jp_config/src/style.rs", + "line": 100 + }, + { + "name": "PartialPluginsConfig::assign", + "file": "crates/jp_config/src/plugins.rs", + "line": 46 + }, + { + "name": "PartialCodeConfig::assign", + "file": "crates/jp_config/src/style/code.rs", + "line": 62 + }, + { + "name": "PartialLockWaitConfig::assign", + "file": "crates/jp_config/src/style/lock_wait.rs", + "line": 45 + }, + { + "name": "PartialTypewriterConfig::assign", + "file": "crates/jp_config/src/style/typewriter.rs", + "line": 60 + }, + { + "name": "DelayDuration::deserialize", + "file": "crates/jp_config/src/style/typewriter.rs", + "line": 149 + }, + { + "name": "PartialMcpStartupConfig::assign", + "file": "crates/jp_config/src/style/mcp_startup.rs", + "line": 72 + }, + { + "name": "PartialInlineCodeConfig::assign", + "file": "crates/jp_config/src/style/inline_code.rs", + "line": 31 + }, + { + "name": "PartialToolCallConfig::assign", + "file": "crates/jp_config/src/style/tool_call.rs", + "line": 123 + }, + { + "name": "PartialToolProgressConfig::assign", + "file": "crates/jp_config/src/style/tool_call.rs", + "line": 137 + }, + { + "name": "PartialPreparingConfig::assign", + "file": "crates/jp_config/src/style/tool_call.rs", + "line": 152 + }, + { + "name": "PartialProgressConfig::assign", + "file": "crates/jp_config/src/style/streaming.rs", + "line": 58 + }, + { + "name": "PartialStreamingConfig::assign", + "file": "crates/jp_config/src/style/streaming.rs", + "line": 104 + }, + { + "name": "PartialMarkdownConfig::assign", + "file": "crates/jp_config/src/style/markdown.rs", + "line": 103 + }, + { + "name": "PartialReasoningConfig::assign", + "file": "crates/jp_config/src/style/reasoning.rs", + "line": 75 + }, + { + "name": "PartialUserConfig::assign", + "file": "crates/jp_config/src/user.rs", + "line": 32 + }, + { + "name": "PartialEditorConfig::assign", + "file": "crates/jp_config/src/editor.rs", + "line": 118 + }, + { + "name": "PartialInlineEditorConfig::assign", + "file": "crates/jp_config/src/editor.rs", + "line": 174 + }, + { + "name": "PartialModelIdOrAliasConfig::assign", + "file": "crates/jp_config/src/model/id.rs", + "line": 44 + }, + { + "name": "PartialModelIdOrAliasConfig::delta", + "file": "crates/jp_config/src/model/id.rs", + "line": 63 + }, + { + "name": "PartialModelIdOrAliasConfig::finalize_in_place", + "file": "crates/jp_config/src/model/id.rs", + "line": 235 + }, + { + "name": "resolve_alias_chain", + "file": "crates/jp_config/src/model/id.rs", + "line": 297 + }, + { + "name": "resolve_partial_alias_chain", + "file": "crates/jp_config/src/model/id.rs", + "line": 324 + }, + { + "name": "PartialModelIdConfig::assign", + "file": "crates/jp_config/src/model/id.rs", + "line": 364 + }, + { + "name": "deserialize", + "file": "crates/jp_config/src/model/id/alias.rs", + "line": 20 + }, + { + "name": "deserialize_collecting_other", + "file": "crates/jp_config/src/model/parameters.rs", + "line": 179 + }, + { + "name": "PartialParametersConfig::assign", + "file": "crates/jp_config/src/model/parameters.rs", + "line": 219 + }, + { + "name": "PartialReasoningConfig::assign", + "file": "crates/jp_config/src/model/parameters.rs", + "line": 387 + }, + { + "name": "PartialCustomReasoningConfig::assign", + "file": "crates/jp_config/src/model/parameters.rs", + "line": 466 + }, + { + "name": "ConfigFile::merge_delta", + "file": "crates/jp_config/src/fs.rs", + "line": 155 + }, + { + "name": "deep_merge_toml", + "file": "crates/jp_config/src/fs.rs", + "line": 203 + }, + { + "name": "PartialTemplateConfig::assign", + "file": "crates/jp_config/src/template.rs", + "line": 29 + }, + { + "name": "KvAssignment::assign_to_entry", + "file": "crates/jp_config/src/assignment.rs", + "line": 293 + }, + { + "name": "KvAssignment::assign_to_mergeable_entry", + "file": "crates/jp_config/src/assignment.rs", + "line": 398 + }, + { + "name": "KvAssignment::try_from_env", + "file": "crates/jp_config/src/assignment.rs", + "line": 452 + }, + { + "name": "KvAssignment::try_merge_object", + "file": "crates/jp_config/src/assignment.rs", + "line": 642 + }, + { + "name": "KvAssignment::try_some_mergeable_vec", + "file": "crates/jp_config/src/assignment.rs", + "line": 1163 + }, + { + "name": "KvAssignment::try_vec_of_nested", + "file": "crates/jp_config/src/assignment.rs", + "line": 1231 + }, + { + "name": "flatten_recursive", + "file": "crates/jp_config/src/assignment.rs", + "line": 1338 + }, + { + "name": "missing_key", + "file": "crates/jp_config/src/assignment.rs", + "line": 1600 + }, + { + "name": "PartialProviderConfig::assign", + "file": "crates/jp_config/src/providers.rs", + "line": 60 + }, + { + "name": "PartialModelConfig::assign", + "file": "crates/jp_config/src/model.rs", + "line": 41 + }, + { + "name": "PartialGenerateConfig::assign", + "file": "crates/jp_config/src/conversation/title/generate.rs", + "line": 40 + }, + { + "name": "PartialToolsConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 58 + }, + { + "name": "PartialToolsDefaultsConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 377 + }, + { + "name": "PartialToolConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 629 + }, + { + "name": "PartialToolParameterConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 862 + }, + { + "name": "PartialEnableConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 1861 + }, + { + "name": "PartialTitleConfig::assign", + "file": "crates/jp_config/src/conversation/title.rs", + "line": 40 + }, + { + "name": "LabelConfig::run", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 124 + }, + { + "name": "PartialLabelConfig::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 300 + }, + { + "name": "PartialLabelObject::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 389 + }, + { + "name": "PartialLabelValue::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 439 + }, + { + "name": "PartialLabelCommand::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 481 + }, + { + "name": "PartialApplyOn::assign", + "file": "crates/jp_config/src/conversation/label.rs", + "line": 509 + }, + { + "name": "PartialCompactionConfig::assign", + "file": "crates/jp_config/src/conversation/compaction.rs", + "line": 76 + }, + { + "name": "PartialCompactionRuleConfig::assign", + "file": "crates/jp_config/src/conversation/compaction.rs", + "line": 298 + }, + { + "name": "PartialSummaryConfig::assign", + "file": "crates/jp_config/src/conversation/compaction.rs", + "line": 384 + }, + { + "name": "PartialAccessConfig::assign", + "file": "crates/jp_config/src/conversation/tool/access.rs", + "line": 107 + }, + { + "name": "PartialFsRuleConfig::assign", + "file": "crates/jp_config/src/conversation/tool/access.rs", + "line": 208 + }, + { + "name": "PartialEnvRuleConfig::assign", + "file": "crates/jp_config/src/conversation/tool/access.rs", + "line": 286 + }, + { + "name": "PartialDisplayStyleConfig::assign", + "file": "crates/jp_config/src/conversation/tool/style.rs", + "line": 153 + }, + { + "name": "PartialErrorStyleConfig::assign", + "file": "crates/jp_config/src/conversation/tool/style.rs", + "line": 274 + }, + { + "name": "InlineResults::deserialize", + "file": "crates/jp_config/src/conversation/tool/style.rs", + "line": 370 + }, + { + "name": "PartialAttachmentConfig::assign", + "file": "crates/jp_config/src/conversation/attachment.rs", + "line": 31 + }, + { + "name": "PartialAttachmentObjectConfig::assign", + "file": "crates/jp_config/src/conversation/attachment.rs", + "line": 127 + }, + { + "name": "Workspace::resolvable_history", + "file": "crates/jp_workspace/src/session_mapping.rs", + "line": 132 + }, + { + "name": "Workspace::cleanup_stale_files", + "file": "crates/jp_workspace/src/session_mapping.rs", + "line": 295 + }, + { + "name": "generate_id_from_timestamp", + "file": "crates/jp_workspace/src/id.rs", + "line": 126 + }, + { + "name": "Workspace::open_inner", + "file": "crates/jp_workspace/src/lib.rs", + "line": 210 + }, + { + "name": "Workspace::load_conversation_index", + "file": "crates/jp_workspace/src/lib.rs", + "line": 369 + }, + { + "name": "Workspace::eager_load_conversation", + "file": "crates/jp_workspace/src/lib.rs", + "line": 470 + }, + { + "name": "Workspace::unarchive_conversation", + "file": "crates/jp_workspace/src/lib.rs", + "line": 927 + }, + { + "name": "Workspace::sync_conversation", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1035 + }, + { + "name": "Workspace::ensure_all_metadata_loaded", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1070 + }, + { + "name": "Workspace::test_lock", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1101 + }, + { + "name": "maybe_init_conversation", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1143 + }, + { + "name": "maybe_init_events", + "file": "crates/jp_workspace/src/lib.rs", + "line": 1164 + }, + { + "name": "upsert_root", + "file": "crates/jp_workspace/src/roots.rs", + "line": 79 + }, + { + "name": "migrate_legacy_symlink", + "file": "crates/jp_workspace/src/roots.rs", + "line": 149 + }, + { + "name": "run", + "file": "crates/internal/build-registry/src/main.rs", + "line": 87 + }, + { + "name": "create", + "file": "crates/internal/ticket/src/store.rs", + "line": 169 + }, + { + "name": "vocabulary", + "file": "crates/internal/ticket/src/store.rs", + "line": 291 + }, + { + "name": "import", + "file": "crates/internal/ticket/src/store.rs", + "line": 394 + }, + { + "name": "slug", + "file": "crates/internal/ticket/src/store.rs", + "line": 723 + }, + { + "name": "escape", + "file": "crates/internal/ticket/src/import.rs", + "line": 51 + }, + { + "name": "unescaped", + "file": "crates/internal/ticket/src/parse.rs", + "line": 95 + }, + { + "name": "metadata", + "file": "crates/internal/ticket/src/parse.rs", + "line": 273 + }, + { + "name": "FileContent::add", + "file": "crates/jp_attachment_file_content/src/lib.rs", + "line": 39 + }, + { + "name": "FileContent::get", + "file": "crates/jp_attachment_file_content/src/lib.rs", + "line": 96 + }, + { + "name": "uri_to_pattern", + "file": "crates/jp_attachment_file_content/src/lib.rs", + "line": 309 + }, + { + "name": "Command::to_uri", + "file": "crates/jp_attachment_cmd_output/src/lib.rs", + "line": 32 + }, + { + "name": "Commands::get", + "file": "crates/jp_attachment_cmd_output/src/lib.rs", + "line": 109 + }, + { + "name": "Labels::from_tokens_lossy", + "file": "crates/jp_label/src/labels.rs", + "line": 194 + }, + { + "name": "ValueSetVisitor::visit_seq", + "file": "crates/jp_label/src/labels.rs", + "line": 358 + }, + { + "name": "Vocabulary::parse", + "file": "crates/jp_label/src/vocabulary.rs", + "line": 105 + }, + { + "name": "Vocabulary::resolve_against", + "file": "crates/jp_label/src/vocabulary.rs", + "line": 248 + }, + { + "name": "InlineSelect::prompt", + "file": "crates/jp_inquire/src/inline_select.rs", + "line": 108 + }, + { + "name": "InlineSelect::build_help_text", + "file": "crates/jp_inquire/src/inline_select.rs", + "line": 170 + }, + { + "name": "Vcr::cassette", + "file": "crates/jp_test/src/mock.rs", + "line": 78 + }, + { + "name": "modify_fixture", + "file": "crates/jp_test/src/mock.rs", + "line": 142 + }, + { + "name": "partialize_schema", + "file": "crates/contrib/schematic/src/internal.rs", + "line": 147 + }, + { + "name": "JsoncTemplateRenderer::render_array", + "file": "crates/contrib/schematic/src/schema/renderers/jsonc_template.rs", + "line": 43 + }, + { + "name": "JsoncTemplateRenderer::render_object", + "file": "crates/contrib/schematic/src/schema/renderers/jsonc_template.rs", + "line": 84 + }, + { + "name": "TomlTemplateRenderer::extract_sections", + "file": "crates/contrib/schematic/src/schema/renderers/toml_template.rs", + "line": 47 + }, + { + "name": "TomlTemplateRenderer::render_array", + "file": "crates/contrib/schematic/src/schema/renderers/toml_template.rs", + "line": 100 + }, + { + "name": "TomlTemplateRenderer::render_object", + "file": "crates/contrib/schematic/src/schema/renderers/toml_template.rs", + "line": 136 + }, + { + "name": "TomlTemplateRenderer::render", + "file": "crates/contrib/schematic/src/schema/renderers/toml_template.rs", + "line": 218 + }, + { + "name": "YamlTemplateRenderer::render_array", + "file": "crates/contrib/schematic/src/schema/renderers/yaml_template.rs", + "line": 41 + }, + { + "name": "YamlTemplateRenderer::render_object", + "file": "crates/contrib/schematic/src/schema/renderers/yaml_template.rs", + "line": 89 + }, + { + "name": "TemplateContext::indent", + "file": "crates/contrib/schematic/src/schema/renderers/template.rs", + "line": 117 + }, + { + "name": "TemplateContext::create_field_comment", + "file": "crates/contrib/schematic/src/schema/renderers/template.rs", + "line": 133 + }, + { + "name": "TemplateContext::get_stack_key", + "file": "crates/contrib/schematic/src/schema/renderers/template.rs", + "line": 209 + }, + { + "name": "TemplateContext::is_hidden", + "file": "crates/contrib/schematic/src/schema/renderers/template.rs", + "line": 234 + }, + { + "name": "SchemaGenerator::add_schema", + "file": "crates/contrib/schematic/src/schema/generator.rs", + "line": 26 + }, + { + "name": "Toc::parse", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 66 + }, + { + "name": "read_run", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 105 + }, + { + "name": "read_info", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 134 + }, + { + "name": "read_target", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 154 + }, + { + "name": "read_summary", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 184 + }, + { + "name": "read_processes", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 238 + }, + { + "name": "read_data", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 264 + }, + { + "name": "skip_to_end", + "file": "crates/contrib/xct2cli/src/trace/toc.rs", + "line": 338 + }, + { + "name": "TraceBundle::open", + "file": "crates/contrib/xct2cli/src/trace/mod.rs", + "line": 31 + }, + { + "name": "QueryResult::parse", + "file": "crates/contrib/xct2cli/src/trace/mod.rs", + "line": 81 + }, + { + "name": "CallgraphBuilder<'a>::build_symbolicator", + "file": "crates/contrib/xct2cli/src/analysis/callgraph.rs", + "line": 121 + }, + { + "name": "CallgraphBuilder<'a>::top_inclusive", + "file": "crates/contrib/xct2cli/src/analysis/callgraph.rs", + "line": 164 + }, + { + "name": "CallgraphBuilder<'a>::callees_of", + "file": "crates/contrib/xct2cli/src/analysis/callgraph.rs", + "line": 206 + }, + { + "name": "TraceBundle::pc_samples", + "file": "crates/contrib/xct2cli/src/analysis/samples.rs", + "line": 32 + }, + { + "name": "TraceBundle::callstacks", + "file": "crates/contrib/xct2cli/src/analysis/samples.rs", + "line": 88 + }, + { + "name": "HotspotsBuilder<'a>::run", + "file": "crates/contrib/xct2cli/src/analysis/hotspots.rs", + "line": 138 + }, + { + "name": "Xctrace::discover", + "file": "crates/contrib/xct2cli/src/xctrace.rs", + "line": 34 + }, + { + "name": "Xctrace::run", + "file": "crates/contrib/xct2cli/src/xctrace.rs", + "line": 64 + }, + { + "name": "Xctrace::run_args", + "file": "crates/contrib/xct2cli/src/xctrace.rs", + "line": 73 + }, + { + "name": "Symbolicator::resolve", + "file": "crates/contrib/xct2cli/src/symbol/macho.rs", + "line": 84 + }, + { + "name": "BinaryInfo::enumerate_slides", + "file": "crates/contrib/xct2cli/src/symbol/macho.rs", + "line": 224 + }, + { + "name": "TraceBundle::image_loads", + "file": "crates/contrib/xct2cli/src/symbol/macho.rs", + "line": 336 + }, + { + "name": "decode_dyld_map_a", + "file": "crates/contrib/xct2cli/src/symbol/macho.rs", + "line": 355 + }, + { + "name": "demangle", + "file": "crates/contrib/xct2cli/src/symbol/swift.rs", + "line": 41 + }, + { + "name": "load", + "file": "crates/contrib/xct2cli/src/symbol/swift.rs", + "line": 91 + }, + { + "name": "candidate_paths", + "file": "crates/contrib/xct2cli/src/symbol/swift.rs", + "line": 122 + }, + { + "name": "developer_dir", + "file": "crates/contrib/xct2cli/src/symbol/swift.rs", + "line": 139 + }, + { + "name": "RowReader::next_event", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 61 + }, + { + "name": "RowReader::read_node_prelude", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 128 + }, + { + "name": "RowReader::read_schema_body", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 180 + }, + { + "name": "RowReader::read_column", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 212 + }, + { + "name": "RowReader::read_row", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 259 + }, + { + "name": "RowReader::parse_cell_start", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 287 + }, + { + "name": "RowReader::parse_cell_empty", + "file": "crates/contrib/xct2cli/src/xml/stream.rs", + "line": 347 + }, + { + "name": "strip_environment", + "file": "crates/contrib/xct2cli/src/redact.rs", + "line": 30 + }, + { + "name": "format_markdown_with", + "file": "crates/contrib/comfort/src/format.rs", + "line": 130 + }, + { + "name": "format_source_impl", + "file": "crates/contrib/comfort/src/format.rs", + "line": 179 + }, + { + "name": "canonicalize_markdown", + "file": "crates/contrib/comfort/src/format.rs", + "line": 239 + }, + { + "name": "trim_blank_prefix_lines", + "file": "crates/contrib/comfort/src/format.rs", + "line": 276 + }, + { + "name": "collect_verbatim_block_ranges", + "file": "crates/contrib/comfort/src/format.rs", + "line": 323 + }, + { + "name": "align_tables", + "file": "crates/contrib/comfort/src/format.rs", + "line": 351 + }, + { + "name": "collect_table_replacements", + "file": "crates/contrib/comfort/src/format.rs", + "line": 391 + }, + { + "name": "render_aligned_table", + "file": "crates/contrib/comfort/src/format.rs", + "line": 471 + }, + { + "name": "extract_reference_links", + "file": "crates/contrib/comfort/src/format.rs", + "line": 609 + }, + { + "name": "prune_unused_reference_definitions", + "file": "crates/contrib/comfort/src/format.rs", + "line": 699 + }, + { + "name": "collect_referenced_labels", + "file": "crates/contrib/comfort/src/format.rs", + "line": 742 + }, + { + "name": "collect_inline_link_replacements", + "file": "crates/contrib/comfort/src/format.rs", + "line": 921 + }, + { + "name": "extract_existing_reference_definitions", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1010 + }, + { + "name": "collect_reference_definition_spans", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1064 + }, + { + "name": "collect_excluded_ranges_for_refdefs", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1128 + }, + { + "name": "parse_reference_definition", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1163 + }, + { + "name": "parse_quoted_title", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1298 + }, + { + "name": "protect_reference_form_links", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1362 + }, + { + "name": "collect_reference_form_link_ranges", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1462 + }, + { + "name": "reflow_markdown", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1569 + }, + { + "name": "ResolveIntraDocLinks::resolve", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1633 + }, + { + "name": "collect_paragraphs", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1713 + }, + { + "name": "continuation_prefix_from_ancestors", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1795 + }, + { + "name": "strip_block_quote_markers", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1865 + }, + { + "name": "walk_paragraphs_for_atomic_ranges", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1942 + }, + { + "name": "walk_inline_for_atomic_ranges", + "file": "crates/contrib/comfort/src/format.rs", + "line": 1960 + }, + { + "name": "reflow_paragraph", + "file": "crates/contrib/comfort/src/format.rs", + "line": 2005 + }, + { + "name": "cli_main", + "file": "crates/contrib/comfort/src/lib.rs", + "line": 45 + }, + { + "name": "run", + "file": "crates/contrib/comfort/src/run.rs", + "line": 27 + }, + { + "name": "run_stdin", + "file": "crates/contrib/comfort/src/run.rs", + "line": 75 + }, + { + "name": "Block::reassemble", + "file": "crates/contrib/comfort/src/extract.rs", + "line": 60 + }, + { + "name": "find_blocks", + "file": "crates/contrib/comfort/src/extract.rs", + "line": 88 + }, + { + "name": "split_sentences", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 102 + }, + { + "name": "fold_line_breaks", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 207 + }, + { + "name": "collapse_whitespace", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 226 + }, + { + "name": "merge_abbreviation_splits", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 254 + }, + { + "name": "merge_quoted_punct_splits", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 274 + }, + { + "name": "is_abbreviation_ending", + "file": "crates/contrib/comfort/src/sentence.rs", + "line": 294 + }, + { + "name": "workspace_files", + "file": "crates/contrib/comfort/src/walk.rs", + "line": 19 + }, + { + "name": "expand_path", + "file": "crates/contrib/comfort/src/walk.rs", + "line": 55 + }, + { + "name": "walk_files", + "file": "crates/contrib/comfort/src/walk.rs", + "line": 63 + }, + { + "name": "SchemaType::get_default", + "file": "crates/contrib/schematic_types/src/schema_type.rs", + "line": 55 + }, + { + "name": "SchemaType::add_field", + "file": "crates/contrib/schematic_types/src/schema_type.rs", + "line": 137 + }, + { + "name": "EnumType::from_schemas", + "file": "crates/contrib/schematic_types/src/enums.rs", + "line": 38 + }, + { + "name": "Schema::nullify", + "file": "crates/contrib/schematic_types/src/schema.rs", + "line": 134 + }, + { + "name": "Schema::partialize", + "file": "crates/contrib/schematic_types/src/schema.rs", + "line": 166 + }, + { + "name": "is_default", + "file": "crates/contrib/schematic_types/src/schema.rs", + "line": 278 + }, + { + "name": "SchemaBuilder::build_root", + "file": "crates/contrib/schematic_types/src/schema_builder.rs", + "line": 34 + }, + { + "name": "SchemaBuilder::infer", + "file": "crates/contrib/schematic_types/src/schema_builder.rs", + "line": 184 + }, + { + "name": "Field<'_>::generate_from_partial_value", + "file": "crates/contrib/schematic_macros/src/config/field.rs", + "line": 149 + }, + { + "name": "Variant<'_>::generate_is_empty", + "file": "crates/contrib/schematic_macros/src/config/variant.rs", + "line": 28 + }, + { + "name": "Variant<'_>::generate_finalize_statement", + "file": "crates/contrib/schematic_macros/src/config/variant.rs", + "line": 124 + }, + { + "name": "Variant<'_>::generate_merge_statement", + "file": "crates/contrib/schematic_macros/src/config/variant.rs", + "line": 155 + }, + { + "name": "Variant<'_>::generate_from_partial_value", + "file": "crates/contrib/schematic_macros/src/config/variant.rs", + "line": 248 + }, + { + "name": "ConfigMacro<'_>::to_tokens", + "file": "crates/contrib/schematic_macros/src/config/mod.rs", + "line": 29 + }, + { + "name": "emit_schematic_impls", + "file": "crates/contrib/schematic_macros/src/config/mod.rs", + "line": 177 + }, + { + "name": "emit_config_impls", + "file": "crates/contrib/schematic_macros/src/config/mod.rs", + "line": 277 + }, + { + "name": "Container<'_>::generate_from_partial", + "file": "crates/contrib/schematic_macros/src/config/container.rs", + "line": 303 + }, + { + "name": "Container<'_>::generate_untagged_deserialize", + "file": "crates/contrib/schematic_macros/src/config/container.rs", + "line": 521 + }, + { + "name": "Field<'_>::from", + "file": "crates/contrib/schematic_macros/src/common/field.rs", + "line": 94 + }, + { + "name": "Field<'_>::get_name", + "file": "crates/contrib/schematic_macros/src/common/field.rs", + "line": 218 + }, + { + "name": "Field<'_>::get_aliases", + "file": "crates/contrib/schematic_macros/src/common/field.rs", + "line": 238 + }, + { + "name": "Field<'_>::generate_schema_type", + "file": "crates/contrib/schematic_macros/src/common/field.rs", + "line": 414 + }, + { + "name": "extract_inner_type", + "file": "crates/contrib/schematic_macros/src/common/field_value.rs", + "line": 18 + }, + { + "name": "FieldValue::nested", + "file": "crates/contrib/schematic_macros/src/common/field_value.rs", + "line": 92 + }, + { + "name": "Macro<'l>::from", + "file": "crates/contrib/schematic_macros/src/common/macros.rs", + "line": 105 + }, + { + "name": "Container<'_>::generate_schema", + "file": "crates/contrib/schematic_macros/src/common/container.rs", + "line": 93 + }, + { + "name": "generate_enum_schema", + "file": "crates/contrib/schematic_macros/src/common/container.rs", + "line": 173 + }, + { + "name": "extract_deprecated", + "file": "crates/contrib/schematic_macros/src/utils.rs", + "line": 139 + }, + { + "name": "Variant<'_>::from", + "file": "crates/contrib/schematic_macros/src/config_enum/variant.rs", + "line": 53 + }, + { + "name": "Variant<'_>::get_schema_type", + "file": "crates/contrib/schematic_macros/src/config_enum/variant.rs", + "line": 152 + }, + { + "name": "macro_impl", + "file": "crates/contrib/schematic_macros/src/config_enum/mod.rs", + "line": 33 + }, + { + "name": "collect_variant_tokens", + "file": "crates/contrib/schematic_macros/src/config_enum/mod.rs", + "line": 115 + }, + { + "name": "emit_enum_schematic_impl", + "file": "crates/contrib/schematic_macros/src/config_enum/mod.rs", + "line": 288 + }, + { + "name": "query_table", + "file": "crates/contrib/grizzly/src/fts.rs", + "line": 101 + }, + { + "name": "GrizzlyService::note_get", + "file": "crates/contrib/grizzly/src/server.rs", + "line": 149 + }, + { + "name": "GrizzlyService::note_search", + "file": "crates/contrib/grizzly/src/server.rs", + "line": 190 + }, + { + "name": "GrizzlyService::note_create", + "file": "crates/contrib/grizzly/src/server.rs", + "line": 224 + }, + { + "name": "urlencoded", + "file": "crates/contrib/grizzly/src/server.rs", + "line": 267 + }, + { + "name": "BearDb::open", + "file": "crates/contrib/grizzly/src/db.rs", + "line": 32 + }, + { + "name": "BearDb::open_readonly", + "file": "crates/contrib/grizzly/src/db.rs", + "line": 129 + }, + { + "name": "Note::to_xml_with_lines", + "file": "crates/contrib/grizzly/src/note.rs", + "line": 66 + }, + { + "name": "run", + "file": "crates/contrib/grizzly/src/main.rs", + "line": 103 + }, + { + "name": "execute", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 303 + }, + { + "name": "execute_fts", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 330 + }, + { + "name": "push_filters", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 375 + }, + { + "name": "get_filtered_note_ids", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 427 + }, + { + "name": "execute_like", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 460 + }, + { + "name": "build_match", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 567 + }, + { + "name": "extract_hits_and_snippet", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 608 + }, + { + "name": "make_snippet", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 677 + }, + { + "name": "fetch_metadata", + "file": "crates/contrib/grizzly/src/search.rs", + "line": 716 + }, + { + "name": "merge_into_object", + "file": "crates/contrib/json_edit/src/merge.rs", + "line": 20 + }, + { + "name": "Object::set", + "file": "crates/contrib/json_edit/src/ast.rs", + "line": 111 + }, + { + "name": "Object::insert_member", + "file": "crates/contrib/json_edit/src/ast.rs", + "line": 213 + }, + { + "name": "escape_json_key", + "file": "crates/contrib/json_edit/src/ast.rs", + "line": 409 + }, + { + "name": "build_member", + "file": "crates/contrib/json_edit/src/ast.rs", + "line": 428 + }, + { + "name": "lex", + "file": "crates/contrib/json_edit/src/lexer.rs", + "line": 15 + }, + { + "name": "escape_css_value", + "file": "crates/contrib/bookworm/src/docs.rs", + "line": 253 + }, + { + "name": "walk_dirs", + "file": "crates/contrib/bookworm/src/dl.rs", + "line": 296 + }, + { + "name": "collapse_blank_lines", + "file": "crates/contrib/bookworm/src/util.rs", + "line": 24 + }, + { + "name": "index", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 39 + }, + { + "name": "recursive_walk", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 159 + }, + { + "name": "parse_rustdoc_file", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 200 + }, + { + "name": "check_if_redirection", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 351 + }, + { + "name": "check_if_inner_type_alias", + "file": "crates/contrib/bookworm/src/index.rs", + "line": 383 + }, + { + "name": "Url::from", + "file": "crates/contrib/bookworm/src/mcp/tools.rs", + "line": 73 + }, + { + "name": "CrateUri::try_from", + "file": "crates/contrib/bookworm/src/mcp/tools.rs", + "line": 115 + }, + { + "name": "format_xml", + "file": "crates/contrib/bookworm/src/mcp/tools.rs", + "line": 189 + }, + { + "name": "write_xml_node", + "file": "crates/contrib/bookworm/src/mcp/tools.rs", + "line": 215 + }, + { + "name": "BookwormService::format_contents", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 49 + }, + { + "name": "BookwormService::crates_search", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 166 + }, + { + "name": "BookwormService::crate_search_items", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 186 + }, + { + "name": "BookwormService::crate_resource", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 225 + }, + { + "name": "BookwormService::crate_versions", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 257 + }, + { + "name": "BookwormService::crate_readme", + "file": "crates/contrib/bookworm/src/mcp/server.rs", + "line": 279 + }, + { + "name": "collect_resources", + "file": "crates/contrib/bookworm/src/query/list_crate_source_resources.rs", + "line": 45 + }, + { + "name": "search_crate_type_definitions", + "file": "crates/contrib/bookworm/src/query/search_crate_type_definitions.rs", + "line": 17 + }, + { + "name": "get_crate_source_resource", + "file": "crates/contrib/bookworm/src/query/get_crate_source_resource.rs", + "line": 12 + }, + { + "name": "compaction_detail_item", + "file": "crates/jp_cli/src/format.rs", + "line": 134 + }, + { + "name": "compaction_policy_label", + "file": "crates/jp_cli/src/format.rs", + "line": 172 + }, + { + "name": "CompactFlag::from_arg_matches", + "file": "crates/jp_cli/src/cmd/compact_flag.rs", + "line": 134 + }, + { + "name": "CompactSpec::to_partial_rule", + "file": "crates/jp_cli/src/cmd/compact_flag.rs", + "line": 197 + }, + { + "name": "Fmt::run", + "file": "crates/jp_cli/src/cmd/config/fmt.rs", + "line": 23 + }, + { + "name": "Fmt::fmt_target", + "file": "crates/jp_cli/src/cmd/config/fmt.rs", + "line": 74 + }, + { + "name": "Show::run", + "file": "crates/jp_cli/src/cmd/config/show.rs", + "line": 20 + }, + { + "name": "config_skeleton", + "file": "crates/jp_cli/src/cmd/config/show.rs", + "line": 40 + }, + { + "name": "Set::run", + "file": "crates/jp_cli/src/cmd/config/set.rs", + "line": 27 + }, + { + "name": "Set::set_in_conversations", + "file": "crates/jp_cli/src/cmd/config/set.rs", + "line": 43 + }, + { + "name": "Set::set_in_file", + "file": "crates/jp_cli/src/cmd/config/set.rs", + "line": 76 + }, + { + "name": "Ls::run", + "file": "crates/jp_cli/src/cmd/workspace/ls.rs", + "line": 22 + }, + { + "name": "render", + "file": "crates/jp_cli/src/cmd/workspace/show.rs", + "line": 283 + }, + { + "name": "conversation_stats", + "file": "crates/jp_cli/src/cmd/workspace/show.rs", + "line": 381 + }, + { + "name": "resolve", + "file": "crates/jp_cli/src/cmd/workspace/target.rs", + "line": 212 + }, + { + "name": "stdin_id", + "file": "crates/jp_cli/src/cmd/workspace/target.rs", + "line": 505 + }, + { + "name": "Query::run_locked", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 434 + }, + { + "name": "Query::conversation_load_request", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 853 + }, + { + "name": "Query::build_conversation", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 870 + }, + { + "name": "Query::create_new_conversation", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 966 + }, + { + "name": "Query::acquire_lock", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 1285 + }, + { + "name": "await_mcp_servers", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 1694 + }, + { + "name": "claim_mcp_startup_region", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 1825 + }, + { + "name": "mcp_startup_line", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 1853 + }, + { + "name": "persist_config_reset", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2422 + }, + { + "name": "turn_config_delta", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2451 + }, + { + "name": "Query::apply_cli_config", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2472 + }, + { + "name": "build_sections", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2570 + }, + { + "name": "build_thread", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2598 + }, + { + "name": "apply_mounts", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2922 + }, + { + "name": "create_mount_effects", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 2995 + }, + { + "name": "PendingStreamTrim::apply", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 3174 + }, + { + "name": "mount_access_seed", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 3333 + }, + { + "name": "read_piped_stdin", + "file": "crates/jp_cli/src/cmd/query.rs", + "line": 3437 + }, + { + "name": "Composer::compose", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 90 + }, + { + "name": "Composer::ask", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 135 + }, + { + "name": "Composer::buffer", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 180 + }, + { + "name": "run_plugin", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 291 + }, + { + "name": "spawn_plugin", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 450 + }, + { + "name": "stop_plugin", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 517 + }, + { + "name": "message_loop", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 599 + }, + { + "name": "run_query", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 689 + }, + { + "name": "prepare_turn", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 930 + }, + { + "name": "handle_request", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 1070 + }, + { + "name": "handle_write_draft", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 1449 + }, + { + "name": "handle_list_configs", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 1547 + }, + { + "name": "describe_plugin", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 2081 + }, + { + "name": "discover_plugins", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 2121 + }, + { + "name": "show_plugin_help", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 2180 + }, + { + "name": "run_external", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 2221 + }, + { + "name": "Update::run", + "file": "crates/jp_cli/src/cmd/plugin/update.rs", + "line": 14 + }, + { + "name": "Install::run", + "file": "crates/jp_cli/src/cmd/plugin/install.rs", + "line": 16 + }, + { + "name": "TimeThreshold::from_str", + "file": "crates/jp_cli/src/cmd/time.rs", + "line": 43 + }, + { + "name": "Resolver<'a>::automatic", + "file": "crates/jp_cli/src/cmd/label/resolve.rs", + "line": 90 + }, + { + "name": "run_command", + "file": "crates/jp_cli/src/cmd/label/resolve.rs", + "line": 302 + }, + { + "name": "parse_bound", + "file": "crates/jp_cli/src/cmd/turn_selection.rs", + "line": 53 + }, + { + "name": "parse_to_bound", + "file": "crates/jp_cli/src/cmd/turn_selection.rs", + "line": 111 + }, + { + "name": "TurnSet::new", + "file": "crates/jp_cli/src/cmd/turn_selection.rs", + "line": 278 + }, + { + "name": "TurnSelection::windows", + "file": "crates/jp_cli/src/cmd/turn_selection.rs", + "line": 651 + }, + { + "name": "Init::run", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 35 + }, + { + "name": "Init::maybe_ask_and_persist_user_name", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 128 + }, + { + "name": "Init::ask_run_mode", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 192 + }, + { + "name": "Init::ask_model", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 278 + }, + { + "name": "Init::detect_models", + "file": "crates/jp_cli/src/cmd/init.rs", + "line": 311 + }, + { + "name": "acquire_lock", + "file": "crates/jp_cli/src/cmd/lock.rs", + "line": 101 + }, + { + "name": "prompt_contention", + "file": "crates/jp_cli/src/cmd/lock.rs", + "line": 154 + }, + { + "name": "lock_holder_description", + "file": "crates/jp_cli/src/cmd/lock.rs", + "line": 197 + }, + { + "name": "claim_lock_region", + "file": "crates/jp_cli/src/cmd/lock.rs", + "line": 211 + }, + { + "name": "Resolved::grouped", + "file": "crates/jp_cli/src/cmd/label.rs", + "line": 123 + }, + { + "name": "expand_aliases", + "file": "crates/jp_cli/src/cmd/label.rs", + "line": 177 + }, + { + "name": "apply", + "file": "crates/jp_cli/src/cmd/label.rs", + "line": 271 + }, + { + "name": "ConversationLoadRequest::explicit_or_session", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 124 + }, + { + "name": "ConversationLoadRequest::explicit_or_session_with_config", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 138 + }, + { + "name": "ConversationLoadRequest::explicit_or_none", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 151 + }, + { + "name": "ConversationLoadRequest::explicit_or_previous", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 165 + }, + { + "name": "read_stdin_ids", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 614 + }, + { + "name": "resolve_targets", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 647 + }, + { + "name": "resolve_from_session_or_picker", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 734 + }, + { + "name": "format_relative", + "file": "crates/jp_cli/src/cmd/target.rs", + "line": 911 + }, + { + "name": "InterruptHandler

::collect_reply_inline", + "file": "crates/jp_cli/src/cmd/query/interrupt/handler.rs", + "line": 474 + }, + { + "name": "handle_streaming_interrupt", + "file": "crates/jp_cli/src/cmd/query/interrupt/signals.rs", + "line": 75 + }, + { + "name": "handle_tool_interrupt", + "file": "crates/jp_cli/src/cmd/query/interrupt/signals.rs", + "line": 261 + }, + { + "name": "TurnCoordinator::handle_streaming_event", + "file": "crates/jp_cli/src/cmd/query/turn/coordinator.rs", + "line": 271 + }, + { + "name": "claim_waiting_region", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 118 + }, + { + "name": "run_turn_loop", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 172 + }, + { + "name": "build_inquiry_backend", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 932 + }, + { + "name": "build_inquiry_overrides", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 1030 + }, + { + "name": "build_execution_plan", + "file": "crates/jp_cli/src/cmd/query/tool/pending.rs", + "line": 141 + }, + { + "name": "LlmInquiryBackend::inquire", + "file": "crates/jp_cli/src/cmd/query/tool/inquiry.rs", + "line": 217 + }, + { + "name": "ToolPrompter::prompt_ask", + "file": "crates/jp_cli/src/cmd/query/tool/prompter.rs", + "line": 270 + }, + { + "name": "stderr_sink", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 250 + }, + { + "name": "ToolCoordinator::pre_render_for_prompt", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 490 + }, + { + "name": "ToolCoordinator::resolve_tool_call_decision", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 549 + }, + { + "name": "ToolCoordinator::prepare", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 717 + }, + { + "name": "ToolCoordinator::render_approved_tool", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 777 + }, + { + "name": "ToolCoordinator::run_permission_phase", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 896 + }, + { + "name": "ToolCoordinator::execute_with_prompting", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 952 + }, + { + "name": "ToolCoordinator::handle_tool_result", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1521 + }, + { + "name": "ToolCoordinator::handle_prompt_answer", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1786 + }, + { + "name": "ToolCoordinator::handle_prompt_cancelled", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1846 + }, + { + "name": "ToolCoordinator::process_next_prompt", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1974 + }, + { + "name": "ToolExecutor::execute", + "file": "crates/jp_cli/src/cmd/query/tool/executor.rs", + "line": 215 + }, + { + "name": "Grep::run", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 180 + }, + { + "name": "Grep::collect_hits_for_id", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 339 + }, + { + "name": "Grep::render", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 450 + }, + { + "name": "Grep::render_hits", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 476 + }, + { + "name": "expand_scopes", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 719 + }, + { + "name": "collect_scope_hits", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 838 + }, + { + "name": "context_ranges", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 893 + }, + { + "name": "Row::windowed", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 996 + }, + { + "name": "window_row", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 1059 + }, + { + "name": "highlight", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 1136 + }, + { + "name": "render_group_heading", + "file": "crates/jp_cli/src/cmd/conversation/grep.rs", + "line": 1204 + }, + { + "name": "Edit::run", + "file": "crates/jp_cli/src/cmd/conversation/edit.rs", + "line": 97 + }, + { + "name": "Edit::run_open_editor", + "file": "crates/jp_cli/src/cmd/conversation/edit.rs", + "line": 124 + }, + { + "name": "Edit::run_property_edit", + "file": "crates/jp_cli/src/cmd/conversation/edit.rs", + "line": 244 + }, + { + "name": "Compact::effective_rules", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 201 + }, + { + "name": "plan_rule_ranges", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 426 + }, + { + "name": "plan_compactions", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 579 + }, + { + "name": "timeline_lines", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 771 + }, + { + "name": "Compact::compact_one", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 913 + }, + { + "name": "Compact::preview_compaction", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 1026 + }, + { + "name": "Rm::conversation_load_request", + "file": "crates/jp_cli/src/cmd/conversation/rm.rs", + "line": 71 + }, + { + "name": "remove", + "file": "crates/jp_cli/src/cmd/conversation/rm.rs", + "line": 109 + }, + { + "name": "Ls::run", + "file": "crates/jp_cli/src/cmd/conversation/ls.rs", + "line": 147 + }, + { + "name": "Ls::build_conversation_row", + "file": "crates/jp_cli/src/cmd/conversation/ls.rs", + "line": 277 + }, + { + "name": "Ls::build_body", + "file": "crates/jp_cli/src/cmd/conversation/ls.rs", + "line": 360 + }, + { + "name": "build_header_row", + "file": "crates/jp_cli/src/cmd/conversation/ls.rs", + "line": 388 + }, + { + "name": "generate_summary", + "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", + "line": 44 + }, + { + "name": "summarize_stream", + "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", + "line": 114 + }, + { + "name": "summarize_events", + "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", + "line": 232 + }, + { + "name": "Fork::fork_each", + "file": "crates/jp_cli/src/cmd/conversation/fork.rs", + "line": 87 + }, + { + "name": "Path::run", + "file": "crates/jp_cli/src/cmd/conversation/path.rs", + "line": 34 + }, + { + "name": "resolve_paths", + "file": "crates/jp_cli/src/cmd/conversation/path.rs", + "line": 57 + }, + { + "name": "Title::title_one", + "file": "crates/jp_cli/src/cmd/conversation/title.rs", + "line": 78 + }, + { + "name": "Unarchive::run", + "file": "crates/jp_cli/src/cmd/conversation/unarchive.rs", + "line": 31 + }, + { + "name": "Unarchive::resolve_ids", + "file": "crates/jp_cli/src/cmd/conversation/unarchive.rs", + "line": 52 + }, + { + "name": "Label::conversation_load_request", + "file": "crates/jp_cli/src/cmd/conversation/label.rs", + "line": 98 + }, + { + "name": "Label::run", + "file": "crates/jp_cli/src/cmd/conversation/label.rs", + "line": 111 + }, + { + "name": "Print::print_conversation", + "file": "crates/jp_cli/src/cmd/conversation/print.rs", + "line": 138 + }, + { + "name": "Archive::conversation_load_request", + "file": "crates/jp_cli/src/cmd/conversation/archive.rs", + "line": 70 + }, + { + "name": "Archive::run", + "file": "crates/jp_cli/src/cmd/conversation/archive.rs", + "line": 79 + }, + { + "name": "Use::run", + "file": "crates/jp_cli/src/cmd/conversation/use_.rs", + "line": 67 + }, + { + "name": "Use::conversation_load_request", + "file": "crates/jp_cli/src/cmd/conversation/use_.rs", + "line": 178 + }, + { + "name": "Use::run_filtered", + "file": "crates/jp_cli/src/cmd/conversation/use_.rs", + "line": 190 + }, + { + "name": "ApprovalStore::load", + "file": "crates/jp_cli/src/access/approvals.rs", + "line": 55 + }, + { + "name": "compile_fs", + "file": "crates/jp_cli/src/access/compile.rs", + "line": 74 + }, + { + "name": "compile_tool_policy", + "file": "crates/jp_cli/src/access/compile.rs", + "line": 147 + }, + { + "name": "compile_policy", + "file": "crates/jp_cli/src/access/compile.rs", + "line": 174 + }, + { + "name": "Commands::run", + "file": "crates/jp_cli/src/cmd.rs", + "line": 65 + }, + { + "name": "Commands::name", + "file": "crates/jp_cli/src/cmd.rs", + "line": 142 + }, + { + "name": "Error::from", + "file": "crates/jp_cli/src/cmd.rs", + "line": 430 + }, + { + "name": "run", + "file": "crates/jp_cli/src/lib.rs", + "line": 413 + }, + { + "name": "run_inner", + "file": "crates/jp_cli/src/lib.rs", + "line": 591 + }, + { + "name": "drain_background_tasks", + "file": "crates/jp_cli/src/lib.rs", + "line": 835 + }, + { + "name": "print_plugin_help_section", + "file": "crates/jp_cli/src/lib.rs", + "line": 899 + }, + { + "name": "parse_error", + "file": "crates/jp_cli/src/lib.rs", + "line": 923 + }, + { + "name": "resolve_config", + "file": "crates/jp_cli/src/lib.rs", + "line": 999 + }, + { + "name": "effective_cfg_overrides", + "file": "crates/jp_cli/src/lib.rs", + "line": 1124 + }, + { + "name": "load_workspace", + "file": "crates/jp_cli/src/lib.rs", + "line": 1248 + }, + { + "name": "TurnRenderer::new", + "file": "crates/jp_cli/src/render/turn.rs", + "line": 110 + }, + { + "name": "TurnRenderer::render_turn", + "file": "crates/jp_cli/src/render/turn.rs", + "line": 168 + }, + { + "name": "TurnRenderer::reconfigure", + "file": "crates/jp_cli/src/render/turn.rs", + "line": 265 + }, + { + "name": "ToolRenderer::new", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 145 + }, + { + "name": "ToolRenderer::write_chrome", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 216 + }, + { + "name": "ToolRenderer::render_approved", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 291 + }, + { + "name": "ToolRenderer::render_custom_tool_call", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 315 + }, + { + "name": "ToolRenderer::start_progress", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 369 + }, + { + "name": "ToolRenderer::render_result", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 427 + }, + { + "name": "ToolRenderer::register", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 592 + }, + { + "name": "ToolRenderer::claim_preparing", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 652 + }, + { + "name": "format_args", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 717 + }, + { + "name": "format_args_custom", + "file": "crates/jp_cli/src/render/tool.rs", + "line": 814 + }, + { + "name": "ChatRenderer::render_reasoning", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 314 + }, + { + "name": "ChatRenderer::handle_event", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 437 + }, + { + "name": "ChatRenderer::drain_buffer", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 726 + }, + { + "name": "ChatRenderer::enter_tool_call", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 827 + }, + { + "name": "build_role_header_line", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 910 + }, + { + "name": "indent_lines", + "file": "crates/jp_cli/src/render/chat.rs", + "line": 956 + }, + { + "name": "Matcher::is_match", + "file": "crates/jp_cli/src/shared/search.rs", + "line": 295 + }, + { + "name": "Matcher::find_spans", + "file": "crates/jp_cli/src/shared/search.rs", + "line": 324 + }, + { + "name": "id_matches", + "file": "crates/jp_cli/src/shared/search.rs", + "line": 381 + }, + { + "name": "parse_schema_dsl", + "file": "crates/jp_cli/src/schema.rs", + "line": 77 + }, + { + "name": "SchemaType::to_json", + "file": "crates/jp_cli/src/schema.rs", + "line": 130 + }, + { + "name": "Parser<'a>::parse_field_list", + "file": "crates/jp_cli/src/schema.rs", + "line": 289 + }, + { + "name": "Parser<'a>::parse_array_type", + "file": "crates/jp_cli/src/schema.rs", + "line": 415 + }, + { + "name": "fields_to_json", + "file": "crates/jp_cli/src/schema.rs", + "line": 641 + }, + { + "name": "open", + "file": "crates/jp_cli/src/editor.rs", + "line": 223 + }, + { + "name": "edit_query", + "file": "crates/jp_cli/src/editor.rs", + "line": 277 + }, + { + "name": "build_history_text", + "file": "crates/jp_cli/src/editor.rs", + "line": 349 + }, + { + "name": "Ctx::configure_active_mcp_servers", + "file": "crates/jp_cli/src/ctx.rs", + "line": 239 + }, + { + "name": "AttachmentUrlOrPath::parse", + "file": "crates/jp_cli/src/parser.rs", + "line": 56 + }, + { + "name": "AttachmentUrlOrPath::from_str", + "file": "crates/jp_cli/src/parser.rs", + "line": 119 + }, + { + "name": "jp_id_shorthand_to_url", + "file": "crates/jp_cli/src/parser.rs", + "line": 143 + }, + { + "name": "QueryDocument<'_>::fmt", + "file": "crates/jp_cli/src/editor/parser.rs", + "line": 42 + }, + { + "name": "QueryDocument<'s>::try_from", + "file": "crates/jp_cli/src/editor/parser.rs", + "line": 122 + }, + { + "name": "override_to_record", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 73 + }, + { + "name": "scan_cfg_keywords", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 171 + }, + { + "name": "ConfigPipeline::new", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 273 + }, + { + "name": "ConfigPipeline::partial_with_conversation", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 334 + }, + { + "name": "config_search_roots", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 384 + }, + { + "name": "resolve_cfg_args", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 408 + }, + { + "name": "apply_cfg_args", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 521 + }, + { + "name": "build_partial_from_cfg_args", + "file": "crates/jp_cli/src/config_pipeline.rs", + "line": 568 + }, + { + "name": "Client::get_tool", + "file": "crates/jp_mcp/src/client.rs", + "line": 184 + }, + { + "name": "Client::run_services", + "file": "crates/jp_mcp/src/client.rs", + "line": 263 + }, + { + "name": "Client::start_services", + "file": "crates/jp_mcp/src/client.rs", + "line": 298 + }, + { + "name": "Client::try_create_client", + "file": "crates/jp_mcp/src/client.rs", + "line": 378 + }, + { + "name": "Client::create_client", + "file": "crates/jp_mcp/src/client.rs", + "line": 400 + }, + { + "name": "render_stderr_tail", + "file": "crates/jp_mcp/src/client.rs", + "line": 560 + }, + { + "name": "MockEditorBackend::edit_text", + "file": "crates/jp_editor/src/lib.rs", + "line": 208 + }, + { + "name": "render", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 12 + }, + { + "name": "render_section", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 68 + }, + { + "name": "render_outline", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 107 + }, + { + "name": "render_block_continuations", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 136 + }, + { + "name": "render_resolution", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 200 + }, + { + "name": "render_commit", + "file": "crates/jp_attachment_agentic_shepherd/src/render.rs", + "line": 220 + }, + { + "name": "fetch", + "file": "crates/jp_attachment_agentic_shepherd/src/lib.rs", + "line": 101 + }, + { + "name": "Formatter::render_terminal", + "file": "crates/jp_md/src/format.rs", + "line": 277 + }, + { + "name": "Formatter::render_code_line", + "file": "crates/jp_md/src/format.rs", + "line": 381 + }, + { + "name": "apply_line_background", + "file": "crates/jp_md/src/format.rs", + "line": 499 + }, + { + "name": "background_survives", + "file": "crates/jp_md/src/format.rs", + "line": 559 + }, + { + "name": "TerminalFormatter<'a,'w>::format_item", + "file": "crates/jp_md/src/render.rs", + "line": 346 + }, + { + "name": "TerminalFormatter<'a,'w>::format_code_block", + "file": "crates/jp_md/src/render.rs", + "line": 427 + }, + { + "name": "highlight_code_block", + "file": "crates/jp_md/src/render.rs", + "line": 976 + }, + { + "name": "restore", + "file": "crates/jp_md/src/references.rs", + "line": 18 + }, + { + "name": "container_source", + "file": "crates/jp_md/src/references.rs", + "line": 123 + }, + { + "name": "format_table", + "file": "crates/jp_md/src/table.rs", + "line": 118 + }, + { + "name": "extract_table", + "file": "crates/jp_md/src/table.rs", + "line": 295 + }, + { + "name": "render_cell_content", + "file": "crates/jp_md/src/table.rs", + "line": 329 + }, + { + "name": "break_offsets", + "file": "crates/jp_md/src/table.rs", + "line": 451 + }, + { + "name": "truncate_to_visual_width", + "file": "crates/jp_md/src/table.rs", + "line": 500 + }, + { + "name": "wrap_to_visual_width", + "file": "crates/jp_md/src/table.rs", + "line": 563 + }, + { + "name": "flush_word", + "file": "crates/jp_md/src/table.rs", + "line": 631 + }, + { + "name": "hard_break_into", + "file": "crates/jp_md/src/table.rs", + "line": 699 + }, + { + "name": "Buffer::flush_events", + "file": "crates/jp_md/src/buffer.rs", + "line": 311 + }, + { + "name": "Buffer::flush_list_events", + "file": "crates/jp_md/src/buffer.rs", + "line": 404 + }, + { + "name": "Buffer::handle_buffering_paragraph", + "file": "crates/jp_md/src/buffer.rs", + "line": 620 + }, + { + "name": "Buffer::next", + "file": "crates/jp_md/src/buffer.rs", + "line": 1261 + }, + { + "name": "render_list_segment", + "file": "crates/jp_md/src/buffer.rs", + "line": 1463 + }, + { + "name": "strip_lines_indent", + "file": "crates/jp_md/src/buffer.rs", + "line": 1502 + }, + { + "name": "renumber_first_marker", + "file": "crates/jp_md/src/buffer.rs", + "line": 1525 + }, + { + "name": "last_inline_ground_state", + "file": "crates/jp_md/src/buffer.rs", + "line": 1727 + }, + { + "name": "TerminalWriter<'w>::new", + "file": "crates/jp_md/src/writer.rs", + "line": 121 + }, + { + "name": "TerminalWriter<'w>::merge_escapes", + "file": "crates/jp_md/src/writer.rs", + "line": 185 + }, + { + "name": "TerminalWriter<'w>::wrap_break", + "file": "crates/jp_md/src/writer.rs", + "line": 245 + }, + { + "name": "TerminalWriter<'w>::write_visible", + "file": "crates/jp_md/src/writer.rs", + "line": 340 + }, + { + "name": "TerminalWriter<'w>::restore_attrs_after_prefix", + "file": "crates/jp_md/src/writer.rs", + "line": 414 + }, + { + "name": "TerminalWriter<'w>::write_raw", + "file": "crates/jp_md/src/writer.rs", + "line": 595 + }, + { + "name": "indent_to_column", + "file": "crates/jp_md/src/writer.rs", + "line": 685 + }, + { + "name": "leading_heading", + "file": "crates/jp_md/src/heading.rs", + "line": 15 + }, + { + "name": "GithubAttachment::get", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 126 + }, + { + "name": "parse_uri", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 180 + }, + { + "name": "fetch_pr_diff", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 312 + }, + { + "name": "fetch_all_changed_files", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 396 + }, + { + "name": "synthesize_diff_from_files", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 447 + }, + { + "name": "compile_excludes", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 560 + }, + { + "name": "filter_diff", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 582 + }, + { + "name": "render_diff_header", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 634 + }, + { + "name": "render_reviews", + "file": "crates/jp_attachment_github/src/lib.rs", + "line": 718 + }, + { + "name": "Context::resolve", + "file": "crates/jp_tool/src/access.rs", + "line": 636 + }, + { + "name": "normalize_lexical", + "file": "crates/jp_tool/src/access.rs", + "line": 693 + }, + { + "name": "canonicalize_workspace_target", + "file": "crates/jp_tool/src/access.rs", + "line": 719 + }, + { + "name": "Terminal::open", + "file": "crates/jp_pty/src/terminal.rs", + "line": 113 + }, + { + "name": "Terminal::resize", + "file": "crates/jp_pty/src/terminal.rs", + "line": 276 + }, + { + "name": "onlcr", + "file": "crates/jp_pty/src/terminal.rs", + "line": 525 + }, + { + "name": "StreamError::from_eventsource", + "file": "crates/jp_llm/src/error.rs", + "line": 224 + }, + { + "name": "extract_retry_from_text", + "file": "crates/jp_llm/src/error.rs", + "line": 667 + }, + { + "name": "extract_retry_after", + "file": "crates/jp_llm/src/error.rs", + "line": 738 + }, + { + "name": "EventChain::ingest_normal", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 93 + }, + { + "name": "EventChain::ingest_merging", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 125 + }, + { + "name": "EventChain::trim_buffer", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 175 + }, + { + "name": "EventChain::attempt_merge", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 217 + }, + { + "name": "reconstruct_text", + "file": "crates/jp_llm/src/stream/chain.rs", + "line": 309 + }, + { + "name": "get_provider", + "file": "crates/jp_llm/src/provider.rs", + "line": 50 + }, + { + "name": "map_candidate", + "file": "crates/jp_llm/src/provider/google.rs", + "line": 731 + }, + { + "name": "process_schema", + "file": "crates/jp_llm/src/provider/google.rs", + "line": 914 + }, + { + "name": "StreamError::from", + "file": "crates/jp_llm/src/provider/google.rs", + "line": 1224 + }, + { + "name": "prepare_soft_force_retry_request", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 302 + }, + { + "name": "MultiProviderMetadata::from_details", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 408 + }, + { + "name": "Map::from", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 473 + }, + { + "name": "map_event", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 523 + }, + { + "name": "prepare_forced_tool_fallback", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 684 + }, + { + "name": "create_request", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 739 + }, + { + "name": "RequestMessages::try_from", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 1024 + }, + { + "name": "StreamError::from", + "file": "crates/jp_llm/src/provider/openrouter.rs", + "line": 1225 + }, + { + "name": "fetch_public_catalog", + "file": "crates/jp_llm/src/provider/cerebras.rs", + "line": 279 + }, + { + "name": "process_schema", + "file": "crates/jp_llm/src/provider/cerebras.rs", + "line": 608 + }, + { + "name": "handle_sse_event_sync", + "file": "crates/jp_llm/src/provider/cerebras.rs", + "line": 813 + }, + { + "name": "map_event", + "file": "crates/jp_llm/src/provider/ollama.rs", + "line": 148 + }, + { + "name": "create_request", + "file": "crates/jp_llm/src/provider/ollama.rs", + "line": 257 + }, + { + "name": "handle_sse_event_sync", + "file": "crates/jp_llm/src/provider/llamacpp.rs", + "line": 193 + }, + { + "name": "drain_extractor", + "file": "crates/jp_llm/src/provider/llamacpp.rs", + "line": 397 + }, + { + "name": "MockProvider::with_chunked_message", + "file": "crates/jp_llm/src/provider/mock.rs", + "line": 159 + }, + { + "name": "MockProvider::chat_completion_stream", + "file": "crates/jp_llm/src/provider/mock.rs", + "line": 242 + }, + { + "name": "force_tool_retry", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 574 + }, + { + "name": "soft_force_retry", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 655 + }, + { + "name": "resolve_cache_control", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 1171 + }, + { + "name": "create_request", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 1202 + }, + { + "name": "map_event", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 1942 + }, + { + "name": "Anthropic::try_from", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 1982 + }, + { + "name": "transform_schema", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 2017 + }, + { + "name": "map_content_start", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 2429 + }, + { + "name": "map_content_delta", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 2470 + }, + { + "name": "StreamError::from", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 2515 + }, + { + "name": "Openai::chat_completion_stream", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 121 + }, + { + "name": "synthesize_non_streaming_output_item_events", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 194 + }, + { + "name": "map_event", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1405 + }, + { + "name": "classify_stream_error", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1618 + }, + { + "name": "process_strict", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1760 + }, + { + "name": "run_tool_command", + "file": "crates/jp_llm/src/tool.rs", + "line": 484 + }, + { + "name": "forward_stderr", + "file": "crates/jp_llm/src/tool.rs", + "line": 598 + }, + { + "name": "parse_command_output", + "file": "crates/jp_llm/src/tool.rs", + "line": 634 + }, + { + "name": "ToolDefinition::execute", + "file": "crates/jp_llm/src/tool.rs", + "line": 793 + }, + { + "name": "ToolDefinition::execute_local", + "file": "crates/jp_llm/src/tool.rs", + "line": 853 + }, + { + "name": "coerce_object", + "file": "crates/jp_llm/src/tool.rs", + "line": 1105 + }, + { + "name": "coerce_value", + "file": "crates/jp_llm/src/tool.rs", + "line": 1113 + }, + { + "name": "apply_defaults_to", + "file": "crates/jp_llm/src/tool.rs", + "line": 1150 + }, + { + "name": "validate_arguments_against", + "file": "crates/jp_llm/src/tool.rs", + "line": 1188 + }, + { + "name": "tool_definitions", + "file": "crates/jp_llm/src/tool.rs", + "line": 1246 + }, + { + "name": "resolve_tool", + "file": "crates/jp_llm/src/tool.rs", + "line": 1299 + }, + { + "name": "resolve_mcp_tool", + "file": "crates/jp_llm/src/tool.rs", + "line": 1323 + }, + { + "name": "generate", + "file": "crates/jp_llm/src/title.rs", + "line": 127 + }, + { + "name": "title_instructions", + "file": "crates/jp_llm/src/title.rs", + "line": 256 + }, + { + "name": "structured_data", + "file": "crates/jp_llm/src/event_builder.rs", + "line": 53 + }, + { + "name": "EventBuilder::handle_part", + "file": "crates/jp_llm/src/event_builder.rs", + "line": 137 + }, + { + "name": "collect_with_retry", + "file": "crates/jp_llm/src/retry.rs", + "line": 65 + }, + { + "name": "retry_delay", + "file": "crates/jp_llm/src/retry.rs", + "line": 149 + }, + { + "name": "exponential_backoff", + "file": "crates/jp_llm/src/retry.rs", + "line": 184 + }, + { + "name": "from_config", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 37 + }, + { + "name": "with_overrides", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 60 + }, + { + "name": "validate_node", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 121 + }, + { + "name": "validate_node_inner", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 138 + }, + { + "name": "node_with_override", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 666 + }, + { + "name": "apply_config_fields", + "file": "crates/jp_llm/src/tool/json_schema.rs", + "line": 704 + }, + { + "name": "DescribeTools::execute", + "file": "crates/jp_llm/src/tool/builtin/describe_tools.rs", + "line": 78 + }, + { + "name": "Id::is_valid", + "file": "crates/jp_id/src/lib.rs", + "line": 31 + }, + { + "name": "TaskHandler::sync", + "file": "crates/jp_task/src/handler.rs", + "line": 61 + }, + { + "name": "PullsHandler::fetch_review_comments", + "file": "crates/jp_github/src/handlers.rs", + "line": 342 + }, + { + "name": "build_http_client", + "file": "crates/jp_github/src/client.rs", + "line": 340 + }, + { + "name": "BearNotes::query_to_uri", + "file": "crates/jp_attachment_bear_note/src/lib.rs", + "line": 27 + }, + { + "name": "BearNotes::get", + "file": "crates/jp_attachment_bear_note/src/lib.rs", + "line": 155 + } + ] +} \ No newline at end of file diff --git a/.config/rustqual/config.toml b/.config/rustqual/config.toml new file mode 100644 index 000000000..cd54fa341 --- /dev/null +++ b/.config/rustqual/config.toml @@ -0,0 +1,35 @@ +# Structural quality checks, main pass: every dimension except DRY, across the +# full workspace including test files. +# +# Run via `just qual`; gated on CI by `just qual-ci`. +# +# ## Why DRY is disabled here +# +# rustqual's DRY dimension is all-or-nothing. Turning off `[duplicates]` +# disables DRY-002 (dead code) and DRY-006 (dead types) along with DRY-003 +# (repeated fragments) — verified, not assumed: the dead-code count goes 256 to +# 0 on this workspace when the section is disabled. +# +# DRY-003 fires ~2038 times inside `*_tests.rs`, on the repeated setup blocks +# that make each `#[test]` self-contained. That shape is deliberate here (see +# the testing guidance in the contributor docs: prefer duplication over a +# shared fixture helper), so those findings are noise rather than signal. +# +# The resolution is a second pass, `dry.toml`, which enables DRY over +# production code only. Test files cannot simply be excluded from *this* pass +# instead, because doing so would take the Test Quality dimension with them: +# TQ-001/002/003 all need `#[test]` functions in the parse. + +[duplicates] +enabled = false + +# rustqual judges test code by production thresholds unless told otherwise. +# Several test functions here are deliberately long and self-contained, so +# `LONG_FN` and `SRP_MODULE` fire on files that are working as intended. Left +# unset so the baseline records the real numbers; raise these if the findings +# turn out to obscure genuine regressions rather than merely sit in the +# baseline. +# +# [tests] +# max_function_lines = 150 +# file_length = 800 diff --git a/.config/rustqual/dry.toml b/.config/rustqual/dry.toml new file mode 100644 index 000000000..d2fae6775 --- /dev/null +++ b/.config/rustqual/dry.toml @@ -0,0 +1,56 @@ +# Structural quality checks, DRY pass: duplicates and dead code over production +# code only. +# +# Paired with `config.toml`, which runs every other dimension across the full +# workspace. See that file for why the two passes are split. +# +# Excluding test files here is safe because nothing in this pass depends on +# them: `[test_quality]` is off, so TQ-003 cannot mistake an untested-looking +# function for a real finding, and DRY-002 already ignores calls from +# `#[cfg(test)]` code when deciding deadness — the dead-code count is identical +# (256) with and without these globs. What the exclusion removes is ~2038 +# DRY-003 fragments and ~210 DRY-001 duplicate test functions, both of which +# are the deliberate self-contained-test shape rather than copy-paste. +# +# Two dimensions cannot be disabled and will appear in this pass as well as in +# the main one: IOSP has no `enabled` key, and MAGIC_NUMBER survives +# `[complexity] enabled = false` (every other complexity rule is correctly +# silenced). Both are absorbed by this pass's own baseline and do not affect the +# regression gate. +# +# The same inconsistency produces three `ORPHAN_SUPPRESSION` findings here, on +# the `qual:allow(complexity, magic_numbers)` markers in the provider model +# catalogues. With `[complexity]` off, rustqual sees no complexity finding to +# match them against and calls them stale — while MAGIC_NUMBER fires anyway. +# They suppress correctly in the main pass (498 findings down to 193). Baselined +# here; not worth excluding the provider files from DRY detection to silence. + +exclude_files = [ + "**/*_tests.rs", + "**/tests.rs", + "**/tests/**", +] + +[duplicates] +enabled = true + +[boilerplate] +enabled = false + +[complexity] +enabled = false + +[srp] +enabled = false + +[coupling] +enabled = false + +[structural] +enabled = false + +[test_quality] +enabled = false + +[architecture] +enabled = false diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 54b025091..9ebf1a995 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -40,6 +40,7 @@ jobs: insta: ${{ steps.filter.outputs.insta }} shear: ${{ steps.filter.outputs.shear }} vet: ${{ steps.filter.outputs.vet }} + qual: ${{ steps.filter.outputs.qual }} steps: - uses: actions/checkout@0c366fd6a839edf440554fa01a7085ccba70ac98 # v6 with: @@ -93,13 +94,14 @@ jobs: set_task insta "$source|$snapshots" set_task shear "$source" set_task vet "$cargo|^\.config/supply-chain/|$workflow|$justfile" + set_task qual "$source|^\.config/rustqual/" rust: needs: changes runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest] - task: [lint, fmt, fmt-comments, fmt-markdown, typecheck-js, test, docs, coverage, deny, insta, shear, vet] + task: [lint, fmt, fmt-comments, fmt-markdown, typecheck-js, test, docs, coverage, deny, insta, shear, vet, qual] include: - task: test os: windows-latest diff --git a/crates/jp_llm/src/provider/anthropic.rs b/crates/jp_llm/src/provider/anthropic.rs index cfecb539c..4f5537fe8 100644 --- a/crates/jp_llm/src/provider/anthropic.rs +++ b/crates/jp_llm/src/provider/anthropic.rs @@ -2447,6 +2447,8 @@ fn model_overrides(id: &str) -> Option<&'static ModelOverrides> { } /// The facts the capabilities API cannot supply, per model. +// qual:allow(complexity, magic_numbers) reason: "model catalogue: cutoff dates +// are data maintained by hand against Anthropic's published documentation" static MODEL_OVERRIDES: LazyLock> = LazyLock::new(|| { let cutoff = |year, month| NaiveDate::from_ymd_opt(year, month, 1); diff --git a/crates/jp_llm/src/provider/google.rs b/crates/jp_llm/src/provider/google.rs index e9369fdc6..bcbf35bc6 100644 --- a/crates/jp_llm/src/provider/google.rs +++ b/crates/jp_llm/src/provider/google.rs @@ -532,6 +532,9 @@ fn model_overrides(id: &str) -> Option<&'static ModelDetails> { /// See: See: /// See: /// +// qual:allow(complexity, magic_numbers) reason: "model catalogue: thinking +// budgets and cutoff dates are data maintained against Google's published +// documentation" static MODEL_OVERRIDES: LazyLock> = LazyLock::new(|| { let date = |year, month, day| NaiveDate::from_ymd_opt(year, month, day).unwrap(); let id = |name: &str| ModelIdConfig::try_from((PROVIDER, name)).unwrap(); diff --git a/crates/jp_llm/src/provider/openai.rs b/crates/jp_llm/src/provider/openai.rs index ec4f440e5..07ed70a9a 100644 --- a/crates/jp_llm/src/provider/openai.rs +++ b/crates/jp_llm/src/provider/openai.rs @@ -1717,6 +1717,8 @@ fn model_overrides(id: &str) -> Option<&'static ModelDetails> { /// Unlike the Anthropic, OpenRouter, and Cerebras providers, there is nothing /// to derive from, so every value here is maintained by hand against OpenAI's /// published model documentation. +// qual:allow(complexity, magic_numbers) reason: "model catalogue: context +// windows, output limits and cutoff dates are data, not constants" static MODEL_OVERRIDES: LazyLock> = LazyLock::new(|| { let date = |year, month, day| NaiveDate::from_ymd_opt(year, month, day).unwrap(); let id = |name: &str| ModelIdConfig::try_from((PROVIDER, name)).unwrap(); diff --git a/justfile b/justfile index 505c37595..875d62216 100644 --- a/justfile +++ b/justfile @@ -10,6 +10,7 @@ insta_version := "1.48.0" jilu_version := "0.13.2" llvm_cov_version := "0.8.7" nextest_version := "0.9.143" +rustqual_version := "1.8.2" shear_version := "1.13.4" vet_version := "0.10.2" @@ -3635,6 +3636,30 @@ check-all *FLAGS: check-and-fix *FLAGS: @just check --fix --allow-dirty {{FLAGS}} +# Run the structural quality checks (rustqual) over the workspace. +# +# Two passes, because rustqual's DRY dimension cannot enable dead-code +# detection without also firing on the repeated setup blocks that `*_tests.rs` +# files are deliberately built from. `.config/rustqual/config.toml` covers +# every other dimension across the full workspace; `dry.toml` covers DRY over +# production code only. Both configs carry the full rationale. +# +# Never fails: this is the exploratory entry point. `just qual-ci` is the gate. +[group('check')] +qual *FLAGS: (_install "rustqual@" + rustqual_version) + rustqual -c .config/rustqual/config.toml --no-fail {{FLAGS}} + rustqual -c .config/rustqual/dry.toml --no-fail {{FLAGS}} + +# Re-record the rustqual baselines that `qual-ci` gates against. +# +# Run after a change that deliberately moves the finding count — a refactor +# that removes findings, or an accepted batch of new ones — and commit the +# result alongside it, so the diff shows what moved and why. +[group('check')] +qual-baseline: (_install "rustqual@" + rustqual_version) + rustqual -c .config/rustqual/config.toml --no-fail --save-baseline .config/rustqual/baseline.json + rustqual -c .config/rustqual/dry.toml --no-fail --save-baseline .config/rustqual/baseline-dry.json + # Run tests, using nextest. [group('check')] [group('main')] @@ -3808,7 +3833,7 @@ fmt: (_rustup_component "rustfmt") _install-comfort # Run all ci tasks. [group('ci')] -ci: lint-ci fmt-ci test-ci docs-ci coverage-ci deny-ci insta-ci shear-ci vet-ci +ci: lint-ci fmt-ci test-ci docs-ci coverage-ci deny-ci insta-ci shear-ci vet-ci qual-ci # Lint the code on CI. [group('ci')] @@ -3862,6 +3887,16 @@ lint-ci: (_rustup_component "clippy") _install_ci_matchers # spelling rots unnoticed. cargo clippy --locked --package jp_mcp --all-targets --no-default-features --features client --no-deps --profile=lint -- --deny warnings +# Check structural code quality on CI. +# +# Gates on regression against the committed baselines rather than on an +# absolute score. The workspace carries known findings; the bar for new code is +# "no worse than what is already there". Refresh with `just qual-baseline`. +[group('ci')] +qual-ci: (_install "rustqual@" + rustqual_version) _install_ci_matchers + rustqual -c .config/rustqual/config.toml --compare .config/rustqual/baseline.json --fail-on-regression --format github + rustqual -c .config/rustqual/dry.toml --compare .config/rustqual/baseline-dry.json --fail-on-regression --format github + # Check code formatting on CI. [group('ci')] fmt-ci: (_rustup_component "rustfmt") _install_ci_matchers From 27b7ee086025d973648bc4937438f210e4cf2c61 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 22 Sep 2026 15:06:10 +0200 Subject: [PATCH 02/10] ci(github-actions): Wire `qual` into the run-decision step The `qual` matrix entry failed immediately with `unknown task: qual`. Adding a task to the `rust` job takes four edits, not two: the `changes` job output, the path filter, the matrix list, and the per-task gate that maps `$TASK` to the filter result. The first three landed with the rustqual gate; this adds the fourth. The gate's `case` statement has no default arm that lets an unmapped task through, so the omission failed the job outright instead of quietly running `qual-ci` on every push. Worth keeping in mind when adding the next task. Signed-off-by: Jean Mertz --- .github/workflows/rust.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 9ebf1a995..3bdcf1d9d 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -138,6 +138,7 @@ jobs: INSTA: ${{ needs.changes.outputs.insta }} SHEAR: ${{ needs.changes.outputs.shear }} VET: ${{ needs.changes.outputs.vet }} + QUAL: ${{ needs.changes.outputs.qual }} run: | set -euo pipefail @@ -154,6 +155,7 @@ jobs: insta) run="$INSTA" ;; shear) run="$SHEAR" ;; vet) run="$VET" ;; + qual) run="$QUAL" ;; *) echo "unknown task: $TASK" >&2; exit 1 ;; esac From 8a69ad97e9995563d396b9b8b39864604526ce07 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 22 Sep 2026 15:31:26 +0200 Subject: [PATCH 03/10] chore(rustqual): Install from source instead of via binstall `cargo binstall --only-signed` has nothing to resolve for rustqual: the crate declares no `[package.metadata.binstall]`, every GitHub release from v0.4.2 through v1.8.2 ships zero assets, and it is absent from cargo-quickinstall. The `qual` job would have failed at the install step on its first run. `_install-rustqual` builds from crates.io instead. `cargo install` no-ops in well under a second once the pinned version is present, so every recipe can depend on it unconditionally, and a version bump reinstalls on its own rather than needing `JP_INSTALL=1` the way the path-installed tools do. No cache step yet. The `qual` job already runs under sccache, which covers rustqual's dependency tree from the second run onward; whether that leaves the install cheap enough is a question for the CI timings rather than for a guess. Signed-off-by: Jean Mertz --- justfile | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/justfile b/justfile index 875d62216..06521c5c5 100644 --- a/justfile +++ b/justfile @@ -3646,7 +3646,7 @@ check-and-fix *FLAGS: # # Never fails: this is the exploratory entry point. `just qual-ci` is the gate. [group('check')] -qual *FLAGS: (_install "rustqual@" + rustqual_version) +qual *FLAGS: _install-rustqual rustqual -c .config/rustqual/config.toml --no-fail {{FLAGS}} rustqual -c .config/rustqual/dry.toml --no-fail {{FLAGS}} @@ -3656,7 +3656,7 @@ qual *FLAGS: (_install "rustqual@" + rustqual_version) # that removes findings, or an accepted batch of new ones — and commit the # result alongside it, so the diff shows what moved and why. [group('check')] -qual-baseline: (_install "rustqual@" + rustqual_version) +qual-baseline: _install-rustqual rustqual -c .config/rustqual/config.toml --no-fail --save-baseline .config/rustqual/baseline.json rustqual -c .config/rustqual/dry.toml --no-fail --save-baseline .config/rustqual/baseline-dry.json @@ -3893,7 +3893,7 @@ lint-ci: (_rustup_component "clippy") _install_ci_matchers # absolute score. The workspace carries known findings; the bar for new code is # "no worse than what is already there". Refresh with `just qual-baseline`. [group('ci')] -qual-ci: (_install "rustqual@" + rustqual_version) _install_ci_matchers +qual-ci: _install-rustqual _install_ci_matchers rustqual -c .config/rustqual/config.toml --compare .config/rustqual/baseline.json --fail-on-regression --format github rustqual -c .config/rustqual/dry.toml --compare .config/rustqual/baseline-dry.json --fail-on-regression --format github @@ -4062,6 +4062,7 @@ _install-serve-web *args: chmod 755 "$dir/.jp-serve-web.new" mv -f "$dir/.jp-serve-web.new" "$dir/jp-serve-web" echo "Installed jp-serve-web to $dir" >&2 +<<<<<<< HEAD # Build and install the `bookworm` MCP server that `.jp/config.toml` runs. _install-bookworm *args: @@ -4072,6 +4073,22 @@ _install-bookworm *args: exit 0 fi cargo install {{quiet_flag}} --locked --path crates/contrib/bookworm {{args}} +||||||| parent of dd64ec494 (chore(rustqual): Install from source instead of via binstall) +======= + +# Build and install `rustqual`, the structural quality analyser. +# +# Built from source rather than `_install`: rustqual publishes no release +# binaries (every tag from v0.4.2 to v1.8.2 has zero assets), declares no +# `[package.metadata.binstall]`, and is absent from quickinstall, so +# `cargo binstall --only-signed` has nothing to resolve. +# +# `cargo install` is a sub-second no-op once the pinned version is present, so +# this is safe to depend on from every recipe. A version bump reinstalls +# without needing `JP_INSTALL=1`, unlike the path-installed tools below. +_install-rustqual *args: + cargo install {{quiet_flag}} --locked rustqual@{{rustqual_version}} {{args}} +>>>>>>> dd64ec494 (chore(rustqual): Install from source instead of via binstall) _install-comfort *args: #!/usr/bin/env sh From 90ec09193e1e1c578bb5f48d3ea1e33bb59b100a Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 22 Sep 2026 15:57:50 +0200 Subject: [PATCH 04/10] ci(rustqual): Fix the gate failing on a clean baseline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `qual-ci` went red on its first run with `Findings: 2404 → 2404 (+0)`. `--fail-on-regression` adds a failure condition rather than replacing the default one: rustqual returns early when a comparison regresses, and otherwise falls through to a gate that fails whenever any finding exists. On a baselined workspace that is every run. `--no-fail` disables only that second gate. It cannot mask a regression, because the comparison returns before the gates are reached: `handle_baseline_and_compare(cli, &analysis)?` sits above `apply_exit_gates` in rustqual's `run_full_analysis`. Output is now captured rather than streamed. Each pass printed all of its baselined findings on every run, burying the comparison block that carries the verdict; a clean run shows only that block, and a regression shows the whole log. `--format github` is dropped because it annotates every baselined finding rather than the new ones, and GitHub displays at most ten, so the annotations showed pre-existing findings and hid the regression. Signed-off-by: Jean Mertz --- justfile | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/justfile b/justfile index 06521c5c5..4d8be8fff 100644 --- a/justfile +++ b/justfile @@ -3892,10 +3892,41 @@ lint-ci: (_rustup_component "clippy") _install_ci_matchers # Gates on regression against the committed baselines rather than on an # absolute score. The workspace carries known findings; the bar for new code is # "no worse than what is already there". Refresh with `just qual-baseline`. +# +# `--no-fail` is required, and does not weaken the gate. `--fail-on-regression` +# adds a failure condition rather than replacing the default one: rustqual +# returns early when a comparison regresses, and otherwise falls through to a +# gate that fails whenever any finding exists at all. On a baselined workspace +# that is every run. `--no-fail` disables only that second gate; the regression +# check runs first and returns before it is reached. +# +# Output is captured rather than streamed. Each pass prints every baselined +# finding on every run, which buries the comparison block that carries the +# verdict. On success only that block is shown; on regression the whole log is. +# `--format github` is deliberately absent: it annotates all baselined findings +# rather than the new ones, and GitHub caps the display at ten, so the +# annotations would show pre-existing findings and hide the regression. [group('ci')] qual-ci: _install-rustqual _install_ci_matchers - rustqual -c .config/rustqual/config.toml --compare .config/rustqual/baseline.json --fail-on-regression --format github - rustqual -c .config/rustqual/dry.toml --compare .config/rustqual/baseline-dry.json --fail-on-regression --format github + #!/usr/bin/env sh + set -eu + + qual_pass() { + if out=$(rustqual -c ".config/rustqual/$1" --no-fail \ + --compare ".config/rustqual/$2" --fail-on-regression 2>&1) + then + printf '%s\n' "$out" | sed -n '/Baseline Comparison/,$p' + else + echo "::error::rustqual regression in the $1 pass" + printf '%s\n' "$out" + return 1 + fi + } + + status=0 + qual_pass config.toml baseline.json || status=1 + qual_pass dry.toml baseline-dry.json || status=1 + exit "$status" # Check code formatting on CI. [group('ci')] From 9bca20e952a27443c66bc48678a34ea28b186e15 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 6 Oct 2026 14:52:23 +0200 Subject: [PATCH 05/10] fix(rustqual): Gate on per-category counts, not quality score `just qual-ci` now fails whenever any finding category sits above its committed baseline, so a PR that adds a dead function or an 8-parameter function is red even when it also adds enough compliant code to hold the overall score level. The previous gate asked rustqual for the verdict via `--compare --fail-on-regression`, which prints a finding delta but defines a regression as `quality_score` dropping. That score is a ratio over every function in the workspace, so new findings arriving alongside new compliant code left it flat and the job passed. A baseline rustqual could not parse was worse: it printed the error, reported "not regressed", and exited 0 under `--no-fail`, leaving a green job with no comparison at all and no gate for that pass. rustqual now runs purely as a report generator, writing a fresh baseline to a temp file, and `.config/rustqual/regressions.jq` decides the verdict. It walks every count in the report, skipping `version`, `total` and the two ratios, and reports each one above its baseline. A baseline that is invalid JSON fails in jq; one that parses but carries no numeric `total_findings` is rejected outright, so neither can silence the gate. Because a gate that has broken open is invisible, both directions are checked on every run before the real passes: a baseline one finding below the current state has to read as a regression, and a malformed baseline has to be an error. Either assertion failing fails the job. A regression now names the categories that moved rather than dumping the whole report, and says what to do about it. Signed-off-by: Jean Mertz --- .config/rustqual/regressions.jq | 42 ++++++++++++++ justfile | 100 ++++++++++++++++++++++++-------- 2 files changed, 118 insertions(+), 24 deletions(-) create mode 100644 .config/rustqual/regressions.jq diff --git a/.config/rustqual/regressions.jq b/.config/rustqual/regressions.jq new file mode 100644 index 000000000..21c80d945 --- /dev/null +++ b/.config/rustqual/regressions.jq @@ -0,0 +1,42 @@ +# Report every count in a fresh rustqual report that sits above the committed +# baseline, one `key: old -> new (+delta)` line per category. Empty output means +# no category moved up. +# +# Invoked as: +# +# jq -nr -f regressions.jq --slurpfile old --slurpfile new +# +# Per category rather than on `total_findings` alone: a change that fixes three +# magic numbers and adds three dead functions leaves the total flat while making +# the codebase worse along an axis we care about. +# +# A baseline that cannot be compared is an error, not a pass. Invalid JSON fails +# in jq before this program runs; a file that parses but carries no numeric +# `total_findings` (`{}`, or a schema from an incompatible rustqual) is rejected +# below. Both would otherwise disable the gate silently. +# +# Keys deliberately not compared: +# +# version schema marker, not a count +# total function count, which grows with the codebase +# quality_score, iosp_score ratios, which are what we are not gating on + +{version: 1, total: 1, quality_score: 1, iosp_score: 1} as $skip +| $old[0] as $o +| $new[0] as $n +| if ($o | type) != "object" then + error("baseline is not a JSON object") + elif ($o.total_findings | type) != "number" then + error("baseline has no numeric total_findings: corrupt, or written by an incompatible rustqual") + elif ($n.total_findings | type) != "number" then + error("fresh report has no numeric total_findings: rustqual's baseline format changed") + else + $n + | to_entries[] + | select((.value | type) == "number") + | select($skip[.key] == null) + | . as $entry + | ($o[$entry.key] | if type == "number" then . else 0 end) as $was + | select($entry.value > $was) + | " \($entry.key): \($was) -> \($entry.value) (+\($entry.value - $was))" + end diff --git a/justfile b/justfile index 4d8be8fff..14c5d5e88 100644 --- a/justfile +++ b/justfile @@ -3889,40 +3889,92 @@ lint-ci: (_rustup_component "clippy") _install_ci_matchers # Check structural code quality on CI. # -# Gates on regression against the committed baselines rather than on an -# absolute score. The workspace carries known findings; the bar for new code is -# "no worse than what is already there". Refresh with `just qual-baseline`. -# -# `--no-fail` is required, and does not weaken the gate. `--fail-on-regression` -# adds a failure condition rather than replacing the default one: rustqual -# returns early when a comparison regresses, and otherwise falls through to a -# gate that fails whenever any finding exists at all. On a baselined workspace -# that is every run. `--no-fail` disables only that second gate; the regression -# check runs first and returns before it is reached. -# -# Output is captured rather than streamed. Each pass prints every baselined -# finding on every run, which buries the comparison block that carries the -# verdict. On success only that block is shown; on regression the whole log is. -# `--format github` is deliberately absent: it annotates all baselined findings -# rather than the new ones, and GitHub caps the display at ten, so the -# annotations would show pre-existing findings and hide the regression. +# Gates on per-category regression against the committed baselines rather than +# on an absolute score. The workspace carries known findings; the bar for new +# code is "no worse than what is already there". Refresh with +# `just qual-baseline`. +# +# rustqual's own `--compare --fail-on-regression` is deliberately unused. It +# prints a finding delta, but defines a regression as `quality_score` dropping, +# and that score is a ratio over every function in the workspace: a change that +# adds compliant code alongside a new finding dilutes the score enough to hold +# it level, and the gate passes. A baseline it cannot parse is worse — rustqual +# prints the error, reports "not regressed", and exits 0 under `--no-fail`. +# +# So rustqual runs only as a report generator, into a temp file, and +# `regressions.jq` decides the verdict: any count above its baseline fails the +# job, and a baseline that cannot be compared is an error rather than a pass. +# +# Output is captured. Each pass prints every baselined finding on every run, +# which buries the verdict; on success only the totals are shown, on failure the +# categories that moved. `--format github` is deliberately absent: it annotates +# all baselined findings rather than the new ones, and GitHub caps the display +# at ten, so the annotations would hide the regression behind existing findings. +# +# Needs `jq`, which GitHub's runners ship. [group('ci')] qual-ci: _install-rustqual _install_ci_matchers #!/usr/bin/env sh set -eu - qual_pass() { - if out=$(rustqual -c ".config/rustqual/$1" --no-fail \ - --compare ".config/rustqual/$2" --fail-on-regression 2>&1) - then - printf '%s\n' "$out" | sed -n '/Baseline Comparison/,$p' - else - echo "::error::rustqual regression in the $1 pass" + tmp=$(mktemp -d "${TMPDIR:-/tmp}/rustqual.XXXXXX") + trap 'rm -rf "$tmp"' EXIT + + filter=.config/rustqual/regressions.jq + main=.config/rustqual/baseline.json + + # Prove the gate can still fail before trusting it to pass. A gate that has + # broken open is invisible by definition, so both directions are checked on + # every run: a baseline one finding below the current one has to read as a + # regression, and an unparseable baseline has to be an error. + canary() { + jq '.magic_number_warnings = (.magic_number_warnings // 0) - 1' \ + "$main" > "$tmp/lowered.json" || return 1 + out=$(jq -nr -f "$filter" \ + --slurpfile old "$tmp/lowered.json" --slurpfile new "$main" 2>&1) || { + echo "::error::the regression filter errored on its canary input" printf '%s\n' "$out" return 1 + } + [ -n "$out" ] || { + echo "::error::the regression filter reported nothing for a known regression" + return 1 + } + printf 'not json\n' > "$tmp/broken.json" || return 1 + if jq -nr -f "$filter" \ + --slurpfile old "$tmp/broken.json" --slurpfile new "$main" >/dev/null 2>&1 + then + echo "::error::the regression filter accepted a malformed baseline" + return 1 fi } + qual_pass() { + base=".config/rustqual/$2" + fresh="$tmp/$2" + log=$(rustqual -c ".config/rustqual/$1" --no-fail --save-baseline "$fresh" 2>&1) || { + echo "::error::rustqual could not analyse the workspace in the $1 pass" + printf '%s\n' "$log" + return 1 + } + over=$(jq -nr -f "$filter" --slurpfile old "$base" --slurpfile new "$fresh" 2>&1) || { + echo "::error::cannot compare the $1 pass against $base" + printf '%s\n' "$over" + return 1 + } + totals=$(jq -nr --slurpfile old "$base" --slurpfile new "$fresh" \ + '"findings \($old[0].total_findings) -> \($new[0].total_findings)"') || return 1 + [ -z "$over" ] || { + echo "::error::rustqual regression in the $1 pass ($totals)" + printf '%s\n' "$over" + echo "Fix the findings above, or run \`just qual-baseline\` and commit the result when the new count is deliberate." + return 1 + } + echo "$1: no category above baseline ($totals)" + } + + canary + status=0 qual_pass config.toml baseline.json || status=1 qual_pass dry.toml baseline-dry.json || status=1 From 198c0f27b11e90d837338e6f0b298614e03b5c58 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 6 Oct 2026 15:04:32 +0200 Subject: [PATCH 06/10] chore(rustqual): Re-record baselines after rebase The committed baselines measured the workspace as it stood on 22 Sep, when this branch was written. Rebasing onto `150ba7868` moved the base to 6 Oct, and the two weeks of main development in between add 382 findings to the main pass and 116 to the DRY pass, spread across twelve categories. None of that is this branch's doing: its entire Rust diff is seven comment lines adding `qual:allow` markers to the three provider model catalogues, and a comment cannot introduce an IOSP violation or an unsafe block. The findings arrived through pull requests that merged before this gate existed, so the current tree is the state the gate is meant to accept. Recorded with `just qual-baseline`, which is the documented response to a deliberate move in the count. Both passes report no category above baseline afterwards. Signed-off-by: Jean Mertz --- .config/rustqual/baseline-dry.json | 1401 +++++++++++++++++---------- .config/rustqual/baseline.json | 1407 ++++++++++++++++++---------- 2 files changed, 1834 insertions(+), 974 deletions(-) diff --git a/.config/rustqual/baseline-dry.json b/.config/rustqual/baseline-dry.json index ebb971199..23ab089b1 100644 --- a/.config/rustqual/baseline-dry.json +++ b/.config/rustqual/baseline-dry.json @@ -1,19 +1,19 @@ { "version": 2, - "quality_score": 0.6253090341843414, - "iosp_score": 0.799166449596249, - "violations": 771, - "total": 5426, + "quality_score": 0.6501759364487419, + "iosp_score": 0.8115942028985508, + "violations": 858, + "total": 6389, "complexity_warnings": 0, "magic_number_warnings": 0, "nesting_depth_warnings": 0, "function_length_warnings": 0, "unsafe_warnings": 0, "error_handling_warnings": 0, - "duplicate_groups": 20, - "dead_code_warnings": 256, - "dead_type_warnings": 32, - "fragment_groups": 46, + "duplicate_groups": 29, + "dead_code_warnings": 262, + "dead_type_warnings": 28, + "fragment_groups": 58, "boilerplate_warnings": 0, "srp_struct_warnings": 0, "srp_module_warnings": 0, @@ -28,67 +28,67 @@ "tq_untested_logic_warnings": 0, "structural_srp_warnings": 0, "structural_coupling_warnings": 0, - "total_findings": 1164, + "total_findings": 1280, "violation_details": [ { "name": "ConversationStream::config_unsets", "file": "crates/jp_conversation/src/stream.rs", - "line": 246 + "line": 247 }, { "name": "ConversationStream::trim_chat_request", "file": "crates/jp_conversation/src/stream.rs", - "line": 274 + "line": 281 }, { "name": "ConversationStream::current_turn_mut", "file": "crates/jp_conversation/src/stream.rs", - "line": 576 + "line": 583 }, { "name": "ConversationStream::pop_while", "file": "crates/jp_conversation/src/stream.rs", - "line": 809 + "line": 816 }, { "name": "ConversationStream::remove_orphaned_inquiry_responses", "file": "crates/jp_conversation/src/stream.rs", - "line": 988 + "line": 995 }, { "name": "ConversationStream::remove_orphaned_inquiry_requests", "file": "crates/jp_conversation/src/stream.rs", - "line": 1030 + "line": 1037 }, { "name": "ConversationStream::normalize_turn_starts", "file": "crates/jp_conversation/src/stream.rs", - "line": 1077 + "line": 1084 }, { "name": "ConversationStream::sanitize_orphaned_tool_calls", "file": "crates/jp_conversation/src/stream.rs", - "line": 1164 + "line": 1171 }, { "name": "ConversationStream::from_legacy_events", "file": "crates/jp_conversation/src/stream.rs", - "line": 1573 + "line": 1580 }, { "name": "strip_schema", "file": "crates/jp_conversation/src/compat.rs", - "line": 256 + "line": 295 }, { "name": "strip_schema_type", "file": "crates/jp_conversation/src/compat.rs", - "line": 272 + "line": 314 }, { "name": "strip_struct", "file": "crates/jp_conversation/src/compat.rs", - "line": 436 + "line": 487 }, { "name": "Documents::try_to_xml", @@ -123,32 +123,32 @@ { "name": "affected_items", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 292 + "line": 295 }, { "name": "apply_mechanical", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 386 + "line": 389 }, { "name": "collect_turn_origins", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 441 + "line": 444 }, { "name": "assign_turn_indices", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 473 + "line": 476 }, { "name": "strip_tool_request", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 602 + "line": 630 }, { "name": "build_tool_calls", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 657 + "line": 685 }, { "name": "EventPayload::deserialize", @@ -248,47 +248,57 @@ { "name": "Printer::status_region", "file": "crates/jp_printer/src/printer.rs", - "line": 277 + "line": 286 + }, + { + "name": "Printer::error_println", + "file": "crates/jp_printer/src/printer.rs", + "line": 472 + }, + { + "name": "Printer::send_error", + "file": "crates/jp_printer/src/printer.rs", + "line": 491 }, { "name": "Printer::track_pending", "file": "crates/jp_printer/src/printer.rs", - "line": 670 + "line": 736 }, { "name": "Printer::send", "file": "crates/jp_printer/src/printer.rs", - "line": 733 + "line": 799 }, { "name": "Worker::run", "file": "crates/jp_printer/src/printer.rs", - "line": 1003 + "line": 1171 }, { "name": "Worker::process_task_instant", "file": "crates/jp_printer/src/printer.rs", - "line": 1124 + "line": 1292 }, { "name": "Worker::process_task", "file": "crates/jp_printer/src/printer.rs", - "line": 1173 + "line": 1341 }, { "name": "Worker::write_task", "file": "crates/jp_printer/src/printer.rs", - "line": 1189 + "line": 1357 }, { "name": "Sink::new", "file": "crates/jp_printer/src/printer.rs", - "line": 1278 + "line": 1446 }, { "name": "DelayControl::effective_delay", "file": "crates/jp_printer/src/printer.rs", - "line": 1590 + "line": 1758 }, { "name": "Content::fmt", @@ -383,27 +393,37 @@ { "name": "Storage::persist_conversation", "file": "crates/jp_storage/src/lib.rs", - "line": 195 + "line": 208 + }, + { + "name": "Storage::sync_projection", + "file": "crates/jp_storage/src/lib.rs", + "line": 448 }, { "name": "adopt_partition", "file": "crates/jp_storage/src/lib.rs", - "line": 791 + "line": 818 }, { "name": "adopt_conversation_dir", "file": "crates/jp_storage/src/lib.rs", - "line": 812 + "line": 839 }, { "name": "import_external_copy", "file": "crates/jp_storage/src/lib.rs", - "line": 866 + "line": 889 + }, + { + "name": "import_conversation_dir", + "file": "crates/jp_storage/src/lib.rs", + "line": 913 }, { "name": "copy_dir_all", "file": "crates/jp_storage/src/lib.rs", - "line": 919 + "line": 980 }, { "name": "FsStorageBackend::sanitize", @@ -433,62 +453,62 @@ { "name": "collapse_blank_lines", "file": "crates/jp_attachment_http_content/src/lib.rs", - "line": 189 + "line": 180 + }, + { + "name": "Registry::from", + "file": "crates/jp_plugin/src/registry.rs", + "line": 46 }, { "name": "PluginKind::binaries", "file": "crates/jp_plugin/src/registry.rs", - "line": 113 + "line": 169 }, { "name": "ProtocolLogLayer::on_event", "file": "crates/plugins/command/serve-web/src/log_layer.rs", - "line": 90 + "line": 94 }, { "name": "PluginClient::start_conversation", "file": "crates/plugins/command/serve-web/src/client.rs", - "line": 199 + "line": 201 }, { "name": "render_events", "file": "crates/plugins/command/serve-web/src/render.rs", "line": 158 }, + { + "name": "run_server", + "file": "crates/plugins/command/serve-web/src/lib.rs", + "line": 95 + }, { "name": "serve", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 116 + "line": 127 }, { "name": "TurnForm::parse", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 317 + "line": 366 }, { "name": "start_turn", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 348 + "line": 400 }, { "name": "NewConversationForm::parse", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 497 + "line": 662 }, { "name": "start_conversation", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 531 - }, - { - "name": "run_server", - "file": "crates/plugins/command/serve-web/src/main.rs", - "line": 111 - }, - { - "name": "group_by_namespace", - "file": "crates/plugins/command/serve-web/src/views/new.rs", - "line": 135 + "line": 699 }, { "name": "SystemLauncher::launch", @@ -497,43 +517,43 @@ }, { "name": "handle_command", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 322 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 310 }, { "name": "compose_missing", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 423 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 411 }, { "name": "with_show_alias", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 815 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 803 }, { "name": "migrate", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 949 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 937 }, { "name": "execute", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 1182 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 1170 }, { "name": "vocabulary_listing", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 1462 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 1450 }, { "name": "row", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 1636 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 1624 }, { "name": "read_message", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 1698 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 1684 }, { "name": "project_turns", @@ -623,22 +643,22 @@ { "name": "PartialCommandConfig::assign", "file": "crates/jp_config/src/types/command.rs", - "line": 274 + "line": 300 }, { "name": "split_command_words", "file": "crates/jp_config/src/types/command.rs", - "line": 321 + "line": 347 }, { "name": "mask_template_spans", "file": "crates/jp_config/src/types/command.rs", - "line": 344 + "line": 370 }, { "name": "restore_spans", "file": "crates/jp_config/src/types/command.rs", - "line": 436 + "line": 462 }, { "name": "PolicySpec

::deserialize", @@ -673,7 +693,7 @@ { "name": "PartialMergeableMap::delta", "file": "crates/jp_config/src/types/map.rs", - "line": 244 + "line": 226 }, { "name": "merge_values", @@ -700,6 +720,11 @@ "file": "crates/jp_config/src/types/json_value.rs", "line": 280 }, + { + "name": "render_available", + "file": "crates/jp_config/src/types/api_key_env.rs", + "line": 63 + }, { "name": "PartialInterruptConfig::assign", "file": "crates/jp_config/src/interrupt.rs", @@ -723,7 +748,7 @@ { "name": "PartialInquiryConfig::assign", "file": "crates/jp_config/src/conversation.rs", - "line": 233 + "line": 241 }, { "name": "collect_config_segments", @@ -743,27 +768,37 @@ { "name": "PartialCommandPluginConfig::assign", "file": "crates/jp_config/src/plugins/command.rs", - "line": 90 + "line": 86 + }, + { + "name": "AuthEntry::validate_chain", + "file": "crates/jp_config/src/providers/llm.rs", + "line": 166 }, { "name": "PartialLlmProviderConfig::assign", "file": "crates/jp_config/src/providers/llm.rs", - "line": 101 + "line": 295 }, { "name": "PartialGoogleConfig::assign", "file": "crates/jp_config/src/providers/llm/google.rs", - "line": 26 + "line": 75 }, { "name": "PartialOpenrouterConfig::assign", "file": "crates/jp_config/src/providers/llm/openrouter.rs", - "line": 35 + "line": 84 + }, + { + "name": "PartialVllmConfig::assign", + "file": "crates/jp_config/src/providers/llm/vllm.rs", + "line": 87 }, { "name": "PartialCerebrasConfig::assign", "file": "crates/jp_config/src/providers/llm/cerebras.rs", - "line": 50 + "line": 99 }, { "name": "PartialOllamaConfig::assign", @@ -778,22 +813,17 @@ { "name": "PartialDeepseekConfig::assign", "file": "crates/jp_config/src/providers/llm/deepseek.rs", - "line": 26 - }, - { - "name": "AnthropicConfig::validate", - "file": "crates/jp_config/src/providers/llm/anthropic.rs", - "line": 86 + "line": 75 }, { "name": "PartialAnthropicConfig::assign", "file": "crates/jp_config/src/providers/llm/anthropic.rs", - "line": 109 + "line": 157 }, { "name": "PartialOpenaiConfig::assign", "file": "crates/jp_config/src/providers/llm/openai.rs", - "line": 34 + "line": 122 }, { "name": "PartialStdioConfig::assign", @@ -808,17 +838,17 @@ { "name": "PartialAppConfig::assign", "file": "crates/jp_config/src/lib.rs", - "line": 234 + "line": 235 }, { "name": "AppConfig::fields", "file": "crates/jp_config/src/lib.rs", - "line": 500 + "line": 501 }, { "name": "AppConfig::addressable", "file": "crates/jp_config/src/lib.rs", - "line": 541 + "line": 542 }, { "name": "PartialStyleConfig::assign", @@ -828,7 +858,7 @@ { "name": "PartialPluginsConfig::assign", "file": "crates/jp_config/src/plugins.rs", - "line": 46 + "line": 44 }, { "name": "PartialCodeConfig::assign", @@ -903,12 +933,12 @@ { "name": "PartialEditorConfig::assign", "file": "crates/jp_config/src/editor.rs", - "line": 118 + "line": 116 }, { "name": "PartialInlineEditorConfig::assign", "file": "crates/jp_config/src/editor.rs", - "line": 174 + "line": 172 }, { "name": "PartialModelIdOrAliasConfig::assign", @@ -945,25 +975,20 @@ "file": "crates/jp_config/src/model/id/alias.rs", "line": 20 }, - { - "name": "deserialize_collecting_other", - "file": "crates/jp_config/src/model/parameters.rs", - "line": 179 - }, { "name": "PartialParametersConfig::assign", "file": "crates/jp_config/src/model/parameters.rs", - "line": 219 + "line": 215 }, { "name": "PartialReasoningConfig::assign", "file": "crates/jp_config/src/model/parameters.rs", - "line": 387 + "line": 388 }, { "name": "PartialCustomReasoningConfig::assign", "file": "crates/jp_config/src/model/parameters.rs", - "line": 466 + "line": 467 }, { "name": "ConfigFile::merge_delta", @@ -1028,7 +1053,7 @@ { "name": "PartialModelConfig::assign", "file": "crates/jp_config/src/model.rs", - "line": 41 + "line": 43 }, { "name": "PartialGenerateConfig::assign", @@ -1048,17 +1073,17 @@ { "name": "PartialToolConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 629 + "line": 627 }, { "name": "PartialToolParameterConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 862 + "line": 860 }, { "name": "PartialEnableConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 1861 + "line": 1862 }, { "name": "PartialTitleConfig::assign", @@ -1073,42 +1098,47 @@ { "name": "PartialLabelConfig::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 300 + "line": 302 }, { "name": "PartialLabelObject::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 389 + "line": 391 }, { "name": "PartialLabelValue::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 439 + "line": 441 }, { "name": "PartialLabelCommand::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 481 + "line": 483 }, { "name": "PartialApplyOn::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 509 + "line": 511 }, { "name": "PartialCompactionConfig::assign", "file": "crates/jp_config/src/conversation/compaction.rs", "line": 76 }, + { + "name": "PartialCompactionConfig::delta", + "file": "crates/jp_config/src/conversation/compaction.rs", + "line": 88 + }, { "name": "PartialCompactionRuleConfig::assign", "file": "crates/jp_config/src/conversation/compaction.rs", - "line": 298 + "line": 291 }, { "name": "PartialSummaryConfig::assign", "file": "crates/jp_config/src/conversation/compaction.rs", - "line": 384 + "line": 377 }, { "name": "PartialAccessConfig::assign", @@ -1183,32 +1213,32 @@ { "name": "Workspace::unarchive_conversation", "file": "crates/jp_workspace/src/lib.rs", - "line": 927 + "line": 947 }, { "name": "Workspace::sync_conversation", "file": "crates/jp_workspace/src/lib.rs", - "line": 1035 + "line": 1055 }, { "name": "Workspace::ensure_all_metadata_loaded", "file": "crates/jp_workspace/src/lib.rs", - "line": 1070 + "line": 1090 }, { "name": "Workspace::test_lock", "file": "crates/jp_workspace/src/lib.rs", - "line": 1101 + "line": 1121 }, { "name": "maybe_init_conversation", "file": "crates/jp_workspace/src/lib.rs", - "line": 1143 + "line": 1163 }, { "name": "maybe_init_events", "file": "crates/jp_workspace/src/lib.rs", - "line": 1164 + "line": 1184 }, { "name": "upsert_root", @@ -1228,22 +1258,22 @@ { "name": "create", "file": "crates/internal/ticket/src/store.rs", - "line": 169 + "line": 174 }, { "name": "vocabulary", "file": "crates/internal/ticket/src/store.rs", - "line": 291 + "line": 296 }, { "name": "import", "file": "crates/internal/ticket/src/store.rs", - "line": 394 + "line": 399 }, { "name": "slug", "file": "crates/internal/ticket/src/store.rs", - "line": 723 + "line": 728 }, { "name": "escape", @@ -1263,27 +1293,27 @@ { "name": "FileContent::add", "file": "crates/jp_attachment_file_content/src/lib.rs", - "line": 39 + "line": 38 }, { "name": "FileContent::get", "file": "crates/jp_attachment_file_content/src/lib.rs", - "line": 96 + "line": 95 }, { "name": "uri_to_pattern", "file": "crates/jp_attachment_file_content/src/lib.rs", - "line": 309 + "line": 304 }, { "name": "Command::to_uri", "file": "crates/jp_attachment_cmd_output/src/lib.rs", - "line": 32 + "line": 31 }, { "name": "Commands::get", "file": "crates/jp_attachment_cmd_output/src/lib.rs", - "line": 109 + "line": 108 }, { "name": "Labels::from_tokens_lossy", @@ -1325,6 +1355,36 @@ "file": "crates/jp_test/src/mock.rs", "line": 142 }, + { + "name": "Client::post_stream", + "file": "crates/contrib/async-anthropic/src/client.rs", + "line": 277 + }, + { + "name": "handle_response", + "file": "crates/contrib/async-anthropic/src/client.rs", + "line": 322 + }, + { + "name": "response_error", + "file": "crates/contrib/async-anthropic/src/client.rs", + "line": 337 + }, + { + "name": "UnifiedRateLimit::is_empty", + "file": "crates/contrib/async-anthropic/src/errors.rs", + "line": 204 + }, + { + "name": "request_id", + "file": "crates/contrib/async-anthropic/src/bearer.rs", + "line": 100 + }, + { + "name": "merge_betas", + "file": "crates/contrib/async-anthropic/src/bearer.rs", + "line": 125 + }, { "name": "partialize_schema", "file": "crates/contrib/schematic/src/internal.rs", @@ -1755,11 +1815,6 @@ "file": "crates/contrib/comfort/src/sentence.rs", "line": 274 }, - { - "name": "is_abbreviation_ending", - "file": "crates/contrib/comfort/src/sentence.rs", - "line": 294 - }, { "name": "workspace_files", "file": "crates/contrib/comfort/src/walk.rs", @@ -1918,12 +1973,12 @@ { "name": "Variant<'_>::from", "file": "crates/contrib/schematic_macros/src/config_enum/variant.rs", - "line": 53 + "line": 63 }, { "name": "Variant<'_>::get_schema_type", "file": "crates/contrib/schematic_macros/src/config_enum/variant.rs", - "line": 152 + "line": 180 }, { "name": "macro_impl", @@ -2248,182 +2303,262 @@ { "name": "Query::run_locked", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 434 + "line": 452 }, { "name": "Query::conversation_load_request", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 853 + "line": 881 }, { "name": "Query::build_conversation", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 870 + "line": 898 }, { "name": "Query::create_new_conversation", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 966 - }, - { - "name": "Query::acquire_lock", - "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1285 - }, - { - "name": "await_mcp_servers", - "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1694 + "line": 996 }, { - "name": "claim_mcp_startup_region", + "name": "Query::run_turn", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1825 + "line": 1169 }, { - "name": "mcp_startup_line", + "name": "Query::acquire_lock", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1853 + "line": 1378 }, { "name": "persist_config_reset", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2422 + "line": 1987 }, { "name": "turn_config_delta", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2451 + "line": 2016 }, { "name": "Query::apply_cli_config", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2472 + "line": 2037 }, { "name": "build_sections", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2570 + "line": 2137 }, { "name": "build_thread", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2598 + "line": 2165 }, { "name": "apply_mounts", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2922 + "line": 2561 }, { "name": "create_mount_effects", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2995 + "line": 2634 }, { "name": "PendingStreamTrim::apply", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 3174 + "line": 2813 }, { "name": "mount_access_seed", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 3333 + "line": 2972 }, { "name": "read_piped_stdin", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 3437 + "line": 3076 }, { - "name": "Composer::compose", - "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 90 + "name": "Login::run_with_auth", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 273 + }, + { + "name": "Login::acquire", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 496 + }, + { + "name": "Login::device_login", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 560 + }, + { + "name": "await_callback", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 639 + }, + { + "name": "percent_decode", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 698 + }, + { + "name": "List::run_with_auth", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 749 + }, + { + "name": "read_setup_token", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 1041 + }, + { + "name": "humanize", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 1136 }, { "name": "Composer::ask", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 135 + "line": 154 }, { "name": "Composer::buffer", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 180 + "line": 199 }, { "name": "run_plugin", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 291 + "line": 361 }, { "name": "spawn_plugin", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 450 + "line": 546 }, { "name": "stop_plugin", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 517 + "line": 643 + }, + { + "name": "join_within", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 666 }, { "name": "message_loop", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 599 + "line": 741 }, { "name": "run_query", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 689 + "line": 891 }, { "name": "prepare_turn", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 930 + "line": 1261 }, { "name": "handle_request", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 1070 + "line": 1762 }, { "name": "handle_write_draft", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 1449 + "line": 2099 }, { "name": "handle_list_configs", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 1547 + "line": 2197 }, { - "name": "describe_plugin", + "name": "describe", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 2081 + "line": 2480 }, { - "name": "discover_plugins", + "name": "manifest_differences", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 2121 + "line": 2516 }, { - "name": "show_plugin_help", + "name": "describe_plugin", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 2180 + "line": 2541 }, { "name": "run_external", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 2221 + "line": 2900 + }, + { + "name": "render", + "file": "crates/jp_cli/src/cmd/plugin/list.rs", + "line": 113 + }, + { + "name": "discover_in", + "file": "crates/jp_cli/src/cmd/plugin/discovery.rs", + "line": 108 + }, + { + "name": "read", + "file": "crates/jp_cli/src/cmd/plugin/approvals.rs", + "line": 178 }, { "name": "Update::run", "file": "crates/jp_cli/src/cmd/plugin/update.rs", - "line": 14 + "line": 26 + }, + { + "name": "not_approved", + "file": "crates/jp_cli/src/cmd/plugin/admission.rs", + "line": 224 + }, + { + "name": "admit", + "file": "crates/jp_cli/src/cmd/plugin/admission.rs", + "line": 280 }, { "name": "Install::run", "file": "crates/jp_cli/src/cmd/plugin/install.rs", - "line": 16 + "line": 31 + }, + { + "name": "visit", + "file": "crates/jp_cli/src/cmd/plugin/install.rs", + "line": 120 + }, + { + "name": "confirm_third_party", + "file": "crates/jp_cli/src/cmd/plugin/install.rs", + "line": 155 + }, + { + "name": "print_root_section", + "file": "crates/jp_cli/src/cmd/plugin/help.rs", + "line": 40 + }, + { + "name": "root_entries", + "file": "crates/jp_cli/src/cmd/plugin/help.rs", + "line": 68 + }, + { + "name": "children", + "file": "crates/jp_cli/src/cmd/plugin/help.rs", + "line": 102 }, { "name": "TimeThreshold::from_str", @@ -2433,17 +2568,17 @@ { "name": "Resolver<'a>::automatic", "file": "crates/jp_cli/src/cmd/label/resolve.rs", - "line": 90 + "line": 105 }, { "name": "Resolver<'a>::alias", "file": "crates/jp_cli/src/cmd/label/resolve.rs", - "line": 154 + "line": 169 }, { "name": "run_command", "file": "crates/jp_cli/src/cmd/label/resolve.rs", - "line": 302 + "line": 318 }, { "name": "parse_bound", @@ -2458,12 +2593,12 @@ { "name": "TurnSet::new", "file": "crates/jp_cli/src/cmd/turn_selection.rs", - "line": 278 + "line": 289 }, { "name": "TurnSelection::windows", "file": "crates/jp_cli/src/cmd/turn_selection.rs", - "line": 651 + "line": 687 }, { "name": "Init::run", @@ -2568,17 +2703,27 @@ { "name": "InterruptHandler

::collect_reply_inline", "file": "crates/jp_cli/src/cmd/query/interrupt/handler.rs", - "line": 474 + "line": 478 }, { - "name": "handle_streaming_interrupt", + "name": "handle_tool_interrupt", "file": "crates/jp_cli/src/cmd/query/interrupt/signals.rs", - "line": 75 + "line": 323 }, { - "name": "handle_tool_interrupt", - "file": "crates/jp_cli/src/cmd/query/interrupt/signals.rs", - "line": 261 + "name": "await_mcp_servers", + "file": "crates/jp_cli/src/cmd/query/mcp_startup.rs", + "line": 31 + }, + { + "name": "claim_region", + "file": "crates/jp_cli/src/cmd/query/mcp_startup.rs", + "line": 166 + }, + { + "name": "line", + "file": "crates/jp_cli/src/cmd/query/mcp_startup.rs", + "line": 194 }, { "name": "TurnCoordinator::handle_streaming_event", @@ -2588,152 +2733,227 @@ { "name": "claim_waiting_region", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 118 + "line": 144 }, { - "name": "run_turn_loop", + "name": "drive_turn", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 172 + "line": 252 }, { "name": "build_inquiry_backend", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 932 + "line": 1093 }, { "name": "build_inquiry_overrides", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 1030 + "line": 1192 + }, + { + "name": "commit_tool_responses", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 1307 }, { "name": "build_execution_plan", "file": "crates/jp_cli/src/cmd/query/tool/pending.rs", - "line": 141 + "line": 142 }, { "name": "LlmInquiryBackend::inquire", "file": "crates/jp_cli/src/cmd/query/tool/inquiry.rs", - "line": 217 + "line": 222 }, { "name": "ToolPrompter::prompt_ask", "file": "crates/jp_cli/src/cmd/query/tool/prompter.rs", - "line": 270 + "line": 179 }, { "name": "stderr_sink", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 250 + "line": 238 }, { "name": "ToolCoordinator::pre_render_for_prompt", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 490 + "line": 603 }, { - "name": "ToolCoordinator::resolve_tool_call_decision", + "name": "ToolCoordinator::render_executor", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 549 + "line": 626 }, { - "name": "ToolCoordinator::prepare", + "name": "ToolCoordinator::abandon", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 717 + "line": 723 }, { - "name": "ToolCoordinator::render_approved_tool", + "name": "ToolCoordinator::decide_permission", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 777 + "line": 804 }, { - "name": "ToolCoordinator::run_permission_phase", + "name": "ToolCoordinator::submit", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 896 + "line": 893 }, { - "name": "ToolCoordinator::execute_with_prompting", + "name": "ToolCoordinator::finish", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 952 + "line": 977 }, { - "name": "ToolCoordinator::handle_tool_result", + "name": "ToolCoordinator::dispatch", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1521 + "line": 1170 }, { - "name": "ToolCoordinator::handle_prompt_answer", + "name": "ToolCoordinator::on_step", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1786 + "line": 1276 }, { - "name": "ToolCoordinator::handle_prompt_cancelled", + "name": "ToolCoordinator::on_permission", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1846 + "line": 1326 }, { - "name": "ToolCoordinator::process_next_prompt", + "name": "ToolCoordinator::pump", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1974 + "line": 1360 }, { - "name": "ToolExecutor::execute", - "file": "crates/jp_cli/src/cmd/query/tool/executor.rs", - "line": 215 + "name": "ToolCoordinator::decide", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1418 + }, + { + "name": "ToolCoordinator::announce", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1471 + }, + { + "name": "ToolCoordinator::release", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1488 + }, + { + "name": "ToolCoordinator::route", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1562 + }, + { + "name": "ToolCoordinator::answer", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1659 + }, + { + "name": "ToolCoordinator::serve", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1673 + }, + { + "name": "ToolCoordinator::deliver", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1760 + }, + { + "name": "ToolCoordinator::close", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1811 + }, + { + "name": "ToolCoordinator::render_result", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1992 + }, + { + "name": "ToolCoordinator::preset_answer", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 2086 + }, + { + "name": "route", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 413 + }, + { + "name": "TerminalExecutorSource::create", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 557 + }, + { + "name": "PendingCall::next", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 730 + }, + { + "name": "PendingCall::receive", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 741 + }, + { + "name": "PendingCall::receive_agent", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 770 }, { "name": "Grep::run", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 180 + "line": 204 }, { "name": "Grep::collect_hits_for_id", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 339 + "line": 388 }, { "name": "Grep::render", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 450 + "line": 503 }, { "name": "Grep::render_hits", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 476 + "line": 529 }, { "name": "expand_scopes", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 719 + "line": 772 }, { "name": "collect_scope_hits", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 838 + "line": 894 }, { "name": "context_ranges", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 893 + "line": 951 }, { "name": "Row::windowed", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 996 + "line": 1054 }, { "name": "window_row", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 1059 + "line": 1117 }, { "name": "highlight", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 1136 + "line": 1194 }, { "name": "render_group_heading", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 1204 + "line": 1262 }, { "name": "Edit::run", @@ -2743,42 +2963,47 @@ { "name": "Edit::run_open_editor", "file": "crates/jp_cli/src/cmd/conversation/edit.rs", - "line": 124 + "line": 129 }, { "name": "Edit::run_property_edit", "file": "crates/jp_cli/src/cmd/conversation/edit.rs", - "line": 244 + "line": 258 }, { "name": "Compact::effective_rules", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 201 + "line": 203 }, { "name": "plan_rule_ranges", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 426 + "line": 428 }, { "name": "plan_compactions", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 579 + "line": 592 }, { "name": "timeline_lines", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 771 + "line": 784 + }, + { + "name": "Compact::preflight", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 932 }, { "name": "Compact::compact_one", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 913 + "line": 963 }, { "name": "Compact::preview_compaction", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 1026 + "line": 1085 }, { "name": "Rm::conversation_load_request", @@ -2813,17 +3038,17 @@ { "name": "generate_summary", "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", - "line": 44 + "line": 55 }, { "name": "summarize_stream", "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", - "line": 114 + "line": 128 }, { "name": "summarize_events", "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", - "line": 232 + "line": 247 }, { "name": "Fork::fork_each", @@ -2843,7 +3068,7 @@ { "name": "Title::title_one", "file": "crates/jp_cli/src/cmd/conversation/title.rs", - "line": 78 + "line": 80 }, { "name": "Unarchive::run", @@ -2868,7 +3093,7 @@ { "name": "Print::print_conversation", "file": "crates/jp_cli/src/cmd/conversation/print.rs", - "line": 138 + "line": 137 }, { "name": "Archive::conversation_load_request", @@ -2883,17 +3108,17 @@ { "name": "Use::run", "file": "crates/jp_cli/src/cmd/conversation/use_.rs", - "line": 67 + "line": 69 }, { "name": "Use::conversation_load_request", "file": "crates/jp_cli/src/cmd/conversation/use_.rs", - "line": 178 + "line": 180 }, { "name": "Use::run_filtered", "file": "crates/jp_cli/src/cmd/conversation/use_.rs", - "line": 190 + "line": 192 }, { "name": "ApprovalStore::load", @@ -2918,172 +3143,152 @@ { "name": "Commands::run", "file": "crates/jp_cli/src/cmd.rs", - "line": 65 + "line": 69 }, { "name": "Commands::name", "file": "crates/jp_cli/src/cmd.rs", - "line": 142 + "line": 152 }, { "name": "Error::from", "file": "crates/jp_cli/src/cmd.rs", - "line": 430 + "line": 443 }, { "name": "run", "file": "crates/jp_cli/src/lib.rs", - "line": 413 + "line": 410 }, { "name": "run_inner", "file": "crates/jp_cli/src/lib.rs", - "line": 591 + "line": 588 }, { "name": "drain_background_tasks", "file": "crates/jp_cli/src/lib.rs", - "line": 835 - }, - { - "name": "print_plugin_help_section", - "file": "crates/jp_cli/src/lib.rs", - "line": 899 + "line": 853 }, { "name": "parse_error", "file": "crates/jp_cli/src/lib.rs", - "line": 923 + "line": 916 }, { "name": "resolve_config", "file": "crates/jp_cli/src/lib.rs", - "line": 999 + "line": 992 }, { "name": "effective_cfg_overrides", "file": "crates/jp_cli/src/lib.rs", - "line": 1124 + "line": 1117 }, { "name": "load_workspace", "file": "crates/jp_cli/src/lib.rs", - "line": 1248 + "line": 1252 }, { "name": "TurnRenderer::new", "file": "crates/jp_cli/src/render/turn.rs", - "line": 110 + "line": 106 }, { "name": "TurnRenderer::render_turn", "file": "crates/jp_cli/src/render/turn.rs", - "line": 168 + "line": 156 }, { "name": "TurnRenderer::reconfigure", "file": "crates/jp_cli/src/render/turn.rs", - "line": 265 + "line": 253 }, { "name": "ToolRenderer::new", "file": "crates/jp_cli/src/render/tool.rs", - "line": 145 + "line": 130 }, { "name": "ToolRenderer::write_chrome", "file": "crates/jp_cli/src/render/tool.rs", - "line": 216 + "line": 208 }, { - "name": "ToolRenderer::render_approved", + "name": "ToolRenderer::render_custom_result", "file": "crates/jp_cli/src/render/tool.rs", "line": 291 }, - { - "name": "ToolRenderer::render_custom_tool_call", - "file": "crates/jp_cli/src/render/tool.rs", - "line": 315 - }, { "name": "ToolRenderer::start_progress", "file": "crates/jp_cli/src/render/tool.rs", - "line": 369 + "line": 323 }, { "name": "ToolRenderer::render_result", "file": "crates/jp_cli/src/render/tool.rs", - "line": 427 + "line": 381 }, { "name": "ToolRenderer::register", "file": "crates/jp_cli/src/render/tool.rs", - "line": 592 + "line": 546 }, { "name": "ToolRenderer::claim_preparing", "file": "crates/jp_cli/src/render/tool.rs", - "line": 652 + "line": 613 }, { "name": "format_args", "file": "crates/jp_cli/src/render/tool.rs", - "line": 717 - }, - { - "name": "format_args_custom", - "file": "crates/jp_cli/src/render/tool.rs", - "line": 814 + "line": 678 }, { "name": "ChatRenderer::render_reasoning", "file": "crates/jp_cli/src/render/chat.rs", - "line": 314 + "line": 340 }, { "name": "ChatRenderer::handle_event", "file": "crates/jp_cli/src/render/chat.rs", - "line": 437 + "line": 480 }, { "name": "ChatRenderer::print_code", "file": "crates/jp_cli/src/render/chat.rs", - "line": 510 + "line": 553 }, { "name": "ChatRenderer::drain_buffer", "file": "crates/jp_cli/src/render/chat.rs", - "line": 726 + "line": 769 }, { "name": "ChatRenderer::enter_tool_call", "file": "crates/jp_cli/src/render/chat.rs", - "line": 827 + "line": 926 }, { "name": "build_role_header_line", "file": "crates/jp_cli/src/render/chat.rs", - "line": 910 + "line": 1016 }, { "name": "indent_lines", "file": "crates/jp_cli/src/render/chat.rs", - "line": 956 - }, - { - "name": "Matcher::is_match", - "file": "crates/jp_cli/src/shared/search.rs", - "line": 295 + "line": 1062 }, { "name": "Matcher::find_spans", "file": "crates/jp_cli/src/shared/search.rs", - "line": 324 + "line": 366 }, { - "name": "id_matches", + "name": "merge_overlaps", "file": "crates/jp_cli/src/shared/search.rs", - "line": 381 + "line": 448 }, { "name": "parse_schema_dsl", @@ -3113,17 +3318,17 @@ { "name": "open", "file": "crates/jp_cli/src/editor.rs", - "line": 223 + "line": 234 }, { "name": "edit_query", "file": "crates/jp_cli/src/editor.rs", - "line": 277 + "line": 288 }, { "name": "build_history_text", "file": "crates/jp_cli/src/editor.rs", - "line": 349 + "line": 462 }, { "name": "Ctx::configure_active_mcp_servers", @@ -3148,12 +3353,12 @@ { "name": "QueryDocument<'_>::fmt", "file": "crates/jp_cli/src/editor/parser.rs", - "line": 42 + "line": 52 }, { "name": "QueryDocument<'s>::try_from", "file": "crates/jp_cli/src/editor/parser.rs", - "line": 122 + "line": 136 }, { "name": "override_to_record", @@ -3178,22 +3383,22 @@ { "name": "config_search_roots", "file": "crates/jp_cli/src/config_pipeline.rs", - "line": 384 + "line": 390 }, { "name": "resolve_cfg_args", "file": "crates/jp_cli/src/config_pipeline.rs", - "line": 408 + "line": 414 }, { "name": "apply_cfg_args", "file": "crates/jp_cli/src/config_pipeline.rs", - "line": 521 + "line": 527 }, { "name": "build_partial_from_cfg_args", "file": "crates/jp_cli/src/config_pipeline.rs", - "line": 568 + "line": 577 }, { "name": "Client::get_tool", @@ -3203,27 +3408,137 @@ { "name": "Client::run_services", "file": "crates/jp_mcp/src/client.rs", - "line": 263 + "line": 265 }, { "name": "Client::start_services", "file": "crates/jp_mcp/src/client.rs", - "line": 298 + "line": 300 }, { "name": "Client::try_create_client", "file": "crates/jp_mcp/src/client.rs", - "line": 378 + "line": 380 }, { "name": "Client::create_client", "file": "crates/jp_mcp/src/client.rs", - "line": 400 + "line": 402 }, { "name": "render_stderr_tail", "file": "crates/jp_mcp/src/client.rs", - "line": 560 + "line": 562 + }, + { + "name": "Service::new", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 438 + }, + { + "name": "Service::start_call", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 504 + }, + { + "name": "validate_arguments", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 706 + }, + { + "name": "run_call", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 740 + }, + { + "name": "describe", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 854 + }, + { + "name": "attempt", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 993 + }, + { + "name": "ask_for_input", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 1066 + }, + { + "name": "Handler::call_tool", + "file": "crates/jp_mcp/src/server/http.rs", + "line": 318 + }, + { + "name": "from_config", + "file": "crates/jp_mcp/src/server/json_schema.rs", + "line": 29 + }, + { + "name": "with_overrides", + "file": "crates/jp_mcp/src/server/json_schema.rs", + "line": 57 + }, + { + "name": "node_with_override", + "file": "crates/jp_mcp/src/server/json_schema.rs", + "line": 121 + }, + { + "name": "apply_config_fields", + "file": "crates/jp_mcp/src/server/json_schema.rs", + "line": 159 + }, + { + "name": "to_mcp", + "file": "crates/jp_mcp/src/server/result.rs", + "line": 128 + }, + { + "name": "to_content", + "file": "crates/jp_mcp/src/server/result.rs", + "line": 168 + }, + { + "name": "DescribeTools::execute", + "file": "crates/jp_mcp/src/server/builtin/describe_tools.rs", + "line": 78 + }, + { + "name": "run_tool_command", + "file": "crates/jp_mcp/src/server.rs", + "line": 429 + }, + { + "name": "parse_command_output", + "file": "crates/jp_mcp/src/server.rs", + "line": 551 + }, + { + "name": "execute", + "file": "crates/jp_mcp/src/server.rs", + "line": 700 + }, + { + "name": "execute_local", + "file": "crates/jp_mcp/src/server.rs", + "line": 747 + }, + { + "name": "tool_definitions", + "file": "crates/jp_mcp/src/server.rs", + "line": 912 + }, + { + "name": "resolve_tool", + "file": "crates/jp_mcp/src/server.rs", + "line": 965 + }, + { + "name": "resolve_mcp_tool", + "file": "crates/jp_mcp/src/server.rs", + "line": 989 }, { "name": "MockEditorBackend::edit_text", @@ -3263,7 +3578,7 @@ { "name": "fetch", "file": "crates/jp_attachment_agentic_shepherd/src/lib.rs", - "line": 101 + "line": 96 }, { "name": "Formatter::render_terminal", @@ -3433,47 +3748,72 @@ { "name": "GithubAttachment::get", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 126 + "line": 125 }, { "name": "parse_uri", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 180 + "line": 175 }, { "name": "fetch_pr_diff", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 312 + "line": 307 }, { "name": "fetch_all_changed_files", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 396 + "line": 391 }, { "name": "synthesize_diff_from_files", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 447 + "line": 442 }, { "name": "compile_excludes", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 560 + "line": 555 }, { "name": "filter_diff", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 582 + "line": 577 }, { "name": "render_diff_header", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 634 + "line": 629 }, { "name": "render_reviews", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 718 + "line": 713 + }, + { + "name": "main", + "file": "crates/jp_process/src/bin/process_probe.rs", + "line": 34 + }, + { + "name": "repeat", + "file": "crates/jp_process/src/bin/process_probe.rs", + "line": 110 + }, + { + "name": "SystemProcessRunner::execute", + "file": "crates/jp_process/src/system.rs", + "line": 30 + }, + { + "name": "MockProcessRunner::drop", + "file": "crates/jp_process/src/mock.rs", + "line": 63 + }, + { + "name": "McpResources::get", + "file": "crates/jp_attachment_mcp_resources/src/lib.rs", + "line": 90 }, { "name": "Context::resolve", @@ -3490,6 +3830,46 @@ "file": "crates/jp_tool/src/access.rs", "line": 719 }, + { + "name": "validate_node", + "file": "crates/jp_tool/src/schema.rs", + "line": 57 + }, + { + "name": "validate_node_inner", + "file": "crates/jp_tool/src/schema.rs", + "line": 74 + }, + { + "name": "has_unconstrained_node", + "file": "crates/jp_tool/src/schema.rs", + "line": 256 + }, + { + "name": "coerce_object", + "file": "crates/jp_tool/src/definition.rs", + "line": 173 + }, + { + "name": "coerce_value", + "file": "crates/jp_tool/src/definition.rs", + "line": 192 + }, + { + "name": "apply_defaults_to", + "file": "crates/jp_tool/src/definition.rs", + "line": 229 + }, + { + "name": "validate_arguments_against", + "file": "crates/jp_tool/src/definition.rs", + "line": 273 + }, + { + "name": "ToolResult::from", + "file": "crates/jp_tool/src/content.rs", + "line": 472 + }, { "name": "Terminal::open", "file": "crates/jp_pty/src/terminal.rs", @@ -3506,19 +3886,34 @@ "line": 525 }, { - "name": "StreamError::from_eventsource", + "name": "ArgumentDecoding::apply", + "file": "crates/jp_llm/src/decoding.rs", + "line": 34 + }, + { + "name": "ArgumentDecoding::apply_value", + "file": "crates/jp_llm/src/decoding.rs", + "line": 51 + }, + { + "name": "ArgumentDecoders::insert", + "file": "crates/jp_llm/src/decoding.rs", + "line": 71 + }, + { + "name": "StreamError::from_http", "file": "crates/jp_llm/src/error.rs", - "line": 224 + "line": 351 }, { "name": "extract_retry_from_text", "file": "crates/jp_llm/src/error.rs", - "line": 667 + "line": 792 }, { "name": "extract_retry_after", "file": "crates/jp_llm/src/error.rs", - "line": 738 + "line": 863 }, { "name": "EventChain::ingest_normal", @@ -3528,117 +3923,122 @@ { "name": "EventChain::ingest_merging", "file": "crates/jp_llm/src/stream/chain.rs", - "line": 125 + "line": 129 }, { "name": "EventChain::trim_buffer", "file": "crates/jp_llm/src/stream/chain.rs", - "line": 175 + "line": 183 }, { "name": "EventChain::attempt_merge", "file": "crates/jp_llm/src/stream/chain.rs", - "line": 217 + "line": 225 }, { "name": "reconstruct_text", "file": "crates/jp_llm/src/stream/chain.rs", - "line": 309 + "line": 317 }, { "name": "get_provider", "file": "crates/jp_llm/src/provider.rs", - "line": 50 + "line": 89 + }, + { + "name": "output_schema_is_open", + "file": "crates/jp_llm/src/provider.rs", + "line": 180 + }, + { + "name": "number_ids", + "file": "crates/jp_llm/src/provider.rs", + "line": 305 }, { "name": "map_candidate", "file": "crates/jp_llm/src/provider/google.rs", - "line": 731 + "line": 764 }, { "name": "process_schema", "file": "crates/jp_llm/src/provider/google.rs", - "line": 914 + "line": 947 }, { "name": "StreamError::from", "file": "crates/jp_llm/src/provider/google.rs", - "line": 1224 + "line": 1257 }, { "name": "prepare_soft_force_retry_request", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 302 + "line": 310 }, { "name": "MultiProviderMetadata::from_details", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 408 + "line": 416 }, { "name": "Map::from", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 473 + "line": 481 }, { "name": "map_event", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 523 + "line": 531 }, { "name": "prepare_forced_tool_fallback", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 684 + "line": 692 }, { "name": "create_request", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 739 + "line": 771 }, { "name": "RequestMessages::try_from", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 1024 + "line": 1055 }, { "name": "StreamError::from", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 1225 + "line": 1256 }, { "name": "fetch_public_catalog", "file": "crates/jp_llm/src/provider/cerebras.rs", - "line": 279 + "line": 282 + }, + { + "name": "create_request", + "file": "crates/jp_llm/src/provider/cerebras.rs", + "line": 477 }, { "name": "process_schema", "file": "crates/jp_llm/src/provider/cerebras.rs", - "line": 608 + "line": 653 }, { "name": "handle_sse_event_sync", "file": "crates/jp_llm/src/provider/cerebras.rs", - "line": 813 + "line": 858 }, { "name": "map_event", "file": "crates/jp_llm/src/provider/ollama.rs", - "line": 148 + "line": 149 }, { "name": "create_request", "file": "crates/jp_llm/src/provider/ollama.rs", - "line": 257 - }, - { - "name": "handle_sse_event_sync", - "file": "crates/jp_llm/src/provider/llamacpp.rs", - "line": 193 - }, - { - "name": "drain_extractor", - "file": "crates/jp_llm/src/provider/llamacpp.rs", - "line": 397 + "line": 258 }, { "name": "MockProvider::with_chunked_message", @@ -3650,210 +4050,250 @@ "file": "crates/jp_llm/src/provider/mock.rs", "line": 242 }, + { + "name": "switch_persists", + "file": "crates/jp_llm/src/provider/anthropic/resolve.rs", + "line": 586 + }, + { + "name": "read_output", + "file": "crates/jp_llm/src/provider/anthropic/acp.rs", + "line": 503 + }, + { + "name": "State::sdk", + "file": "crates/jp_llm/src/provider/anthropic/acp/protocol.rs", + "line": 423 + }, + { + "name": "State::stream_event", + "file": "crates/jp_llm/src/provider/anthropic/acp/protocol.rs", + "line": 623 + }, + { + "name": "stream", + "file": "crates/jp_llm/src/provider/anthropic/acp/transport.rs", + "line": 46 + }, + { + "name": "drive", + "file": "crates/jp_llm/src/provider/anthropic/acp/transport.rs", + "line": 372 + }, + { + "name": "PreparedRequest::new", + "file": "crates/jp_llm/src/provider/anthropic/acp/transcript.rs", + "line": 44 + }, + { + "name": "environment", + "file": "crates/jp_llm/src/provider/anthropic/acp/options.rs", + "line": 160 + }, + { + "name": "tap", + "file": "crates/jp_llm/src/provider/anthropic/acp/cassette.rs", + "line": 155 + }, + { + "name": "recorder", + "file": "crates/jp_llm/src/provider/anthropic/acp/cassette.rs", + "line": 167 + }, + { + "name": "serve", + "file": "crates/jp_llm/src/provider/anthropic/acp/cassette.rs", + "line": 308 + }, + { + "name": "command", + "file": "crates/jp_llm/src/provider/anthropic/acp/process.rs", + "line": 46 + }, + { + "name": "handle_sse_event_sync", + "file": "crates/jp_llm/src/provider/openai_compat.rs", + "line": 411 + }, + { + "name": "drain_extractor", + "file": "crates/jp_llm/src/provider/openai_compat.rs", + "line": 659 + }, + { + "name": "Anthropic::mcp_tool_metadata", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 422 + }, + { + "name": "Anthropic::chat_completion_stream", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 516 + }, { "name": "force_tool_retry", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 574 + "line": 1087 }, { "name": "soft_force_retry", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 655 + "line": 1169 }, { "name": "resolve_cache_control", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 1171 + "line": 1712 }, { "name": "create_request", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 1202 + "line": 1744 }, { "name": "map_event", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 1942 - }, - { - "name": "Anthropic::try_from", - "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 1982 + "line": 2646 }, { "name": "transform_schema", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 2017 + "line": 2704 }, { "name": "map_content_start", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 2429 + "line": 3121 }, { "name": "map_content_delta", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 2470 + "line": 3162 }, { "name": "StreamError::from", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 2515 + "line": 3207 }, { - "name": "Openai::chat_completion_stream", - "file": "crates/jp_llm/src/provider/openai.rs", - "line": 121 + "name": "walk_chain", + "file": "crates/jp_llm/src/provider/openai/resolve.rs", + "line": 664 }, { - "name": "synthesize_non_streaming_output_item_events", - "file": "crates/jp_llm/src/provider/openai.rs", - "line": 194 + "name": "DeviceAuth::poll_interval", + "file": "crates/jp_llm/src/provider/openai/oauth.rs", + "line": 303 }, { - "name": "map_event", + "name": "Openai::clients", "file": "crates/jp_llm/src/provider/openai.rs", - "line": 1405 + "line": 422 }, { - "name": "classify_stream_error", + "name": "Openai::redeem_reset_credit", "file": "crates/jp_llm/src/provider/openai.rs", - "line": 1618 + "line": 489 }, { - "name": "process_strict", + "name": "Openai::model_details", "file": "crates/jp_llm/src/provider/openai.rs", - "line": 1760 + "line": 582 }, { - "name": "run_tool_command", - "file": "crates/jp_llm/src/tool.rs", - "line": 484 + "name": "Openai::models", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 618 }, { - "name": "forward_stderr", - "file": "crates/jp_llm/src/tool.rs", - "line": 598 + "name": "synthesize_non_streaming_output_item_events", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1080 }, { - "name": "parse_command_output", - "file": "crates/jp_llm/src/tool.rs", - "line": 634 + "name": "create_request", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1381 }, { - "name": "ToolDefinition::execute", - "file": "crates/jp_llm/src/tool.rs", - "line": 793 + "name": "map_error", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 2685 }, { - "name": "ToolDefinition::execute_local", - "file": "crates/jp_llm/src/tool.rs", - "line": 853 + "name": "map_event", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 2817 }, { - "name": "coerce_object", - "file": "crates/jp_llm/src/tool.rs", - "line": 1105 + "name": "classify_stream_error", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3030 }, { - "name": "coerce_value", - "file": "crates/jp_llm/src/tool.rs", - "line": 1113 + "name": "ensure_flattened", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3152 }, { - "name": "apply_defaults_to", - "file": "crates/jp_llm/src/tool.rs", - "line": 1150 + "name": "flatten_all_of", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3185 }, { - "name": "validate_arguments_against", - "file": "crates/jp_llm/src/tool.rs", - "line": 1188 + "name": "fits_strict_subset", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3201 }, { - "name": "tool_definitions", - "file": "crates/jp_llm/src/tool.rs", - "line": 1246 + "name": "flatten_node", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3207 }, { - "name": "resolve_tool", - "file": "crates/jp_llm/src/tool.rs", - "line": 1299 + "name": "process_strict", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3333 }, { - "name": "resolve_mcp_tool", - "file": "crates/jp_llm/src/tool.rs", - "line": 1323 + "name": "parameters_with_decoding", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3514 }, { "name": "generate", "file": "crates/jp_llm/src/title.rs", - "line": 127 + "line": 131 }, { "name": "title_instructions", "file": "crates/jp_llm/src/title.rs", - "line": 256 + "line": 261 }, { "name": "structured_data", "file": "crates/jp_llm/src/event_builder.rs", - "line": 53 + "line": 59 }, { "name": "EventBuilder::handle_part", "file": "crates/jp_llm/src/event_builder.rs", - "line": 137 + "line": 148 }, { "name": "collect_with_retry", "file": "crates/jp_llm/src/retry.rs", - "line": 65 + "line": 79 }, { "name": "retry_delay", "file": "crates/jp_llm/src/retry.rs", - "line": 149 + "line": 181 }, { "name": "exponential_backoff", "file": "crates/jp_llm/src/retry.rs", - "line": 184 - }, - { - "name": "from_config", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 37 - }, - { - "name": "with_overrides", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 60 - }, - { - "name": "validate_node", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 121 - }, - { - "name": "validate_node_inner", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 138 - }, - { - "name": "node_with_override", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 666 - }, - { - "name": "apply_config_fields", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 704 - }, - { - "name": "DescribeTools::execute", - "file": "crates/jp_llm/src/tool/builtin/describe_tools.rs", - "line": 78 + "line": 216 }, { "name": "Id::is_valid", @@ -3870,20 +4310,15 @@ "file": "crates/jp_github/src/handlers.rs", "line": 342 }, - { - "name": "build_http_client", - "file": "crates/jp_github/src/client.rs", - "line": 340 - }, { "name": "BearNotes::query_to_uri", "file": "crates/jp_attachment_bear_note/src/lib.rs", - "line": 27 + "line": 26 }, { "name": "BearNotes::get", "file": "crates/jp_attachment_bear_note/src/lib.rs", - "line": 155 + "line": 154 } ] } \ No newline at end of file diff --git a/.config/rustqual/baseline.json b/.config/rustqual/baseline.json index a316ccf59..d3e340b91 100644 --- a/.config/rustqual/baseline.json +++ b/.config/rustqual/baseline.json @@ -1,94 +1,94 @@ { "version": 2, - "quality_score": 0.6833534994426864, - "iosp_score": 0.9043294351828813, - "violations": 769, - "total": 11178, - "complexity_warnings": 142, - "magic_number_warnings": 193, + "quality_score": 0.7018404307284256, + "iosp_score": 0.9134751773049645, + "violations": 854, + "total": 13648, + "complexity_warnings": 163, + "magic_number_warnings": 238, "nesting_depth_warnings": 27, - "function_length_warnings": 355, - "unsafe_warnings": 62, - "error_handling_warnings": 158, + "function_length_warnings": 422, + "unsafe_warnings": 74, + "error_handling_warnings": 194, "duplicate_groups": 0, "dead_code_warnings": 0, "dead_type_warnings": 0, "fragment_groups": 0, - "boilerplate_warnings": 264, - "srp_struct_warnings": 33, - "srp_module_warnings": 166, + "boilerplate_warnings": 285, + "srp_struct_warnings": 46, + "srp_module_warnings": 206, "wildcard_import_warnings": 0, "sdp_violations": 0, "coupling_warnings": 0, "coupling_cycles": 0, "tq_no_assertion_warnings": 0, - "tq_no_sut_warnings": 14, - "tq_untested_warnings": 96, + "tq_no_sut_warnings": 19, + "tq_untested_warnings": 95, "tq_uncovered_warnings": 0, "tq_untested_logic_warnings": 0, - "structural_srp_warnings": 41, - "structural_coupling_warnings": 7, - "total_findings": 2404, + "structural_srp_warnings": 47, + "structural_coupling_warnings": 8, + "total_findings": 2786, "violation_details": [ { "name": "ConversationStream::config_unsets", "file": "crates/jp_conversation/src/stream.rs", - "line": 246 + "line": 247 }, { "name": "ConversationStream::trim_chat_request", "file": "crates/jp_conversation/src/stream.rs", - "line": 274 + "line": 281 }, { "name": "ConversationStream::current_turn_mut", "file": "crates/jp_conversation/src/stream.rs", - "line": 576 + "line": 583 }, { "name": "ConversationStream::pop_while", "file": "crates/jp_conversation/src/stream.rs", - "line": 809 + "line": 816 }, { "name": "ConversationStream::remove_orphaned_inquiry_responses", "file": "crates/jp_conversation/src/stream.rs", - "line": 988 + "line": 995 }, { "name": "ConversationStream::remove_orphaned_inquiry_requests", "file": "crates/jp_conversation/src/stream.rs", - "line": 1030 + "line": 1037 }, { "name": "ConversationStream::normalize_turn_starts", "file": "crates/jp_conversation/src/stream.rs", - "line": 1077 + "line": 1084 }, { "name": "ConversationStream::sanitize_orphaned_tool_calls", "file": "crates/jp_conversation/src/stream.rs", - "line": 1164 + "line": 1171 }, { "name": "ConversationStream::from_legacy_events", "file": "crates/jp_conversation/src/stream.rs", - "line": 1573 + "line": 1580 }, { "name": "strip_schema", "file": "crates/jp_conversation/src/compat.rs", - "line": 256 + "line": 295 }, { "name": "strip_schema_type", "file": "crates/jp_conversation/src/compat.rs", - "line": 272 + "line": 314 }, { "name": "strip_struct", "file": "crates/jp_conversation/src/compat.rs", - "line": 436 + "line": 487 }, { "name": "Documents::try_to_xml", @@ -123,32 +123,32 @@ { "name": "affected_items", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 292 + "line": 295 }, { "name": "apply_mechanical", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 386 + "line": 389 }, { "name": "collect_turn_origins", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 441 + "line": 444 }, { "name": "assign_turn_indices", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 473 + "line": 476 }, { "name": "strip_tool_request", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 602 + "line": 630 }, { "name": "build_tool_calls", "file": "crates/jp_conversation/src/stream/projection.rs", - "line": 657 + "line": 685 }, { "name": "EventPayload::deserialize", @@ -248,47 +248,57 @@ { "name": "Printer::status_region", "file": "crates/jp_printer/src/printer.rs", - "line": 277 + "line": 286 + }, + { + "name": "Printer::error_println", + "file": "crates/jp_printer/src/printer.rs", + "line": 472 + }, + { + "name": "Printer::send_error", + "file": "crates/jp_printer/src/printer.rs", + "line": 491 }, { "name": "Printer::track_pending", "file": "crates/jp_printer/src/printer.rs", - "line": 670 + "line": 736 }, { "name": "Printer::send", "file": "crates/jp_printer/src/printer.rs", - "line": 733 + "line": 799 }, { "name": "Worker::run", "file": "crates/jp_printer/src/printer.rs", - "line": 1003 + "line": 1171 }, { "name": "Worker::process_task_instant", "file": "crates/jp_printer/src/printer.rs", - "line": 1124 + "line": 1292 }, { "name": "Worker::process_task", "file": "crates/jp_printer/src/printer.rs", - "line": 1173 + "line": 1341 }, { "name": "Worker::write_task", "file": "crates/jp_printer/src/printer.rs", - "line": 1189 + "line": 1357 }, { "name": "Sink::new", "file": "crates/jp_printer/src/printer.rs", - "line": 1278 + "line": 1446 }, { "name": "DelayControl::effective_delay", "file": "crates/jp_printer/src/printer.rs", - "line": 1590 + "line": 1758 }, { "name": "Content::fmt", @@ -383,27 +393,37 @@ { "name": "Storage::persist_conversation", "file": "crates/jp_storage/src/lib.rs", - "line": 195 + "line": 208 + }, + { + "name": "Storage::sync_projection", + "file": "crates/jp_storage/src/lib.rs", + "line": 448 }, { "name": "adopt_partition", "file": "crates/jp_storage/src/lib.rs", - "line": 791 + "line": 818 }, { "name": "adopt_conversation_dir", "file": "crates/jp_storage/src/lib.rs", - "line": 812 + "line": 839 }, { "name": "import_external_copy", "file": "crates/jp_storage/src/lib.rs", - "line": 866 + "line": 889 + }, + { + "name": "import_conversation_dir", + "file": "crates/jp_storage/src/lib.rs", + "line": 913 }, { "name": "copy_dir_all", "file": "crates/jp_storage/src/lib.rs", - "line": 919 + "line": 980 }, { "name": "FsStorageBackend::sanitize", @@ -433,62 +453,62 @@ { "name": "collapse_blank_lines", "file": "crates/jp_attachment_http_content/src/lib.rs", - "line": 189 + "line": 180 + }, + { + "name": "Registry::from", + "file": "crates/jp_plugin/src/registry.rs", + "line": 46 }, { "name": "PluginKind::binaries", "file": "crates/jp_plugin/src/registry.rs", - "line": 113 + "line": 169 }, { "name": "ProtocolLogLayer::on_event", "file": "crates/plugins/command/serve-web/src/log_layer.rs", - "line": 90 + "line": 94 }, { "name": "PluginClient::start_conversation", "file": "crates/plugins/command/serve-web/src/client.rs", - "line": 199 + "line": 201 }, { "name": "render_events", "file": "crates/plugins/command/serve-web/src/render.rs", "line": 158 }, + { + "name": "run_server", + "file": "crates/plugins/command/serve-web/src/lib.rs", + "line": 95 + }, { "name": "serve", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 116 + "line": 127 }, { "name": "TurnForm::parse", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 317 + "line": 366 }, { "name": "start_turn", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 348 + "line": 400 }, { "name": "NewConversationForm::parse", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 497 + "line": 662 }, { "name": "start_conversation", "file": "crates/plugins/command/serve-web/src/routes.rs", - "line": 531 - }, - { - "name": "run_server", - "file": "crates/plugins/command/serve-web/src/main.rs", - "line": 111 - }, - { - "name": "group_by_namespace", - "file": "crates/plugins/command/serve-web/src/views/new.rs", - "line": 135 + "line": 699 }, { "name": "SystemLauncher::launch", @@ -497,43 +517,43 @@ }, { "name": "handle_command", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 322 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 310 }, { "name": "compose_missing", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 423 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 411 }, { "name": "with_show_alias", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 815 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 803 }, { "name": "migrate", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 949 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 937 }, { "name": "execute", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 1182 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 1170 }, { "name": "vocabulary_listing", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 1462 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 1450 }, { "name": "row", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 1636 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 1624 }, { "name": "read_message", - "file": "crates/plugins/command/ticket/src/main.rs", - "line": 1698 + "file": "crates/plugins/command/ticket/src/lib.rs", + "line": 1684 }, { "name": "project_turns", @@ -623,22 +643,22 @@ { "name": "PartialCommandConfig::assign", "file": "crates/jp_config/src/types/command.rs", - "line": 274 + "line": 300 }, { "name": "split_command_words", "file": "crates/jp_config/src/types/command.rs", - "line": 321 + "line": 347 }, { "name": "mask_template_spans", "file": "crates/jp_config/src/types/command.rs", - "line": 344 + "line": 370 }, { "name": "restore_spans", "file": "crates/jp_config/src/types/command.rs", - "line": 436 + "line": 462 }, { "name": "PolicySpec

::deserialize", @@ -673,7 +693,7 @@ { "name": "PartialMergeableMap::delta", "file": "crates/jp_config/src/types/map.rs", - "line": 244 + "line": 226 }, { "name": "merge_values", @@ -700,6 +720,11 @@ "file": "crates/jp_config/src/types/json_value.rs", "line": 280 }, + { + "name": "render_available", + "file": "crates/jp_config/src/types/api_key_env.rs", + "line": 63 + }, { "name": "PartialInterruptConfig::assign", "file": "crates/jp_config/src/interrupt.rs", @@ -723,7 +748,7 @@ { "name": "PartialInquiryConfig::assign", "file": "crates/jp_config/src/conversation.rs", - "line": 233 + "line": 241 }, { "name": "collect_config_segments", @@ -743,27 +768,37 @@ { "name": "PartialCommandPluginConfig::assign", "file": "crates/jp_config/src/plugins/command.rs", - "line": 90 + "line": 86 + }, + { + "name": "AuthEntry::validate_chain", + "file": "crates/jp_config/src/providers/llm.rs", + "line": 166 }, { "name": "PartialLlmProviderConfig::assign", "file": "crates/jp_config/src/providers/llm.rs", - "line": 101 + "line": 295 }, { "name": "PartialGoogleConfig::assign", "file": "crates/jp_config/src/providers/llm/google.rs", - "line": 26 + "line": 75 }, { "name": "PartialOpenrouterConfig::assign", "file": "crates/jp_config/src/providers/llm/openrouter.rs", - "line": 35 + "line": 84 + }, + { + "name": "PartialVllmConfig::assign", + "file": "crates/jp_config/src/providers/llm/vllm.rs", + "line": 87 }, { "name": "PartialCerebrasConfig::assign", "file": "crates/jp_config/src/providers/llm/cerebras.rs", - "line": 50 + "line": 99 }, { "name": "PartialOllamaConfig::assign", @@ -778,22 +813,17 @@ { "name": "PartialDeepseekConfig::assign", "file": "crates/jp_config/src/providers/llm/deepseek.rs", - "line": 26 - }, - { - "name": "AnthropicConfig::validate", - "file": "crates/jp_config/src/providers/llm/anthropic.rs", - "line": 86 + "line": 75 }, { "name": "PartialAnthropicConfig::assign", "file": "crates/jp_config/src/providers/llm/anthropic.rs", - "line": 109 + "line": 157 }, { "name": "PartialOpenaiConfig::assign", "file": "crates/jp_config/src/providers/llm/openai.rs", - "line": 34 + "line": 122 }, { "name": "PartialStdioConfig::assign", @@ -808,17 +838,17 @@ { "name": "PartialAppConfig::assign", "file": "crates/jp_config/src/lib.rs", - "line": 234 + "line": 235 }, { "name": "AppConfig::fields", "file": "crates/jp_config/src/lib.rs", - "line": 500 + "line": 501 }, { "name": "AppConfig::addressable", "file": "crates/jp_config/src/lib.rs", - "line": 541 + "line": 542 }, { "name": "PartialStyleConfig::assign", @@ -828,7 +858,7 @@ { "name": "PartialPluginsConfig::assign", "file": "crates/jp_config/src/plugins.rs", - "line": 46 + "line": 44 }, { "name": "PartialCodeConfig::assign", @@ -903,12 +933,12 @@ { "name": "PartialEditorConfig::assign", "file": "crates/jp_config/src/editor.rs", - "line": 118 + "line": 116 }, { "name": "PartialInlineEditorConfig::assign", "file": "crates/jp_config/src/editor.rs", - "line": 174 + "line": 172 }, { "name": "PartialModelIdOrAliasConfig::assign", @@ -945,25 +975,20 @@ "file": "crates/jp_config/src/model/id/alias.rs", "line": 20 }, - { - "name": "deserialize_collecting_other", - "file": "crates/jp_config/src/model/parameters.rs", - "line": 179 - }, { "name": "PartialParametersConfig::assign", "file": "crates/jp_config/src/model/parameters.rs", - "line": 219 + "line": 215 }, { "name": "PartialReasoningConfig::assign", "file": "crates/jp_config/src/model/parameters.rs", - "line": 387 + "line": 388 }, { "name": "PartialCustomReasoningConfig::assign", "file": "crates/jp_config/src/model/parameters.rs", - "line": 466 + "line": 467 }, { "name": "ConfigFile::merge_delta", @@ -1028,7 +1053,7 @@ { "name": "PartialModelConfig::assign", "file": "crates/jp_config/src/model.rs", - "line": 41 + "line": 43 }, { "name": "PartialGenerateConfig::assign", @@ -1048,17 +1073,17 @@ { "name": "PartialToolConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 629 + "line": 627 }, { "name": "PartialToolParameterConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 862 + "line": 860 }, { "name": "PartialEnableConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 1861 + "line": 1862 }, { "name": "PartialTitleConfig::assign", @@ -1073,42 +1098,47 @@ { "name": "PartialLabelConfig::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 300 + "line": 302 }, { "name": "PartialLabelObject::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 389 + "line": 391 }, { "name": "PartialLabelValue::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 439 + "line": 441 }, { "name": "PartialLabelCommand::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 481 + "line": 483 }, { "name": "PartialApplyOn::assign", "file": "crates/jp_config/src/conversation/label.rs", - "line": 509 + "line": 511 }, { "name": "PartialCompactionConfig::assign", "file": "crates/jp_config/src/conversation/compaction.rs", "line": 76 }, + { + "name": "PartialCompactionConfig::delta", + "file": "crates/jp_config/src/conversation/compaction.rs", + "line": 88 + }, { "name": "PartialCompactionRuleConfig::assign", "file": "crates/jp_config/src/conversation/compaction.rs", - "line": 298 + "line": 291 }, { "name": "PartialSummaryConfig::assign", "file": "crates/jp_config/src/conversation/compaction.rs", - "line": 384 + "line": 377 }, { "name": "PartialAccessConfig::assign", @@ -1183,32 +1213,32 @@ { "name": "Workspace::unarchive_conversation", "file": "crates/jp_workspace/src/lib.rs", - "line": 927 + "line": 947 }, { "name": "Workspace::sync_conversation", "file": "crates/jp_workspace/src/lib.rs", - "line": 1035 + "line": 1055 }, { "name": "Workspace::ensure_all_metadata_loaded", "file": "crates/jp_workspace/src/lib.rs", - "line": 1070 + "line": 1090 }, { "name": "Workspace::test_lock", "file": "crates/jp_workspace/src/lib.rs", - "line": 1101 + "line": 1121 }, { "name": "maybe_init_conversation", "file": "crates/jp_workspace/src/lib.rs", - "line": 1143 + "line": 1163 }, { "name": "maybe_init_events", "file": "crates/jp_workspace/src/lib.rs", - "line": 1164 + "line": 1184 }, { "name": "upsert_root", @@ -1228,22 +1258,22 @@ { "name": "create", "file": "crates/internal/ticket/src/store.rs", - "line": 169 + "line": 174 }, { "name": "vocabulary", "file": "crates/internal/ticket/src/store.rs", - "line": 291 + "line": 296 }, { "name": "import", "file": "crates/internal/ticket/src/store.rs", - "line": 394 + "line": 399 }, { "name": "slug", "file": "crates/internal/ticket/src/store.rs", - "line": 723 + "line": 728 }, { "name": "escape", @@ -1263,27 +1293,27 @@ { "name": "FileContent::add", "file": "crates/jp_attachment_file_content/src/lib.rs", - "line": 39 + "line": 38 }, { "name": "FileContent::get", "file": "crates/jp_attachment_file_content/src/lib.rs", - "line": 96 + "line": 95 }, { "name": "uri_to_pattern", "file": "crates/jp_attachment_file_content/src/lib.rs", - "line": 309 + "line": 304 }, { "name": "Command::to_uri", "file": "crates/jp_attachment_cmd_output/src/lib.rs", - "line": 32 + "line": 31 }, { "name": "Commands::get", "file": "crates/jp_attachment_cmd_output/src/lib.rs", - "line": 109 + "line": 108 }, { "name": "Labels::from_tokens_lossy", @@ -1325,6 +1355,36 @@ "file": "crates/jp_test/src/mock.rs", "line": 142 }, + { + "name": "Client::post_stream", + "file": "crates/contrib/async-anthropic/src/client.rs", + "line": 277 + }, + { + "name": "handle_response", + "file": "crates/contrib/async-anthropic/src/client.rs", + "line": 322 + }, + { + "name": "response_error", + "file": "crates/contrib/async-anthropic/src/client.rs", + "line": 337 + }, + { + "name": "UnifiedRateLimit::is_empty", + "file": "crates/contrib/async-anthropic/src/errors.rs", + "line": 204 + }, + { + "name": "request_id", + "file": "crates/contrib/async-anthropic/src/bearer.rs", + "line": 100 + }, + { + "name": "merge_betas", + "file": "crates/contrib/async-anthropic/src/bearer.rs", + "line": 125 + }, { "name": "partialize_schema", "file": "crates/contrib/schematic/src/internal.rs", @@ -1755,11 +1815,6 @@ "file": "crates/contrib/comfort/src/sentence.rs", "line": 274 }, - { - "name": "is_abbreviation_ending", - "file": "crates/contrib/comfort/src/sentence.rs", - "line": 294 - }, { "name": "workspace_files", "file": "crates/contrib/comfort/src/walk.rs", @@ -1918,12 +1973,12 @@ { "name": "Variant<'_>::from", "file": "crates/contrib/schematic_macros/src/config_enum/variant.rs", - "line": 53 + "line": 63 }, { "name": "Variant<'_>::get_schema_type", "file": "crates/contrib/schematic_macros/src/config_enum/variant.rs", - "line": 152 + "line": 180 }, { "name": "macro_impl", @@ -2248,182 +2303,262 @@ { "name": "Query::run_locked", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 434 + "line": 452 }, { "name": "Query::conversation_load_request", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 853 + "line": 881 }, { "name": "Query::build_conversation", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 870 + "line": 898 }, { "name": "Query::create_new_conversation", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 966 - }, - { - "name": "Query::acquire_lock", - "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1285 - }, - { - "name": "await_mcp_servers", - "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1694 + "line": 996 }, { - "name": "claim_mcp_startup_region", + "name": "Query::run_turn", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1825 + "line": 1169 }, { - "name": "mcp_startup_line", + "name": "Query::acquire_lock", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1853 + "line": 1378 }, { "name": "persist_config_reset", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2422 + "line": 1987 }, { "name": "turn_config_delta", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2451 + "line": 2016 }, { "name": "Query::apply_cli_config", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2472 + "line": 2037 }, { "name": "build_sections", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2570 + "line": 2137 }, { "name": "build_thread", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2598 + "line": 2165 }, { "name": "apply_mounts", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2922 + "line": 2561 }, { "name": "create_mount_effects", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2995 + "line": 2634 }, { "name": "PendingStreamTrim::apply", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 3174 + "line": 2813 }, { "name": "mount_access_seed", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 3333 + "line": 2972 }, { "name": "read_piped_stdin", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 3437 + "line": 3076 }, { - "name": "Composer::compose", - "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 90 + "name": "Login::run_with_auth", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 273 + }, + { + "name": "Login::acquire", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 496 + }, + { + "name": "Login::device_login", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 560 + }, + { + "name": "await_callback", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 639 + }, + { + "name": "percent_decode", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 698 + }, + { + "name": "List::run_with_auth", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 749 + }, + { + "name": "read_setup_token", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 1041 + }, + { + "name": "humanize", + "file": "crates/jp_cli/src/cmd/provider.rs", + "line": 1136 }, { "name": "Composer::ask", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 135 + "line": 154 }, { "name": "Composer::buffer", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 180 + "line": 199 }, { "name": "run_plugin", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 291 + "line": 361 }, { "name": "spawn_plugin", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 450 + "line": 546 }, { "name": "stop_plugin", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 517 + "line": 643 + }, + { + "name": "join_within", + "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", + "line": 666 }, { "name": "message_loop", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 599 + "line": 741 }, { "name": "run_query", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 689 + "line": 891 }, { "name": "prepare_turn", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 930 + "line": 1261 }, { "name": "handle_request", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 1070 + "line": 1762 }, { "name": "handle_write_draft", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 1449 + "line": 2099 }, { "name": "handle_list_configs", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 1547 + "line": 2197 }, { - "name": "describe_plugin", + "name": "describe", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 2081 + "line": 2480 }, { - "name": "discover_plugins", + "name": "manifest_differences", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 2121 + "line": 2516 }, { - "name": "show_plugin_help", + "name": "describe_plugin", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 2180 + "line": 2541 }, { "name": "run_external", "file": "crates/jp_cli/src/cmd/plugin/dispatch.rs", - "line": 2221 + "line": 2900 + }, + { + "name": "render", + "file": "crates/jp_cli/src/cmd/plugin/list.rs", + "line": 113 + }, + { + "name": "discover_in", + "file": "crates/jp_cli/src/cmd/plugin/discovery.rs", + "line": 108 + }, + { + "name": "read", + "file": "crates/jp_cli/src/cmd/plugin/approvals.rs", + "line": 178 }, { "name": "Update::run", "file": "crates/jp_cli/src/cmd/plugin/update.rs", - "line": 14 + "line": 26 + }, + { + "name": "not_approved", + "file": "crates/jp_cli/src/cmd/plugin/admission.rs", + "line": 224 + }, + { + "name": "admit", + "file": "crates/jp_cli/src/cmd/plugin/admission.rs", + "line": 280 }, { "name": "Install::run", "file": "crates/jp_cli/src/cmd/plugin/install.rs", - "line": 16 + "line": 31 + }, + { + "name": "visit", + "file": "crates/jp_cli/src/cmd/plugin/install.rs", + "line": 120 + }, + { + "name": "confirm_third_party", + "file": "crates/jp_cli/src/cmd/plugin/install.rs", + "line": 155 + }, + { + "name": "print_root_section", + "file": "crates/jp_cli/src/cmd/plugin/help.rs", + "line": 40 + }, + { + "name": "root_entries", + "file": "crates/jp_cli/src/cmd/plugin/help.rs", + "line": 68 + }, + { + "name": "children", + "file": "crates/jp_cli/src/cmd/plugin/help.rs", + "line": 102 }, { "name": "TimeThreshold::from_str", @@ -2433,12 +2568,12 @@ { "name": "Resolver<'a>::automatic", "file": "crates/jp_cli/src/cmd/label/resolve.rs", - "line": 90 + "line": 105 }, { "name": "run_command", "file": "crates/jp_cli/src/cmd/label/resolve.rs", - "line": 302 + "line": 318 }, { "name": "parse_bound", @@ -2453,12 +2588,12 @@ { "name": "TurnSet::new", "file": "crates/jp_cli/src/cmd/turn_selection.rs", - "line": 278 + "line": 289 }, { "name": "TurnSelection::windows", "file": "crates/jp_cli/src/cmd/turn_selection.rs", - "line": 651 + "line": 687 }, { "name": "Init::run", @@ -2563,172 +2698,252 @@ { "name": "InterruptHandler

::collect_reply_inline", "file": "crates/jp_cli/src/cmd/query/interrupt/handler.rs", - "line": 474 + "line": 478 }, { - "name": "handle_streaming_interrupt", + "name": "handle_tool_interrupt", "file": "crates/jp_cli/src/cmd/query/interrupt/signals.rs", - "line": 75 + "line": 323 }, { - "name": "handle_tool_interrupt", - "file": "crates/jp_cli/src/cmd/query/interrupt/signals.rs", - "line": 261 + "name": "await_mcp_servers", + "file": "crates/jp_cli/src/cmd/query/mcp_startup.rs", + "line": 31 }, { - "name": "TurnCoordinator::handle_streaming_event", - "file": "crates/jp_cli/src/cmd/query/turn/coordinator.rs", + "name": "claim_region", + "file": "crates/jp_cli/src/cmd/query/mcp_startup.rs", + "line": 166 + }, + { + "name": "line", + "file": "crates/jp_cli/src/cmd/query/mcp_startup.rs", + "line": 194 + }, + { + "name": "TurnCoordinator::handle_streaming_event", + "file": "crates/jp_cli/src/cmd/query/turn/coordinator.rs", "line": 271 }, { "name": "claim_waiting_region", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 118 + "line": 144 }, { - "name": "run_turn_loop", + "name": "drive_turn", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 172 + "line": 252 }, { "name": "build_inquiry_backend", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 932 + "line": 1093 }, { "name": "build_inquiry_overrides", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 1030 + "line": 1192 + }, + { + "name": "commit_tool_responses", + "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", + "line": 1307 }, { "name": "build_execution_plan", "file": "crates/jp_cli/src/cmd/query/tool/pending.rs", - "line": 141 + "line": 142 }, { "name": "LlmInquiryBackend::inquire", "file": "crates/jp_cli/src/cmd/query/tool/inquiry.rs", - "line": 217 + "line": 222 }, { "name": "ToolPrompter::prompt_ask", "file": "crates/jp_cli/src/cmd/query/tool/prompter.rs", - "line": 270 + "line": 179 }, { "name": "stderr_sink", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 250 + "line": 238 }, { "name": "ToolCoordinator::pre_render_for_prompt", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 490 + "line": 603 }, { - "name": "ToolCoordinator::resolve_tool_call_decision", + "name": "ToolCoordinator::render_executor", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 549 + "line": 626 }, { - "name": "ToolCoordinator::prepare", + "name": "ToolCoordinator::abandon", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 717 + "line": 723 }, { - "name": "ToolCoordinator::render_approved_tool", + "name": "ToolCoordinator::decide_permission", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 777 + "line": 804 }, { - "name": "ToolCoordinator::run_permission_phase", + "name": "ToolCoordinator::submit", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 896 + "line": 893 }, { - "name": "ToolCoordinator::execute_with_prompting", + "name": "ToolCoordinator::finish", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 952 + "line": 977 }, { - "name": "ToolCoordinator::handle_tool_result", + "name": "ToolCoordinator::dispatch", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1521 + "line": 1170 }, { - "name": "ToolCoordinator::handle_prompt_answer", + "name": "ToolCoordinator::on_step", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1786 + "line": 1276 }, { - "name": "ToolCoordinator::handle_prompt_cancelled", + "name": "ToolCoordinator::on_permission", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1846 + "line": 1326 }, { - "name": "ToolCoordinator::process_next_prompt", + "name": "ToolCoordinator::pump", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1974 + "line": 1360 }, { - "name": "ToolExecutor::execute", - "file": "crates/jp_cli/src/cmd/query/tool/executor.rs", - "line": 215 + "name": "ToolCoordinator::decide", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1418 + }, + { + "name": "ToolCoordinator::announce", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1471 + }, + { + "name": "ToolCoordinator::release", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1488 + }, + { + "name": "ToolCoordinator::route", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1562 + }, + { + "name": "ToolCoordinator::answer", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1659 + }, + { + "name": "ToolCoordinator::serve", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1673 + }, + { + "name": "ToolCoordinator::deliver", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1760 + }, + { + "name": "ToolCoordinator::close", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1811 + }, + { + "name": "ToolCoordinator::render_result", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1992 + }, + { + "name": "ToolCoordinator::preset_answer", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 2086 + }, + { + "name": "route", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 413 + }, + { + "name": "TerminalExecutorSource::create", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 557 + }, + { + "name": "PendingCall::receive", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 741 + }, + { + "name": "PendingCall::receive_agent", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 770 }, { "name": "Grep::run", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 180 + "line": 204 }, { "name": "Grep::collect_hits_for_id", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 339 + "line": 388 }, { "name": "Grep::render", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 450 + "line": 503 }, { "name": "Grep::render_hits", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 476 + "line": 529 }, { "name": "expand_scopes", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 719 + "line": 772 }, { "name": "collect_scope_hits", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 838 + "line": 894 }, { "name": "context_ranges", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 893 + "line": 951 }, { "name": "Row::windowed", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 996 + "line": 1054 }, { "name": "window_row", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 1059 + "line": 1117 }, { "name": "highlight", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 1136 + "line": 1194 }, { "name": "render_group_heading", "file": "crates/jp_cli/src/cmd/conversation/grep.rs", - "line": 1204 + "line": 1262 }, { "name": "Edit::run", @@ -2738,42 +2953,47 @@ { "name": "Edit::run_open_editor", "file": "crates/jp_cli/src/cmd/conversation/edit.rs", - "line": 124 + "line": 129 }, { "name": "Edit::run_property_edit", "file": "crates/jp_cli/src/cmd/conversation/edit.rs", - "line": 244 + "line": 258 }, { "name": "Compact::effective_rules", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 201 + "line": 203 }, { "name": "plan_rule_ranges", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 426 + "line": 428 }, { "name": "plan_compactions", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 579 + "line": 592 }, { "name": "timeline_lines", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 771 + "line": 784 + }, + { + "name": "Compact::preflight", + "file": "crates/jp_cli/src/cmd/conversation/compact.rs", + "line": 932 }, { "name": "Compact::compact_one", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 913 + "line": 963 }, { "name": "Compact::preview_compaction", "file": "crates/jp_cli/src/cmd/conversation/compact.rs", - "line": 1026 + "line": 1085 }, { "name": "Rm::conversation_load_request", @@ -2808,17 +3028,17 @@ { "name": "generate_summary", "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", - "line": 44 + "line": 55 }, { "name": "summarize_stream", "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", - "line": 114 + "line": 128 }, { "name": "summarize_events", "file": "crates/jp_cli/src/cmd/conversation/summarize.rs", - "line": 232 + "line": 247 }, { "name": "Fork::fork_each", @@ -2838,7 +3058,7 @@ { "name": "Title::title_one", "file": "crates/jp_cli/src/cmd/conversation/title.rs", - "line": 78 + "line": 80 }, { "name": "Unarchive::run", @@ -2863,7 +3083,7 @@ { "name": "Print::print_conversation", "file": "crates/jp_cli/src/cmd/conversation/print.rs", - "line": 138 + "line": 137 }, { "name": "Archive::conversation_load_request", @@ -2878,17 +3098,17 @@ { "name": "Use::run", "file": "crates/jp_cli/src/cmd/conversation/use_.rs", - "line": 67 + "line": 69 }, { "name": "Use::conversation_load_request", "file": "crates/jp_cli/src/cmd/conversation/use_.rs", - "line": 178 + "line": 180 }, { "name": "Use::run_filtered", "file": "crates/jp_cli/src/cmd/conversation/use_.rs", - "line": 190 + "line": 192 }, { "name": "ApprovalStore::load", @@ -2913,167 +3133,147 @@ { "name": "Commands::run", "file": "crates/jp_cli/src/cmd.rs", - "line": 65 + "line": 69 }, { "name": "Commands::name", "file": "crates/jp_cli/src/cmd.rs", - "line": 142 + "line": 152 }, { "name": "Error::from", "file": "crates/jp_cli/src/cmd.rs", - "line": 430 + "line": 443 }, { "name": "run", "file": "crates/jp_cli/src/lib.rs", - "line": 413 + "line": 410 }, { "name": "run_inner", "file": "crates/jp_cli/src/lib.rs", - "line": 591 + "line": 588 }, { "name": "drain_background_tasks", "file": "crates/jp_cli/src/lib.rs", - "line": 835 - }, - { - "name": "print_plugin_help_section", - "file": "crates/jp_cli/src/lib.rs", - "line": 899 + "line": 853 }, { "name": "parse_error", "file": "crates/jp_cli/src/lib.rs", - "line": 923 + "line": 916 }, { "name": "resolve_config", "file": "crates/jp_cli/src/lib.rs", - "line": 999 + "line": 992 }, { "name": "effective_cfg_overrides", "file": "crates/jp_cli/src/lib.rs", - "line": 1124 + "line": 1117 }, { "name": "load_workspace", "file": "crates/jp_cli/src/lib.rs", - "line": 1248 + "line": 1252 }, { "name": "TurnRenderer::new", "file": "crates/jp_cli/src/render/turn.rs", - "line": 110 + "line": 106 }, { "name": "TurnRenderer::render_turn", "file": "crates/jp_cli/src/render/turn.rs", - "line": 168 + "line": 156 }, { "name": "TurnRenderer::reconfigure", "file": "crates/jp_cli/src/render/turn.rs", - "line": 265 + "line": 253 }, { "name": "ToolRenderer::new", "file": "crates/jp_cli/src/render/tool.rs", - "line": 145 + "line": 130 }, { "name": "ToolRenderer::write_chrome", "file": "crates/jp_cli/src/render/tool.rs", - "line": 216 + "line": 208 }, { - "name": "ToolRenderer::render_approved", + "name": "ToolRenderer::render_custom_result", "file": "crates/jp_cli/src/render/tool.rs", "line": 291 }, - { - "name": "ToolRenderer::render_custom_tool_call", - "file": "crates/jp_cli/src/render/tool.rs", - "line": 315 - }, { "name": "ToolRenderer::start_progress", "file": "crates/jp_cli/src/render/tool.rs", - "line": 369 + "line": 323 }, { "name": "ToolRenderer::render_result", "file": "crates/jp_cli/src/render/tool.rs", - "line": 427 + "line": 381 }, { "name": "ToolRenderer::register", "file": "crates/jp_cli/src/render/tool.rs", - "line": 592 + "line": 546 }, { "name": "ToolRenderer::claim_preparing", "file": "crates/jp_cli/src/render/tool.rs", - "line": 652 + "line": 613 }, { "name": "format_args", "file": "crates/jp_cli/src/render/tool.rs", - "line": 717 - }, - { - "name": "format_args_custom", - "file": "crates/jp_cli/src/render/tool.rs", - "line": 814 + "line": 678 }, { "name": "ChatRenderer::render_reasoning", "file": "crates/jp_cli/src/render/chat.rs", - "line": 314 + "line": 340 }, { "name": "ChatRenderer::handle_event", "file": "crates/jp_cli/src/render/chat.rs", - "line": 437 + "line": 480 }, { "name": "ChatRenderer::drain_buffer", "file": "crates/jp_cli/src/render/chat.rs", - "line": 726 + "line": 769 }, { "name": "ChatRenderer::enter_tool_call", "file": "crates/jp_cli/src/render/chat.rs", - "line": 827 + "line": 926 }, { "name": "build_role_header_line", "file": "crates/jp_cli/src/render/chat.rs", - "line": 910 + "line": 1016 }, { "name": "indent_lines", "file": "crates/jp_cli/src/render/chat.rs", - "line": 956 - }, - { - "name": "Matcher::is_match", - "file": "crates/jp_cli/src/shared/search.rs", - "line": 295 + "line": 1062 }, { "name": "Matcher::find_spans", "file": "crates/jp_cli/src/shared/search.rs", - "line": 324 + "line": 366 }, { - "name": "id_matches", + "name": "merge_overlaps", "file": "crates/jp_cli/src/shared/search.rs", - "line": 381 + "line": 448 }, { "name": "parse_schema_dsl", @@ -3103,17 +3303,17 @@ { "name": "open", "file": "crates/jp_cli/src/editor.rs", - "line": 223 + "line": 234 }, { "name": "edit_query", "file": "crates/jp_cli/src/editor.rs", - "line": 277 + "line": 288 }, { "name": "build_history_text", "file": "crates/jp_cli/src/editor.rs", - "line": 349 + "line": 462 }, { "name": "Ctx::configure_active_mcp_servers", @@ -3138,12 +3338,12 @@ { "name": "QueryDocument<'_>::fmt", "file": "crates/jp_cli/src/editor/parser.rs", - "line": 42 + "line": 52 }, { "name": "QueryDocument<'s>::try_from", "file": "crates/jp_cli/src/editor/parser.rs", - "line": 122 + "line": 136 }, { "name": "override_to_record", @@ -3168,22 +3368,22 @@ { "name": "config_search_roots", "file": "crates/jp_cli/src/config_pipeline.rs", - "line": 384 + "line": 390 }, { "name": "resolve_cfg_args", "file": "crates/jp_cli/src/config_pipeline.rs", - "line": 408 + "line": 414 }, { "name": "apply_cfg_args", "file": "crates/jp_cli/src/config_pipeline.rs", - "line": 521 + "line": 527 }, { "name": "build_partial_from_cfg_args", "file": "crates/jp_cli/src/config_pipeline.rs", - "line": 568 + "line": 577 }, { "name": "Client::get_tool", @@ -3193,27 +3393,132 @@ { "name": "Client::run_services", "file": "crates/jp_mcp/src/client.rs", - "line": 263 + "line": 265 }, { "name": "Client::start_services", "file": "crates/jp_mcp/src/client.rs", - "line": 298 + "line": 300 }, { "name": "Client::try_create_client", "file": "crates/jp_mcp/src/client.rs", - "line": 378 + "line": 380 }, { "name": "Client::create_client", "file": "crates/jp_mcp/src/client.rs", - "line": 400 + "line": 402 }, { "name": "render_stderr_tail", "file": "crates/jp_mcp/src/client.rs", - "line": 560 + "line": 562 + }, + { + "name": "Service::new", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 438 + }, + { + "name": "Service::start_call", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 504 + }, + { + "name": "validate_arguments", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 706 + }, + { + "name": "run_call", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 740 + }, + { + "name": "attempt", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 993 + }, + { + "name": "ask_for_input", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 1066 + }, + { + "name": "Handler::call_tool", + "file": "crates/jp_mcp/src/server/http.rs", + "line": 318 + }, + { + "name": "from_config", + "file": "crates/jp_mcp/src/server/json_schema.rs", + "line": 29 + }, + { + "name": "with_overrides", + "file": "crates/jp_mcp/src/server/json_schema.rs", + "line": 57 + }, + { + "name": "node_with_override", + "file": "crates/jp_mcp/src/server/json_schema.rs", + "line": 121 + }, + { + "name": "apply_config_fields", + "file": "crates/jp_mcp/src/server/json_schema.rs", + "line": 159 + }, + { + "name": "to_mcp", + "file": "crates/jp_mcp/src/server/result.rs", + "line": 128 + }, + { + "name": "to_content", + "file": "crates/jp_mcp/src/server/result.rs", + "line": 168 + }, + { + "name": "DescribeTools::execute", + "file": "crates/jp_mcp/src/server/builtin/describe_tools.rs", + "line": 78 + }, + { + "name": "run_tool_command", + "file": "crates/jp_mcp/src/server.rs", + "line": 429 + }, + { + "name": "parse_command_output", + "file": "crates/jp_mcp/src/server.rs", + "line": 551 + }, + { + "name": "execute", + "file": "crates/jp_mcp/src/server.rs", + "line": 700 + }, + { + "name": "execute_local", + "file": "crates/jp_mcp/src/server.rs", + "line": 747 + }, + { + "name": "tool_definitions", + "file": "crates/jp_mcp/src/server.rs", + "line": 912 + }, + { + "name": "resolve_tool", + "file": "crates/jp_mcp/src/server.rs", + "line": 965 + }, + { + "name": "resolve_mcp_tool", + "file": "crates/jp_mcp/src/server.rs", + "line": 989 }, { "name": "MockEditorBackend::edit_text", @@ -3253,7 +3558,7 @@ { "name": "fetch", "file": "crates/jp_attachment_agentic_shepherd/src/lib.rs", - "line": 101 + "line": 96 }, { "name": "Formatter::render_terminal", @@ -3423,47 +3728,72 @@ { "name": "GithubAttachment::get", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 126 + "line": 125 }, { "name": "parse_uri", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 180 + "line": 175 }, { "name": "fetch_pr_diff", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 312 + "line": 307 }, { "name": "fetch_all_changed_files", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 396 + "line": 391 }, { "name": "synthesize_diff_from_files", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 447 + "line": 442 }, { "name": "compile_excludes", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 560 + "line": 555 }, { "name": "filter_diff", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 582 + "line": 577 }, { "name": "render_diff_header", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 634 + "line": 629 }, { "name": "render_reviews", "file": "crates/jp_attachment_github/src/lib.rs", - "line": 718 + "line": 713 + }, + { + "name": "main", + "file": "crates/jp_process/src/bin/process_probe.rs", + "line": 34 + }, + { + "name": "repeat", + "file": "crates/jp_process/src/bin/process_probe.rs", + "line": 110 + }, + { + "name": "SystemProcessRunner::execute", + "file": "crates/jp_process/src/system.rs", + "line": 30 + }, + { + "name": "MockProcessRunner::drop", + "file": "crates/jp_process/src/mock.rs", + "line": 63 + }, + { + "name": "McpResources::get", + "file": "crates/jp_attachment_mcp_resources/src/lib.rs", + "line": 90 }, { "name": "Context::resolve", @@ -3480,6 +3810,46 @@ "file": "crates/jp_tool/src/access.rs", "line": 719 }, + { + "name": "validate_node", + "file": "crates/jp_tool/src/schema.rs", + "line": 57 + }, + { + "name": "validate_node_inner", + "file": "crates/jp_tool/src/schema.rs", + "line": 74 + }, + { + "name": "has_unconstrained_node", + "file": "crates/jp_tool/src/schema.rs", + "line": 256 + }, + { + "name": "coerce_object", + "file": "crates/jp_tool/src/definition.rs", + "line": 173 + }, + { + "name": "coerce_value", + "file": "crates/jp_tool/src/definition.rs", + "line": 192 + }, + { + "name": "apply_defaults_to", + "file": "crates/jp_tool/src/definition.rs", + "line": 229 + }, + { + "name": "validate_arguments_against", + "file": "crates/jp_tool/src/definition.rs", + "line": 273 + }, + { + "name": "ToolResult::from", + "file": "crates/jp_tool/src/content.rs", + "line": 472 + }, { "name": "Terminal::open", "file": "crates/jp_pty/src/terminal.rs", @@ -3496,19 +3866,34 @@ "line": 525 }, { - "name": "StreamError::from_eventsource", + "name": "ArgumentDecoding::apply", + "file": "crates/jp_llm/src/decoding.rs", + "line": 34 + }, + { + "name": "ArgumentDecoding::apply_value", + "file": "crates/jp_llm/src/decoding.rs", + "line": 51 + }, + { + "name": "ArgumentDecoders::insert", + "file": "crates/jp_llm/src/decoding.rs", + "line": 71 + }, + { + "name": "StreamError::from_http", "file": "crates/jp_llm/src/error.rs", - "line": 224 + "line": 351 }, { "name": "extract_retry_from_text", "file": "crates/jp_llm/src/error.rs", - "line": 667 + "line": 792 }, { "name": "extract_retry_after", "file": "crates/jp_llm/src/error.rs", - "line": 738 + "line": 863 }, { "name": "EventChain::ingest_normal", @@ -3518,117 +3903,122 @@ { "name": "EventChain::ingest_merging", "file": "crates/jp_llm/src/stream/chain.rs", - "line": 125 + "line": 129 }, { "name": "EventChain::trim_buffer", "file": "crates/jp_llm/src/stream/chain.rs", - "line": 175 + "line": 183 }, { "name": "EventChain::attempt_merge", "file": "crates/jp_llm/src/stream/chain.rs", - "line": 217 + "line": 225 }, { "name": "reconstruct_text", "file": "crates/jp_llm/src/stream/chain.rs", - "line": 309 + "line": 317 }, { "name": "get_provider", "file": "crates/jp_llm/src/provider.rs", - "line": 50 + "line": 89 + }, + { + "name": "output_schema_is_open", + "file": "crates/jp_llm/src/provider.rs", + "line": 180 + }, + { + "name": "number_ids", + "file": "crates/jp_llm/src/provider.rs", + "line": 305 }, { "name": "map_candidate", "file": "crates/jp_llm/src/provider/google.rs", - "line": 731 + "line": 764 }, { "name": "process_schema", "file": "crates/jp_llm/src/provider/google.rs", - "line": 914 + "line": 947 }, { "name": "StreamError::from", "file": "crates/jp_llm/src/provider/google.rs", - "line": 1224 + "line": 1257 }, { "name": "prepare_soft_force_retry_request", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 302 + "line": 310 }, { "name": "MultiProviderMetadata::from_details", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 408 + "line": 416 }, { "name": "Map::from", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 473 + "line": 481 }, { "name": "map_event", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 523 + "line": 531 }, { "name": "prepare_forced_tool_fallback", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 684 + "line": 692 }, { "name": "create_request", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 739 + "line": 771 }, { "name": "RequestMessages::try_from", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 1024 + "line": 1055 }, { "name": "StreamError::from", "file": "crates/jp_llm/src/provider/openrouter.rs", - "line": 1225 + "line": 1256 }, { "name": "fetch_public_catalog", "file": "crates/jp_llm/src/provider/cerebras.rs", - "line": 279 + "line": 282 + }, + { + "name": "create_request", + "file": "crates/jp_llm/src/provider/cerebras.rs", + "line": 477 }, { "name": "process_schema", "file": "crates/jp_llm/src/provider/cerebras.rs", - "line": 608 + "line": 653 }, { "name": "handle_sse_event_sync", "file": "crates/jp_llm/src/provider/cerebras.rs", - "line": 813 + "line": 858 }, { "name": "map_event", "file": "crates/jp_llm/src/provider/ollama.rs", - "line": 148 + "line": 149 }, { "name": "create_request", "file": "crates/jp_llm/src/provider/ollama.rs", - "line": 257 - }, - { - "name": "handle_sse_event_sync", - "file": "crates/jp_llm/src/provider/llamacpp.rs", - "line": 193 - }, - { - "name": "drain_extractor", - "file": "crates/jp_llm/src/provider/llamacpp.rs", - "line": 397 + "line": 258 }, { "name": "MockProvider::with_chunked_message", @@ -3640,210 +4030,250 @@ "file": "crates/jp_llm/src/provider/mock.rs", "line": 242 }, + { + "name": "switch_persists", + "file": "crates/jp_llm/src/provider/anthropic/resolve.rs", + "line": 586 + }, + { + "name": "read_output", + "file": "crates/jp_llm/src/provider/anthropic/acp.rs", + "line": 503 + }, + { + "name": "State::sdk", + "file": "crates/jp_llm/src/provider/anthropic/acp/protocol.rs", + "line": 423 + }, + { + "name": "State::stream_event", + "file": "crates/jp_llm/src/provider/anthropic/acp/protocol.rs", + "line": 623 + }, + { + "name": "stream", + "file": "crates/jp_llm/src/provider/anthropic/acp/transport.rs", + "line": 46 + }, + { + "name": "drive", + "file": "crates/jp_llm/src/provider/anthropic/acp/transport.rs", + "line": 372 + }, + { + "name": "PreparedRequest::new", + "file": "crates/jp_llm/src/provider/anthropic/acp/transcript.rs", + "line": 44 + }, + { + "name": "environment", + "file": "crates/jp_llm/src/provider/anthropic/acp/options.rs", + "line": 160 + }, + { + "name": "tap", + "file": "crates/jp_llm/src/provider/anthropic/acp/cassette.rs", + "line": 155 + }, + { + "name": "recorder", + "file": "crates/jp_llm/src/provider/anthropic/acp/cassette.rs", + "line": 167 + }, + { + "name": "serve", + "file": "crates/jp_llm/src/provider/anthropic/acp/cassette.rs", + "line": 308 + }, + { + "name": "command", + "file": "crates/jp_llm/src/provider/anthropic/acp/process.rs", + "line": 46 + }, + { + "name": "handle_sse_event_sync", + "file": "crates/jp_llm/src/provider/openai_compat.rs", + "line": 411 + }, + { + "name": "drain_extractor", + "file": "crates/jp_llm/src/provider/openai_compat.rs", + "line": 659 + }, + { + "name": "Anthropic::mcp_tool_metadata", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 422 + }, + { + "name": "Anthropic::chat_completion_stream", + "file": "crates/jp_llm/src/provider/anthropic.rs", + "line": 516 + }, { "name": "force_tool_retry", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 574 + "line": 1087 }, { "name": "soft_force_retry", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 655 + "line": 1169 }, { "name": "resolve_cache_control", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 1171 + "line": 1712 }, { "name": "create_request", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 1202 + "line": 1744 }, { "name": "map_event", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 1942 - }, - { - "name": "Anthropic::try_from", - "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 1982 + "line": 2646 }, { "name": "transform_schema", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 2017 + "line": 2704 }, { "name": "map_content_start", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 2429 + "line": 3121 }, { "name": "map_content_delta", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 2470 + "line": 3162 }, { "name": "StreamError::from", "file": "crates/jp_llm/src/provider/anthropic.rs", - "line": 2515 + "line": 3207 }, { - "name": "Openai::chat_completion_stream", - "file": "crates/jp_llm/src/provider/openai.rs", - "line": 121 + "name": "walk_chain", + "file": "crates/jp_llm/src/provider/openai/resolve.rs", + "line": 664 }, { - "name": "synthesize_non_streaming_output_item_events", - "file": "crates/jp_llm/src/provider/openai.rs", - "line": 194 + "name": "DeviceAuth::poll_interval", + "file": "crates/jp_llm/src/provider/openai/oauth.rs", + "line": 303 }, { - "name": "map_event", + "name": "Openai::clients", "file": "crates/jp_llm/src/provider/openai.rs", - "line": 1405 + "line": 422 }, { - "name": "classify_stream_error", + "name": "Openai::redeem_reset_credit", "file": "crates/jp_llm/src/provider/openai.rs", - "line": 1618 + "line": 489 }, { - "name": "process_strict", + "name": "Openai::model_details", "file": "crates/jp_llm/src/provider/openai.rs", - "line": 1760 + "line": 582 }, { - "name": "run_tool_command", - "file": "crates/jp_llm/src/tool.rs", - "line": 484 + "name": "Openai::models", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 618 }, { - "name": "forward_stderr", - "file": "crates/jp_llm/src/tool.rs", - "line": 598 + "name": "synthesize_non_streaming_output_item_events", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1080 }, { - "name": "parse_command_output", - "file": "crates/jp_llm/src/tool.rs", - "line": 634 + "name": "create_request", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 1381 }, { - "name": "ToolDefinition::execute", - "file": "crates/jp_llm/src/tool.rs", - "line": 793 + "name": "map_error", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 2685 }, { - "name": "ToolDefinition::execute_local", - "file": "crates/jp_llm/src/tool.rs", - "line": 853 + "name": "map_event", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 2817 }, { - "name": "coerce_object", - "file": "crates/jp_llm/src/tool.rs", - "line": 1105 + "name": "classify_stream_error", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3030 }, { - "name": "coerce_value", - "file": "crates/jp_llm/src/tool.rs", - "line": 1113 + "name": "ensure_flattened", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3152 }, { - "name": "apply_defaults_to", - "file": "crates/jp_llm/src/tool.rs", - "line": 1150 + "name": "flatten_all_of", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3185 }, { - "name": "validate_arguments_against", - "file": "crates/jp_llm/src/tool.rs", - "line": 1188 + "name": "fits_strict_subset", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3201 }, { - "name": "tool_definitions", - "file": "crates/jp_llm/src/tool.rs", - "line": 1246 + "name": "flatten_node", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3207 }, { - "name": "resolve_tool", - "file": "crates/jp_llm/src/tool.rs", - "line": 1299 + "name": "process_strict", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3333 }, { - "name": "resolve_mcp_tool", - "file": "crates/jp_llm/src/tool.rs", - "line": 1323 + "name": "parameters_with_decoding", + "file": "crates/jp_llm/src/provider/openai.rs", + "line": 3514 }, { "name": "generate", "file": "crates/jp_llm/src/title.rs", - "line": 127 + "line": 131 }, { "name": "title_instructions", "file": "crates/jp_llm/src/title.rs", - "line": 256 + "line": 261 }, { "name": "structured_data", "file": "crates/jp_llm/src/event_builder.rs", - "line": 53 + "line": 59 }, { "name": "EventBuilder::handle_part", "file": "crates/jp_llm/src/event_builder.rs", - "line": 137 + "line": 148 }, { "name": "collect_with_retry", "file": "crates/jp_llm/src/retry.rs", - "line": 65 + "line": 79 }, { "name": "retry_delay", "file": "crates/jp_llm/src/retry.rs", - "line": 149 + "line": 181 }, { "name": "exponential_backoff", "file": "crates/jp_llm/src/retry.rs", - "line": 184 - }, - { - "name": "from_config", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 37 - }, - { - "name": "with_overrides", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 60 - }, - { - "name": "validate_node", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 121 - }, - { - "name": "validate_node_inner", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 138 - }, - { - "name": "node_with_override", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 666 - }, - { - "name": "apply_config_fields", - "file": "crates/jp_llm/src/tool/json_schema.rs", - "line": 704 - }, - { - "name": "DescribeTools::execute", - "file": "crates/jp_llm/src/tool/builtin/describe_tools.rs", - "line": 78 + "line": 216 }, { "name": "Id::is_valid", @@ -3860,20 +4290,15 @@ "file": "crates/jp_github/src/handlers.rs", "line": 342 }, - { - "name": "build_http_client", - "file": "crates/jp_github/src/client.rs", - "line": 340 - }, { "name": "BearNotes::query_to_uri", "file": "crates/jp_attachment_bear_note/src/lib.rs", - "line": 27 + "line": 26 }, { "name": "BearNotes::get", "file": "crates/jp_attachment_bear_note/src/lib.rs", - "line": 155 + "line": 154 } ] } \ No newline at end of file From c3a2eea5f16e5316cb01e51896ca74f5eb9982c3 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 6 Oct 2026 15:06:11 +0200 Subject: [PATCH 07/10] chore(tickets): File the stale rustqual baseline problem Records the operational weakness the gate's first run exposed: the committed baselines describe a tree snapshot, so `main` moving shows up as a regression in whichever branch rebases next, and the one command that clears it re-records someone else's findings as the new floor. Lists the three ways out with their costs, and names computing both sides of the comparison in the job as the one to aim for, since it is the only option under which a baseline cannot be stale. Signed-off-by: Jean Mertz --- ...qual-baselines-go-stale-when-main-moves.md | 67 +++++++++++++++++++ justfile | 4 -- 2 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 docs/ticket/0yb2pgw-rustqual-baselines-go-stale-when-main-moves.md diff --git a/docs/ticket/0yb2pgw-rustqual-baselines-go-stale-when-main-moves.md b/docs/ticket/0yb2pgw-rustqual-baselines-go-stale-when-main-moves.md new file mode 100644 index 000000000..691cbd615 --- /dev/null +++ b/docs/ticket/0yb2pgw-rustqual-baselines-go-stale-when-main-moves.md @@ -0,0 +1,67 @@ +# Rustqual baselines go stale when main moves + +- **Status**: Todo +- **Kind**: Chore +- **Authors**: jp +- **Date**: 2026-10-06 +- **Label**: domain=tooling +- **Label**: type=follow-up + +`just qual-ci` compares the workspace against counts committed in +`.config/rustqual/baseline.json` and `baseline-dry.json`. +Those counts describe the tree at the moment they were recorded, so they go +stale as soon as `main` moves. + +The first real run of the gate demonstrated it. +The baselines were recorded on 22 Sep; rebasing the branch onto 6 Oct `main` put +382 extra findings in the main pass and 116 in the DRY pass, across twelve +categories, none of them from the branch — its whole Rust diff was seven +comment lines. +The gate was right that the numbers had moved and had no way to say whose +numbers they were. + +## Why it matters + +The author who hits the failure is whoever rebases next, and the documented +response (`just qual-baseline`) makes them re-record a baseline covering two +weeks of someone else's code. +Refreshing is the only action that turns the job green, it always works, and it +takes one command — so the gate teaches contributors to reach for the thing +that silences it. +That is the failure mode the gate exists to prevent, arrived at from the other +direction. + +The refresh is at least visible: the baselines are pretty-printed, so +`"total_findings": 2404 → 2786` shows up in the pull request diff where a +reviewer can see it. +That is a review-time catch, not a tooling one. + +## Options + +1. **Accept it.** Refresh on rebase and treat the failure as noise. + Free, and normalizes the reflex. +2. **Re-record from `main` on a schedule.** A workflow runs `qual-baseline` on + `main` and commits the result, so a branch compares against a baseline that + is at most a day old. + One extra workflow; the drift window shrinks but does not close, and the + commits are noise in the log. +3. **Drop the committed baseline.** Analyse `HEAD` and the merge-base in the + same job and compare the two reports. + Staleness becomes impossible, because both numbers come from the run. + Costs four analyses per job instead of two, and needs the merge-base tree + checked out — probably a second worktree. + +Option 3 removes the whole class of problem and is the one to aim for. +Worth measuring how long one `rustqual` pass takes over the workspace before +committing to it: if a pass is seconds, the extra cost is irrelevant and option +3 wins outright. + +## Related + +Introduced with the gate itself in `#1190`. +The same pull request already replaced rustqual's own `--compare +--fail-on-regression`, which scored a regression as the aggregate quality ratio +dropping and so missed new findings entirely; `.config/rustqual/regressions.jq` +now does a per-category comparison. +Whatever replaces the committed baseline should keep that filter — the +per-category check is orthogonal to where the numbers come from. diff --git a/justfile b/justfile index 14c5d5e88..5040ab33e 100644 --- a/justfile +++ b/justfile @@ -4145,7 +4145,6 @@ _install-serve-web *args: chmod 755 "$dir/.jp-serve-web.new" mv -f "$dir/.jp-serve-web.new" "$dir/jp-serve-web" echo "Installed jp-serve-web to $dir" >&2 -<<<<<<< HEAD # Build and install the `bookworm` MCP server that `.jp/config.toml` runs. _install-bookworm *args: @@ -4156,8 +4155,6 @@ _install-bookworm *args: exit 0 fi cargo install {{quiet_flag}} --locked --path crates/contrib/bookworm {{args}} -||||||| parent of dd64ec494 (chore(rustqual): Install from source instead of via binstall) -======= # Build and install `rustqual`, the structural quality analyser. # @@ -4171,7 +4168,6 @@ _install-bookworm *args: # without needing `JP_INSTALL=1`, unlike the path-installed tools below. _install-rustqual *args: cargo install {{quiet_flag}} --locked rustqual@{{rustqual_version}} {{args}} ->>>>>>> dd64ec494 (chore(rustqual): Install from source instead of via binstall) _install-comfort *args: #!/usr/bin/env sh From eca685a57de75651ab8b1a2e3a95fdfa62bb9f75 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 6 Oct 2026 16:49:00 +0200 Subject: [PATCH 08/10] baseline Signed-off-by: Jean Mertz --- .config/rustqual/baseline-dry.json | 181 ++++++++++++++++++----------- .config/rustqual/baseline.json | 178 +++++++++++++++++----------- 2 files changed, 222 insertions(+), 137 deletions(-) diff --git a/.config/rustqual/baseline-dry.json b/.config/rustqual/baseline-dry.json index 23ab089b1..4a1c8e032 100644 --- a/.config/rustqual/baseline-dry.json +++ b/.config/rustqual/baseline-dry.json @@ -1,9 +1,9 @@ { "version": 2, - "quality_score": 0.6501759364487419, - "iosp_score": 0.8115942028985508, - "violations": 858, - "total": 6389, + "quality_score": 0.650690702390975, + "iosp_score": 0.8116854908774979, + "violations": 867, + "total": 6460, "complexity_warnings": 0, "magic_number_warnings": 0, "nesting_depth_warnings": 0, @@ -11,7 +11,7 @@ "unsafe_warnings": 0, "error_handling_warnings": 0, "duplicate_groups": 29, - "dead_code_warnings": 262, + "dead_code_warnings": 264, "dead_type_warnings": 28, "fragment_groups": 58, "boilerplate_warnings": 0, @@ -28,7 +28,7 @@ "tq_untested_logic_warnings": 0, "structural_srp_warnings": 0, "structural_coupling_warnings": 0, - "total_findings": 1280, + "total_findings": 1291, "violation_details": [ { "name": "ConversationStream::config_unsets", @@ -1073,17 +1073,22 @@ { "name": "PartialToolConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 627 + "line": 639 }, { "name": "PartialToolParameterConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 860 + "line": 882 }, { "name": "PartialEnableConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 1862 + "line": 1897 + }, + { + "name": "PartialFanOutConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 2117 }, { "name": "PartialTitleConfig::assign", @@ -2328,57 +2333,57 @@ { "name": "Query::acquire_lock", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1378 + "line": 1383 }, { "name": "persist_config_reset", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1987 + "line": 1992 }, { "name": "turn_config_delta", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2016 + "line": 2021 }, { "name": "Query::apply_cli_config", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2037 + "line": 2042 }, { "name": "build_sections", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2137 + "line": 2142 }, { "name": "build_thread", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2165 + "line": 2170 }, { "name": "apply_mounts", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2561 + "line": 2566 }, { "name": "create_mount_effects", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2634 + "line": 2639 }, { "name": "PendingStreamTrim::apply", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2813 + "line": 2818 }, { "name": "mount_access_seed", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2972 + "line": 2977 }, { "name": "read_piped_stdin", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 3076 + "line": 3081 }, { "name": "Login::run_with_auth", @@ -2773,132 +2778,142 @@ { "name": "stderr_sink", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 238 + "line": 245 }, { "name": "ToolCoordinator::pre_render_for_prompt", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 603 + "line": 671 }, { "name": "ToolCoordinator::render_executor", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 626 + "line": 694 }, { "name": "ToolCoordinator::abandon", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 723 + "line": 792 }, { "name": "ToolCoordinator::decide_permission", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 804 + "line": 887 }, { "name": "ToolCoordinator::submit", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 893 + "line": 976 + }, + { + "name": "ToolCoordinator::add_call", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1017 }, { "name": "ToolCoordinator::finish", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 977 + "line": 1094 }, { "name": "ToolCoordinator::dispatch", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1170 + "line": 1334 }, { "name": "ToolCoordinator::on_step", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1276 + "line": 1443 }, { "name": "ToolCoordinator::on_permission", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1326 + "line": 1493 }, { "name": "ToolCoordinator::pump", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1360 + "line": 1527 }, { "name": "ToolCoordinator::decide", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1418 + "line": 1585 }, { "name": "ToolCoordinator::announce", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1471 + "line": 1638 }, { "name": "ToolCoordinator::release", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1488 + "line": 1660 }, { "name": "ToolCoordinator::route", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1562 + "line": 1734 }, { "name": "ToolCoordinator::answer", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1659 + "line": 1832 }, { "name": "ToolCoordinator::serve", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1673 + "line": 1846 }, { "name": "ToolCoordinator::deliver", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1760 + "line": 1934 }, { "name": "ToolCoordinator::close", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1811 + "line": 1985 }, { "name": "ToolCoordinator::render_result", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1992 + "line": 2227 }, { "name": "ToolCoordinator::preset_answer", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 2086 + "line": 2321 }, { "name": "route", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 413 + "line": 489 }, { "name": "TerminalExecutorSource::create", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 557 + "line": 654 + }, + { + "name": "TerminalExecutorSource::fan_out_executors", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 723 }, { "name": "PendingCall::next", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 730 + "line": 1080 }, { "name": "PendingCall::receive", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 741 + "line": 1091 }, { "name": "PendingCall::receive_agent", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 770 + "line": 1123 }, { "name": "Grep::run", @@ -3193,17 +3208,17 @@ { "name": "TurnRenderer::new", "file": "crates/jp_cli/src/render/turn.rs", - "line": 106 + "line": 107 }, { "name": "TurnRenderer::render_turn", "file": "crates/jp_cli/src/render/turn.rs", - "line": 156 + "line": 157 }, { "name": "TurnRenderer::reconfigure", "file": "crates/jp_cli/src/render/turn.rs", - "line": 253 + "line": 268 }, { "name": "ToolRenderer::new", @@ -3431,44 +3446,69 @@ "line": 562 }, { - "name": "Service::new", + "name": "register", "file": "crates/jp_mcp/src/server/service.rs", - "line": 438 + "line": 527 }, { - "name": "Service::start_call", + "name": "Service::new", "file": "crates/jp_mcp/src/server/service.rs", - "line": 504 + "line": 623 }, { "name": "validate_arguments", "file": "crates/jp_mcp/src/server/service.rs", - "line": 706 + "line": 885 }, { "name": "run_call", "file": "crates/jp_mcp/src/server/service.rs", - "line": 740 + "line": 919 }, { "name": "describe", "file": "crates/jp_mcp/src/server/service.rs", - "line": 854 + "line": 1048 + }, + { + "name": "conclude", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 1100 + }, + { + "name": "run_fan_out", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 1138 + }, + { + "name": "deliver_result", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 1388 }, { "name": "attempt", "file": "crates/jp_mcp/src/server/service.rs", - "line": 993 + "line": 1448 }, { "name": "ask_for_input", "file": "crates/jp_mcp/src/server/service.rs", - "line": 1066 + "line": 1521 }, { - "name": "Handler::call_tool", - "file": "crates/jp_mcp/src/server/http.rs", - "line": 318 + "name": "split", + "file": "crates/jp_mcp/src/server/fan_out.rs", + "line": 119 + }, + { + "name": "fold", + "file": "crates/jp_mcp/src/server/fan_out.rs", + "line": 251 + }, + { + "name": "frame", + "file": "crates/jp_mcp/src/server/fan_out.rs", + "line": 270 }, { "name": "from_config", @@ -3508,37 +3548,37 @@ { "name": "run_tool_command", "file": "crates/jp_mcp/src/server.rs", - "line": 429 + "line": 430 }, { "name": "parse_command_output", "file": "crates/jp_mcp/src/server.rs", - "line": 551 + "line": 552 }, { "name": "execute", "file": "crates/jp_mcp/src/server.rs", - "line": 700 + "line": 701 }, { "name": "execute_local", "file": "crates/jp_mcp/src/server.rs", - "line": 747 + "line": 748 }, { "name": "tool_definitions", "file": "crates/jp_mcp/src/server.rs", - "line": 912 + "line": 913 }, { "name": "resolve_tool", "file": "crates/jp_mcp/src/server.rs", - "line": 965 + "line": 966 }, { "name": "resolve_mcp_tool", "file": "crates/jp_mcp/src/server.rs", - "line": 989 + "line": 990 }, { "name": "MockEditorBackend::edit_text", @@ -3830,6 +3870,11 @@ "file": "crates/jp_tool/src/access.rs", "line": 719 }, + { + "name": "AnswerType::deserialize", + "file": "crates/jp_tool/src/lib.rs", + "line": 406 + }, { "name": "validate_node", "file": "crates/jp_tool/src/schema.rs", diff --git a/.config/rustqual/baseline.json b/.config/rustqual/baseline.json index d3e340b91..2b6cf06fd 100644 --- a/.config/rustqual/baseline.json +++ b/.config/rustqual/baseline.json @@ -1,34 +1,34 @@ { "version": 2, - "quality_score": 0.7018404307284256, - "iosp_score": 0.9134751773049645, - "violations": 854, - "total": 13648, + "quality_score": 0.7028513603665629, + "iosp_score": 0.9136877941323721, + "violations": 862, + "total": 13799, "complexity_warnings": 163, "magic_number_warnings": 238, "nesting_depth_warnings": 27, - "function_length_warnings": 422, + "function_length_warnings": 428, "unsafe_warnings": 74, "error_handling_warnings": 194, "duplicate_groups": 0, "dead_code_warnings": 0, "dead_type_warnings": 0, "fragment_groups": 0, - "boilerplate_warnings": 285, + "boilerplate_warnings": 286, "srp_struct_warnings": 46, - "srp_module_warnings": 206, + "srp_module_warnings": 207, "wildcard_import_warnings": 0, "sdp_violations": 0, "coupling_warnings": 0, "coupling_cycles": 0, "tq_no_assertion_warnings": 0, - "tq_no_sut_warnings": 19, + "tq_no_sut_warnings": 20, "tq_untested_warnings": 95, "tq_uncovered_warnings": 0, "tq_untested_logic_warnings": 0, "structural_srp_warnings": 47, "structural_coupling_warnings": 8, - "total_findings": 2786, + "total_findings": 2807, "violation_details": [ { "name": "ConversationStream::config_unsets", @@ -1073,17 +1073,22 @@ { "name": "PartialToolConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 627 + "line": 639 }, { "name": "PartialToolParameterConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 860 + "line": 882 }, { "name": "PartialEnableConfig::assign", "file": "crates/jp_config/src/conversation/tool.rs", - "line": 1862 + "line": 1897 + }, + { + "name": "PartialFanOutConfig::assign", + "file": "crates/jp_config/src/conversation/tool.rs", + "line": 2117 }, { "name": "PartialTitleConfig::assign", @@ -2328,57 +2333,57 @@ { "name": "Query::acquire_lock", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1378 + "line": 1383 }, { "name": "persist_config_reset", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 1987 + "line": 1992 }, { "name": "turn_config_delta", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2016 + "line": 2021 }, { "name": "Query::apply_cli_config", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2037 + "line": 2042 }, { "name": "build_sections", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2137 + "line": 2142 }, { "name": "build_thread", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2165 + "line": 2170 }, { "name": "apply_mounts", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2561 + "line": 2566 }, { "name": "create_mount_effects", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2634 + "line": 2639 }, { "name": "PendingStreamTrim::apply", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2813 + "line": 2818 }, { "name": "mount_access_seed", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 2972 + "line": 2977 }, { "name": "read_piped_stdin", "file": "crates/jp_cli/src/cmd/query.rs", - "line": 3076 + "line": 3081 }, { "name": "Login::run_with_auth", @@ -2768,127 +2773,137 @@ { "name": "stderr_sink", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 238 + "line": 245 }, { "name": "ToolCoordinator::pre_render_for_prompt", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 603 + "line": 671 }, { "name": "ToolCoordinator::render_executor", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 626 + "line": 694 }, { "name": "ToolCoordinator::abandon", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 723 + "line": 792 }, { "name": "ToolCoordinator::decide_permission", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 804 + "line": 887 }, { "name": "ToolCoordinator::submit", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 893 + "line": 976 + }, + { + "name": "ToolCoordinator::add_call", + "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", + "line": 1017 }, { "name": "ToolCoordinator::finish", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 977 + "line": 1094 }, { "name": "ToolCoordinator::dispatch", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1170 + "line": 1334 }, { "name": "ToolCoordinator::on_step", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1276 + "line": 1443 }, { "name": "ToolCoordinator::on_permission", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1326 + "line": 1493 }, { "name": "ToolCoordinator::pump", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1360 + "line": 1527 }, { "name": "ToolCoordinator::decide", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1418 + "line": 1585 }, { "name": "ToolCoordinator::announce", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1471 + "line": 1638 }, { "name": "ToolCoordinator::release", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1488 + "line": 1660 }, { "name": "ToolCoordinator::route", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1562 + "line": 1734 }, { "name": "ToolCoordinator::answer", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1659 + "line": 1832 }, { "name": "ToolCoordinator::serve", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1673 + "line": 1846 }, { "name": "ToolCoordinator::deliver", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1760 + "line": 1934 }, { "name": "ToolCoordinator::close", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1811 + "line": 1985 }, { "name": "ToolCoordinator::render_result", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 1992 + "line": 2227 }, { "name": "ToolCoordinator::preset_answer", "file": "crates/jp_cli/src/cmd/query/tool/coordinator.rs", - "line": 2086 + "line": 2321 }, { "name": "route", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 413 + "line": 489 }, { "name": "TerminalExecutorSource::create", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 557 + "line": 654 + }, + { + "name": "TerminalExecutorSource::fan_out_executors", + "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", + "line": 723 }, { "name": "PendingCall::receive", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 741 + "line": 1091 }, { "name": "PendingCall::receive_agent", "file": "crates/jp_cli/src/cmd/query/tool/mcp_executor.rs", - "line": 770 + "line": 1123 }, { "name": "Grep::run", @@ -3183,17 +3198,17 @@ { "name": "TurnRenderer::new", "file": "crates/jp_cli/src/render/turn.rs", - "line": 106 + "line": 107 }, { "name": "TurnRenderer::render_turn", "file": "crates/jp_cli/src/render/turn.rs", - "line": 156 + "line": 157 }, { "name": "TurnRenderer::reconfigure", "file": "crates/jp_cli/src/render/turn.rs", - "line": 253 + "line": 268 }, { "name": "ToolRenderer::new", @@ -3416,39 +3431,59 @@ "line": 562 }, { - "name": "Service::new", + "name": "register", "file": "crates/jp_mcp/src/server/service.rs", - "line": 438 + "line": 527 }, { - "name": "Service::start_call", + "name": "Service::new", "file": "crates/jp_mcp/src/server/service.rs", - "line": 504 + "line": 623 }, { "name": "validate_arguments", "file": "crates/jp_mcp/src/server/service.rs", - "line": 706 + "line": 885 }, { "name": "run_call", "file": "crates/jp_mcp/src/server/service.rs", - "line": 740 + "line": 919 + }, + { + "name": "conclude", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 1100 + }, + { + "name": "run_fan_out", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 1138 + }, + { + "name": "deliver_result", + "file": "crates/jp_mcp/src/server/service.rs", + "line": 1388 }, { "name": "attempt", "file": "crates/jp_mcp/src/server/service.rs", - "line": 993 + "line": 1448 }, { "name": "ask_for_input", "file": "crates/jp_mcp/src/server/service.rs", - "line": 1066 + "line": 1521 }, { - "name": "Handler::call_tool", - "file": "crates/jp_mcp/src/server/http.rs", - "line": 318 + "name": "split", + "file": "crates/jp_mcp/src/server/fan_out.rs", + "line": 119 + }, + { + "name": "frame", + "file": "crates/jp_mcp/src/server/fan_out.rs", + "line": 270 }, { "name": "from_config", @@ -3488,37 +3523,37 @@ { "name": "run_tool_command", "file": "crates/jp_mcp/src/server.rs", - "line": 429 + "line": 430 }, { "name": "parse_command_output", "file": "crates/jp_mcp/src/server.rs", - "line": 551 + "line": 552 }, { "name": "execute", "file": "crates/jp_mcp/src/server.rs", - "line": 700 + "line": 701 }, { "name": "execute_local", "file": "crates/jp_mcp/src/server.rs", - "line": 747 + "line": 748 }, { "name": "tool_definitions", "file": "crates/jp_mcp/src/server.rs", - "line": 912 + "line": 913 }, { "name": "resolve_tool", "file": "crates/jp_mcp/src/server.rs", - "line": 965 + "line": 966 }, { "name": "resolve_mcp_tool", "file": "crates/jp_mcp/src/server.rs", - "line": 989 + "line": 990 }, { "name": "MockEditorBackend::edit_text", @@ -3810,6 +3845,11 @@ "file": "crates/jp_tool/src/access.rs", "line": 719 }, + { + "name": "AnswerType::deserialize", + "file": "crates/jp_tool/src/lib.rs", + "line": 406 + }, { "name": "validate_node", "file": "crates/jp_tool/src/schema.rs", From 0fd7e7604ec5331f5f3600340c153435fb379f92 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 6 Oct 2026 17:04:33 +0200 Subject: [PATCH 09/10] docs(tickets): Record the merge-ref cause on T-0yb2pgw Signed-off-by: Jean Mertz --- ...qual-baselines-go-stale-when-main-moves.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/docs/ticket/0yb2pgw-rustqual-baselines-go-stale-when-main-moves.md b/docs/ticket/0yb2pgw-rustqual-baselines-go-stale-when-main-moves.md index 691cbd615..fc99fa615 100644 --- a/docs/ticket/0yb2pgw-rustqual-baselines-go-stale-when-main-moves.md +++ b/docs/ticket/0yb2pgw-rustqual-baselines-go-stale-when-main-moves.md @@ -65,3 +65,52 @@ dropping and so missed new findings entirely; `.config/rustqual/regressions.jq` now does a per-category comparison. Whatever replaces the committed baseline should keep that filter — the per-category check is orthogonal to where the numbers come from. + +## Comments + +----- + +- **From**: jp +- **Date**: 2026-10-06T15:03:44Z + +## Observed: the gate fires on commits the branch does not contain + +First real CI run of `qual-ci` on `#1190` failed with `srp_module_warnings: 207 +-> 208 (+1)` while the same recipe passed locally with identical numbers on both +sides. + +Cause is narrower than "baselines go stale", and worse: + +`.github/workflows/rust.yml:167` checks out with no `ref:`, so a `pull_request` +run gets `refs/pull/N/merge` — the head merged into *current* `main`. +The branch was rebased onto `150ba7868` and its baselines re-recorded there +(`e7e3b424c`). +`main` then took `dbafe5485` (#1242, 16:30) and `dfae02a91` (#1207, 16:33) the +same afternoon. +CI measured `branch + dfae02a91`; the baseline describes `branch + 150ba7868`. +The `+1` is a file crossing a threshold in that delta — #1242 adds net +21 +lines to `crates/jp_cli/src/cmd/query/tool/prompter.rs`, which is otherwise +unflagged. + +Two consequences beyond staleness: + +1. **Not reproducible locally.** No sequence of local commands shows the + failure, because the tree CI measured does not exist in any worktree. + The author's only lever is to rebase and re-record — which is the reflex + this ticket exists to prevent, now with no diagnostic alternative. +2. **The comparison is invalid in both directions.** A committed baseline + describes exactly one tree. + Compared against a merge tree, it invents regressions *and* can mask real + ones: if the merge happens to delete findings elsewhere, a genuine new + finding nets to zero and passes. + +So a committed baseline and the merge ref cannot both be right. +The measured tree and the baseline have to share a base. +That makes option 3 (analyse `HEAD` and the merge-base in the same job, no +committed baseline) the correct target rather than merely the tidiest. + +A cheaper interim exists: a per-task `checkout_ref` through `matrix.include`, +set to `github.event.pull_request.head.sha` for `qual` only, leaving `test` and +the other tasks on the merge ref where testing the merge result is the point. +Needs one thing verified first — whether `actions/checkout` treats an empty +`ref:` as unset, which is what the other matrix entries would pass. From 036e477837518cfd0478229e8894ee06f8fee095 Mon Sep 17 00:00:00 2001 From: Jean Mertz Date: Tue, 6 Oct 2026 17:05:01 +0200 Subject: [PATCH 10/10] chore(rustqual): Re-record baselines against current main Signed-off-by: Jean Mertz --- .config/rustqual/baseline-dry.json | 14 +++++++------- .config/rustqual/baseline.json | 18 +++++++++--------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.config/rustqual/baseline-dry.json b/.config/rustqual/baseline-dry.json index 4a1c8e032..b844dc085 100644 --- a/.config/rustqual/baseline-dry.json +++ b/.config/rustqual/baseline-dry.json @@ -1,9 +1,9 @@ { "version": 2, - "quality_score": 0.650690702390975, - "iosp_score": 0.8116854908774979, + "quality_score": 0.6506185173027932, + "iosp_score": 0.8116445796219857, "violations": 867, - "total": 6460, + "total": 6459, "complexity_warnings": 0, "magic_number_warnings": 0, "nesting_depth_warnings": 0, @@ -2748,17 +2748,17 @@ { "name": "build_inquiry_backend", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 1093 + "line": 1096 }, { "name": "build_inquiry_overrides", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 1192 + "line": 1195 }, { "name": "commit_tool_responses", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 1307 + "line": 1310 }, { "name": "build_execution_plan", @@ -2773,7 +2773,7 @@ { "name": "ToolPrompter::prompt_ask", "file": "crates/jp_cli/src/cmd/query/tool/prompter.rs", - "line": 179 + "line": 180 }, { "name": "stderr_sink", diff --git a/.config/rustqual/baseline.json b/.config/rustqual/baseline.json index 2b6cf06fd..0cc3efa14 100644 --- a/.config/rustqual/baseline.json +++ b/.config/rustqual/baseline.json @@ -1,9 +1,9 @@ { "version": 2, - "quality_score": 0.7028513603665629, - "iosp_score": 0.9136877941323721, + "quality_score": 0.7028860816848206, + "iosp_score": 0.9137309847878302, "violations": 862, - "total": 13799, + "total": 13804, "complexity_warnings": 163, "magic_number_warnings": 238, "nesting_depth_warnings": 27, @@ -16,7 +16,7 @@ "fragment_groups": 0, "boilerplate_warnings": 286, "srp_struct_warnings": 46, - "srp_module_warnings": 207, + "srp_module_warnings": 208, "wildcard_import_warnings": 0, "sdp_violations": 0, "coupling_warnings": 0, @@ -28,7 +28,7 @@ "tq_untested_logic_warnings": 0, "structural_srp_warnings": 47, "structural_coupling_warnings": 8, - "total_findings": 2807, + "total_findings": 2808, "violation_details": [ { "name": "ConversationStream::config_unsets", @@ -2743,17 +2743,17 @@ { "name": "build_inquiry_backend", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 1093 + "line": 1096 }, { "name": "build_inquiry_overrides", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 1192 + "line": 1195 }, { "name": "commit_tool_responses", "file": "crates/jp_cli/src/cmd/query/turn_loop.rs", - "line": 1307 + "line": 1310 }, { "name": "build_execution_plan", @@ -2768,7 +2768,7 @@ { "name": "ToolPrompter::prompt_ask", "file": "crates/jp_cli/src/cmd/query/tool/prompter.rs", - "line": 179 + "line": 180 }, { "name": "stderr_sink",