Coverage report: 100%

Files Functions Classes

coverage.py v7.16.2, created at 2026-10-02 20:26 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src/keel/__init__.py (no function)   100% 1 0 0   100% 0 0   100%
src/keel/activity.py activity_contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/activity.py configured_activity_dir   100% 6 0 0   100% 2 0   100%
src/keel/activity.py resolve_dir   100% 11 0 0   100% 2 0   100%
src/keel/activity.py run_id_slug   100% 6 0 0   100% 4 0   100%
src/keel/activity.py record_path   100% 1 0 0   100% 0 0   100%
src/keel/activity.py _phase_ids   100% 1 0 0   100% 0 0   100%
src/keel/activity.py build_activity_record   100% 9 0 0   100% 8 0   100%
src/keel/activity.py validate_activity   100% 25 0 0   100% 24 0   100%
src/keel/activity.py _is_count   100% 1 0 0   100% 0 0   100%
src/keel/activity.py usage_entry_issue   100% 9 0 0   100% 8 0   100%
src/keel/activity.py with_delegate_usage   100% 9 0 0   100% 4 0   100%
src/keel/activity.py carry_usage   100% 4 0 0   100% 2 0   100%
src/keel/activity.py encode_activity   100% 2 0 0   100% 0 0   100%
src/keel/activity.py parse_activity   100% 6 0 0   100% 0 0   100%
src/keel/activity.py read_activity   100% 4 0 0   100% 2 0   100%
src/keel/activity.py write_activity   100% 1 0 0   100% 0 0   100%
src/keel/activity.py record_lock   100% 17 0 0   100% 6 0   100%
src/keel/activity.py record_delegate_usage   100% 8 0 0   100% 4 0   100%
src/keel/activity.py remove_activity   100% 5 0 0   100% 2 0   100%
src/keel/activity.py read_all_activity   100% 11 0 0   100% 4 0   100%
src/keel/activity.py (no function)   100% 41 0 0   100% 0 0   100%
src/keel/agents.py split_delegate   100% 2 0 0   100% 0 0   100%
src/keel/agents.py known_vendors   100% 6 0 0   100% 2 0   100%
src/keel/agents.py is_api_delegate   100% 1 0 0   100% 0 0   100%
src/keel/agents.py resolve_delegate_profile   100% 3 0 0   100% 2 0   100%
src/keel/agents.py is_profile_delegate   100% 1 0 0   100% 0 0   100%
src/keel/agents.py provider_names   100% 1 0 0   100% 0 0   100%
src/keel/agents.py legacy_team_seats   100% 1 0 0   100% 0 0   100%
src/keel/agents.py known_roles   100% 1 0 0   100% 0 0   100%
src/keel/agents.py strip_transport   100% 5 0 0   100% 2 0   100%
src/keel/agents.py model_base   100% 12 0 0   100% 6 0   100%
src/keel/agents.py agent_label   100% 1 0 0   100% 0 0   100%
src/keel/agents.py model_label   100% 2 0 0   100% 0 0   100%
src/keel/agents.py attribution_labels   100% 10 0 0   100% 6 0   100%
src/keel/agents.py attribution   100% 2 0 0   100% 0 0   100%
src/keel/agents.py attribution_from_implementer   100% 7 0 0   100% 4 0   100%
src/keel/agents.py profile_attribution   100% 3 0 0   100% 0 0   100%
src/keel/agents.py is_safe_model_token   100% 5 0 0   100% 4 0   100%
src/keel/agents.py (no function)   100% 29 0 0   100% 0 0   100%
src/keel/api_delegate.py _unsafe_model_reason   100% 7 0 0   100% 6 0   100%
src/keel/api_delegate.py ApiResult.usage   100% 3 0 0   100% 2 0   100%
src/keel/api_delegate.py env_key_name   100% 2 0 0   100% 0 0   100%
src/keel/api_delegate.py has_api_token   100% 2 0 0   100% 0 0   100%
src/keel/api_delegate.py present_key_names   100% 1 0 0   100% 0 0   100%
src/keel/api_delegate.py _invalid_key_reason   100% 5 0 0   100% 4 0   100%
src/keel/api_delegate.py _scrub   100% 1 0 0   100% 0 0   100%
src/keel/api_delegate.py merge_payload   100% 7 0 0   100% 4 0   100%
src/keel/api_delegate.py _build_request   100% 14 0 0   100% 6 0   100%
src/keel/api_delegate.py _parse_content   100% 15 0 0   100% 6 0   100%
src/keel/api_delegate.py _count   100% 3 0 0   100% 2 0   100%
src/keel/api_delegate.py _optional   100% 2 0 0   100% 0 0   100%
src/keel/api_delegate.py parse_usage   100% 20 0 0   100% 10 0   100%
src/keel/api_delegate.py _permitted_addresses   100% 16 0 2   100% 6 0   100%
src/keel/api_delegate.py _guarded_create_connection   100% 2 0 0   100% 0 0   100%
src/keel/api_delegate.py _guarded_create_connection.create_connection   100% 3 0 0   100% 0 0   100%
src/keel/api_delegate.py _guarded_handlers   100% 9 0 0   100% 0 0   100%
src/keel/api_delegate.py _guarded_handlers._init   100% 2 0 0   100% 0 0   100%
src/keel/api_delegate.py _guarded_handlers.GuardedHTTPHandler.http_open   100% 1 0 0   100% 0 0   100%
src/keel/api_delegate.py _guarded_handlers.GuardedHTTPSHandler.https_open   100% 1 0 0   100% 0 0   100%
src/keel/api_delegate.py build_http_only_opener   100% 7 0 0   100% 0 0   100%
src/keel/api_delegate.py _status_error   100% 7 0 0   100% 6 0   100%
src/keel/api_delegate.py generate   100% 43 0 2   100% 18 0   100%
src/keel/api_delegate.py (no function)   100% 47 0 0   100% 0 0   100%
src/keel/artifacts.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py render_pr_body   100% 18 0 0   100% 6 0   100%
src/keel/artifacts.py render_issue_update   100% 2 0 0   100% 0 0   100%
src/keel/artifacts.py render_review_verdict   100% 9 0 0   100% 4 0   100%
src/keel/artifacts.py render_jury_verdict   100% 8 0 0   100% 0 0   100%
src/keel/artifacts.py jury_verdict_summary   100% 12 0 0   100% 6 0   100%
src/keel/artifacts.py render_ship_provenance   100% 7 0 0   100% 2 0   100%
src/keel/artifacts.py render_review_cycle_summary   100% 12 0 0   100% 8 0   100%
src/keel/artifacts.py render_coverage_delta   100% 6 0 0   100% 4 0   100%
src/keel/artifacts.py render_deps_audit   100% 13 0 0   100% 8 0   100%
src/keel/artifacts.py render_flake_audit   100% 18 0 0   100% 6 0   100%
src/keel/artifacts.py _table_row   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _dict_list   100% 3 0 0   100% 2 0   100%
src/keel/artifacts.py _count   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _issue_ref   100% 3 0 0   100% 2 0   100%
src/keel/artifacts.py _scalar   100% 5 0 0   100% 4 0   100%
src/keel/artifacts.py _is_number   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _fmt_pct   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _fmt_delta   100% 4 0 0   100% 2 0   100%
src/keel/artifacts.py _coverage_row   100% 8 0 0   100% 4 0   100%
src/keel/artifacts.py _coverage_area_lines   100% 9 0 0   100% 4 0   100%
src/keel/artifacts.py _deps_sev_rank   100% 2 0 0   100% 0 0   100%
src/keel/artifacts.py _deps_counts   100% 7 0 0   100% 6 0   100%
src/keel/artifacts.py _deps_ecosystem_lines   100% 9 0 0   100% 2 0   100%
src/keel/artifacts.py _deps_licence_lines   100% 6 0 0   100% 2 0   100%
src/keel/artifacts.py render_scan_finding_issue   100% 4 0 0   100% 2 0   100%
src/keel/artifacts.py render_triage_audit   100% 5 0 0   100% 2 0   100%
src/keel/artifacts.py render_extension_result   100% 7 0 0   100% 0 0   100%
src/keel/artifacts.py render_step_handoff   100% 4 0 0   100% 0 0   100%
src/keel/artifacts.py render_run_control_halt   100% 2 0 0   100% 0 0   100%
src/keel/artifacts.py _finding_lines   100% 9 0 0   100% 6 0   100%
src/keel/artifacts.py _string_bullets   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _string_list   100% 3 0 0   100% 2 0   100%
src/keel/artifacts.py _canonical_severity   100% 2 0 0   100% 0 0   100%
src/keel/artifacts.py _severity_rank   100% 2 0 0   100% 0 0   100%
src/keel/artifacts.py _cell   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _cycle_findings   100% 5 0 0   100% 2 0   100%
src/keel/artifacts.py _cycle_verdict   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _cycle_reviewer_lines   100% 11 0 0   100% 4 0   100%
src/keel/artifacts.py _cycle_histogram   100% 7 0 0   100% 6 0   100%
src/keel/artifacts.py _aggregate_clean_areas   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _merge_recommendation   100% 8 0 0   100% 6 0   100%
src/keel/artifacts.py _cycle_summary_lines   100% 9 0 0   100% 2 0   100%
src/keel/artifacts.py _closing_reference   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _issue   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _pr   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py slug   100% 2 0 0   100% 0 0   100%
src/keel/artifacts.py _slug   100% 1 0 0   100% 0 0   100%
src/keel/artifacts.py _value   100% 3 0 0   100% 2 0   100%
src/keel/artifacts.py (no function)   100% 70 0 0   100% 0 0   100%
src/keel/branchscope.py verify   100% 14 0 0   100% 8 0   100%
src/keel/branchscope.py _check_ancestry   100% 9 0 0   100% 4 0   100%
src/keel/branchscope.py _check_isolation   100% 8 0 0   100% 6 0   100%
src/keel/branchscope.py _is_nested   100% 5 0 0   100% 2 0   100%
src/keel/branchscope.py _segments   100% 2 0 0   100% 0 0   100%
src/keel/branchscope.py (no function)   100% 9 0 0   100% 0 0   100%
src/keel/canary.py CanaryResult.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/canary.py RollbackResult.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/canary.py render_canary_result   100% 6 0 0   100% 4 0   100%
src/keel/canary.py render_rollback_result   100% 6 0 0   100% 4 0   100%
src/keel/canary.py execute_rollback   100% 13 0 0   100% 4 0   100%
src/keel/canary.py run_canary_guard   100% 21 0 0   100% 8 0   100%
src/keel/canary.py (no function)   100% 27 0 0   100% 0 0   100%
src/keel/capabilities.py validate_names   100% 6 0 0   100% 4 0   100%
src/keel/capabilities.py (no function)   100% 3 0 0   100% 0 0   100%
src/keel/capture.py CaptureMarker.as_text   100% 1 0 0   100% 0 0   100%
src/keel/capture.py CaptureMarker.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/capture.py contract_as_dict   100% 3 0 0   100% 0 0   100%
src/keel/capture.py learning_retrieval_contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/capture.py learning_quality_contract_as_dict   100% 3 0 0   100% 0 0   100%
src/keel/capture.py marker_text   100% 3 0 0   100% 0 0   100%
src/keel/capture.py build_marker   100% 4 0 0   100% 2 0   100%
src/keel/capture.py normalize_status   100% 14 0 0   100% 10 0   100%
src/keel/capture.py parse_marker   100% 6 0 0   100% 2 0   100%
src/keel/capture.py record_marker   100% 11 0 0   100% 4 0   100%
src/keel/capture.py learning_decision   100% 16 0 0   100% 12 0   100%
src/keel/capture.py capture_hook_enabled   100% 2 0 0   100% 0 0   100%
src/keel/capture.py learning_fingerprint   100% 4 0 0   100% 0 0   100%
src/keel/capture.py verify_session   100% 5 0 0   100% 0 0   100%
src/keel/capture.py reconcile_session   100% 7 0 0   100% 0 0   100%
src/keel/capture.py recursion_guard   100% 10 0 0   100% 10 0   100%
src/keel/capture.py _merged_pr_info   100% 6 0 0   100% 4 0   100%
src/keel/capture.py _reconcile_pr   100% 21 0 0   100% 14 0   100%
src/keel/capture.py _marker_of   100% 3 0 0   100% 0 0   100%
src/keel/capture.py _record_head   100% 3 0 0   100% 0 0   100%
src/keel/capture.py _verify_pr   100% 15 0 0   100% 6 0   100%
src/keel/capture.py _reconcile_result   100% 1 0 0   100% 0 0   100%
src/keel/capture.py _reconcile_marker_decision   100% 10 0 0   100% 8 0   100%
src/keel/capture.py _linked_issue_numbers   100% 11 0 0   100% 8 0   100%
src/keel/capture.py _action   100% 11 0 0   100% 8 0   100%
src/keel/capture.py _capture_policy   100% 4 0 0   100% 2 0   100%
src/keel/capture.py _learning_policy   100% 3 0 0   100% 0 0   100%
src/keel/capture.py _learning_dedupe_enabled   100% 4 0 0   100% 2 0   100%
src/keel/capture.py _marker_reason   100% 8 0 0   100% 6 0   100%
src/keel/capture.py _strings   100% 3 0 0   100% 2 0   100%
src/keel/capture.py _positive_ints   100% 3 0 0   100% 2 0   100%
src/keel/capture.py _duplicate_learning_fingerprint   100% 13 0 0   100% 10 0   100%
src/keel/capture.py _learning_result   100% 6 0 0   100% 4 0   100%
src/keel/capture.py _policy_reason   100% 2 0 0   100% 0 0   100%
src/keel/capture.py _normalize_text   100% 1 0 0   100% 0 0   100%
src/keel/capture.py _normalize_path   100% 1 0 0   100% 0 0   100%
src/keel/capture.py _slugify   100% 4 0 0   100% 2 0   100%
src/keel/capture.py learning_sink_policy   100% 2 0 0   100% 0 0   100%
src/keel/capture.py artifact_scope   100% 10 0 0   100% 6 0   100%
src/keel/capture.py learning_sink_in_worktree   100% 2 0 0   100% 0 0   100%
src/keel/capture.py _sink_writes_in_worktree   100% 6 0 0   100% 4 0   100%
src/keel/capture.py learning_sink_errors   100% 26 0 0   100% 22 0   100%
src/keel/capture.py _relative_stays_relative   100% 4 0 0   100% 2 0   100%
src/keel/capture.py _one_component   100% 1 0 0   100% 0 0   100%
src/keel/capture.py _expand   100% 4 0 0   100% 2 0   100%
src/keel/capture.py _one_line   100% 1 0 0   100% 0 0   100%
src/keel/capture.py _yaml_scalar   100% 4 0 0   100% 2 0   100%
src/keel/capture.py _yaml_sequence   100% 4 0 0   100% 2 0   100%
src/keel/capture.py learning_file_link_base   100% 8 0 0   100% 6 0   100%
src/keel/capture.py _file_bullet   100% 9 0 0   100% 4 0   100%
src/keel/capture.py _files_section   100% 4 0 0   100% 2 0   100%
src/keel/capture.py render_learning_document   100% 6 0 0   100% 0 0   100%
src/keel/capture.py learning_sink_writes   100% 8 0 0   100% 6 0   100%
src/keel/capture.py learning_sink_plan   100% 9 0 0   100% 2 0   100%
src/keel/capture.py duplicate_learning_artifact   100% 23 0 0   100% 18 0   100%
src/keel/capture.py _unquote   100% 3 0 0   100% 2 0   100%
src/keel/capture.py _front_matter   100% 11 0 0   100% 8 0   100%
src/keel/capture.py _learning_title_and_summary   100% 10 0 0   100% 6 0   100%
src/keel/capture.py learning_source_errors   100% 14 0 0   100% 12 0   100%
src/keel/capture.py learning_source_entries   100% 11 0 0   100% 6 0   100%
src/keel/capture.py learning_source_dirs   100% 8 0 0   100% 6 0   100%
src/keel/capture.py learning_query_text   100% 2 0 0   100% 0 0   100%
src/keel/capture.py _front_matter_lists   100% 16 0 0   100% 10 0   100%
src/keel/capture.py _learning_tokens   100% 1 0 0   100% 0 0   100%
src/keel/capture.py _lesson_text   100% 18 0 0   100% 12 0   100%
src/keel/capture.py _text_score   100% 13 0 0   100% 6 0   100%
src/keel/capture.py _exact_matches   100% 4 0 0   100% 0 0   100%
src/keel/capture.py dedupe_learning_hits   100% 9 0 0   100% 4 0   100%
src/keel/capture.py _render_learning_brief   100% 20 0 0   100% 10 0   100%
src/keel/capture.py render_learning_brief_section   100% 2 0 0   100% 0 0   100%
src/keel/capture.py learning_retrieval_as_dict   100% 3 0 0   100% 0 0   100%
src/keel/capture.py retrieve_relevant_learnings   100% 34 0 0   100% 14 0   100%
src/keel/capture.py learning_land_message   100% 3 0 0   100% 0 0   100%
src/keel/capture.py learning_land_plan   100% 33 0 0   100% 14 0   100%
src/keel/capture.py _land_sink_root   100% 4 0 0   100% 0 0   100%
src/keel/capture.py path_under_sink   100% 4 0 0   100% 2 0   100%
src/keel/capture.py land_sink_root   100% 1 0 0   100% 0 0   100%
src/keel/capture.py lesson_changed_files   100% 7 0 0   100% 4 0   100%
src/keel/capture.py is_branch_name   100% 7 0 0   100% 6 0   100%
src/keel/capture.py is_remote_name   100% 1 0 0   100% 0 0   100%
src/keel/capture.py carries_landing_marker   100% 1 0 0   100% 0 0   100%
src/keel/capture.py capture_only_descent   100% 26 0 0   100% 20 0   100%
src/keel/capture.py _land_path   100% 11 0 0   100% 8 0   100%
src/keel/capture.py push_rejection_is_contention   100% 2 0 0   100% 0 0   100%
src/keel/capture.py TreeEntry.render   100% 1 0 0   100% 0 0   100%
src/keel/capture.py parse_tree_listing   100% 7 0 0   100% 4 0   100%
src/keel/capture.py _tree_sort_key   100% 1 0 0   100% 0 0   100%
src/keel/capture.py upsert_tree_entry   100% 4 0 0   100% 0 0   100%
src/keel/capture.py _content_fingerprint   100% 2 0 0   100% 0 0   100%
src/keel/capture.py (no function)   100% 165 0 0   100% 0 0   100%
src/keel/captureverify.py reconcile   100% 8 0 0   100% 2 0   100%
src/keel/captureverify.py _reconcile_pr   100% 21 0 0   100% 10 0   100%
src/keel/captureverify.py _finding   100% 3 0 0   100% 0 0   100%
src/keel/captureverify.py _note   100% 1 0 0   100% 0 0   100%
src/keel/captureverify.py _capture_artifact_scope   100% 8 0 0   100% 6 0   100%
src/keel/captureverify.py _capture_artifact   100% 7 0 0   100% 4 0   100%
src/keel/captureverify.py _recorded_reviewer_count   100% 9 0 0   100% 6 0   100%
src/keel/captureverify.py (no function)   100% 16 0 0   100% 0 0   100%
src/keel/checkpoint.py checkpoint_contract_as_dict   100% 2 0 0   100% 0 0   100%
src/keel/checkpoint.py configured_checkpoint_path   100% 6 0 0   100% 2 0   100%
src/keel/checkpoint.py resolve_path   100% 11 0 0   100% 2 0   100%
src/keel/checkpoint.py build_checkpoint_record   100% 3 0 0   100% 0 0   100%
src/keel/checkpoint.py encode_checkpoint   100% 2 0 0   100% 0 0   100%
src/keel/checkpoint.py parse_checkpoint   100% 6 0 0   100% 0 0   100%
src/keel/checkpoint.py read_checkpoint   100% 4 0 0   100% 2 0   100%
src/keel/checkpoint.py write_checkpoint   100% 1 0 0   100% 0 0   100%
src/keel/checkpoint.py resume_plan_as_dict   100% 69 0 0   100% 28 0   100%
src/keel/checkpoint.py covering_checkpoint   100% 17 0 0   100% 8 0   100%
src/keel/checkpoint.py mark_merged   100% 14 0 0   100% 6 0   100%
src/keel/checkpoint.py find_orphans   100% 4 0 0   100% 0 0   100%
src/keel/checkpoint.py _known_references   100% 24 0 0   100% 16 0   100%
src/keel/checkpoint.py validate_checkpoint   100% 41 0 0   100% 32 0   100%
src/keel/checkpoint.py _live_state   100% 1 0 0   100% 0 0   100%
src/keel/checkpoint.py (no function)   100% 36 0 0   100% 0 0   100%
src/keel/classify.py privileged_change   100% 11 0 0   100% 10 0   100%
src/keel/classify.py _matches_any   100% 4 0 0   100% 4 0   100%
src/keel/classify.py is_docs_only   100% 6 0 0   100% 6 0   100%
src/keel/classify.py split_unified_diff   100% 10 0 0   100% 6 0   100%
src/keel/classify.py _tier3_downgradable   100% 7 0 0   100% 4 0   100%
src/keel/classify.py tier_for_files   100% 14 0 0   100% 16 0   100%
src/keel/classify.py (no function)   100% 16 0 0   100% 0 0   100%
src/keel/cli.py _gate_status   100% 7 0 0   100% 6 0   100%
src/keel/cli.py _run_gate_phases   100% 6 0 0   100% 4 0   100%
src/keel/cli.py _gate_runner   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _gate_runner.run   100% 12 0 0   100% 8 0   100%
src/keel/cli.py _tdd_order_outcome   100% 4 0 0   100% 0 0   100%
src/keel/cli.py _posted_panel   100% 26 0 0   100% 8 0   100%
src/keel/cli.py _run_planned_gates   100% 24 0 0   100% 14 0   100%
src/keel/cli.py _revert_check_outcome   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _revert_check_gate_outcome   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _revert_check_verdict   100% 27 0 0   100% 10 0   100%
src/keel/cli.py _reverter   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _reverter.revert   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _revert_tester   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _revert_tester.test   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _cmd_version   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _cmd_validate   100% 23 0 0   100% 4 0   100%
src/keel/cli.py _autostamp   100% 17 0 0   100% 8 0   100%
src/keel/cli.py _plan_stamp_activity   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _cmd_plan   100% 48 0 0   100% 6 0   100%
src/keel/cli.py _cmd_run_gates   100% 50 0 0   100% 18 0   100%
src/keel/cli.py _cmd_window   100% 15 0 0   100% 2 0   100%
src/keel/cli.py _cmd_claim   100% 9 0 0   100% 4 0   100%
src/keel/cli.py _cmd_release   100% 9 0 0   100% 4 0   100%
src/keel/cli.py _cmd_worktree_remove   100% 12 0 0   100% 4 0   100%
src/keel/cli.py _parse_labels   100% 3 0 0   100% 2 0   100%
src/keel/cli.py _gather_issue_facts   100% 19 0 0   100% 10 0   100%
src/keel/cli.py _cmd_guard   100% 25 0 0   100% 4 0   100%
src/keel/cli.py _hotfix_justification   100% 19 0 0   100% 12 0   100%
src/keel/cli.py _checkpoint_gate   100% 20 0 0   100% 10 0   100%
src/keel/cli.py _record_merge_in_checkpoint   100% 11 0 0   100% 4 0   100%
src/keel/cli.py _cmd_merge   100% 122 0 0   100% 52 0   100%
src/keel/cli.py _shipped_jury_availability   100% 5 0 0   100% 4 0   100%
src/keel/cli.py _review_assignment   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _remote_base_ref   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _ship_base_ref   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _cmd_ship   100% 213 0 7   100% 80 0   100%
src/keel/cli.py _cmd_ledger   100% 29 0 0   100% 4 0   100%
src/keel/cli.py _land_learning_tree   100% 11 0 0   100% 4 0   100%
src/keel/cli.py _contained_real_path   100% 6 0 2   100% 2 0   100%
src/keel/cli.py _land_learning_attempt   100% 41 0 0   100% 28 0   100%
src/keel/cli.py _drop_landed_copy   100% 8 0 0   100% 4 0   100%
src/keel/cli.py _discard_unlanded_lesson   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _unlink_untracked   100% 5 0 2   100% 2 0   100%
src/keel/cli.py _land_result   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _lesson_write   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _land_write_refusal   100% 7 0 0   100% 6 0   100%
src/keel/cli.py _write_lesson_to_land   100% 34 0 0   100% 16 0   100%
src/keel/cli.py _recorded_gate_outcomes   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _landed_lesson   100% 14 0 0   100% 8 0   100%
src/keel/cli.py _cmd_capture_land   100% 59 0 0   100% 28 0   100%
src/keel/cli.py _cmd_capture_verify   100% 51 0 0   100% 18 0   100%
src/keel/cli.py _cmd_consent_verify   100% 37 0 0   100% 10 0   100%
src/keel/cli.py _consent_ledger_records   100% 5 0 0   100% 2 0   100%
src/keel/cli.py _consent_observed_effects   100% 6 0 0   100% 2 0   100%
src/keel/cli.py _head_sha   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _cmd_close_reconcile   100% 30 0 0   100% 6 0   100%
src/keel/cli.py _done_label   100% 4 0 0   100% 0 0   100%
src/keel/cli.py _close_ledger_records   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _close_observed_issues   100% 11 0 0   100% 4 0   100%
src/keel/cli.py _cmd_dryrun_verify   100% 28 0 0   100% 6 0   100%
src/keel/cli.py _dryrun_snapshot_from_json   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _dryrun_after_snapshot   100% 11 0 0   100% 4 0   100%
src/keel/cli.py _dryrun_live_prs   100% 13 0 0   100% 8 0   100%
src/keel/cli.py _reconcile_inputs_active   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _capture_verify_merged_prs   100% 15 0 0   100% 8 0   100%
src/keel/cli.py _merged_prs_from_json   100% 7 0 0   100% 4 0   100%
src/keel/cli.py _merged_prs_from_transport   100% 13 0 0   100% 4 0   100%
src/keel/cli.py _capture_verify_verdict_counts   100% 18 0 0   100% 6 0   100%
src/keel/cli.py _cmd_capture_reconcile   100% 32 0 0   100% 8 0   100%
src/keel/cli.py _cmd_step_verify   100% 29 0 0   100% 6 0   100%
src/keel/cli.py _cmd_runcontrols   100% 24 0 0   100% 8 0   100%
src/keel/cli.py _fixloop_config_path   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _fixloop_assignment   100% 9 0 0   100% 2 0   100%
src/keel/cli.py _cmd_fixloop_brief   100% 34 0 0   100% 10 0   100%
src/keel/cli.py _loop_policy   100% 15 0 0   100% 6 0   100%
src/keel/cli.py _print_text   100% 5 0 0   100% 0 0   100%
src/keel/cli.py _cmd_loop_brief   100% 36 0 0   100% 10 0   100%
src/keel/cli.py _panel_payload   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _bundle_flag   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _bundle_path   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _review_bundle   100% 9 0 0   100% 6 0   100%
src/keel/cli.py _review_evidence_args   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _review_tier_and_contract   100% 5 0 0   100% 0 0   100%
src/keel/cli.py _cmd_review   100% 109 0 0   100% 28 0   100%
src/keel/cli.py _cmd_review_cycle_summary   100% 18 0 0   100% 2 0   100%
src/keel/cli.py _cmd_attribution   100% 37 0 0   100% 16 0   100%
src/keel/cli.py _cmd_render_report   100% 20 0 0   100% 4 0   100%
src/keel/cli.py _cmd_post_comment   100% 49 0 0   100% 8 0   100%
src/keel/cli.py _post_artifact_comment   100% 27 0 0   100% 10 0   100%
src/keel/cli.py _cmd_evidence_verify   100% 64 0 0   100% 22 0   100%
src/keel/cli.py _overtaking_prs   100% 16 0 0   100% 10 0   100%
src/keel/cli.py _merge_drift_report   100% 24 0 0   100% 6 0   100%
src/keel/cli.py _cmd_verify_merge   100% 16 0 0   100% 4 0   100%
src/keel/cli.py _cmd_scope_verify   100% 36 0 0   100% 10 0   100%
src/keel/cli.py _cmd_verify_branch   100% 29 0 0   100% 6 0   100%
src/keel/cli.py _gather_branch_facts   100% 29 0 0   100% 16 0   100%
src/keel/cli.py _owner_repo_from_args   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _linked_flag   100% 3 0 0   100% 2 0   100%
src/keel/cli.py _local_worktree_facts   100% 11 0 0   100% 8 0   100%
src/keel/cli.py _parse_worktree_porcelain   100% 10 0 0   100% 6 0   100%
src/keel/cli.py _scope_ledger_record   100% 5 0 0   100% 2 0   100%
src/keel/cli.py _cmd_status   100% 26 0 0   100% 2 0   100%
src/keel/cli.py _cmd_checkpoint   100% 32 0 0   100% 6 0   100%
src/keel/cli.py _cmd_activity   100% 39 0 0   100% 8 0   100%
src/keel/cli.py _readable_activity   100% 4 0 0   100% 0 0   100%
src/keel/cli.py _emit_activity   100% 9 0 0   100% 6 0   100%
src/keel/cli.py _cmd_scratch_dir   100% 7 0 0   100% 0 0   100%
src/keel/cli.py _cmd_gc   100% 39 0 0   100% 16 0   100%
src/keel/cli.py _observe_live_state   100% 16 0 0   100% 8 0   100%
src/keel/cli.py _cmd_resume   100% 28 0 0   100% 4 0   100%
src/keel/cli.py _cmd_standalone   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _standalone_target   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _issue_labels   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _lock_root   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _finish_merge   100% 45 0 0   100% 28 0   100%
src/keel/cli.py _forced_transport   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _falls_back_to_rest   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _SnapshotFailed.__init__   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _merge_snapshot_over_best_transport   100% 10 0 0   100% 2 0   100%
src/keel/cli.py _pr_timing   100% 7 0 0   100% 4 0   100%
src/keel/cli.py _rest_snapshot   100% 15 0 0   100% 8 0   100%
src/keel/cli.py _merge_snapshot   100% 12 0 0   100% 4 0   100%
src/keel/cli.py _rollup_verdict   100% 8 0 0   100% 4 0   100%
src/keel/cli.py _upper_or_empty   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _rollup_recency   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _dedupe_rollup   100% 12 0 0   100% 8 0   100%
src/keel/cli.py _ci_rollup_state   100% 15 0 0   100% 10 0   100%
src/keel/cli.py _verify_merge_evidence   100% 14 0 0   100% 0 0   100%
src/keel/cli.py _validated_worktree_path   100% 12 0 0   100% 6 0   100%
src/keel/cli.py _issue_context_provided   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _commit_facts   100% 9 0 0   100% 0 0   100%
src/keel/cli.py _covered_heads   100% 18 0 0   100% 10 0   100%
src/keel/cli.py _load_evidence_artifacts   100% 39 0 0   100% 10 0   100%
src/keel/cli.py _evidence_ledger_record   100% 5 0 0   100% 2 0   100%
src/keel/cli.py _ship_run_records   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _merge_ledger_record   100% 4 0 0   100% 0 0   100%
src/keel/cli.py _label_names   100% 3 0 0   100% 2 0   100%
src/keel/cli.py _dedupe_preserve   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _owner_repo   100% 3 0 0   100% 2 0   100%
src/keel/cli.py _run_context_warnings   100% 6 0 0   100% 4 0   100%
src/keel/cli.py _implementer_vocabulary_warnings   100% 11 0 0   100% 6 0   100%
src/keel/cli.py _nonblank   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _comment_artifact_marker   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _parse_comment_target   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _looks_like_body_file_literal   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _find_comment_match   100% 11 0 0   100% 8 0   100%
src/keel/cli.py _with_run_id_marker   100% 3 0 0   100% 2 0   100%
src/keel/cli.py _comment_has_run_id   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _finish_post_comment   100% 12 0 0   100% 6 0   100%
src/keel/cli.py _read_optional_text   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _read_json_object   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _dedupe_ints   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _read_json_list   100% 7 0 0   100% 4 0   100%
src/keel/cli.py _write_json_list   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _read_optional_json_list   100% 3 0 0   100% 2 0   100%
src/keel/cli.py _event_from_args   100% 7 0 0   100% 4 0   100%
src/keel/cli.py _step_caps_from_args   100% 14 0 0   100% 6 0   100%
src/keel/cli.py _verdict_count_arg   100% 11 0 0   100% 4 0   100%
src/keel/cli.py _gate_result_arg   100% 9 0 0   100% 6 0   100%
src/keel/cli.py _phase_implementer_arg   100% 9 0 0   100% 6 0   100%
src/keel/cli.py _loop_iteration_arg   100% 15 0 0   100% 8 0   100%
src/keel/cli.py _gh_json   100% 8 0 0   100% 4 0   100%
src/keel/cli.py _gh_json_list   100% 10 0 0   100% 6 0   100%
src/keel/cli.py _pr_changed_files   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _pr_patches   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _linked_issue_from_body   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _approved_consent   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _consent_mode   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _has_live_consent_scope   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _cmd_capabilities   100% 25 0 0   100% 8 0   100%
src/keel/cli.py _cmd_project_commands   100% 25 0 0   100% 10 0   100%
src/keel/cli.py _ask   100% 5 0 0   100% 0 0   100%
src/keel/cli.py _warn   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _ledger_warning   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _wizard_catalog   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _cmd_init   100% 35 0 0   100% 12 0   100%
src/keel/cli.py _derive_owner_repo   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _render_scaffolded_config   100% 7 0 0   100% 2 0   100%
src/keel/cli.py _report_install   100% 4 0 0   100% 4 0   100%
src/keel/cli.py _report_adapter_rows   100% 4 0 0   100% 4 0   100%
src/keel/cli.py _project_only_commands   100% 8 0 0   100% 2 0   100%
src/keel/cli.py _scan_orphans   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _report_orphan_rows   100% 2 0 0   100% 2 0   100%
src/keel/cli.py _fetch_latest_pypi_version   100% 11 0 1   100% 2 0   100%
src/keel/cli.py _doctor_state_paths   100% 9 0 0   100% 2 0   100%
src/keel/cli.py _doctor_checkout_root   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _short   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _no_interpreter   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _kw   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _probe_python   100% 10 0 0   100% 2 0   100%
src/keel/cli.py _doctor_python_toolchain   100% 20 0 0   100% 12 0   100%
src/keel/cli.py _doctor_policy_labels   100% 27 0 0   100% 10 0   100%
src/keel/cli.py _doctor_github_cli   100% 13 0 0   100% 8 0   100%
src/keel/cli.py _doctor_agent_hosts   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _doctor_fix_labels   100% 30 0 0   100% 12 0   100%
src/keel/cli.py _cmd_doctor   100% 30 0 0   100% 10 0   100%
src/keel/cli.py _delegate_config   100% 5 0 0   100% 0 0   100%
src/keel/cli.py _delegate_plan   100% 9 0 0   100% 0 0   100%
src/keel/cli.py _delegate_child_argv   100% 5 0 0   100% 4 0   100%
src/keel/cli.py _cmd_delegate_run   100% 24 0 0   100% 10 0   100%
src/keel/cli.py _record_delegate_usage   100% 10 0 0   100% 4 0   100%
src/keel/cli.py _delegate_bad_run_id   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _cmd_delegate_wait   100% 9 0 0   100% 4 0   100%
src/keel/cli.py _cmd_delegate_status   100% 17 0 0   100% 10 0   100%
src/keel/cli.py _cmd_install_adapter   100% 22 0 0   100% 10 0   100%
src/keel/cli.py _cmd_setup   100% 46 0 0   100% 14 0   100%
src/keel/cli.py _cmd_adapter_status   100% 19 0 0   100% 6 0   100%
src/keel/cli.py _cmd_update_adapter   100% 9 0 0   100% 2 0   100%
src/keel/cli.py _cmd_sync   100% 11 0 0   100% 4 0   100%
src/keel/cli.py _parse_legacy_mapping   100% 6 0 0   100% 4 0   100%
src/keel/cli.py _cmd_install_legacy_wrappers   100% 22 0 0   100% 8 0   100%
src/keel/cli.py _capability_requirement   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _swarm_overrides   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _swarm_issue_numbers   100% 8 0 0   100% 6 0   100%
src/keel/cli.py _read_swarm_issue   100% 6 0 0   100% 2 0   100%
src/keel/cli.py _swarm_issue_scopes   100% 29 0 0   100% 16 0   100%
src/keel/cli.py _cmd_swarm_plan   100% 19 0 0   100% 6 0   100%
src/keel/cli.py _cmd_swarm_status   100% 31 0 0   100% 12 0   100%
src/keel/cli.py _swarm_status_leftovers   100% 29 0 0   100% 18 0   100%
src/keel/cli.py _now_iso   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _swarm_run_consent   100% 6 0 0   100% 0 0   100%
src/keel/cli.py _swarm_run_live   100% 15 0 0   100% 6 0   100%
src/keel/cli.py _record_swarm_delegation   100% 5 0 0   100% 0 0   100%
src/keel/cli.py _cmd_swarm_run   100% 48 0 0   100% 18 0   100%
src/keel/cli.py _swarm_land_find_pull_request   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _swarm_land_find_pull_request.find   100% 13 0 0   100% 6 0   100%
src/keel/cli.py _swarm_land_merge   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _swarm_land_merge.merge   100% 14 0 0   100% 8 0   100%
src/keel/cli.py _swarm_post_closure   100% 7 0 0   100% 2 0   100%
src/keel/cli.py _swarm_issue_closed   100% 5 0 0   100% 0 0   100%
src/keel/cli.py _swarm_land_close   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _swarm_land_close.close   100% 53 0 0   100% 18 0   100%
src/keel/cli.py _swarm_land_close.close.left_open   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _swarm_land_plan   100% 27 0 0   100% 12 0   100%
src/keel/cli.py _cmd_swarm_land   100% 21 0 0   100% 6 0   100%
src/keel/cli.py _swarm_review_consent   100% 7 0 0   100% 0 0   100%
src/keel/cli.py _swarm_review_argv   100% 10 0 0   100% 8 0   100%
src/keel/cli.py _swarm_review_read_pull_request   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _swarm_review_read_pull_request.read   100% 14 0 0   100% 6 0   100%
src/keel/cli.py _swarm_review_read_head   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _swarm_review_read_head.read   100% 4 0 0   100% 0 0   100%
src/keel/cli.py _swarm_review_read_issue   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _swarm_review_read_issue.read   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _swarm_review_post   100% 4 0 0   100% 0 0   100%
src/keel/cli.py _swarm_review_post.post   100% 12 0 0   100% 2 0   100%
src/keel/cli.py _swarm_review_plan   100% 7 0 0   100% 2 0   100%
src/keel/cli.py _swarm_review_plan.resolve   100% 3 0 0   100% 2 0   100%
src/keel/cli.py _cmd_swarm_review   100% 26 0 0   100% 6 0   100%
src/keel/cli.py _cmd_canary   100% 11 0 0   100% 2 0   100%
src/keel/cli.py _cmd_rollback   100% 6 0 0   100% 2 0   100%
src/keel/cli.py _cmd_cost_report   100% 6 0 0   100% 2 0   100%
src/keel/cli.py build_parser   100% 749 0 0   100% 0 0   100%
src/keel/cli.py _add_jury_flags   100% 3 0 0   100% 0 0   100%
src/keel/cli.py _add_bench_args   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _add_staffing_args   100% 5 0 0   100% 2 0   100%
src/keel/cli.py _add_ship_parser   100% 49 0 0   100% 0 0   100%
src/keel/cli.py _add_wizard_arguments   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _issue_scope_override   100% 4 0 0   100% 0 0   100%
src/keel/cli.py _add_issue_scope_arg   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _positive_int   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _bounded_int   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _bounded_int.integer   100% 5 0 0   100% 2 0   100%
src/keel/cli.py _nonnegative_int   100% 4 0 0   100% 2 0   100%
src/keel/cli.py _parse_pr_issue_mapping   100% 9 0 0   100% 2 0   100%
src/keel/cli.py _today   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _retrieve_learnings   100% 9 0 0   100% 2 0   100%
src/keel/cli.py _capture_changed_files   100% 5 0 0   100% 2 0   100%
src/keel/cli.py _capture_issue_facts   100% 22 0 0   100% 12 0   100%
src/keel/cli.py _gate_word   100% 5 0 0   100% 4 0   100%
src/keel/cli.py _learning_sections   100% 10 0 0   100% 2 0   100%
src/keel/cli.py _write_learning_sink   100% 23 0 3   100% 4 0   100%
src/keel/cli.py _duplicate_learning_artifact   100% 6 0 0   100% 4 0   100%
src/keel/cli.py _recordable_artifact   100% 6 0 0   100% 0 0   100%
src/keel/cli.py _recorded_artifact   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _resolve_under_root   100% 2 0 0   100% 0 0   100%
src/keel/cli.py _resolved_capture_status   100% 1 0 0   100% 0 0   100%
src/keel/cli.py _capture_status_arg   100% 7 0 0   100% 2 0   100%
src/keel/cli.py main   100% 17 0 0   100% 2 0   100%
src/keel/cli.py (no function)   100% 309 0 0   100% 0 0   100%
src/keel/closeorder.py ObservedIssue.has_label   100% 1 0 0   100% 0 0   100%
src/keel/closeorder.py record_attests_merge   100% 11 0 0   100% 8 0   100%
src/keel/closeorder.py latest_record_for_issue   100% 11 0 0   100% 8 0   100%
src/keel/closeorder.py reconcile   100% 15 0 0   100% 6 0   100%
src/keel/closeorder.py (no function)   100% 20 0 0   100% 0 0   100%
src/keel/closure.py watermark_body   100% 2 0 0   100% 0 0   100%
src/keel/closure.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/closure.py render_closure_comment   100% 15 0 0   100% 0 0   100%
src/keel/closure.py _head_sha   100% 2 0 0   100% 0 0   100%
src/keel/closure.py _fix_rounds   100% 7 0 0   100% 4 0   100%
src/keel/closure.py _stage_suffix   100% 1 0 0   100% 0 0   100%
src/keel/closure.py _target_line   100% 3 0 0   100% 2 0   100%
src/keel/closure.py _reviewers   100% 11 0 0   100% 6 0   100%
src/keel/closure.py _is_reviewer   100% 1 0 0   100% 0 0   100%
src/keel/closure.py _is_jury   100% 1 0 0   100% 0 0   100%
src/keel/closure.py _pull_request   100% 2 0 0   100% 0 0   100%
src/keel/closure.py _changed_files   100% 10 0 0   100% 2 0   100%
src/keel/closure.py _docs_touched   100% 6 0 0   100% 2 0   100%
src/keel/closure.py _is_doc   100% 6 0 0   100% 4 0   100%
src/keel/closure.py _capture   100% 10 0 0   100% 4 0   100%
src/keel/closure.py _learning   100% 8 0 0   100% 4 0   100%
src/keel/closure.py _run_context   100% 2 0 0   100% 0 0   100%
src/keel/closure.py _jury_panel   100% 7 0 0   100% 2 0   100%
src/keel/closure.py _jury_panel_marker   100% 4 0 0   100% 2 0   100%
src/keel/closure.py _panel_detail   100% 3 0 0   100% 0 0   100%
src/keel/closure.py _implement_mode   100% 4 0 0   100% 2 0   100%
src/keel/closure.py _tdd_part   100% 6 0 0   100% 2 0   100%
src/keel/closure.py _loop_part   100% 15 0 0   100% 8 0   100%
src/keel/closure.py _by   100% 3 0 0   100% 2 0   100%
src/keel/closure.py _short   100% 3 0 0   100% 2 0   100%
src/keel/closure.py _unknown   100% 3 0 0   100% 2 0   100%
src/keel/closure.py _jury_mode   100% 3 0 0   100% 2 0   100%
src/keel/closure.py _consent   100% 7 0 0   100% 0 0   100%
src/keel/closure.py _is_scope   100% 1 0 0   100% 0 0   100%
src/keel/closure.py _value   100% 3 0 0   100% 2 0   100%
src/keel/closure.py _watermark   100% 5 0 0   100% 4 0   100%
src/keel/closure.py _jury_sat   100% 6 0 0   100% 2 0   100%
src/keel/closure.py (no function)   100% 51 0 0   100% 0 0   100%
src/keel/config.py _is_allowed_api_key_env   100% 2 0 0   100% 0 0   100%
src/keel/config.py ConfigError.__init__   100% 4 0 0   100% 0 0   100%
src/keel/config.py load_schema   100% 1 0 0   100% 0 0   100%
src/keel/config.py validate_data   100% 1 0 0   100% 0 0   100%
src/keel/config.py DelegateProfile.label_vendor   100% 1 0 0   100% 0 0   100%
src/keel/config.py DelegateProfile.role_args   100% 3 0 0   100% 2 0   100%
src/keel/config.py ProjectConfig.slot   100% 3 0 0   100% 2 0   100%
src/keel/config.py timezone_issue   100% 5 0 0   100% 0 0   100%
src/keel/config.py merge_window_pattern   100% 1 0 0   100% 0 0   100%
src/keel/config.py merge_window_issue   100% 7 0 0   100% 4 0   100%
src/keel/config.py _parsed   100% 4 0 0   100% 0 0   100%
src/keel/config.py _merge_window_issues   100% 16 0 0   100% 12 0   100%
src/keel/config.py _build   100% 6 0 0   100% 0 0   100%
src/keel/config.py parse_config   100% 17 0 0   100% 10 0   100%
src/keel/config.py load_config   100% 6 0 0   100% 0 0   100%
src/keel/config.py config_hash   100% 2 0 0   100% 0 0   100%
src/keel/config.py _is_env_var_name   100% 1 0 0   100% 0 0   100%
src/keel/config.py _as_ip   100% 8 0 0   100% 0 0   100%
src/keel/config.py _is_cloud_metadata_or_link_local   100% 4 0 0   100% 2 0   100%
src/keel/config.py _is_private_address   100% 4 0 0   100% 2 0   100%
src/keel/config.py resolved_address_refusal   100% 8 0 0   100% 6 0   100%
src/keel/config.py _remote_endpoint_status   100% 7 0 0   100% 4 0   100%
src/keel/config.py endpoint_issues   100% 23 0 0   100% 14 0   100%
src/keel/config.py _role_agents   100% 3 0 0   100% 2 0   100%
src/keel/config.py _profile_vendors   100% 3 0 0   100% 2 0   100%
src/keel/config.py _validate_delegate_profiles   100% 42 0 0   100% 36 0   100%
src/keel/config.py vendor_label_errors   100% 12 0 0   100% 10 0   100%
src/keel/config.py _learning_sink_issues   100% 7 0 0   100% 4 0   100%
src/keel/config.py _policy_capability_fields   100% 11 0 0   100% 10 0   100%
src/keel/config.py delegate_profiles_dict   100% 4 0 0   100% 2 0   100%
src/keel/config.py _canonical   100% 1 0 0   100% 0 0   100%
src/keel/config.py (no function)   100% 131 0 0   100% 0 0   100%
src/keel/consent.py side_effect_scopes   100% 12 0 0   100% 8 0   100%
src/keel/consent.py capability_side_effects   100% 4 0 0   100% 2 0   100%
src/keel/consent.py escalation_contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/consent.py evaluate_escalation   100% 7 0 0   100% 0 0   100%
src/keel/consent.py normalize_scopes   100% 13 0 0   100% 10 0   100%
src/keel/consent.py build_consent_contract   100% 15 0 0   100% 4 0   100%
src/keel/consent.py assert_operator_consent   100% 5 0 0   100% 2 0   100%
src/keel/consent.py _status   100% 7 0 0   100% 6 0   100%
src/keel/consent.py _prompt   100% 7 0 0   100% 2 0   100%
src/keel/consent.py _record   100% 2 0 0   100% 0 0   100%
src/keel/consent.py _sort_scopes   100% 1 0 0   100% 0 0   100%
src/keel/consent.py _risk_tier   100% 1 0 0   100% 0 0   100%
src/keel/consent.py _trust_signal   100% 1 0 0   100% 0 0   100%
src/keel/consent.py _sample   100% 3 0 0   100% 0 0   100%
src/keel/consent.py _escalation_reason   100% 15 0 0   100% 14 0   100%
src/keel/consent.py resolve_consent_mode   100% 4 0 0   100% 2 0   100%
src/keel/consent.py resolve_approved_consent   100% 18 0 0   100% 16 0   100%
src/keel/consent.py (no function)   100% 32 0 0   100% 0 0   100%
src/keel/consentverify.py ObservedEffects.as_kinds   100% 10 0 0   100% 8 0   100%
src/keel/consentverify.py required_scopes_for_effect   100% 5 0 0   100% 2 0   100%
src/keel/consentverify.py scope_effect_table   100% 1 0 0   100% 0 0   100%
src/keel/consentverify.py reconcile   100% 12 0 0   100% 4 0   100%
src/keel/consentverify.py _verdict   100% 3 0 0   100% 2 0   100%
src/keel/consentverify.py consent_record_from_ledger   100% 11 0 0   100% 4 0   100%
src/keel/consentverify.py consent_for_pr   100% 10 0 0   100% 4 0   100%
src/keel/consentverify.py _head_refusal   100% 7 0 0   100% 4 0   100%
src/keel/consentverify.py _delegation_summary   100% 2 0 0   100% 0 0   100%
src/keel/consentverify.py (no function)   100% 30 0 0   100% 0 0   100%
src/keel/contracts.py available_commands   100% 1 0 0   100% 0 0   100%
src/keel/contracts.py command_graph   100% 5 0 0   100% 2 0   100%
src/keel/contracts.py build_command_contract   100% 33 0 0   100% 22 0   100%
src/keel/contracts.py workflow_profile   100% 27 0 0   100% 26 0   100%
src/keel/contracts.py command_side_effects   100% 10 0 0   100% 6 0   100%
src/keel/contracts.py reporting_contract_as_dict   100% 9 0 0   100% 6 0   100%
src/keel/contracts.py project_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/contracts.py gate_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/contracts.py gate_outcome_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/contracts.py extension_hooks_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/contracts.py ship_result_as_dict   100% 23 0 0   100% 4 0   100%
src/keel/contracts.py _testing_summary   100% 14 0 0   100% 10 0   100%
src/keel/contracts.py _docs_impact   100% 6 0 0   100% 4 0   100%
src/keel/contracts.py _is_doc_path   100% 2 0 0   100% 0 0   100%
src/keel/contracts.py _finding_summaries   100% 1 0 0   100% 0 0   100%
src/keel/contracts.py standalone_result_as_dict   100% 16 0 0   100% 12 0   100%
src/keel/contracts.py feedback_workflow_as_dict   100% 3 0 0   100% 0 0   100%
src/keel/contracts.py scan_contract_as_dict   100% 12 0 0   100% 4 0   100%
src/keel/contracts.py session_contract_as_dict   100% 13 0 0   100% 8 0   100%
src/keel/contracts.py morning_contract_as_dict   100% 6 0 0   100% 0 0   100%
src/keel/contracts.py _health_provider_as_dict   100% 12 0 0   100% 6 0   100%
src/keel/contracts.py _missing_capabilities   100% 4 0 0   100% 2 0   100%
src/keel/contracts.py _priority_sources   100% 8 0 0   100% 6 0   100%
src/keel/contracts.py _report_destinations   100% 1 0 0   100% 0 0   100%
src/keel/contracts.py _deferral_queue_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/contracts.py _feedback_workflow_policy   100% 5 0 0   100% 2 0   100%
src/keel/contracts.py _deep_merge   100% 14 0 0   100% 12 0   100%
src/keel/contracts.py _scan_int   100% 2 0 0   100% 0 0   100%
src/keel/contracts.py _scan_float   100% 2 0 0   100% 0 0   100%
src/keel/contracts.py _near_text_similarity   100% 3 0 0   100% 0 0   100%
src/keel/contracts.py _target_identifier   100% 6 0 0   100% 4 0   100%
src/keel/contracts.py _adapter_steps   100% 12 0 0   100% 6 0   100%
src/keel/contracts.py _finding_as_dict   100% 2 0 0   100% 0 0   100%
src/keel/contracts.py (no function)   100% 50 0 0   100% 0 0   100%
src/keel/cost.py _bare_model_id   100% 12 0 0   100% 8 0   100%
src/keel/cost.py normalize_model_name   100% 10 0 0   100% 8 0   100%
src/keel/cost.py _family_root   100% 3 0 0   100% 0 0   100%
src/keel/cost.py estimate_token_cost   100% 4 0 0   100% 0 0   100%
src/keel/cost.py estimate_benchmark_cost   100% 2 0 0   100% 0 0   100%
src/keel/cost.py CostReport.token_basis   100% 7 0 0   100% 6 0   100%
src/keel/cost.py CostReport.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/cost.py calculate_cost_report   100% 39 0 0   100% 12 0   100%
src/keel/cost.py _measured_parts   100% 10 0 0   100% 6 0   100%
src/keel/cost.py _token_basis_lines   100% 12 0 0   100% 6 0   100%
src/keel/cost.py render_cost_report   100% 11 0 0   100% 8 0   100%
src/keel/cost.py generate_cost_report   100% 6 0 0   100% 2 0   100%
src/keel/cost.py (no function)   100% 42 0 0   100% 0 0   100%
src/keel/delegate.py DelegateError.__init__   100% 3 0 0   100% 0 0   100%
src/keel/delegate.py RunPlan.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/delegate.py resolve_provider   100% 11 0 0   100% 4 0   100%
src/keel/delegate.py _lookup   100% 9 0 0   100% 10 0   100%
src/keel/delegate.py is_safe_body_model_token   100% 3 0 0   100% 2 0   100%
src/keel/delegate.py model_reaches_argv   100% 1 0 0   100% 0 0   100%
src/keel/delegate.py model_token_issue   100% 9 0 0   100% 8 0   100%
src/keel/delegate.py _check_model   100% 3 0 0   100% 2 0   100%
src/keel/delegate.py _profile_provider   100% 3 0 1   100% 2 0   100%
src/keel/delegate.py plan_run   100% 30 0 0   100% 14 0   100%
src/keel/delegate.py _effective_effort   100% 5 0 0   100% 4 0   100%
src/keel/delegate.py _transport_of   100% 7 0 0   100% 6 0   100%
src/keel/delegate.py is_absolute_cwd   100% 2 0 0   100% 0 0   100%
src/keel/delegate.py _builtin_argv   100% 28 0 0   100% 18 0   100%
src/keel/delegate.py _profile_argv   100% 20 0 0   100% 8 0   100%
src/keel/delegate.py _request   100% 8 0 0   100% 6 0   100%
src/keel/delegate.py _apply_effort   100% 17 0 0   100% 12 0   100%
src/keel/delegate.py _agy_effort   100% 8 0 0   100% 8 0   100%
src/keel/delegate.py _attribution   100% 6 0 0   100% 4 0   100%
src/keel/delegate.py stream_json_frame   100% 1 0 0   100% 0 0   100%
src/keel/delegate.py parse_stream_json   100% 17 0 0   100% 10 0   100%
src/keel/delegate.py parse_ollama_response   100% 4 0 0   100% 2 0   100%
src/keel/delegate.py ollama_payload   100% 1 0 0   100% 0 0   100%
src/keel/delegate.py (no function)   100% 86 0 0   100% 0 0   100%
src/keel/delegaterun.py check_run_id   100% 3 0 0   100% 2 0   100%
src/keel/delegaterun.py new_run_id   100% 2 0 0   100% 0 0   100%
src/keel/delegaterun.py state_dir   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py state_path   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py out_path   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py pid_path   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py crashed_path   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py write_pid   100% 2 0 0   100% 0 0   100%
src/keel/delegaterun.py read_pid   100% 4 0 0   100% 0 0   100%
src/keel/delegaterun.py clear_sidecars   100% 3 0 0   100% 2 0   100%
src/keel/delegaterun.py read_crash   100% 5 0 0   100% 0 0   100%
src/keel/delegaterun.py run_record   100% 10 0 0   100% 4 0   100%
src/keel/delegaterun.py _read_text   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py _now_iso   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py _utc_now   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py result_document   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py rate_limited   100% 2 0 0   100% 0 0   100%
src/keel/delegaterun.py vendor_timed_out   100% 2 0 0   100% 0 0   100%
src/keel/delegaterun.py final_stream_event   100% 12 0 0   100% 6 0   100%
src/keel/delegaterun.py failure_signal   100% 11 0 0   100% 8 0   100%
src/keel/delegaterun.py execute   100% 14 0 0   100% 6 0   100%
src/keel/delegaterun.py execute.finish   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py _run_argv   100% 26 0 0   100% 16 0   100%
src/keel/delegaterun.py _run_api   100% 5 0 0   100% 2 0   100%
src/keel/delegaterun.py _run_ollama   100% 23 0 0   100% 4 0   100%
src/keel/delegaterun.py _tail   100% 2 0 0   100% 0 0   100%
src/keel/delegaterun.py load_state   100% 8 0 0   100% 0 0   100%
src/keel/delegaterun.py write_state   100% 3 0 0   100% 0 0   100%
src/keel/delegaterun.py list_runs   100% 9 0 2   100% 4 0   100%
src/keel/delegaterun.py start_detached   100% 20 0 0   100% 0 0   100%
src/keel/delegaterun.py _failed_spawn_record   100% 6 0 0   100% 0 0   100%
src/keel/delegaterun.py _spawn_failure   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py _detached_failure   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py finish_detached   100% 5 0 0   100% 0 0   100%
src/keel/delegaterun.py process_is_alive   100% 7 0 2   100% 0 0   100%
src/keel/delegaterun.py _abandoned   100% 12 0 0   100% 6 0   100%
src/keel/delegaterun.py _mark_crashed   100% 3 0 0   100% 0 0   100%
src/keel/delegaterun.py reap_abandoned   100% 10 0 0   100% 6 0   100%
src/keel/delegaterun.py wait   100% 22 0 0   100% 14 0   100%
src/keel/delegaterun.py planning_failure   100% 1 0 0   100% 0 0   100%
src/keel/delegaterun.py (no function)   100% 64 0 0   100% 0 0   100%
src/keel/doctor.py CheckResult.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/doctor.py _parse_version   100% 3 0 0   100% 2 0   100%
src/keel/doctor.py _pad   100% 2 0 0   100% 0 0   100%
src/keel/doctor.py constraint_satisfied   100% 22 0 2   100% 14 0   100%
src/keel/doctor.py _check_cli_version   100% 12 0 0   100% 8 0   100%
src/keel/doctor.py _check_adapter_version   100% 10 0 0   100% 8 0   100%
src/keel/doctor.py _check_orphan_adapters   100% 3 0 0   100% 2 0   100%
src/keel/doctor.py _check_core_version   100% 9 0 0   100% 6 0   100%
src/keel/doctor.py _check_state_paths   100% 8 0 0   100% 6 0   100%
src/keel/doctor.py _check_python_toolchain   100% 22 0 0   100% 14 0   100%
src/keel/doctor.py _within   100% 2 0 0   100% 0 0   100%
src/keel/doctor.py _check_checkout_binding   100% 8 0 0   100% 6 0   100%
src/keel/doctor.py _check_providers   100% 13 0 0   100% 6 0   100%
src/keel/doctor.py _label_values   100% 3 0 0   100% 2 0   100%
src/keel/doctor.py _qualify   100% 1 0 0   100% 0 0   100%
src/keel/doctor.py declared_labels   100% 13 0 0   100% 8 0   100%
src/keel/doctor.py missing_labels   100% 2 0 0   100% 0 0   100%
src/keel/doctor.py _check_policy_labels   100% 14 0 0   100% 6 0   100%
src/keel/doctor.py _check_github_cli   100% 13 0 0   100% 8 0   100%
src/keel/doctor.py _check_agent_hosts   100% 9 0 0   100% 4 0   100%
src/keel/doctor.py run_doctor   100% 12 0 0   100% 8 0   100%
src/keel/doctor.py render_report   100% 9 0 0   100% 4 0   100%
src/keel/doctor.py render_providers   100% 19 0 0   100% 8 0   100%
src/keel/doctor.py (no function)   100% 47 0 0   100% 0 0   100%
src/keel/dryrunverify.py issue_branch_pattern   100% 2 0 0   100% 0 0   100%
src/keel/dryrunverify.py reconcile   100% 15 0 0   100% 6 0   100%
src/keel/dryrunverify.py _added   100% 2 0 0   100% 0 0   100%
src/keel/dryrunverify.py (no function)   100% 19 0 0   100% 0 0   100%
src/keel/evidence.py EvidenceItem.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py gate_active   100% 3 0 0   100% 2 0   100%
src/keel/evidence.py gate_decision   100% 16 0 0   100% 14 0   100%
src/keel/evidence.py _gate_decision   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py _has_trusted_ship_provenance   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py _has_trusted_ship_assessment   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py _is_ship_assessment_source   100% 5 0 0   100% 2 0   100%
src/keel/evidence.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py required_items   100% 18 0 0   100% 10 0   100%
src/keel/evidence.py verify   100% 41 0 0   100% 16 0   100%
src/keel/evidence.py refusal_reason   100% 8 0 0   100% 4 0   100%
src/keel/evidence.py _require_distinct_vendors   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py review_panel   100% 3 0 0   100% 0 0   100%
src/keel/evidence.py _minimum_jury_vendors   100% 5 0 0   100% 2 0   100%
src/keel/evidence.py _verdict_substance_findings   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py _malformed_marker_findings   100% 9 0 0   100% 6 0   100%
src/keel/evidence.py _distinct_vendor_finding   100% 14 0 0   100% 10 0   100%
src/keel/evidence.py _result_reason   100% 5 0 0   100% 4 0   100%
src/keel/evidence.py _closure_mismatch_scopes   100% 8 0 0   100% 6 0   100%
src/keel/evidence.py _evidence_counts   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py _is_present   100% 10 0 0   100% 8 0   100%
src/keel/evidence.py _body   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py _header_line   100% 6 0 0   100% 4 0   100%
src/keel/evidence.py _unwrap_html_comment   100% 3 0 0   100% 2 0   100%
src/keel/evidence.py header_markers   100% 4 0 0   100% 2 0   100%
src/keel/evidence.py marker_in_header   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py _has_closure_marker   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py _normalize_closure_body   100% 9 0 0   100% 6 0   100%
src/keel/evidence.py closure_body_matches_record   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py _is_closure_comment   100% 7 0 0   100% 6 0   100%
src/keel/evidence.py _run_context_findings   100% 9 0 0   100% 6 0   100%
src/keel/evidence.py _has_empty_run_context   100% 4 0 0   100% 2 0   100%
src/keel/evidence.py _run_context_fields   100% 14 0 0   100% 10 0   100%
src/keel/evidence.py _is_trusted_source   100% 6 0 0   100% 4 0   100%
src/keel/evidence.py _is_ship_assessment   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py count_review_verdicts   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py _review_evidence_keys   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py verdict_reviewers   100% 7 0 0   100% 4 0   100%
src/keel/evidence.py _posted_at   100% 5 0 0   100% 4 0   100%
src/keel/evidence.py review_verdict_token   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py _line_token   100% 7 0 0   100% 4 0   100%
src/keel/evidence.py verdict_approves   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py jury_verdict_token   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py jury_verdict_approves   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py _not_approved_message   100% 5 0 0   100% 2 0   100%
src/keel/evidence.py _verdict_head   100% 5 0 0   100% 2 0   100%
src/keel/evidence.py _reviewer_name   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py _review_tally   100% 34 0 0   100% 18 0   100%
src/keel/evidence.py _review_evidence_keys_and_rejections   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py _review_vendor_provenance   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py _verdict_not_approved_findings   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py distinct_vendor_check   100% 15 0 0   100% 10 0   100%
src/keel/evidence.py panel_vendor_check   100% 11 0 0   100% 6 0   100%
src/keel/evidence.py _label_values   100% 8 0 0   100% 6 0   100%
src/keel/evidence.py agent_label_vendors   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py model_label_bases   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py ledger_implementer   100% 7 0 0   100% 4 0   100%
src/keel/evidence.py ledger_implementer_vendor   100% 6 0 0   100% 2 0   100%
src/keel/evidence.py attribution_check   100% 7 0 0   100% 4 0   100%
src/keel/evidence.py attribution_vocabulary_check   100% 18 0 0   100% 8 0   100%
src/keel/evidence.py _attribution_vocabulary_finding   100% 9 0 0   100% 4 0   100%
src/keel/evidence.py _unarmed_finding   100% 3 0 0   100% 2 0   100%
src/keel/evidence.py _attribution_finding   100% 10 0 0   100% 6 0   100%
src/keel/evidence.py _verdict_prose   100% 8 0 0   100% 4 0   100%
src/keel/evidence.py _verdict_corroborators   100% 7 0 0   100% 4 0   100%
src/keel/evidence.py _review_act_clause   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py verdict_substance   100% 13 0 0   100% 8 0   100%
src/keel/evidence.py _reviewer_key   100% 9 0 0   100% 4 0   100%
src/keel/evidence.py _matches_head   100% 9 0 0   100% 4 0   100%
src/keel/evidence.py _fields   100% 19 0 0   100% 14 0   100%
src/keel/evidence.py _is_review_verdict_body   100% 3 0 0   100% 2 0   100%
src/keel/evidence.py _has_trusted_review_marker   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py jury_participating_vendors   100% 4 0 0   100% 2 0   100%
src/keel/evidence.py jury_panel_size   100% 2 0 0   100% 0 0   100%
src/keel/evidence.py panel_verdict_posted   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py shipped_panel_decision   100% 13 0 0   100% 10 0   100%
src/keel/evidence.py _jury_panel_decision   100% 11 0 0   100% 8 0   100%
src/keel/evidence.py _parse_vendor_count   100% 7 0 0   100% 2 0   100%
src/keel/evidence.py _is_jury_verdict   100% 6 0 0   100% 4 0   100%
src/keel/evidence.py _standing_jury_verdict   100% 5 0 0   100% 4 0   100%
src/keel/evidence.py standing_jury_verdict   100% 3 0 0   100% 2 0   100%
src/keel/evidence.py verdict_head   100% 1 0 0   100% 0 0   100%
src/keel/evidence.py _jury_not_approved_finding   100% 10 0 0   100% 4 0   100%
src/keel/evidence.py (no function)   100% 155 0 0   100% 0 0   100%
src/keel/extensions.py split_frontmatter   100% 9 0 0   100% 6 0   100%
src/keel/extensions.py parse_extension   100% 48 0 0   100% 32 0   100%
src/keel/extensions.py load_extensions   100% 18 0 0   100% 6 0   100%
src/keel/extensions.py (no function)   100% 30 0 2   100% 0 0   100%
src/keel/findings.py Finding.__post_init__   100% 2 0 0   100% 2 0   100%
src/keel/findings.py decision_for   100% 4 0 0   100% 0 0   100%
src/keel/findings.py is_anchorable   100% 1 0 0   100% 0 0   100%
src/keel/findings.py sort_findings   100% 1 0 0   100% 0 0   100%
src/keel/findings.py summarize   100% 7 0 0   100% 4 0   100%
src/keel/findings.py (no function)   100% 28 0 0   100% 0 0   100%
src/keel/fixloop.py Rung.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/fixloop.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/fixloop.py _text   100% 1 0 0   100% 0 0   100%
src/keel/fixloop.py _seat_of   100% 7 0 0   100% 4 0   100%
src/keel/fixloop.py ladder   100% 19 0 0   100% 10 0   100%
src/keel/fixloop.py _hop   100% 1 0 0   100% 0 0   100%
src/keel/fixloop.py _walk   100% 21 0 0   100% 12 0   100%
src/keel/fixloop.py resolve_fixer   100% 21 0 0   100% 12 0   100%
src/keel/fixloop.py no_config_document   100% 1 0 0   100% 0 0   100%
src/keel/fixloop.py parse_findings   100% 16 0 0   100% 8 0   100%
src/keel/fixloop.py neutralise   100% 1 0 0   100% 0 0   100%
src/keel/fixloop.py _inline   100% 6 0 0   100% 4 0   100%
src/keel/fixloop.py _quoted_line   100% 6 0 0   100% 4 0   100%
src/keel/fixloop.py quote   100% 16 0 0   100% 10 0   100%
src/keel/fixloop.py _anchor   100% 6 0 0   100% 4 0   100%
src/keel/fixloop.py _finding_block   100% 11 0 0   100% 4 0   100%
src/keel/fixloop.py re_review   100% 4 0 0   100% 2 0   100%
src/keel/fixloop.py render_brief   100% 37 0 0   100% 12 0   100%
src/keel/fixloop.py dispatch_argv   100% 20 0 0   100% 14 0   100%
src/keel/fixloop.py brief_document   100% 4 0 0   100% 0 0   100%
src/keel/fixloop.py (no function)   100% 53 0 0   100% 0 0   100%
src/keel/flows.py _ship_flow   100% 1 0 0   100% 0 0   100%
src/keel/flows.py _flow   100% 1 0 0   100% 0 0   100%
src/keel/flows.py command_names   100% 1 0 0   100% 0 0   100%
src/keel/flows.py flow_for   100% 1 0 0   100% 0 0   100%
src/keel/flows.py is_known   100% 1 0 0   100% 0 0   100%
src/keel/flows.py (no function)   100% 18 0 0   100% 0 0   100%
src/keel/gates.py PanelReuse.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/gates.py plan_gates   100% 31 0 0   100% 26 0   100%
src/keel/gates.py plan_gates._timeout_for   100% 3 0 0   100% 2 0   100%
src/keel/gates.py command_unset   100% 1 0 0   100% 0 0   100%
src/keel/gates.py unconfigured_finding   100% 6 0 0   100% 4 0   100%
src/keel/gates.py split_deferred   100% 3 0 0   100% 0 0   100%
src/keel/gates.py nothing_to_judge   100% 5 0 0   100% 2 0   100%
src/keel/gates.py lone_jury_cannot_judge   100% 8 0 0   100% 4 0   100%
src/keel/gates.py mark_jury_reused   100% 3 0 0   100% 2 0   100%
src/keel/gates.py run_gates   100% 7 0 0   100% 2 0   100%
src/keel/gates.py run_gates._run_single   100% 22 0 0   100% 10 0   100%
src/keel/gates.py unrun_blocking   100% 1 0 0   100% 0 0   100%
src/keel/gates.py apply_recorded_results   100% 17 0 0   100% 8 0   100%
src/keel/gates.py collect_findings   100% 4 0 0   100% 2 0   100%
src/keel/gates.py (no function)   100% 64 0 3   100% 0 0   100%
src/keel/git.py remote_tracking_ref   100% 1 0 0   100% 0 0   100%
src/keel/git.py resolve_ref   100% 3 0 0   100% 0 0   100%
src/keel/git.py remote_url   100% 3 0 0   100% 0 0   100%
src/keel/git.py owner_repo_from_url   100% 11 0 0   100% 6 0   100%
src/keel/git.py fetch   100% 1 0 0   100% 0 0   100%
src/keel/git.py worktree_add   100% 1 0 0   100% 0 0   100%
src/keel/git.py worktree_remove   100% 1 0 0   100% 0 0   100%
src/keel/git.py worktree_list   100% 1 0 0   100% 0 0   100%
src/keel/git.py current_branch   100% 2 0 0   100% 0 0   100%
src/keel/git.py list_branches   100% 1 0 0   100% 0 0   100%
src/keel/git.py rev_parse   100% 3 0 0   100% 0 0   100%
src/keel/git.py merge_base   100% 3 0 0   100% 0 0   100%
src/keel/git.py rev_count   100% 7 0 0   100% 4 0   100%
src/keel/git.py changed_files   100% 4 0 0   100% 2 0   100%
src/keel/git.py commit_log   100% 2 0 0   100% 0 0   100%
src/keel/git.py diff   100% 2 0 0   100% 0 0   100%
src/keel/git.py revert_diff   100% 2 0 0   100% 0 0   100%
src/keel/git.py scratch_env   100% 1 0 0   100% 0 0   100%
src/keel/git.py worktree_add_detached   100% 1 0 0   100% 0 0   100%
src/keel/git.py apply_reverse   100% 1 0 0   100% 0 0   100%
src/keel/git.py reset_clean   100% 5 0 0   100% 2 0   100%
src/keel/git.py hash_object   100% 3 0 0   100% 0 0   100%
src/keel/git.py ls_tree   100% 2 0 0   100% 0 0   100%
src/keel/git.py mktree   100% 3 0 0   100% 0 0   100%
src/keel/git.py commit_tree   100% 3 0 0   100% 0 0   100%
src/keel/git.py diff_names   100% 4 0 0   100% 2 0   100%
src/keel/git.py push_commit   100% 1 0 0   100% 0 0   100%
src/keel/git.py _kw   100% 1 0 0   100% 0 0   100%
src/keel/git.py (no function)   100% 36 0 0   100% 0 0   100%
src/keel/github.py is_transient_error   100% 9 0 0   100% 8 0   100%
src/keel/github.py run_argv_retry   100% 11 0 0   100% 4 0   100%
src/keel/github.py open_pr   100% 1 0 0   100% 0 0   100%
src/keel/github.py ci_conclusion   100% 6 0 0   100% 2 0   100%
src/keel/github.py ci_check_names   100% 2 0 0   100% 0 0   100%
src/keel/github.py ci_workflow_names   100% 2 0 0   100% 0 0   100%
src/keel/github.py _rollup_strings   100% 4 0 0   100% 2 0   100%
src/keel/github.py merged_prs   100% 4 0 0   100% 2 0   100%
src/keel/github.py list_prs   100% 4 0 0   100% 2 0   100%
src/keel/github.py pr_state   100% 5 0 0   100% 2 0   100%
src/keel/github.py pr_files   100% 1 0 0   100% 0 0   100%
src/keel/github.py commit_files   100% 1 0 0   100% 0 0   100%
src/keel/github.py _lines   100% 4 0 0   100% 2 0   100%
src/keel/github.py prs_merged_between   100% 7 0 0   100% 4 0   100%
src/keel/github.py _json_rows   100% 8 0 0   100% 2 0   100%
src/keel/github.py _merge_window_fields   100% 1 0 0   100% 0 0   100%
src/keel/github.py pr_merge_window   100% 17 0 0   100% 10 0   100%
src/keel/github.py pr_merge_snapshot   100% 1 0 0   100% 0 0   100%
src/keel/github.py merge_pr   100% 4 0 0   100% 2 0   100%
src/keel/github.py comment   100% 1 0 0   100% 0 0   100%
src/keel/github.py post_issue_comment   100% 1 0 0   100% 0 0   100%
src/keel/github.py edit_issue_comment   100% 1 0 0   100% 0 0   100%
src/keel/github.py close_issue   100% 6 0 0   100% 4 0   100%
src/keel/github.py issue_facts   100% 1 0 0   100% 0 0   100%
src/keel/github.py label_list_argv   100% 2 0 0   100% 0 0   100%
src/keel/github.py list_labels   100% 1 0 0   100% 0 0   100%
src/keel/github.py auth_status   100% 1 0 0   100% 0 0   100%
src/keel/github.py label_create_argv   100% 2 0 0   100% 0 0   100%
src/keel/github.py create_label   100% 1 0 0   100% 0 0   100%
src/keel/github.py issue_labels_add_argv   100% 4 0 0   100% 2 0   100%
src/keel/github.py add_issue_labels   100% 1 0 0   100% 0 0   100%
src/keel/github.py _kw   100% 1 0 0   100% 0 0   100%
src/keel/github.py graphql_available   100% 1 0 0   100% 0 0   100%
src/keel/github.py rest_pull   100% 1 0 0   100% 0 0   100%
src/keel/github.py rest_check_runs   100% 1 0 0   100% 0 0   100%
src/keel/github.py rest_commit_statuses   100% 1 0 0   100% 0 0   100%
src/keel/github.py rest_json   100% 21 0 0   100% 10 0   100%
src/keel/github.py _check_run_rows   100% 9 0 0   100% 6 0   100%
src/keel/github.py rest_rollup   100% 6 0 0   100% 4 0   100%
src/keel/github.py _status_rows   100% 2 0 0   100% 0 0   100%
src/keel/github.py _upper   100% 1 0 0   100% 0 0   100%
src/keel/github.py rest_merge_pr   100% 4 0 0   100% 2 0   100%
src/keel/github.py rest_pr_files   100% 1 0 0   100% 0 0   100%
src/keel/github.py _rest_commit_on_branch   100% 4 0 0   100% 2 0   100%
src/keel/github.py rest_pr_merge_window   100% 13 0 1   100% 6 0   100%
src/keel/github.py rest_prs_merged_between   100% 7 0 0   100% 4 0   100%
src/keel/github.py (no function)   100% 59 0 0   100% 0 0   100%
src/keel/github_transport.py GitHubTransport.supports   100% 1 0 0   100% 0 0   100%
src/keel/github_transport.py GitHubTransport.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/github_transport.py GitHubTransport.render   100% 6 0 0   100% 4 0   100%
src/keel/github_transport.py resolve   100% 9 0 0   100% 6 0   100%
src/keel/github_transport.py _caps   100% 1 0 0   100% 0 0   100%
src/keel/github_transport.py (no function)   100% 17 0 0   100% 0 0   100%
src/keel/guard.py Rule.__post_init__   100% 2 0 0   100% 2 0   100%
src/keel/guard.py Rule.matches   100% 4 0 0   100% 2 0   100%
src/keel/guard.py GuardResult.is_blocker   100% 1 0 0   100% 0 0   100%
src/keel/guard.py GuardResult.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/guard.py resolve_rules   100% 6 0 0   100% 4 0   100%
src/keel/guard.py _build_rules   100% 31 0 0   100% 16 0   100%
src/keel/guard.py evaluate   100% 3 0 0   100% 0 0   100%
src/keel/guard.py evaluate_config   100% 1 0 0   100% 0 0   100%
src/keel/guard.py (no function)   100% 30 0 0   100% 0 0   100%
src/keel/install.py OrphanFileStatus.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/install.py _sha256   100% 1 0 0   100% 0 0   100%
src/keel/install.py _marker   100% 1 0 0   100% 0 0   100%
src/keel/install.py _with_marker   100% 2 0 0   100% 0 0   100%
src/keel/install.py _split_marker   100% 10 0 0   100% 6 0   100%
src/keel/install.py _expected_files   100% 9 0 0   100% 2 0   100%
src/keel/install.py adapter_names   100% 1 0 0   100% 0 0   100%
src/keel/install.py _split_frontmatter   100% 6 0 0   100% 4 0   100%
src/keel/install.py render_skill   100% 6 0 0   100% 0 0   100%
src/keel/install.py render_legacy_claude_wrapper   100% 1 0 0   100% 0 0   100%
src/keel/install.py render_legacy_skill_wrapper   100% 4 0 0   100% 0 0   100%
src/keel/install.py parity_ready_commands   100% 13 0 0   100% 8 0   100%
src/keel/install.py _legacy_expected_files   100% 11 0 0   100% 2 0   100%
src/keel/install.py default_legacy_mappings   100% 1 0 0   100% 0 0   100%
src/keel/install.py _validate_legacy_mappings   100% 10 0 0   100% 10 0   100%
src/keel/install.py _contained_destination   100% 7 0 0   100% 0 0   100%
src/keel/install.py install_legacy_wrappers   100% 18 0 0   100% 6 0   100%
src/keel/install.py install_all_legacy_wrappers   100% 1 0 0   100% 0 0   100%
src/keel/install.py _install_commands   100% 14 0 0   100% 4 0   100%
src/keel/install.py _install_skills   100% 16 0 0   100% 4 0   100%
src/keel/install.py install   100% 5 0 0   100% 4 0   100%
src/keel/install.py install_all   100% 1 0 0   100% 0 0   100%
src/keel/install.py plugin_files   100% 7 0 0   100% 2 0   100%
src/keel/install.py install_plugin   100% 13 0 0   100% 4 0   100%
src/keel/install.py hint_flags   100% 15 0 0   100% 12 0   100%
src/keel/install.py site_params_entry   100% 3 0 0   100% 0 0   100%
src/keel/install.py render_site_params   100% 2 0 0   100% 0 0   100%
src/keel/install.py site_params_files   100% 3 0 0   100% 0 0   100%
src/keel/install.py install_site_params   100% 13 0 0   100% 4 0   100%
src/keel/install.py adapter_status   100% 28 0 0   100% 16 0   100%
src/keel/install.py default_known_commands   100% 3 0 0   100% 0 0   100%
src/keel/install.py _surface_command_from_name   100% 8 0 0   100% 6 0   100%
src/keel/install.py scan_surface_orphans   100% 26 0 0   100% 16 0   100%
src/keel/install.py scan_adapter_markers   100% 15 0 0   100% 10 0   100%
src/keel/install.py update_adapters   100% 20 0 0   100% 10 0   100%
src/keel/install.py (no function)   100% 84 0 0   100% 0 0   100%
src/keel/intake.py _declaration_candidates   100% 10 0 0   100% 6 0   100%
src/keel/intake.py IssueContext.provided   100% 1 0 0   100% 0 0   100%
src/keel/intake.py assess_issue   100% 40 0 0   100% 14 0   100%
src/keel/intake.py _sections   100% 10 0 0   100% 4 0   100%
src/keel/intake.py _normalize_heading   100% 1 0 0   100% 0 0   100%
src/keel/intake.py _objective   100% 6 0 0   100% 6 0   100%
src/keel/intake.py _deliverable   100% 5 0 0   100% 4 0   100%
src/keel/intake.py _acceptance_criteria   100% 5 0 0   100% 4 0   100%
src/keel/intake.py _first_sentence_or_bullet   100% 5 0 0   100% 2 0   100%
src/keel/intake.py _bullets   100% 7 0 0   100% 6 0   100%
src/keel/intake.py _bullet_lines   100% 1 0 0   100% 0 0   100%
src/keel/intake.py _bullet_text   100% 2 0 0   100% 0 0   100%
src/keel/intake.py _sentences   100% 5 0 0   100% 2 0   100%
src/keel/intake.py _is_scope_exclusion_heading   100% 2 0 0   100% 0 0   100%
src/keel/intake.py _scannable_chunks   100% 11 0 0   100% 6 0   100%
src/keel/intake.py _out_of_scope_reason   100% 15 0 0   100% 16 0   100%
src/keel/intake.py _is_blocked   100% 9 0 0   100% 8 0   100%
src/keel/intake.py _blocked_summary   100% 5 0 0   100% 4 0   100%
src/keel/intake.py _is_actionable_blocker   100% 1 0 0   100% 0 0   100%
src/keel/intake.py _risk_inputs   100% 3 0 0   100% 0 0   100%
src/keel/intake.py _required_docs_tests   100% 2 0 0   100% 0 0   100%
src/keel/intake.py _unique   100% 8 0 0   100% 4 0   100%
src/keel/intake.py (no function)   100% 52 0 0   100% 0 0   100%
src/keel/jsonschema_min.py _type_matches   100% 8 0 0   100% 6 0   100%
src/keel/jsonschema_min.py validate   100% 3 0 0   100% 0 0   100%
src/keel/jsonschema_min.py _validate   100% 20 0 0   100% 18 0   100%
src/keel/jsonschema_min.py _validate_string   100% 6 0 0   100% 4 0   100%
src/keel/jsonschema_min.py _validate_number   100% 6 0 0   100% 4 0   100%
src/keel/jsonschema_min.py _validate_array   100% 7 0 0   100% 6 0   100%
src/keel/jsonschema_min.py _validate_object   100% 21 0 0   100% 24 0   100%
src/keel/jsonschema_min.py _kind   100% 15 0 0   100% 14 0   100%
src/keel/jsonschema_min.py (no function)   100% 12 0 0   100% 0 0   100%
src/keel/jury.py map_severity   100% 1 0 0   100% 0 0   100%
src/keel/jury.py parse_report   100% 8 0 0   100% 4 0   100%
src/keel/jury.py parse_findings   100% 1 0 0   100% 0 0   100%
src/keel/jury.py _findings_from   100% 7 0 0   100% 2 0   100%
src/keel/jury.py _kw   100% 1 0 0   100% 0 0   100%
src/keel/jury.py available   100% 1 0 0   100% 0 0   100%
src/keel/jury.py _incomplete_finding   100% 4 0 0   100% 2 0   100%
src/keel/jury.py _unreadable_diff_finding   100% 1 0 0   100% 0 0   100%
src/keel/jury.py _oversize_finding   100% 1 0 0   100% 0 0   100%
src/keel/jury.py _not_run_finding   100% 1 0 0   100% 0 0   100%
src/keel/jury.py panel_consensus   100% 7 0 0   100% 2 0   100%
src/keel/jury.py _consensus_finding   100% 10 0 0   100% 6 0   100%
src/keel/jury.py reuse_posted_verdict   100% 12 0 0   100% 6 0   100%
src/keel/jury.py could_not_run   100% 1 0 0   100% 0 0   100%
src/keel/jury.py run_gate   100% 28 0 0   100% 14 0   100%
src/keel/jury.py map_verdict   100% 4 0 0   100% 2 0   100%
src/keel/jury.py Ballot.as_review   100% 1 0 0   100% 0 0   100%
src/keel/jury.py _review_ballots   100% 1 0 0   100% 0 0   100%
src/keel/jury.py Panel.size   100% 1 0 0   100% 0 0   100%
src/keel/jury.py Panel.vendors   100% 6 0 0   100% 4 0   100%
src/keel/jury.py Panel.reviews   100% 1 0 0   100% 0 0   100%
src/keel/jury.py _finding_record   100% 4 0 0   100% 2 0   100%
src/keel/jury.py _ballot_findings   100% 12 0 0   100% 10 0   100%
src/keel/jury.py _text_field   100% 4 0 0   100% 2 0   100%
src/keel/jury.py _bool_field   100% 4 0 0   100% 2 0   100%
src/keel/jury.py _ballot   100% 9 0 0   100% 4 0   100%
src/keel/jury.py _verified_records   100% 12 0 0   100% 8 0   100%
src/keel/jury.py parse_panel   100% 21 0 0   100% 12 0   100%
src/keel/jury.py _finding_paths   100% 6 0 0   100% 4 0   100%
src/keel/jury.py ballot_is_review   100% 5 0 0   100% 4 0   100%
src/keel/jury.py _abstention_scope   100% 4 0 0   100% 2 0   100%
src/keel/jury.py ballot_scope   100% 10 0 0   100% 4 0   100%
src/keel/jury.py ballot_testing   100% 8 0 0   100% 6 0   100%
src/keel/jury.py verified_findings   100% 8 0 0   100% 2 0   100%
src/keel/jury.py jury_verdict   100% 3 0 0   100% 0 0   100%
src/keel/jury.py (no function)   100% 78 0 0   100% 0 0   100%
src/keel/juryavail.py Seat.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py Runner.panel_rows   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py Runner.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py Availability.staffable   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py Availability.decision   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py Availability.reason   100% 6 0 0   100% 2 0   100%
src/keel/juryavail.py Availability.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py assess   100% 15 0 0   100% 10 0   100%
src/keel/juryavail.py _inventory   100% 4 0 0   100% 2 0   100%
src/keel/juryavail.py _rows   100% 4 0 0   100% 2 0   100%
src/keel/juryavail.py panel_sat   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py recorded   100% 5 0 0   100% 2 0   100%
src/keel/juryavail.py shipped   100% 7 0 0   100% 4 0   100%
src/keel/juryavail.py is_ship_run_for_head   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py states_panel   100% 2 0 0   100% 0 0   100%
src/keel/juryavail.py pin   100% 7 0 0   100% 6 0   100%
src/keel/juryavail.py is_pinnable_head   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py _matches_head   100% 5 0 0   100% 2 0   100%
src/keel/juryavail.py _text   100% 1 0 0   100% 0 0   100%
src/keel/juryavail.py (no function)   100% 61 0 0   100% 0 0   100%
src/keel/ledger.py ledger_contract_as_dict   100% 2 0 0   100% 0 0   100%
src/keel/ledger.py capture_health_contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/ledger.py configured_ledger_path   100% 6 0 0   100% 2 0   100%
src/keel/ledger.py resolve_path   100% 11 0 0   100% 2 0   100%
src/keel/ledger.py build_ship_run_record   100% 1 0 0   100% 0 0   100%
src/keel/ledger.py _fixers   100% 4 0 0   100% 2 0   100%
src/keel/ledger.py _attribution_sentence   100% 4 0 0   100% 2 0   100%
src/keel/ledger.py _declared_block   100% 4 0 0   100% 2 0   100%
src/keel/ledger.py declared_files_for_record   100% 7 0 0   100% 4 0   100%
src/keel/ledger.py build_run_context   100% 1 0 0   100% 0 0   100%
src/keel/ledger.py _run_context   100% 2 0 0   100% 0 0   100%
src/keel/ledger.py _nonblank   100% 1 0 0   100% 0 0   100%
src/keel/ledger.py encode_record   100% 2 0 0   100% 0 0   100%
src/keel/ledger.py parse_records   100% 19 0 0   100% 10 0   100%
src/keel/ledger.py unknown_kind_warning   100% 2 0 0   100% 0 0   100%
src/keel/ledger.py read_records   100% 4 0 0   100% 2 0   100%
src/keel/ledger.py build_consent_delegation_record   100% 3 0 0   100% 0 0   100%
src/keel/ledger.py consent_delegation_for_pr   100% 7 0 0   100% 6 0   100%
src/keel/ledger.py latest_ship_run_for_pr   100% 9 0 0   100% 6 0   100%
src/keel/ledger.py _jury_source   100% 6 0 0   100% 4 0   100%
src/keel/ledger.py record_gates_passed   100% 16 0 0   100% 14 0   100%
src/keel/ledger.py gates_pass_for_head   100% 19 0 0   100% 12 0   100%
src/keel/ledger.py _latest_per_pr   100% 10 0 0   100% 4 0   100%
src/keel/ledger.py capture_health_summary   100% 24 0 0   100% 16 0   100%
src/keel/ledger.py _is_merged_ship_run   100% 15 0 0   100% 12 0   100%
src/keel/ledger.py _capture_marker   100% 3 0 0   100% 0 0   100%
src/keel/ledger.py record_head_sha   100% 3 0 0   100% 0 0   100%
src/keel/ledger.py capture_marker_for_head   100% 14 0 0   100% 12 0   100%
src/keel/ledger.py existing_capture_marker   100% 7 0 0   100% 4 0   100%
src/keel/ledger.py append_record   100% 5 0 0   100% 0 0   100%
src/keel/ledger.py sanitize_record   100% 4 0 0   100% 0 0   100%
src/keel/ledger.py _unknown_kind   100% 6 0 0   100% 4 0   100%
src/keel/ledger.py _validate_record   100% 11 0 0   100% 10 0   100%
src/keel/ledger.py _consent_delegation_problem   100% 19 0 0   100% 12 0   100%
src/keel/ledger.py _delegated_pull_request_problem   100% 16 0 0   100% 14 0   100%
src/keel/ledger.py _capture_health_item   100% 12 0 0   100% 2 0   100%
src/keel/ledger.py _capture_health_status   100% 7 0 0   100% 6 0   100%
src/keel/ledger.py _capture_reconcile_action   100% 1 0 0   100% 0 0   100%
src/keel/ledger.py (no function)   100% 57 0 0   100% 0 0   100%
src/keel/lock.py ClaimResult.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/lock.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/lock.py claim_resource   100% 2 0 0   100% 0 0   100%
src/keel/lock.py release_resource   100% 2 0 0   100% 0 0   100%
src/keel/lock.py resource_claim   100% 5 0 0   100% 2 0   100%
src/keel/lock.py resource_path   100% 5 0 0   100% 0 0   100%
src/keel/lock.py merge_lock   100% 7 0 0   100% 2 0   100%
src/keel/lock.py _claim_path   100% 19 0 0   100% 2 0   100%
src/keel/lock.py _release_path   100% 15 0 0   100% 8 0   100%
src/keel/lock.py _discard_partial_claim   100% 12 0 5   100% 8 0   100%
src/keel/lock.py _has_entries   100% 2 0 0   100% 0 0   100%
src/keel/lock.py _identity   100% 5 0 0   100% 0 0   100%
src/keel/lock.py _pin   100% 4 0 0   100% 0 0   100%
src/keel/lock.py _pinned   100% 3 0 2   100% 0 0   100%
src/keel/lock.py _write_owner   100% 3 0 5   100% 0 0   100%
src/keel/lock.py _holder   100% 9 0 0   100% 2 0   100%
src/keel/lock.py _clean   100% 1 0 0   100% 0 0   100%
src/keel/lock.py (no function)   100% 44 0 0   100% 0 0   100%
src/keel/loop.py LoopPolicy.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/loop.py _int   100% 5 0 0   100% 4 0   100%
src/keel/loop.py resolve   100% 11 0 0   100% 6 0   100%
src/keel/loop.py GateResult.judged   100% 1 0 0   100% 0 0   100%
src/keel/loop.py GateResult.deferred   100% 1 0 0   100% 0 0   100%
src/keel/loop.py GateResult.blocking   100% 3 0 0   100% 2 0   100%
src/keel/loop.py GateResult.word   100% 5 0 0   100% 4 0   100%
src/keel/loop.py _finding_text   100% 9 0 0   100% 6 0   100%
src/keel/loop.py parse_gates   100% 28 0 0   100% 16 0   100%
src/keel/loop.py _planned_gates   100% 4 0 0   100% 2 0   100%
src/keel/loop.py _text   100% 5 0 0   100% 4 0   100%
src/keel/loop.py LoopDecision.next_iteration   100% 1 0 0   100% 0 0   100%
src/keel/loop.py LoopDecision.blocked   100% 1 0 0   100% 0 0   100%
src/keel/loop.py LoopDecision.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/loop.py decide   100% 15 0 0   100% 10 0   100%
src/keel/loop.py _neutralise   100% 1 0 0   100% 0 0   100%
src/keel/loop.py _quoted_line   100% 6 0 0   100% 4 0   100%
src/keel/loop.py _clip   100% 3 0 0   100% 2 0   100%
src/keel/loop.py quote_output   100% 21 0 0   100% 14 0   100%
src/keel/loop.py _inline_title   100% 5 0 0   100% 2 0   100%
src/keel/loop.py render_brief   100% 16 0 0   100% 10 0   100%
src/keel/loop.py brief_document   100% 3 0 0   100% 0 0   100%
src/keel/loop.py _next_action   100% 8 0 0   100% 6 0   100%
src/keel/loop.py iteration_block   100% 4 0 0   100% 2 0   100%
src/keel/loop.py iteration_problem   100% 8 0 0   100% 6 0   100%
src/keel/loop.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/loop.py (no function)   100% 95 0 0   100% 0 0   100%
src/keel/mergeverify.py verify_merge   100% 12 0 0   100% 8 0   100%
src/keel/mergeverify.py _report   100% 3 0 0   100% 0 0   100%
src/keel/mergeverify.py is_drift   100% 1 0 0   100% 0 0   100%
src/keel/mergeverify.py render   100% 6 0 0   100% 4 0   100%
src/keel/mergeverify.py (no function)   100% 7 0 0   100% 0 0   100%
src/keel/model.py step_ids   100% 1 0 0   100% 0 0   100%
src/keel/model.py get_step   100% 1 0 0   100% 0 0   100%
src/keel/model.py step_for_slot   100% 1 0 0   100% 0 0   100%
src/keel/model.py slot_meta   100% 1 0 0   100% 0 0   100%
src/keel/model.py slots_for_step   100% 1 0 0   100% 0 0   100%
src/keel/model.py (no function)   100% 29 0 0   100% 0 0   100%
src/keel/orchestrator.py build_plan   100% 14 0 0   100% 8 0   100%
src/keel/orchestrator.py render_plan   100% 14 0 0   100% 6 0   100%
src/keel/orchestrator.py plan_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/orchestrator.py _slots_for_step   100% 1 0 0   100% 0 0   100%
src/keel/orchestrator.py _hooks_for_step   100% 5 0 0   100% 4 0   100%
src/keel/orchestrator.py _capability_summary   100% 6 0 0   100% 4 0   100%
src/keel/orchestrator.py (no function)   100% 37 0 0   100% 0 0   100%
src/keel/project_commands.py ProjectCommand.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/project_commands.py list_project_commands   100% 8 0 0   100% 4 0   100%
src/keel/project_commands.py get_project_command   100% 4 0 0   100% 4 0   100%
src/keel/project_commands.py _commands_from_map   100% 8 0 0   100% 6 0   100%
src/keel/project_commands.py (no function)   100% 20 0 0   100% 0 0   100%
src/keel/provenance.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/provenance.py source_tag   100% 2 0 0   100% 0 0   100%
src/keel/provenance.py tag_output   100% 1 0 0   100% 0 0   100%
src/keel/provenance.py normalize_tag   100% 6 0 0   100% 2 0   100%
src/keel/provenance.py _value   100% 1 0 0   100% 0 0   100%
src/keel/provenance.py _optional   100% 1 0 0   100% 0 0   100%
src/keel/provenance.py _capabilities   100% 3 0 0   100% 0 0   100%
src/keel/provenance.py (no function)   100% 12 0 0   100% 0 0   100%
src/keel/providerprobe.py ProbeResult.as_dict   100% 3 0 0   100% 0 0   100%
src/keel/providerprobe.py probe_providers   100% 9 0 0   100% 2 0   100%
src/keel/providerprobe.py _probe   100% 5 0 0   100% 4 0   100%
src/keel/providerprobe.py _repo_relative   100% 3 0 0   100% 2 0   100%
src/keel/providerprobe.py _probe_cli   100% 15 0 0   100% 10 0   100%
src/keel/providerprobe.py _cli_models   100% 6 0 0   100% 4 0   100%
src/keel/providerprobe.py _probe_local   100% 9 0 0   100% 6 0   100%
src/keel/providerprobe.py _probe_command_only   100% 6 0 0   100% 4 0   100%
src/keel/providerprobe.py _probe_api   100% 10 0 0   100% 6 0   100%
src/keel/providerprobe.py _ollama_tags   100% 12 0 0   100% 0 0   100%
src/keel/providerprobe.py _first_line   100% 4 0 0   100% 4 0   100%
src/keel/providerprobe.py build_report   100% 2 0 0   100% 0 0   100%
src/keel/providerprobe.py probe_jury_runner   100% 5 0 0   100% 2 0   100%
src/keel/providerprobe.py _probe_jury_doctor   100% 11 0 0   100% 6 0   100%
src/keel/providerprobe.py _doctor_report   100% 10 0 0   100% 4 0   100%
src/keel/providerprobe.py jury_availability   100% 6 0 0   100% 2 0   100%
src/keel/providerprobe.py jury_availability_for_any_tier   100% 5 0 0   100% 4 0   100%
src/keel/providerprobe.py collect   100% 6 0 0   100% 0 0   100%
src/keel/providerprobe.py (no function)   100% 40 0 0   100% 0 0   100%
src/keel/providers.py Provider.label_vendor   100% 1 0 0   100% 0 0   100%
src/keel/providers.py Provider.capabilities   100% 1 0 0   100% 0 0   100%
src/keel/providers.py Provider._read_only_mode   100% 3 0 0   100% 2 0   100%
src/keel/providers.py Provider.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/providers.py Registry.names   100% 1 0 0   100% 0 0   100%
src/keel/providers.py registry_path   100% 8 0 0   100% 4 0   100%
src/keel/providers.py _read_text   100% 1 0 0   100% 0 0   100%
src/keel/providers.py load_registry   100% 13 0 0   100% 0 0   100%
src/keel/providers.py parse_registry   100% 18 0 0   100% 12 0   100%
src/keel/providers.py _parse_entry   100% 41 0 0   100% 18 0   100%
src/keel/providers.py _api_key_env_issues   100% 7 0 0   100% 6 0   100%
src/keel/providers.py _text   100% 1 0 0   100% 0 0   100%
src/keel/providers.py _string_tuple   100% 5 0 0   100% 4 0   100%
src/keel/providers.py builtin_providers   100% 4 0 0   100% 0 0   100%
src/keel/providers.py profile_providers   100% 8 0 0   100% 4 0   100%
src/keel/providers.py registry_clashes   100% 9 0 0   100% 6 0   100%
src/keel/providers.py plan_probes   100% 7 0 0   100% 0 0   100%
src/keel/providers.py tool_capable   100% 1 0 0   100% 0 0   100%
src/keel/providers.py distinct_vendors   100% 1 0 0   100% 0 0   100%
src/keel/providers.py parse_model_lines   100% 15 0 0   100% 10 0   100%
src/keel/providers.py parse_tag_payload   100% 15 0 0   100% 12 0   100%
src/keel/providers.py (no function)   100% 63 0 0   100% 0 0   100%
src/keel/redaction.py policy_from_config   100% 4 0 0   100% 2 0   100%
src/keel/redaction.py sanitize   100% 4 0 0   100% 0 0   100%
src/keel/redaction.py contract_as_dict   100% 2 0 0   100% 0 0   100%
src/keel/redaction.py _configured_rule_ids   100% 12 0 0   100% 8 0   100%
src/keel/redaction.py _configured_rules   100% 27 0 0   100% 14 0   100%
src/keel/redaction.py _compile   100% 4 0 0   100% 0 0   100%
src/keel/redaction.py _sanitize_value   100% 9 0 0   100% 8 0   100%
src/keel/redaction.py _sanitize_string   100% 7 0 0   100% 4 0   100%
src/keel/redaction.py (no function)   100% 31 0 0   100% 0 0   100%
src/keel/revertcheck.py resolve   100% 10 0 0   100% 2 0   100%
src/keel/revertcheck.py _positive   100% 3 0 0   100% 2 0   100%
src/keel/revertcheck.py _strings   100% 3 0 0   100% 2 0   100%
src/keel/revertcheck.py test_paths   100% 9 0 0   100% 6 0   100%
src/keel/revertcheck.py is_production   100% 5 0 0   100% 4 0   100%
src/keel/revertcheck.py Hunk.pure_addition   100% 1 0 0   100% 0 0   100%
src/keel/revertcheck.py FileDiff.mode   100% 3 0 0   100% 0 0   100%
src/keel/revertcheck.py FileDiff.binary   100% 1 0 0   100% 0 0   100%
src/keel/revertcheck.py FileDiff.content_header   100% 1 0 0   100% 0 0   100%
src/keel/revertcheck.py _unquote   100% 15 0 0   100% 8 0   100%
src/keel/revertcheck.py _closing_quote   100% 9 0 0   100% 6 0   100%
src/keel/revertcheck.py _strip   100% 1 0 0   100% 0 0   100%
src/keel/revertcheck.py _path_from   100% 4 0 0   100% 2 0   100%
src/keel/revertcheck.py _header_path   100% 10 0 0   100% 6 0   100%
src/keel/revertcheck.py parse_diff   100% 31 0 0   100% 16 0   100%
src/keel/revertcheck.py _read_hunk   100% 27 0 0   100% 10 0   100%
src/keel/revertcheck.py context_problem   100% 4 0 0   100% 2 0   100%
src/keel/revertcheck.py plan_changes   100% 33 0 0   100% 20 0   100%
src/keel/revertcheck.py _old_side   100% 3 0 0   100% 0 0   100%
src/keel/revertcheck.py _blocks   100% 16 0 0   100% 10 0   100%
src/keel/revertcheck.py _block_starts   100% 21 0 0   100% 8 0   100%
src/keel/revertcheck.py _block_change   100% 5 0 0   100% 0 0   100%
src/keel/revertcheck.py _patch   100% 5 0 0   100% 2 0   100%
src/keel/revertcheck.py _changed_lines   100% 2 0 0   100% 0 0   100%
src/keel/revertcheck.py looks_comment_only   100% 2 0 0   100% 0 0   100%
src/keel/revertcheck.py imports_only   100% 4 0 0   100% 2 0   100%
src/keel/revertcheck.py _raised   100% 9 0 0   100% 4 0   100%
src/keel/revertcheck.py missing_names_only   100% 3 0 0   100% 0 0   100%
src/keel/revertcheck.py Tally.failed   100% 1 0 0   100% 0 0   100%
src/keel/revertcheck.py read_output   100% 41 0 0   100% 30 0   100%
src/keel/revertcheck.py classify   100% 16 0 0   100% 14 0   100%
src/keel/revertcheck.py baseline_problem   100% 12 0 0   100% 10 0   100%
src/keel/revertcheck.py execute   100% 31 0 0   100% 12 0   100%
src/keel/revertcheck.py execute.left   100% 1 0 0   100% 0 0   100%
src/keel/revertcheck.py execute.limit   100% 1 0 0   100% 0 0   100%
src/keel/revertcheck.py cannot_judge   100% 1 0 0   100% 0 0   100%
src/keel/revertcheck.py precheck   100% 7 0 0   100% 6 0   100%
src/keel/revertcheck.py judge   100% 28 0 0   100% 18 0   100%
src/keel/revertcheck.py (no function)   100% 152 0 0   100% 0 0   100%
src/keel/review.py PostTarget.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/review.py ReviewPlan.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/review.py parse_reviews   100% 6 0 0   100% 4 0   100%
src/keel/review.py _parse_review   100% 18 0 0   100% 10 0   100%
src/keel/review.py _parse_provenance_field   100% 6 0 0   100% 4 0   100%
src/keel/review.py _parse_findings   100% 10 0 0   100% 8 0   100%
src/keel/review.py parse_cycle_reviewers   100% 8 0 0   100% 6 0   100%
src/keel/review.py review_run_id   100% 1 0 0   100% 0 0   100%
src/keel/review.py closure_run_id   100% 1 0 0   100% 0 0   100%
src/keel/review.py jury_run_id   100% 1 0 0   100% 0 0   100%
src/keel/review.py build_review_plan   100% 14 0 0   100% 8 0   100%
src/keel/review.py _jury_post   100% 4 0 0   100% 2 0   100%
src/keel/review.py _closure_posts   100% 8 0 0   100% 4 0   100%
src/keel/review.py (no function)   100% 47 0 0   100% 0 0   100%
src/keel/runcontrols.py HaltReason.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py evaluate_run_controls   100% 3 0 0   100% 0 0   100%
src/keel/runcontrols.py _is_fix_event   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py _is_implement_event   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py _actor   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py fix_attribution   100% 12 0 0   100% 8 0   100%
src/keel/runcontrols.py attribution_sentence   100% 12 0 0   100% 8 0   100%
src/keel/runcontrols.py _default_step_caps   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py _normalize_event   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py _is_round   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py _attribution_label   100% 3 0 0   100% 2 0   100%
src/keel/runcontrols.py _budget_halt   100% 5 0 0   100% 2 0   100%
src/keel/runcontrols.py _step_cap_halt   100% 11 0 0   100% 6 0   100%
src/keel/runcontrols.py _oscillation_halt   100% 4 0 0   100% 2 0   100%
src/keel/runcontrols.py _repeated_identical_action   100% 15 0 0   100% 8 0   100%
src/keel/runcontrols.py _alternating_diff   100% 11 0 0   100% 6 0   100%
src/keel/runcontrols.py _string   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py _positive_int   100% 1 0 0   100% 0 0   100%
src/keel/runcontrols.py _step_limit   100% 4 0 0   100% 0 0   100%
src/keel/runcontrols.py (no function)   100% 45 0 0   100% 0 0   100%
src/keel/runner.py first_location   100% 2 0 0   100% 0 0   100%
src/keel/runner.py _result   100% 3 0 0   100% 0 0   100%
src/keel/runner.py run_command   100% 7 0 0   100% 0 0   100%
src/keel/runner.py run_argv   100% 7 0 0   100% 0 0   100%
src/keel/runner.py _decoded   100% 3 0 0   100% 2 0   100%
src/keel/runner.py _tail   100% 1 0 0   100% 0 0   100%
src/keel/runner.py command_gate_runner   100% 2 0 0   100% 0 0   100%
src/keel/runner.py command_gate_runner.runner   100% 18 0 0   100% 10 0   100%
src/keel/runner.py (no function)   100% 27 0 2   100% 0 0   100%
src/keel/runtime.py Capability.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py CapabilityReport.get   100% 4 0 0   100% 4 0   100%
src/keel/runtime.py CapabilityReport.available   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py CapabilityReport.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py CapabilityReport.to_json   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py CapabilityReport.render   100% 5 0 0   100% 2 0   100%
src/keel/runtime.py CapabilityRequirement.merged   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py CapabilityRequirement.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py CapabilityEvaluation.ok   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py CapabilityEvaluation.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py CapabilityEvaluation.render   100% 6 0 0   100% 4 0   100%
src/keel/runtime.py detect   100% 19 0 0   100% 4 0   100%
src/keel/runtime.py evaluate   100% 3 0 0   100% 0 0   100%
src/keel/runtime.py validate_names   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py _truthy   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py _tool_capability   100% 4 0 0   100% 2 0   100%
src/keel/runtime.py _api_token_capability   100% 4 0 0   100% 0 0   100%
src/keel/runtime.py _provider_capabilities   100% 7 0 0   100% 0 0   100%
src/keel/runtime.py _can_write   100% 3 0 0   100% 2 0   100%
src/keel/runtime.py _unique   100% 1 0 0   100% 0 0   100%
src/keel/runtime.py build_capability_requirement   100% 22 0 0   100% 12 0   100%
src/keel/runtime.py ci_check_capability_requirement   100% 4 0 0   100% 2 0   100%
src/keel/runtime.py morning_capability_requirement   100% 10 0 0   100% 4 0   100%
src/keel/runtime.py scan_capability_requirement   100% 4 0 0   100% 2 0   100%
src/keel/runtime.py (no function)   100% 53 0 0   100% 0 0   100%
src/keel/scaffold.py _read_text   100% 4 0 0   100% 0 0   100%
src/keel/scaffold.py _read_toml   100% 7 0 0   100% 2 0   100%
src/keel/scaffold.py _makefile_has_target   100% 10 0 0   100% 8 0   100%
src/keel/scaffold.py _toml_names_pytest   100% 5 0 0   100% 4 0   100%
src/keel/scaffold.py _text_names_pytest   100% 1 0 0   100% 0 0   100%
src/keel/scaffold.py _uses_pytest   100% 12 0 0   100% 10 0   100%
src/keel/scaffold.py _uses_ruff   100% 4 0 0   100% 2 0   100%
src/keel/scaffold.py _unittest_command   100% 4 0 0   100% 4 0   100%
src/keel/scaffold.py _python_interpreter   100% 1 0 0   100% 0 0   100%
src/keel/scaffold.py _python_gates   100% 7 0 0   100% 4 0   100%
src/keel/scaffold.py template_for   100% 7 0 0   100% 6 0   100%
src/keel/scaffold.py missing_build_gate   100% 2 0 0   100% 0 0   100%
src/keel/scaffold.py detect_stack   100% 5 0 0   100% 4 0   100%
src/keel/scaffold.py detect_base_branch   100% 12 0 0   100% 6 0   100%
src/keel/scaffold.py auto_detect_config   100% 7 0 0   100% 0 0   100%
src/keel/scaffold.py render_config   100% 26 0 0   100% 16 0   100%
src/keel/scaffold.py _yaml_scalar   100% 1 0 0   100% 0 0   100%
src/keel/scaffold.py _yaml_key   100% 1 0 0   100% 0 0   100%
src/keel/scaffold.py _yaml_value   100% 1 0 0   100% 0 0   100%
src/keel/scaffold.py _render_mapping   100% 11 0 0   100% 6 0   100%
src/keel/scaffold.py _render_sequence   100% 9 0 0   100% 4 0   100%
src/keel/scaffold.py default_config   100% 2 0 0   100% 0 0   100%
src/keel/scaffold.py _ignore   100% 0 0 0   100% 0 0   100%
src/keel/scaffold.py wizard   100% 11 0 0   100% 2 0   100%
src/keel/scaffold.py merge_window_answers   100% 8 0 0   100% 4 0   100%
src/keel/scaffold.py _asked_yes   100% 1 0 0   100% 0 0   100%
src/keel/scaffold.py _ask_evaluable   100% 7 0 0   100% 4 0   100%
src/keel/scaffold.py team_block   100% 6 0 0   100% 2 0   100%
src/keel/scaffold.py (no function)   100% 46 0 0   100% 0 0   100%
src/keel/scope.py _matches_any   100% 4 0 0   100% 4 0   100%
src/keel/scope.py verify   100% 15 0 0   100% 8 0   100%
src/keel/scope.py (no function)   100% 6 0 0   100% 0 0   100%
src/keel/ship.py reviewer_count   100% 1 0 0   100% 0 0   100%
src/keel/ship.py reviewer_focuses   100% 7 0 0   100% 6 0   100%
src/keel/ship.py resolve_jury   100% 27 0 0   100% 14 0   100%
src/keel/ship.py panel_fell_back   100% 7 0 0   100% 4 0   100%
src/keel/ship.py check_reviewer_override   100% 2 0 0   100% 2 0   100%
src/keel/ship.py _jury_panel_size   100% 4 0 0   100% 2 0   100%
src/keel/ship.py resolve_review_contract   100% 23 0 0   100% 6 0   100%
src/keel/ship.py _gate_id   100% 1 0 0   100% 0 0   100%
src/keel/ship.py blocking_sources   100% 1 0 0   100% 0 0   100%
src/keel/ship.py block_reason   100% 4 0 0   100% 2 0   100%
src/keel/ship.py decide_merge   100% 9 0 0   100% 6 0   100%
src/keel/ship.py should_run_fixloop   100% 1 0 0   100% 0 0   100%
src/keel/ship.py ci_passing   100% 6 0 0   100% 4 0   100%
src/keel/ship.py ci_ran   100% 3 0 0   100% 2 0   100%
src/keel/ship.py missing_ci_workflows   100% 4 0 0   100% 2 0   100%
src/keel/ship.py is_hotfix   100% 5 0 0   100% 4 0   100%
src/keel/ship.py assess   100% 20 0 0   100% 6 0   100%
src/keel/ship.py (no function)   100% 53 0 0   100% 0 0   100%
src/keel/standalone.py _issue_labels   100% 4 0 0   100% 2 0   100%
src/keel/standalone.py _issue_context_provided   100% 1 0 0   100% 0 0   100%
src/keel/standalone.py _standalone_target   100% 39 0 0   100% 24 0   100%
src/keel/standalone.py _has_live_consent_scope   100% 4 0 0   100% 2 0   100%
src/keel/standalone.py cmd_standalone   100% 120 0 0   100% 46 0   100%
src/keel/standalone.py (no function)   100% 15 0 0   100% 0 0   100%
src/keel/status.py status_contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/status.py build_status_snapshot   100% 6 0 0   100% 0 0   100%
src/keel/status.py render_status   100% 25 0 0   100% 6 0   100%
src/keel/status.py _state   100% 12 0 0   100% 8 0   100%
src/keel/status.py _current   100% 8 0 0   100% 2 0   100%
src/keel/status.py _next_item   100% 12 0 0   100% 8 0   100%
src/keel/status.py _history   100% 5 0 0   100% 2 0   100%
src/keel/status.py _history_item   100% 5 0 0   100% 0 0   100%
src/keel/status.py _item_state   100% 9 0 0   100% 6 0   100%
src/keel/status.py (no function)   100% 15 0 0   100% 0 0   100%
src/keel/stepverifier.py HandoffField.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/stepverifier.py HandoffField.problem   100% 10 0 0   100% 8 0   100%
src/keel/stepverifier.py StepRequirement.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/stepverifier.py contract_as_dict   100% 3 0 0   100% 0 0   100%
src/keel/stepverifier.py step_requirements   100% 3 0 0   100% 0 0   100%
src/keel/stepverifier.py build_handoff   100% 5 0 0   100% 0 0   100%
src/keel/stepverifier.py verify_step_completion   100% 4 0 0   100% 0 0   100%
src/keel/stepverifier.py _requirement_for   100% 4 0 0   100% 2 0   100%
src/keel/stepverifier.py _check_handoff_schema   100% 13 0 0   100% 10 0   100%
src/keel/stepverifier.py _check_handoff_status   100% 5 0 0   100% 4 0   100%
src/keel/stepverifier.py _check_handoff_marker   100% 8 0 0   100% 6 0   100%
src/keel/stepverifier.py _render_from   100% 2 0 0   100% 0 0   100%
src/keel/stepverifier.py _canonical_provenance_keys   100% 2 0 0   100% 0 0   100%
src/keel/stepverifier.py _check_handoff_provenance   100% 36 0 0   100% 30 0   100%
src/keel/stepverifier.py _check_handoff_evidence   100% 12 0 0   100% 8 0   100%
src/keel/stepverifier.py _check_required_evidence   100% 5 0 0   100% 2 0   100%
src/keel/stepverifier.py _evidence_results   100% 6 0 0   100% 4 0   100%
src/keel/stepverifier.py _has_content   100% 1 0 0   100% 0 0   100%
src/keel/stepverifier.py _check   100% 1 0 0   100% 0 0   100%
src/keel/stepverifier.py (no function)   100% 41 0 0   100% 0 0   100%
src/keel/swarm.py _plan_object   100% 3 0 0   100% 2 0   100%
src/keel/swarm.py _plan_field   100% 3 0 0   100% 2 0   100%
src/keel/swarm.py _plan_int   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py _plan_str   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py _plan_bool   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py _plan_list   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py _plan_strs   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py _plan_ints   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py _plan_issue_key   100% 3 0 0   100% 2 0   100%
src/keel/swarm.py IssueScope.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py IssueScope.from_dict   100% 5 0 0   100% 2 0   100%
src/keel/swarm.py Difficulty.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py Difficulty.from_dict   100% 6 0 0   100% 2 0   100%
src/keel/swarm.py SwarmCluster.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py SwarmCluster.from_dict   100% 6 0 0   100% 2 0   100%
src/keel/swarm.py SwarmWave.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py SwarmWave.from_dict   100% 5 0 0   100% 2 0   100%
src/keel/swarm.py SwarmPlan.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py SwarmPlan.from_dict   100% 12 0 0   100% 4 0   100%
src/keel/swarm.py SwarmWorkerStatus.elapsed_s   100% 5 0 0   100% 2 0   100%
src/keel/swarm.py SwarmWorkerStatus.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py _parse_iso   100% 5 0 0   100% 0 0   100%
src/keel/swarm.py SwarmRunState.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py tail_child_output   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py worker_timeout_s   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py SwarmRunResult.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py LandingDecision.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py ClusterClosure.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py closure_target   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py render_cluster_closure   100% 10 0 0   100% 4 0   100%
src/keel/swarm.py SwarmLandingResult.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py _rstrip_path_punctuation   100% 8 0 0   100% 4 0   100%
src/keel/swarm.py _strip_path_punctuation   100% 9 0 0   100% 6 0   100%
src/keel/swarm.py _normalize_path   100% 7 0 0   100% 2 0   100%
src/keel/swarm.py extract_predicted_paths   100% 7 0 0   100% 4 0   100%
src/keel/swarm.py _scope_globs   100% 8 0 0   100% 6 0   100%
src/keel/swarm.py parse_scope_declaration   100% 25 0 0   100% 16 0   100%
src/keel/swarm.py scope_areas   100% 6 0 0   100% 2 0   100%
src/keel/swarm.py area_label_scope   100% 8 0 0   100% 8 0   100%
src/keel/swarm.py parse_issue_scope_override   100% 10 0 0   100% 6 0   100%
src/keel/swarm.py issue_facts_from_json   100% 11 0 0   100% 2 0   100%
src/keel/swarm.py extract_issue_scope   100% 33 0 0   100% 24 0   100%
src/keel/swarm.py _normalized_paths_intersect   100% 15 0 0   100% 12 0   100%
src/keel/swarm.py paths_intersect   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py scopes_intersect   100% 6 0 0   100% 6 0   100%
src/keel/swarm.py _normalized_files   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py _normalized_scopes_conflict   100% 9 0 0   100% 8 0   100%
src/keel/swarm.py scopes_have_conflict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py _file_count_points   100% 4 0 0   100% 4 0   100%
src/keel/swarm.py difficulty_band   100% 4 0 0   100% 4 0   100%
src/keel/swarm.py cluster_scopes   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py score_difficulty   100% 9 0 0   100% 0 0   100%
src/keel/swarm.py AssignmentOverrides.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py resolve_cluster_assignment   100% 5 0 0   100% 0 0   100%
src/keel/swarm.py safe_role   100% 5 0 0   100% 4 0   100%
src/keel/swarm.py ship_handoff_args   100% 19 0 0   100% 14 0   100%
src/keel/swarm.py worker_seed   100% 4 0 0   100% 0 0   100%
src/keel/swarm.py build_swarm_plan   100% 49 0 0   100% 20 0   100%
src/keel/swarm.py wave_landing_mode   100% 2 0 0   100% 0 0   100%
src/keel/swarm.py seat_label   100% 8 0 0   100% 6 0   100%
src/keel/swarm.py cluster_staffing_lines   100% 10 0 0   100% 4 0   100%
src/keel/swarm.py render_swarm_plan_text   100% 14 0 0   100% 6 0   100%
src/keel/swarm.py render_swarm_plan_tree   100% 27 0 0   100% 10 0   100%
src/keel/swarm.py workers_by_wave   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py format_elapsed   100% 7 0 0   100% 6 0   100%
src/keel/swarm.py _status_counts   100% 4 0 0   100% 2 0   100%
src/keel/swarm.py review_summary   100% 16 0 0   100% 10 0   100%
src/keel/swarm.py swarm_status_payload   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py render_swarm_status_dashboard   100% 21 0 0   100% 6 0   100%
src/keel/swarm.py resolve_swarm_state_dir   100% 3 0 0   100% 0 0   100%
src/keel/swarm.py save_swarm_state   100% 4 0 0   100% 0 0   100%
src/keel/swarm.py load_swarm_state   100% 16 0 0   100% 6 0   100%
src/keel/swarm.py _stored_scopes   100% 3 0 0   100% 2 0   100%
src/keel/swarm.py _stored_pull_request   100% 3 0 0   100% 2 0   100%
src/keel/swarm.py _stored_wave   100% 3 0 0   100% 2 0   100%
src/keel/swarm.py _stored_stage   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py _stored_review   100% 8 0 0   100% 4 0   100%
src/keel/swarm.py _stored_text   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py pull_request_number   100% 2 0 0   100% 0 0   100%
src/keel/swarm.py swarm_plan_payload   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py swarm_plan_from_payload   100% 7 0 0   100% 4 0   100%
src/keel/swarm.py swarm_plan_path   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py save_swarm_plan   100% 4 0 0   100% 0 0   100%
src/keel/swarm.py load_swarm_plan   100% 16 0 0   100% 4 0   100%
src/keel/swarm.py latest_swarm_id   100% 5 0 0   100% 2 0   100%
src/keel/swarm.py _plan_issues   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py _scope_text   100% 1 0 0   100% 0 0   100%
src/keel/swarm.py swarm_plan_drift   100% 15 0 0   100% 10 0   100%
src/keel/swarm.py update_worker_state   100% 2 0 0   100% 0 0   100%
src/keel/swarm.py rebalance_swarm_plan   100% 13 0 0   100% 10 0   100%
src/keel/swarm.py render_swarm_run_result   100% 12 0 0   100% 10 0   100%
src/keel/swarm.py evaluate_wave_landing_mode   100% 24 0 0   100% 22 0   100%
src/keel/swarm.py render_dependent_wave_refusal   100% 3 0 0   100% 0 0   100%
src/keel/swarm.py render_swarm_landing_result   100% 18 0 0   100% 14 0   100%
src/keel/swarm.py (no function)   100% 256 0 0   100% 0 0   100%
src/keel/swarm_landing.py _open_pull_request   100% 13 0 0   100% 8 0   100%
src/keel/swarm_landing.py pull_request_from_view   100% 6 0 0   100% 4 0   100%
src/keel/swarm_landing.py pull_request_from_list   100% 11 0 0   100% 6 0   100%
src/keel/swarm_landing.py merge_outcome   100% 10 0 0   100% 8 0   100%
src/keel/swarm_landing.py _merged_head   100% 5 0 0   100% 0 0   100%
src/keel/swarm_landing.py landing_record   100% 11 0 0   100% 2 0   100%
src/keel/swarm_landing.py is_landing_record   100% 1 0 0   100% 0 0   100%
src/keel/swarm_landing.py _output   100% 1 0 0   100% 0 0   100%
src/keel/swarm_landing.py _read_head   100% 8 0 0   100% 4 0   100%
src/keel/swarm_landing.py _return_to   100% 8 0 0   100% 4 0   100%
src/keel/swarm_landing.py _close_landed   100% 4 0 0   100% 0 0   100%
src/keel/swarm_landing.py _target_wave   100% 1 0 0   100% 0 0   100%
src/keel/swarm_landing.py land_wave_clusters   100% 57 0 0   100% 22 0   100%
src/keel/swarm_landing.py land_wave_clusters.record   100% 2 0 0   100% 2 0   100%
src/keel/swarm_landing.py (no function)   100% 40 0 0   100% 0 0   100%
src/keel/swarm_review.py required_scopes   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py consent_refusal   100% 7 0 0   100% 4 0   100%
src/keel/swarm_review.py _reviewers   100% 2 0 0   100% 0 0   100%
src/keel/swarm_review.py required_count   100% 2 0 0   100% 0 0   100%
src/keel/swarm_review.py distinct_vendors_required   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py _strings   100% 3 0 0   100% 2 0   100%
src/keel/swarm_review.py focus_for   100% 7 0 0   100% 6 0   100%
src/keel/swarm_review.py restaffed   100% 4 0 0   100% 2 0   100%
src/keel/swarm_review.py restaff_plan   100% 10 0 0   100% 6 0   100%
src/keel/swarm_review.py seat_token   100% 2 0 0   100% 0 0   100%
src/keel/swarm_review.py seat_vendor   100% 9 0 0   100% 4 0   100%
src/keel/swarm_review.py ReviewSeat.eligible   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py ReviewSeat.vendor   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py ReviewSeat.to_dict   100% 2 0 0   100% 0 0   100%
src/keel/swarm_review.py reviewer_id   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py plan_review_seat   100% 11 0 0   100% 4 0   100%
src/keel/swarm_review.py review_seats   100% 10 0 0   100% 4 0   100%
src/keel/swarm_review.py cluster_refusal   100% 12 0 0   100% 8 0   100%
src/keel/swarm_review.py _fence   100% 2 0 0   100% 0 0   100%
src/keel/swarm_review.py render_review_brief   100% 22 0 0   100% 10 0   100%
src/keel/swarm_review.py SeatVerdict.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py failed_verdict   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py extract_verdict_object   100% 10 0 0   100% 4 0   100%
src/keel/swarm_review.py _finding_issue   100% 10 0 0   100% 6 0   100%
src/keel/swarm_review.py _quoted   100% 2 0 0   100% 0 0   100%
src/keel/swarm_review.py _normalised   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py _rejection_findings   100% 9 0 0   100% 6 0   100%
src/keel/swarm_review.py _entry   100% 2 0 0   100% 0 0   100%
src/keel/swarm_review.py _posted   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py _rejection   100% 8 0 0   100% 2 0   100%
src/keel/swarm_review.py verdict_from_object   100% 26 0 0   100% 14 0   100%
src/keel/swarm_review.py read_seat_verdict   100% 6 0 0   100% 4 0   100%
src/keel/swarm_review.py posting_decision   100% 12 0 0   100% 8 0   100%
src/keel/swarm_review.py posted_status   100% 3 0 0   100% 2 0   100%
src/keel/swarm_review.py head_moved   100% 3 0 0   100% 2 0   100%
src/keel/swarm_review.py review_run_id   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py ClusterReview.posted   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py ClusterReview.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py SwarmReviewResult.status   100% 3 0 0   100% 2 0   100%
src/keel/swarm_review.py SwarmReviewResult.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py _seat_line   100% 12 0 0   100% 6 0   100%
src/keel/swarm_review.py render_swarm_review_result   100% 20 0 0   100% 12 0   100%
src/keel/swarm_review.py with_status   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py posted_items   100% 2 0 0   100% 0 0   100%
src/keel/swarm_review.py _bounded   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review.py review_record   100% 10 0 0   100% 4 0   100%
src/keel/swarm_review.py (no function)   100% 119 0 0   100% 0 0   100%
src/keel/swarm_review_runtime.py _default_seat   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review_runtime.py review_name   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review_runtime.py review_checkout_path   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review_runtime.py review_brief_path   100% 1 0 0   100% 0 0   100%
src/keel/swarm_review_runtime.py _ensure_commit   100% 8 0 0   100% 4 0   100%
src/keel/swarm_review_runtime.py _run_seat   100% 23 0 0   100% 6 0   100%
src/keel/swarm_review_runtime.py _run_seats   100% 13 0 0   100% 2 0   100%
src/keel/swarm_review_runtime.py _review_cluster   100% 45 0 0   100% 16 0   100%
src/keel/swarm_review_runtime.py record_review   100% 8 0 0   100% 4 0   100%
src/keel/swarm_review_runtime.py review_wave_clusters   100% 19 0 0   100% 8 0   100%
src/keel/swarm_review_runtime.py (no function)   100% 37 0 0   100% 0 0   100%
src/keel/swarm_runtime.py default_runner   100% 8 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _no_stage   100% 0 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _now   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py build_worktree_path   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py build_brief_path   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py build_gh_config_path   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py cluster_branch   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _default_implement   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _default_push   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _default_open_pr   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _default_post_comment   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _default_label_pr   100% 5 0 0   100% 2 0   100%
src/keel/swarm_runtime.py create_swarm_worktree   100% 5 0 0   100% 0 0   100%
src/keel/swarm_runtime.py remove_swarm_worktree   100% 7 0 0   100% 4 0   100%
src/keel/swarm_runtime.py prune_worktrees   100% 2 0 0   100% 0 0   100%
src/keel/swarm_runtime.py remove_empty_swarm_dirs   100% 6 0 0   100% 2 0   100%
src/keel/swarm_runtime.py settle_live_worktree   100% 14 0 0   100% 8 0   100%
src/keel/swarm_runtime.py execute_cluster_worker   100% 12 0 0   100% 4 0   100%
src/keel/swarm_runtime.py _last_line   100% 2 0 0   100% 0 0   100%
src/keel/swarm_runtime.py execute_live_cluster_worker   100% 40 0 0   100% 12 0   100%
src/keel/swarm_runtime.py execute_live_cluster_worker.stop   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _hook_digests   100% 2 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _git_snapshot   100% 7 0 0   100% 2 0   100%
src/keel/swarm_runtime.py _tampered   100% 4 0 0   100% 2 0   100%
src/keel/swarm_runtime.py _commit_gate_push_open   100% 50 0 0   100% 24 0   100%
src/keel/swarm_runtime.py _apply_labels   100% 11 0 0   100% 6 0   100%
src/keel/swarm_runtime.py _gates_record   100% 16 0 0   100% 4 0   100%
src/keel/swarm_runtime.py record_worker_gates   100% 14 0 0   100% 4 0   100%
src/keel/swarm_runtime.py _post_provenance   100% 9 0 0   100% 4 0   100%
src/keel/swarm_runtime.py record_pull_request_consent   100% 14 0 0   100% 6 0   100%
src/keel/swarm_runtime.py _swarm_ids_under   100% 5 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _run_record   100% 5 0 0   100% 2 0   100%
src/keel/swarm_runtime.py find_swarm_leftovers   100% 41 0 0   100% 22 0   100%
src/keel/swarm_runtime.py find_swarm_leftovers.unregistered   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py clean_swarm_leftovers   100% 28 0 0   100% 20 0   100%
src/keel/swarm_runtime.py clean_swarm_leftovers.settle   100% 3 0 0   100% 2 0   100%
src/keel/swarm_runtime.py _disposal   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py _with_settlement   100% 5 0 0   100% 2 0   100%
src/keel/swarm_runtime.py run_swarm_orchestration   100% 75 0 0   100% 26 0   100%
src/keel/swarm_runtime.py run_swarm_orchestration.report   100% 3 0 0   100% 0 0   100%
src/keel/swarm_runtime.py run_swarm_orchestration._enter_stage   100% 1 0 0   100% 0 0   100%
src/keel/swarm_runtime.py run_swarm_orchestration._worker_fn   100% 14 0 0   100% 2 0   100%
src/keel/swarm_runtime.py (no function)   100% 79 0 0   100% 0 0   100%
src/keel/swarm_worker.py ConsentDelegation.for_run   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py ConsentDelegation.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py delegate_consent   100% 12 0 0   100% 6 0   100%
src/keel/swarm_worker.py required_scopes   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py worker_scopes   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py may   100% 5 0 0   100% 2 0   100%
src/keel/swarm_worker.py consent_refusal   100% 6 0 0   100% 4 0   100%
src/keel/swarm_worker.py child_env   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py worker_env   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py _inherited_git_config   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py implementer_env   100% 9 0 0   100% 2 0   100%
src/keel/swarm_worker.py keel_git   100% 4 0 0   100% 2 0   100%
src/keel/swarm_worker.py _config_entry   100% 6 0 0   100% 2 0   100%
src/keel/swarm_worker.py _compared   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py tamper_findings   100% 14 0 0   100% 10 0   100%
src/keel/swarm_worker.py tamper_reason   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py plan_implementer   100% 14 0 0   100% 6 0   100%
src/keel/swarm_worker.py _issue_line   100% 4 0 0   100% 0 0   100%
src/keel/swarm_worker.py render_brief   100% 7 0 0   100% 2 0   100%
src/keel/swarm_worker.py _issue_refs   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py commit_message   100% 4 0 0   100% 0 0   100%
src/keel/swarm_worker.py pull_request_title   100% 5 0 0   100% 4 0   100%
src/keel/swarm_worker.py pull_request_body   100% 5 0 0   100% 0 0   100%
src/keel/swarm_worker.py pull_request_repo   100% 2 0 0   100% 0 0   100%
src/keel/swarm_worker.py provenance_run_id   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py ship_provenance_body   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py provenance_warning   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py attribution_labels   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py label_names   100% 7 0 0   100% 2 0   100%
src/keel/swarm_worker.py labels_warning   100% 2 0 0   100% 0 0   100%
src/keel/swarm_worker.py parse_gate_report   100% 14 0 0   100% 6 0   100%
src/keel/swarm_worker.py _gate_outcomes   100% 9 0 0   100% 6 0   100%
src/keel/swarm_worker.py _gate_outcome   100% 12 0 0   100% 6 0   100%
src/keel/swarm_worker.py gate_report_summary   100% 7 0 0   100% 2 0   100%
src/keel/swarm_worker.py _gate_word   100% 7 0 0   100% 6 0   100%
src/keel/swarm_worker.py gates_record   100% 2 0 0   100% 0 0   100%
src/keel/swarm_worker.py gates_not_a_pass   100% 5 0 0   100% 2 0   100%
src/keel/swarm_worker.py gates_not_a_pass_warning   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py gates_record_warning   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py worktree_disposal   100% 7 0 0   100% 6 0   100%
src/keel/swarm_worker.py parse_worktree_list   100% 8 0 0   100% 4 0   100%
src/keel/swarm_worker.py swarm_branch_ids   100% 7 0 0   100% 4 0   100%
src/keel/swarm_worker.py SwarmLeftover.to_dict   100% 1 0 0   100% 0 0   100%
src/keel/swarm_worker.py _branch_keep_reason   100% 7 0 0   100% 6 0   100%
src/keel/swarm_worker.py classify_leftovers   100% 27 0 0   100% 10 0   100%
src/keel/swarm_worker.py classify_leftovers.in_flight   100% 4 0 0   100% 2 0   100%
src/keel/swarm_worker.py (no function)   100% 113 0 0   100% 0 0   100%
src/keel/tdd.py Mode.is_tdd   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py Mode.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py resolve_mode   100% 6 0 0   100% 4 0   100%
src/keel/tdd.py test_globs   100% 12 0 0   100% 6 0   100%
src/keel/tdd.py _globs   100% 3 0 0   100% 2 0   100%
src/keel/tdd.py _unique   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py is_test_path   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py Change.deleted   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py Change.present   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py Commit.short   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py Commit.files   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py Commit.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py _change   100% 10 0 0   100% 4 0   100%
src/keel/tdd.py parse_commits   100% 14 0 0   100% 8 0   100%
src/keel/tdd.py OrderResult.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/tdd.py removed_test   100% 7 0 0   100% 6 0   100%
src/keel/tdd.py check_order   100% 26 0 0   100% 18 0   100%
src/keel/tdd.py phase_implementers   100% 5 0 0   100% 4 0   100%
src/keel/tdd.py phase_records   100% 4 0 0   100% 2 0   100%
src/keel/tdd.py (no function)   100% 78 0 0   100% 0 0   100%
src/keel/team.py effort_needs_model   100% 1 0 0   100% 0 0   100%
src/keel/team.py Seat.kind   100% 5 0 0   100% 4 0   100%
src/keel/team.py Seat.name   100% 3 0 0   100% 2 0   100%
src/keel/team.py Seat.as_dict   100% 8 0 0   100% 6 0   100%
src/keel/team.py TeamPolicy.benches_for   100% 6 0 0   100% 4 0   100%
src/keel/team.py TeamPolicy.review_for   100% 6 0 0   100% 4 0   100%
src/keel/team.py _text   100% 1 0 0   100% 0 0   100%
src/keel/team.py _seat   100% 6 0 0   100% 4 0   100%
src/keel/team.py _seats   100% 6 0 0   100% 4 0   100%
src/keel/team.py _bench   100% 6 0 0   100% 4 0   100%
src/keel/team.py _benches   100% 8 0 0   100% 6 0   100%
src/keel/team.py parse_team   100% 20 0 0   100% 10 0   100%
src/keel/team.py _seat_canonical   100% 4 0 0   100% 2 0   100%
src/keel/team.py _bench_canonical   100% 10 0 0   100% 8 0   100%
src/keel/team.py canonical   100% 36 0 0   100% 32 0   100%
src/keel/team.py legacy_seats   100% 11 0 0   100% 6 0   100%
src/keel/team.py seat_from_token   100% 5 0 0   100% 2 0   100%
src/keel/team.py _implement_seat   100% 10 0 0   100% 10 0   100%
src/keel/team.py jury_on_unavailable   100% 1 0 0   100% 0 0   100%
src/keel/team.py _panel_falls_back   100% 3 0 0   100% 2 0   100%
src/keel/team.py _panel_refuses   100% 3 0 0   100% 2 0   100%
src/keel/team.py _availability_reason   100% 2 0 0   100% 0 0   100%
src/keel/team.py refusal_message   100% 8 0 0   100% 2 0   100%
src/keel/team.py configured_review   100% 4 0 0   100% 4 0   100%
src/keel/team.py panel_review_source   100% 6 0 0   100% 4 0   100%
src/keel/team.py _review_seats   100% 38 0 0   100% 24 0   100%
src/keel/team.py slot_labels   100% 3 0 0   100% 2 0   100%
src/keel/team.py _effective_effort   100% 1 0 0   100% 0 0   100%
src/keel/team.py _seat_at_effort   100% 3 0 0   100% 2 0   100%
src/keel/team.py _lead_seat   100% 6 0 0   100% 6 0   100%
src/keel/team.py resolve_assignment   100% 33 0 0   100% 12 0   100%
src/keel/team.py require_distinct_vendors   100% 1 0 0   100% 0 0   100%
src/keel/team.py _seat_paths   100% 18 0 0   100% 14 0   100%
src/keel/team.py _bench_seat_paths   100% 10 0 0   100% 8 0   100%
src/keel/team.py team_issues   100% 21 0 0   100% 8 0   100%
src/keel/team.py _effort_issues   100% 10 0 0   100% 8 0   100%
src/keel/team.py _bench_effort_issues   100% 14 0 0   100% 12 0   100%
src/keel/team.py _bench_effort_targets   100% 6 0 0   100% 2 0   100%
src/keel/team.py _seat_vendor   100% 12 0 0   100% 10 0   100%
src/keel/team.py _tier_key_issues   100% 10 0 0   100% 6 0   100%
src/keel/team.py _band_key_issues   100% 4 0 0   100% 2 0   100%
src/keel/team.py _gate_issues   100% 14 0 0   100% 10 0   100%
src/keel/team.py _review_issues   100% 22 0 0   100% 20 0   100%
src/keel/team.py (no function)   100% 93 0 0   100% 0 0   100%
src/keel/vocab.py supports_effort   100% 1 0 0   100% 0 0   100%
src/keel/vocab.py (no function)   100% 9 0 0   100% 0 0   100%
src/keel/window.py parse_window   100% 2 0 0   100% 0 0   100%
src/keel/window.py _parse_time   100% 2 0 0   100% 0 0   100%
src/keel/window.py is_merge_open   100% 10 0 0   100% 6 0   100%
src/keel/window.py (no function)   100% 6 0 0   100% 0 0   100%
src/keel/wizard.py _effort_capable   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py _efforts   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py Candidate.effort   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py Candidate.detail   100% 5 0 0   100% 2 0   100%
src/keel/wizard.py Catalog.from_report   100% 7 0 0   100% 4 0   100%
src/keel/wizard.py Catalog.names   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py Catalog.get   100% 4 0 0   100% 4 0   100%
src/keel/wizard.py Catalog.has   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py Catalog.spread   100% 7 0 0   100% 4 0   100%
src/keel/wizard.py _candidate   100% 10 0 0   100% 4 0   100%
src/keel/wizard.py _word   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py Question.values   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py Question.ordered   100% 2 0 0   100% 0 0   100%
src/keel/wizard.py Question.text   100% 8 0 0   100% 4 0   100%
src/keel/wizard.py Question.normalize   100% 16 0 0   100% 10 0   100%
src/keel/wizard.py State._replace   100% 2 0 0   100% 0 0   100%
src/keel/wizard.py State.with_answer   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py State.with_default   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py State.settled   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py State.questions   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py State.next_question   100% 4 0 0   100% 4 0   100%
src/keel/wizard.py State.resolve   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py committable   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py start   100% 3 0 0   100% 2 0   100%
src/keel/wizard.py Resolution.flags   100% 12 0 0   100% 10 0   100%
src/keel/wizard.py Resolution.team_block   100% 10 0 0   100% 6 0   100%
src/keel/wizard.py Resolution.as_dict   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py seat_token   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py _seat_block   100% 6 0 0   100% 4 0   100%
src/keel/wizard.py _default_implement   100% 7 0 0   100% 6 0   100%
src/keel/wizard.py _default_gate   100% 4 0 0   100% 2 0   100%
src/keel/wizard.py _default_bench   100% 3 0 0   100% 2 0   100%
src/keel/wizard.py _configured_bench   100% 2 0 0   100% 0 0   100%
src/keel/wizard.py _seat_bench   100% 6 0 0   100% 4 0   100%
src/keel/wizard.py _spread_bench   100% 4 0 0   100% 0 0   100%
src/keel/wizard.py _bench_answer   100% 3 0 0   100% 2 0   100%
src/keel/wizard.py _offerable_gate   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py _seats_from   100% 2 0 0   100% 0 0   100%
src/keel/wizard.py _policy_models   100% 5 0 0   100% 4 0   100%
src/keel/wizard.py _provider_choices   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py _walk   100% 52 0 0   100% 20 0   100%
src/keel/wizard.py _walk.ask   100% 7 0 0   100% 4 0   100%
src/keel/wizard.py quoted   100% 1 0 0   100% 0 0   100%
src/keel/wizard.py apply_answers   100% 19 0 0   100% 10 0   100%
src/keel/wizard.py _unused_answer_issues   100% 6 0 0   100% 4 0   100%
src/keel/wizard.py _unreachable_reason   100% 11 0 0   100% 10 0   100%
src/keel/wizard.py run   100% 16 0 0   100% 8 0   100%
src/keel/wizard.py render   100% 14 0 0   100% 8 0   100%
src/keel/wizard.py parse_answer_args   100% 13 0 0   100% 8 0   100%
src/keel/wizard.py unavailable   100% 6 0 0   100% 4 0   100%
src/keel/wizard.py _policy_seats   100% 13 0 0   100% 10 0   100%
src/keel/wizard.py (no function)   100% 121 0 0   100% 0 0   100%
src/keel/wizardrun.py _default_ask   100% 0 0 9   100% 0 0   100%
src/keel/wizardrun.py _default_isatty   100% 0 0 1   100% 0 0   100%
src/keel/wizardrun.py run_option_wizard   100% 34 0 0   100% 18 0   100%
src/keel/wizardrun.py _jury_answer   100% 7 0 0   100% 6 0   100%
src/keel/wizardrun.py apply_resolution   100% 17 0 0   100% 12 0   100%
src/keel/wizardrun.py (no function)   100% 11 0 2   100% 0 0   100%
src/keel/workblock.py child_ship_args   100% 13 0 0   100% 12 0   100%
src/keel/workblock.py delegation_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/workblock.py contract_as_dict   100% 4 0 0   100% 2 0   100%
src/keel/workblock.py (no function)   100% 13 0 0   100% 0 0   100%
src/keel/workcreation.py WorkDecision.as_dict   100% 4 0 0   100% 2 0   100%
src/keel/workcreation.py contract_as_dict   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py evaluate_candidates   100% 20 0 0   100% 10 0   100%
src/keel/workcreation.py _normalize_candidate   100% 3 0 0   100% 0 0   100%
src/keel/workcreation.py _normalize_existing   100% 3 0 0   100% 0 0   100%
src/keel/workcreation.py _created_as_existing   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _is_transient   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _find_duplicate   100% 6 0 0   100% 6 0   100%
src/keel/workcreation.py _same_key   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _same_title   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _is_open   100% 2 0 0   100% 0 0   100%
src/keel/workcreation.py _tokens   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _jaccard   100% 3 0 0   100% 2 0   100%
src/keel/workcreation.py _normalize_text   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _string   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _positive_int   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _confidence   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py _count   100% 1 0 0   100% 0 0   100%
src/keel/workcreation.py (no function)   100% 36 0 0   100% 0 0   100%
src/keel/workspace.py is_root_anchored   100% 1 0 0   100% 0 0   100%
src/keel/workspace.py keel_dir   100% 1 0 0   100% 0 0   100%
src/keel/workspace.py runtime_gitignore_body   100% 2 0 0   100% 0 0   100%
src/keel/workspace.py ensure_runtime_gitignore   100% 17 0 0   100% 8 0   100%
src/keel/workspace.py ensure_runtime_gitignore_for   100% 5 0 0   100% 4 0   100%
src/keel/workspace.py write_text_atomic   100% 15 0 0   100% 0 0   100%
src/keel/workspace.py _fsync_directory   100% 8 0 0   100% 0 0   100%
src/keel/workspace.py scratch_dir   100% 6 0 0   100% 2 0   100%
src/keel/workspace.py _escapes_root   100% 5 0 0   100% 0 0   100%
src/keel/workspace.py scratch_entries   100% 4 0 0   100% 2 0   100%
src/keel/workspace.py clean_scratch   100% 10 0 0   100% 8 0   100%
src/keel/workspace.py activity_prune_plan   100% 10 0 0   100% 6 0   100%
src/keel/workspace.py prune_activity   100% 5 0 0   100% 2 0   100%
src/keel/workspace.py (no function)   100% 24 0 0   100% 0 0   100%
src/keel/yaml_helper.py load   100% 1 0 0   100% 0 0   100%
src/keel/yaml_helper.py dump   100% 1 0 0   100% 0 0   100%
src/keel/yaml_helper.py (no function)   100% 12 0 0   100% 0 0   100%
Total     100% 19243 0 58   100% 6636 0   100%

No items found using the specified filter.