Coverage report: 99%

Files Functions Classes

coverage.py v7.14.1, created at 2026-06-05 20:29 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src/ai_jury/__init__.py (no function)   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py _keyword_pattern   100% 2 0 0   100% 0 0   100%
src/ai_jury/adapters.py classify_stderr   100% 9 0 0   100% 6 0   100%
src/ai_jury/adapters.py Adapter.__init__   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py Adapter.name   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py Adapter.available   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py Adapter.build_argv   100% 0 0 1   100% 0 0   100%
src/ai_jury/adapters.py Adapter._stdin_for   100% 2 0 0   100% 0 0   100%
src/ai_jury/adapters.py Adapter._version_argv   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py Adapter.detect_capabilities   100% 22 0 0   100% 4 0   100%
src/ai_jury/adapters.py Adapter.run   100% 24 0 0   100% 8 0   100%
src/ai_jury/adapters.py ClaudeAdapter.build_argv   100% 4 0 0   100% 2 0   100%
src/ai_jury/adapters.py CodexAdapter.build_argv   100% 5 0 0   100% 2 0   100%
src/ai_jury/adapters.py CodexAdapter._stdin_for   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py AgyAdapter.build_argv   100% 4 0 0   100% 2 0   100%
src/ai_jury/adapters.py list_local_models   100% 14 0 0   100% 2 0   100%
src/ai_jury/adapters.py LocalAdapter.endpoint   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py LocalAdapter.completions_url   100% 4 0 0   100% 2 0   100%
src/ai_jury/adapters.py LocalAdapter.build_payload   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py LocalAdapter.parse_content   100% 5 0 0   100% 2 0   100%
src/ai_jury/adapters.py LocalAdapter.classify_http_status   100% 5 0 0   100% 4 0   100%
src/ai_jury/adapters.py LocalAdapter.available   100% 10 0 0   100% 0 0   100%
src/ai_jury/adapters.py LocalAdapter.detect_capabilities   100% 2 0 0   100% 0 0   100%
src/ai_jury/adapters.py LocalAdapter.run   100% 32 0 0   100% 4 0   100%
src/ai_jury/adapters.py MockAdapter.available   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py MockAdapter.detect_capabilities   100% 1 0 0   100% 0 0   100%
src/ai_jury/adapters.py MockAdapter.run   100% 10 0 0   100% 6 0   100%
src/ai_jury/adapters.py make_adapter   100% 6 0 0   100% 4 0   100%
src/ai_jury/adapters.py (no function)   100% 84 0 1   100% 0 0   100%
src/ai_jury/benchmark.py _severity_rank   100% 3 0 0   100% 2 0   100%
src/ai_jury/benchmark.py _is_blocking   100% 2 0 0   100% 0 0   100%
src/ai_jury/benchmark.py _line_matches   100% 8 0 0   100% 4 0   100%
src/ai_jury/benchmark.py _keywords_match   100% 4 0 0   100% 2 0   100%
src/ai_jury/benchmark.py finding_matches_expected   100% 9 0 0   100% 6 0   100%
src/ai_jury/benchmark.py score_fixture   100% 31 0 0   100% 14 0   100%
src/ai_jury/benchmark.py aggregate   100% 10 0 0   100% 0 0   100%
src/ai_jury/benchmark.py load_fixture   100% 12 0 0   100% 2 0   100%
src/ai_jury/benchmark.py discover_fixture_ids   100% 4 0 0   100% 2 0   100%
src/ai_jury/benchmark.py load_fixtures   100% 1 0 0   100% 0 0   100%
src/ai_jury/benchmark.py run_offline   100% 3 0 0   100% 0 0   100%
src/ai_jury/benchmark.py live_enabled   100% 1 0 0   100% 0 0   100%
src/ai_jury/benchmark.py run_live   100% 12 0 0   100% 4 0   100%
src/ai_jury/benchmark.py _finding_to_dict   100% 1 0 0   100% 0 0   100%
src/ai_jury/benchmark.py format_table   100% 8 0 0   100% 2 0   100%
src/ai_jury/benchmark.py main   100% 7 0 0   100% 0 0   100%
src/ai_jury/benchmark.py (no function)   100% 44 0 2   100% 0 0   100%
src/ai_jury/cache.py default_cache_dir   100% 5 0 0   100% 2 0   100%
src/ai_jury/cache.py _policy_fingerprint   100% 5 0 0   100% 2 0   100%
src/ai_jury/cache.py cache_key   100% 3 0 0   100% 0 0   100%
src/ai_jury/cache.py _finding   100% 1 0 0   100% 0 0   100%
src/ai_jury/cache.py _verdict   100% 1 0 0   100% 0 0   100%
src/ai_jury/cache.py _agent_result   100% 3 0 0   100% 2 0   100%
src/ai_jury/cache.py _group   100% 1 0 0   100% 0 0   100%
src/ai_jury/cache.py _hit   100% 1 0 0   100% 0 0   100%
src/ai_jury/cache.py outcome_to_dict   100% 1 0 0   100% 0 0   100%
src/ai_jury/cache.py outcome_from_dict   100% 1 0 0   100% 0 0   100%
src/ai_jury/cache.py Cache.__init__   100% 1 0 0   100% 0 0   100%
src/ai_jury/cache.py Cache._path   100% 1 0 0   100% 0 0   100%
src/ai_jury/cache.py Cache.load   100% 12 0 0   100% 4 0   100%
src/ai_jury/cache.py Cache.store   100% 4 0 0   100% 0 0   100%
src/ai_jury/cache.py Cache.clear   100% 8 0 0   100% 4 0   100%
src/ai_jury/cache.py (no function)   100% 32 0 0   100% 0 0   100%
src/ai_jury/ci.py evaluate_ci   100% 29 0 0   100% 18 0   100%
src/ai_jury/ci.py (no function)   100% 2 0 0   100% 0 0   100%
src/ai_jury/classification.py _severity_rank   100% 1 0 0   100% 0 0   100%
src/ai_jury/classification.py _resolved_findings   100% 5 0 0   100% 4 0   100%
src/ai_jury/classification.py _resolved_groups   100% 5 0 0   100% 4 0   100%
src/ai_jury/classification.py diff_lines_changed   100% 3 0 0   100% 2 0   100%
src/ai_jury/classification.py _text_blob   100% 2 0 0   100% 0 0   100%
src/ai_jury/classification.py is_security_finding   100% 4 0 0   100% 2 0   100%
src/ai_jury/classification.py _risk_level   100% 15 0 0   100% 12 0   100%
src/ai_jury/classification.py _review_effort   100% 18 0 0   100% 14 0   100%
src/ai_jury/classification.py _has_unresolved_groups   100% 6 0 0   100% 6 0   100%
src/ai_jury/classification.py classify   100% 8 0 0   100% 0 0   100%
src/ai_jury/classification.py label_strings   100% 6 0 0   100% 4 0   100%
src/ai_jury/classification.py summary_line   100% 1 0 0   100% 0 0   100%
src/ai_jury/classification.py (no function)   100% 23 0 0   100% 0 0   100%
src/ai_jury/cli.py _read_diff   100% 10 0 0   100% 8 0   100%
src/ai_jury/cli.py build_parser   100% 60 0 0   100% 0 0   100%
src/ai_jury/cli.py _run_comment_command   100% 25 0 0   100% 8 0   100%
src/ai_jury/cli.py _init_available   100% 11 0 0   100% 2 0   100%
src/ai_jury/cli.py _init_interactive   100% 35 0 0   100% 14 0   100%
src/ai_jury/cli.py _init_wizard   100% 63 0 0   100% 36 0   100%
src/ai_jury/cli.py _init_wizard.ask   100% 1 0 0   100% 0 0   100%
src/ai_jury/cli.py _init_wizard.choose   100% 10 0 0   100% 6 0   100%
src/ai_jury/cli.py _run_init   100% 83 0 0   100% 28 0   100%
src/ai_jury/cli.py _run_init._detected_agents   100% 1 0 0   100% 0 0   100%
src/ai_jury/cli.py _run_init._resolve_preset_agents   100% 5 0 0   100% 4 0   100%
src/ai_jury/cli.py _config_source   100% 3 0 0   100% 2 0   100%
src/ai_jury/cli.py _render_effective_config   100% 17 0 0   100% 2 0   100%
src/ai_jury/cli.py _run_config   100% 17 0 0   100% 2 0   100%
src/ai_jury/cli.py _is_progress_milestone   100% 1 0 0   100% 0 0   100%
src/ai_jury/cli.py _maybe_add_local_fallback   100% 17 0 0   100% 6 0   100%
src/ai_jury/cli.py _force_utf8_output   100% 5 0 0   100% 4 0   100%
src/ai_jury/cli.py main   100% 258 0 0   100% 150 0   100%
src/ai_jury/cli.py main.log   100% 4 0 0   100% 4 0   100%
src/ai_jury/cli.py main.on_event   100% 7 0 0   100% 2 0   100%
src/ai_jury/cli.py (no function)   100% 35 0 2   100% 0 0   100%
src/ai_jury/commands.py ParsedCommand.to_cli_args   100% 6 0 0   100% 4 0   100%
src/ai_jury/commands.py parse_comment   100% 34 0 0   100% 18 0   100%
src/ai_jury/commands.py (no function)   100% 14 0 0   100% 0 0   100%
src/ai_jury/config.py validate_config   100% 83 0 0   100% 66 0   100%
src/ai_jury/config.py JuryConfig.effective_max_rounds   100% 1 0 0   100% 0 0   100%
src/ai_jury/config.py JuryConfig.enabled_agents   100% 1 0 0   100% 0 0   100%
src/ai_jury/config.py _ci_from_dict   100% 5 0 0   100% 2 0   100%
src/ai_jury/config.py _context_from_dict   100% 4 0 0   100% 2 0   100%
src/ai_jury/config.py _str_list   100% 5 0 0   100% 4 0   100%
src/ai_jury/config.py _diff_from_dict   100% 2 0 0   100% 0 0   100%
src/ai_jury/config.py _seed_from_dict   100% 7 0 0   100% 2 0   100%
src/ai_jury/config.py _opt_positive_int   100% 7 0 0   100% 2 0   100%
src/ai_jury/config.py _from_dict   100% 6 0 0   100% 2 0   100%
src/ai_jury/config.py config_hash   100% 5 0 0   100% 0 0   100%
src/ai_jury/config.py load_raw_config   100% 10 0 0   100% 6 0   100%
src/ai_jury/config.py load_config   100% 4 0 0   100% 2 0   100%
src/ai_jury/config.py (no function)   100% 73 0 0   100% 0 0   100%
src/ai_jury/consensus.py _normalize_path   100% 3 0 0   100% 2 0   100%
src/ai_jury/consensus.py _normalize_claim   100% 3 0 0   100% 0 0   100%
src/ai_jury/consensus.py _tokens   100% 1 0 0   100% 0 0   100%
src/ai_jury/consensus.py _jaccard   100% 7 0 0   100% 4 0   100%
src/ai_jury/consensus.py _same_location   100% 7 0 0   100% 6 0   100%
src/ai_jury/consensus.py _same_claim   100% 3 0 0   100% 2 0   100%
src/ai_jury/consensus.py _sort_key   100% 1 0 0   100% 0 0   100%
src/ai_jury/consensus.py _max_severity   100% 8 0 0   100% 4 0   100%
src/ai_jury/consensus.py _classify   100% 5 0 0   100% 4 0   100%
src/ai_jury/consensus.py group_findings   100% 23 0 0   100% 10 0   100%
src/ai_jury/consensus.py (no function)   100% 30 0 0   100% 0 0   100%
src/ai_jury/convergence.py review_convergence   100% 9 0 0   100% 6 0   100%
src/ai_jury/convergence.py _section_has_content   100% 13 0 0   100% 8 0   100%
src/ai_jury/convergence.py debate_convergence   100% 4 0 0   100% 2 0   100%
src/ai_jury/convergence.py (no function)   100% 9 0 0   100% 0 0   100%
src/ai_jury/diffprofile.py _is_doc_or_generated   100% 1 0 0   100% 0 0   100%
src/ai_jury/diffprofile.py _path_is_security_sensitive   100% 1 0 0   100% 0 0   100%
src/ai_jury/diffprofile.py profile_diff   100% 12 0 0   100% 4 0   100%
src/ai_jury/diffprofile.py depth_for   100% 5 0 0   100% 4 0   100%
src/ai_jury/diffprofile.py describe   100% 7 0 0   100% 4 0   100%
src/ai_jury/diffprofile.py (no function)   100% 23 0 0   100% 0 0   100%
src/ai_jury/doctor.py _redact_value   100% 3 0 0   100% 2 0   100%
src/ai_jury/doctor.py _detect_capabilities   100% 5 0 0   100% 0 0   100%
src/ai_jury/doctor.py _is_available   100% 4 0 0   100% 0 0   100%
src/ai_jury/doctor.py _agent_entry   100% 2 0 0   100% 0 0   100%
src/ai_jury/doctor.py _config_summary   100% 1 0 0   100% 0 0   100%
src/ai_jury/doctor.py _detect_warnings   100% 16 0 0   100% 12 0   100%
src/ai_jury/doctor.py _recommendations   100% 15 0 0   100% 8 0   100%
src/ai_jury/doctor.py build_diagnostics   100% 21 0 0   100% 6 0   100%
src/ai_jury/doctor.py render_report   100% 56 0 0   100% 16 0   100%
src/ai_jury/doctor.py (no function)   100% 18 0 0   100% 0 0   100%
src/ai_jury/findings.py _normalize_severity   100% 6 0 0   100% 4 0   100%
src/ai_jury/findings.py _normalize_confidence   100% 5 0 0   100% 4 0   100%
src/ai_jury/findings.py Finding.__post_init__   100% 8 0 0   100% 2 0   100%
src/ai_jury/findings.py Finding.from_obj   100% 1 0 0   100% 0 0   100%
src/ai_jury/findings.py parse_findings   100% 20 0 0   100% 10 0   100%
src/ai_jury/findings.py _coerce_line   100% 6 0 0   100% 2 0   100%
src/ai_jury/findings.py _normalize_status   100% 5 0 0   100% 4 0   100%
src/ai_jury/findings.py parse_verdicts   100% 23 0 0   100% 12 0   100%
src/ai_jury/findings.py (no function)   100% 38 0 0   100% 0 0   100%
src/ai_jury/formats.py severity_to_sarif_level   100% 1 0 0   100% 0 0   100%
src/ai_jury/formats.py _finding_dict   100% 1 0 0   100% 0 0   100%
src/ai_jury/formats.py _group_dict   100% 1 0 0   100% 0 0   100%
src/ai_jury/formats.py to_json   100% 9 0 0   100% 2 0   100%
src/ai_jury/formats.py _sarif_result   100% 4 0 0   100% 2 0   100%
src/ai_jury/formats.py to_sarif   100% 7 0 0   100% 2 0   100%
src/ai_jury/formats.py (no function)   100% 18 0 0   100% 0 0   100%
src/ai_jury/github.py _gh   100% 9 0 0   100% 4 0   100%
src/ai_jury/github.py pr_diff   100% 5 0 0   100% 2 0   100%
src/ai_jury/github.py pr_context   100% 8 0 0   100% 2 0   100%
src/ai_jury/github.py post_pr_comment   100% 5 0 0   100% 2 0   100%
src/ai_jury/github.py issue_body   100% 8 0 0   100% 2 0   100%
src/ai_jury/github.py post_issue_comment   100% 5 0 0   100% 2 0   100%
src/ai_jury/github.py pr_head_sha   100% 8 0 0   100% 2 0   100%
src/ai_jury/github.py pr_comment_bodies   100% 9 0 0   100% 2 0   100%
src/ai_jury/github.py compare_diff   100% 7 0 0   100% 2 0   100%
src/ai_jury/github.py build_label_args   100% 10 0 0   100% 6 0   100%
src/ai_jury/github.py apply_labels   100% 5 0 0   100% 2 0   100%
src/ai_jury/github.py _finding_signature   100% 4 0 0   100% 0 0   100%
src/ai_jury/github.py _sig_marker   100% 1 0 0   100% 0 0   100%
src/ai_jury/github.py _sig_from_body   100% 4 0 0   100% 2 0   100%
src/ai_jury/github.py _comment_body   100% 8 0 0   100% 2 0   100%
src/ai_jury/github.py _review_body   100% 1 0 0   100% 0 0   100%
src/ai_jury/github.py build_inline_payload   100% 8 0 0   100% 4 0   100%
src/ai_jury/github.py _resolve_repo   100% 7 0 0   100% 2 0   100%
src/ai_jury/github.py _existing_inline_keys   100% 19 0 0   100% 10 0   100%
src/ai_jury/github.py _gh_with_input   100% 9 0 0   100% 4 0   100%
src/ai_jury/github.py post_inline_comments   100% 13 0 0   100% 4 0   100%
src/ai_jury/github.py render_progress_body   100% 9 0 0   100% 6 0   100%
src/ai_jury/github.py _create_issue_comment   100% 5 0 0   100% 0 0   100%
src/ai_jury/github.py _edit_issue_comment   100% 5 0 0   100% 0 0   100%
src/ai_jury/github.py ProgressReporter.__init__   100% 4 0 0   100% 0 0   100%
src/ai_jury/github.py ProgressReporter._push   100% 5 0 0   100% 4 0   100%
src/ai_jury/github.py ProgressReporter.update   100% 2 0 0   100% 0 0   100%
src/ai_jury/github.py ProgressReporter.finish   100% 1 0 0   100% 0 0   100%
src/ai_jury/github.py (no function)   100% 39 0 0   100% 0 0   100%
src/ai_jury/incremental.py reviewed_sha_marker   100% 1 0 0   100% 0 0   100%
src/ai_jury/incremental.py parse_reviewed_sha   100% 5 0 0   100% 4 0   100%
src/ai_jury/incremental.py decide_review   100% 7 0 0   100% 6 0   100%
src/ai_jury/incremental.py compare_range   100% 1 0 0   100% 0 0   100%
src/ai_jury/incremental.py scope_note   100% 2 0 0   100% 0 0   100%
src/ai_jury/incremental.py (no function)   100% 10 0 0   100% 0 0   100%
src/ai_jury/injection.py InjectionHit.location   100% 4 0 0   100% 2 0   100%
src/ai_jury/injection.py _snippet   100% 6 0 0   100% 2 0   100%
src/ai_jury/injection.py _line_of   100% 1 0 0   100% 0 0   100%
src/ai_jury/injection.py scan   100% 11 0 0   100% 10 0   100%
src/ai_jury/injection.py scan_inputs   100% 4 0 0   100% 2 0   100%
src/ai_jury/injection.py hits_to_warnings   100% 4 0 0   100% 2 0   100%
src/ai_jury/injection.py hits_to_finding   100% 8 0 0   100% 2 0   100%
src/ai_jury/injection.py (no function)   100% 20 0 0   100% 0 0   100%
src/ai_jury/largediff.py DiffFile.size_bytes   100% 1 0 0   100% 0 0   100%
src/ai_jury/largediff.py DiffPlan.kept_paths   100% 1 0 0   100% 0 0   100%
src/ai_jury/largediff.py _strip_ab   100% 4 0 0   100% 4 0   100%
src/ai_jury/largediff.py split_diff   100% 18 0 0   100% 8 0   100%
src/ai_jury/largediff.py split_diff.flush   100% 2 0 0   100% 2 0   100%
src/ai_jury/largediff.py _is_binary   100% 7 0 0   100% 6 0   100%
src/ai_jury/largediff.py _matches_any   100% 9 0 0   100% 8 0   100%
src/ai_jury/largediff.py _chunk_files   100% 13 0 0   100% 6 0   100%
src/ai_jury/largediff.py plan_diff   100% 34 0 0   100% 14 0   100%
src/ai_jury/largediff.py (no function)   100% 34 0 0   100% 0 0   100%
src/ai_jury/metadata.py _agent_entry   100% 1 0 0   100% 0 0   100%
src/ai_jury/metadata.py _rounds_executed   100% 7 0 0   100% 4 0   100%
src/ai_jury/metadata.py build_run_metadata   100% 16 0 0   100% 6 0   100%
src/ai_jury/metadata.py (no function)   100% 7 0 3   100% 0 0   100%
src/ai_jury/orchestrator.py RunBudget.__init__   100% 3 0 0   100% 0 0   100%
src/ai_jury/orchestrator.py RunBudget.elapsed   100% 1 0 0   100% 0 0   100%
src/ai_jury/orchestrator.py RunBudget.remaining   100% 3 0 0   100% 2 0   100%
src/ai_jury/orchestrator.py RunBudget.expired   100% 1 0 0   100% 0 0   100%
src/ai_jury/orchestrator.py RunBudget.call_timeout   100% 9 0 0   100% 6 0   100%
src/ai_jury/orchestrator.py _run_with_retry   100% 9 0 0   100% 2 0   100%
src/ai_jury/orchestrator.py _order_by_agents   100% 3 0 0   100% 0 0   100%
src/ai_jury/orchestrator.py _run_phase   100% 5 0 0   100% 2 0   100%
src/ai_jury/orchestrator.py _run_phase.task   100% 1 0 0   100% 0 0   100%
src/ai_jury/orchestrator.py _others   100% 2 0 0   100% 0 0   100%
src/ai_jury/orchestrator.py _anon_label   100% 7 0 0   100% 2 0   100%
src/ai_jury/orchestrator.py _anonymize_peers   100% 12 0 0   100% 4 0   100%
src/ai_jury/orchestrator.py _debate_round   100% 15 0 0   100% 6 0   100%
src/ai_jury/orchestrator.py run_jury   100% 147 0 0   97% 66 2   99%
src/ai_jury/orchestrator.py resolve_chair   100% 14 0 0   100% 10 0   100%
src/ai_jury/orchestrator.py _format_findings_for_verify   100% 9 0 0   100% 6 0   100%
src/ai_jury/orchestrator.py _format_verdicts   100% 9 0 0   100% 6 0   100%
src/ai_jury/orchestrator.py _verify   100% 10 0 0   100% 4 0   100%
src/ai_jury/orchestrator.py _verdict_matches_group   100% 16 0 0   100% 8 0   100%
src/ai_jury/orchestrator.py _apply_verdicts   100% 11 0 0   100% 12 0   100%
src/ai_jury/orchestrator.py _synthesize   100% 13 0 0   100% 6 0   100%
src/ai_jury/orchestrator.py _merge_results_by_agent   100% 16 0 0   100% 8 0   100%
src/ai_jury/orchestrator.py _combine_chair_results   100% 6 0 0   100% 2 0   100%
src/ai_jury/orchestrator.py _merge_chunk_outcomes   100% 13 0 0   100% 2 0   100%
src/ai_jury/orchestrator.py review_diff   100% 26 0 0   100% 12 0   100%
src/ai_jury/orchestrator.py review_diff._run   100% 1 0 0   100% 0 0   100%
src/ai_jury/orchestrator.py review_diff._finalize   100% 3 0 0   100% 2 0   100%
src/ai_jury/orchestrator.py (no function)   100% 59 0 0   100% 0 0   100%
src/ai_jury/patches.py PatchSuggestion.location   100% 4 0 0   100% 2 0   100%
src/ai_jury/patches.py patch_suggestions   100% 10 0 0   100% 6 0   100%
src/ai_jury/patches.py render_patch_suggestions   100% 14 0 0   100% 4 0   100%
src/ai_jury/patches.py (no function)   100% 13 0 0   100% 0 0   100%
src/ai_jury/policy.py ReviewPolicy.is_empty   100% 1 0 0   100% 0 0   100%
src/ai_jury/policy.py load_policy   100% 11 0 0   100% 2 0   100%
src/ai_jury/policy.py _resolve_path   100% 10 0 0   100% 8 0   100%
src/ai_jury/policy.py _from_dict   100% 18 0 0   100% 10 0   100%
src/ai_jury/policy.py _from_dict.str_list   100% 4 0 0   100% 2 0   100%
src/ai_jury/policy.py render_policy_section   100% 18 0 0   100% 8 0   100%
src/ai_jury/policy.py render_policy_section.bullet_list   100% 6 0 0   100% 4 0   100%
src/ai_jury/policy.py (no function)   100% 24 0 0   100% 0 0   100%
src/ai_jury/privilege.py _args_str   100% 1 0 0   100% 0 0   100%
src/ai_jury/privilege.py _is_sandboxed   100% 9 0 0   100% 8 0   100%
src/ai_jury/privilege.py _claude_is_locked_down   100% 6 0 0   100% 4 0   100%
src/ai_jury/privilege.py audit_agent   100% 18 0 0   100% 10 0   100%
src/ai_jury/privilege.py audit_privilege   100% 4 0 0   100% 2 0   100%
src/ai_jury/privilege.py (no function)   100% 8 0 0   100% 0 0   100%
src/ai_jury/prompts.py for_mode   100% 3 0 0   100% 2 0   100%
src/ai_jury/prompts.py (no function)   100% 12 0 0   100% 0 0   100%
src/ai_jury/redaction.py redact   100% 13 0 0   100% 6 0   100%
src/ai_jury/redaction.py redact._sub_assign   100% 2 0 0   100% 0 0   100%
src/ai_jury/redaction.py (no function)   100% 4 0 0   100% 0 0   100%
src/ai_jury/report.py _block   100% 1 0 0   100% 0 0   100%
src/ai_jury/report.py _fail_status   100% 2 0 0   100% 0 0   100%
src/ai_jury/report.py _finding_line   100% 4 0 0   100% 2 0   100%
src/ai_jury/report.py _group_line   100% 17 0 0   100% 10 0   100%
src/ai_jury/report.py _metadata_block   100% 33 0 0   100% 14 0   100%
src/ai_jury/report.py _classification_block   100% 1 0 0   100% 0 0   100%
src/ai_jury/report.py _consensus_block   100% 13 0 0   100% 8 0   100%
src/ai_jury/report.py _vote_block   100% 7 0 0   100% 2 0   100%
src/ai_jury/report.py _verdict_headline   100% 18 0 0   100% 16 0   100%
src/ai_jury/report.py render   100% 73 0 0   100% 40 0   100%
src/ai_jury/report.py render_live_step   100% 10 0 0   100% 4 0   100%
src/ai_jury/report.py _conversation_blocks   100% 21 0 0   100% 12 0   100%
src/ai_jury/report.py _summary_blocks   100% 16 0 0   100% 8 0   100%
src/ai_jury/report.py render_transcript   100% 37 0 0   100% 16 0   100%
src/ai_jury/report.py render_sections   100% 43 0 0   100% 22 0   100%
src/ai_jury/report.py (no function)   100% 23 0 0   100% 0 0   100%
src/ai_jury/scaffold.py _from_default   100% 4 0 0   100% 4 0   100%
src/ai_jury/scaffold.py agent_templates   100% 7 0 0   100% 4 0   100%
src/ai_jury/scaffold.py pick_default_model   100% 7 0 0   100% 6 0   100%
src/ai_jury/scaffold.py build_config   100% 38 0 0   100% 30 0   100%
src/ai_jury/scaffold.py _scalar   100% 8 0 0   100% 6 0   100%
src/ai_jury/scaffold.py _render_value   100% 3 0 0   100% 2 0   100%
src/ai_jury/scaffold.py render_toml   100% 29 0 0   100% 20 0   100%
src/ai_jury/scaffold.py (no function)   100% 14 0 0   100% 0 0   100%
src/ai_jury/voting.py _normalize_refusal   100% 2 0 0   100% 0 0   100%
src/ai_jury/voting.py is_abstention   100% 4 0 0   100% 2 0   100%
src/ai_jury/voting.py _severity_to_vote   100% 5 0 0   100% 4 0   100%
src/ai_jury/voting.py tally_votes   100% 24 0 0   100% 16 0   100%
src/ai_jury/voting.py (no function)   100% 28 0 0   100% 0 0   100%
Total     100% 3616 0 9   99% 1350 2   99%

No items found using the specified filter.