Coverage report: 90%

Files Functions Classes

coverage.py v7.12.0, created at 2026-05-22 16:19 -0500

File function   statements missing excluded   coverage
little_loops / cli / action.py _now_iso   1 0 0   100%
little_loops / cli / action.py _emit   1 0 0   100%
little_loops / cli / action.py _find_plugin_root   2 2 0   0%
little_loops / cli / action.py _read_skill_description   14 1 0   93%
little_loops / cli / action.py _load_skills   8 0 0   100%
little_loops / cli / action.py cmd_invoke   37 0 0   100%
little_loops / cli / action.py cmd_invoke._stream_cb   2 0 0   100%
little_loops / cli / action.py cmd_capabilities   14 0 0   100%
little_loops / cli / action.py cmd_list   4 0 0   100%
little_loops / cli / action.py main_action   21 2 0   90%
little_loops / cli / action.py (no function)   18 0 0   100%
little_loops / cli / adapt_agents_for_codex.py _find_plugin_root   2 2 0   0%
little_loops / cli / adapt_agents_for_codex.py _extract_agent_frontmatter   10 2 0   80%
little_loops / cli / adapt_agents_for_codex.py _extract_short_desc   11 1 0   91%
little_loops / cli / adapt_agents_for_codex.py _extract_body   9 2 0   78%
little_loops / cli / adapt_agents_for_codex.py _emit_agent_toml   6 0 0   100%
little_loops / cli / adapt_agents_for_codex.py _process_agents   50 10 0   80%
little_loops / cli / adapt_agents_for_codex.py main_adapt_agents_for_codex   22 6 0   73%
little_loops / cli / adapt_agents_for_codex.py (no function)   15 0 0   100%
little_loops / cli / adapt_skills_for_codex.py _find_plugin_root   2 2 0   0%
little_loops / cli / adapt_skills_for_codex.py _extract_short_desc   18 4 0   78%
little_loops / cli / adapt_skills_for_codex.py _insert_fields   17 2 0   88%
little_loops / cli / adapt_skills_for_codex.py _title_case   1 0 0   100%
little_loops / cli / adapt_skills_for_codex.py _make_openai_yaml   1 0 0   100%
little_loops / cli / adapt_skills_for_codex.py _process_skills   37 5 0   86%
little_loops / cli / adapt_skills_for_codex.py _read_command_frontmatter   12 5 0   58%
little_loops / cli / adapt_skills_for_codex.py _synthesized_skill_md   11 2 0   82%
little_loops / cli / adapt_skills_for_codex.py _process_commands   62 19 0   69%
little_loops / cli / adapt_skills_for_codex.py main_adapt_skills_for_codex   23 4 0   83%
little_loops / cli / adapt_skills_for_codex.py (no function)   19 0 0   100%
little_loops / cli / auto.py main_auto   25 7 0   72%
little_loops / cli / auto.py (no function)   9 0 0   100%
little_loops / cli / create_extension.py _to_pkg_name   1 0 0   100%
little_loops / cli / create_extension.py _to_class_name   1 0 0   100%
little_loops / cli / create_extension.py _get_cwd   1 1 0   0%
little_loops / cli / create_extension.py _target_exists   1 1 0   0%
little_loops / cli / create_extension.py _write_scaffold   3 3 0   0%
little_loops / cli / create_extension.py _render_pyproject   2 0 0   100%
little_loops / cli / create_extension.py _render_init   2 0 0   100%
little_loops / cli / create_extension.py _render_extension   2 0 0   100%
little_loops / cli / create_extension.py _render_test   2 0 0   100%
little_loops / cli / create_extension.py main_create_extension   29 0 0   100%
little_loops / cli / create_extension.py (no function)   16 0 0   100%
little_loops / cli / deps.py _load_issues   26 4 0   85%
little_loops / cli / deps.py main_deps   208 42 0   80%
little_loops / cli / deps.py (no function)   7 0 0   100%
little_loops / cli / docs.py main_verify_docs   21 0 0   100%
little_loops / cli / docs.py main_verify_skill_budget   36 11 0   69%
little_loops / cli / docs.py main_check_links   24 0 0   100%
little_loops / cli / docs.py (no function)   8 0 0   100%
little_loops / cli / doctor.py _print_report   25 0 0   100%
little_loops / cli / doctor.py main_doctor   12 0 0   100%
little_loops / cli / doctor.py (no function)   9 0 0   100%
little_loops / cli / generate_skill_descriptions.py _find_plugin_root   2 2 0   0%
little_loops / cli / generate_skill_descriptions.py _parse_frontmatter   13 1 0   92%
little_loops / cli / generate_skill_descriptions.py _extract_trigger_keywords   4 0 0   100%
little_loops / cli / generate_skill_descriptions.py _build_prompt   1 0 0   100%
little_loops / cli / generate_skill_descriptions.py _write_description_to_frontmatter   10 1 0   90%
little_loops / cli / generate_skill_descriptions.py _process_skills   41 13 0   68%
little_loops / cli / generate_skill_descriptions.py main_generate_skill_descriptions   17 3 0   82%
little_loops / cli / generate_skill_descriptions.py (no function)   15 0 0   100%
little_loops / cli / gitignore.py main_gitignore   29 0 0   100%
little_loops / cli / gitignore.py (no function)   7 0 0   100%
little_loops / cli / history.py main_history   72 1 0   99%
little_loops / cli / history.py (no function)   8 0 0   100%
little_loops / cli / issues / anchor_sweep.py cmd_anchor_sweep   20 2 0   90%
little_loops / cli / issues / anchor_sweep.py (no function)   6 0 2   100%
little_loops / cli / issues / append_log.py cmd_append_log   7 0 0   100%
little_loops / cli / issues / append_log.py (no function)   5 0 2   100%
little_loops / cli / issues / check_flag.py cmd_check_flag   9 9 0   0%
little_loops / cli / issues / check_flag.py (no function)   5 0 2   100%
little_loops / cli / issues / check_readiness.py cmd_check_readiness   21 21 0   0%
little_loops / cli / issues / check_readiness.py (no function)   6 0 2   100%
little_loops / cli / issues / clusters.py _get_connected_components   19 1 0   95%
little_loops / cli / issues / clusters.py _topo_sort_cluster   21 2 0   90%
little_loops / cli / issues / clusters.py _cluster_edges   6 0 0   100%
little_loops / cli / issues / clusters.py _render_cluster_diagram   44 1 0   98%
little_loops / cli / issues / clusters.py cmd_clusters   57 2 0   96%
little_loops / cli / issues / clusters.py cmd_clusters._max_degree   1 0 0   100%
little_loops / cli / issues / clusters.py (no function)   15 0 4   100%
little_loops / cli / issues / count_cmd.py cmd_count   26 0 0   100%
little_loops / cli / issues / count_cmd.py (no function)   5 0 2   100%
little_loops / cli / issues / impact_effort.py _infer_effort   3 0 0   100%
little_loops / cli / issues / impact_effort.py _infer_impact   3 0 0   100%
little_loops / cli / issues / impact_effort.py _issue_slug   7 1 0   86%
little_loops / cli / issues / impact_effort.py _render_quadrant_lines   17 2 0   88%
little_loops / cli / issues / impact_effort.py _render_grid   53 0 0   100%
little_loops / cli / issues / impact_effort.py _render_grid.pad   3 0 0   100%
little_loops / cli / issues / impact_effort.py cmd_impact_effort   30 3 0   90%
little_loops / cli / issues / impact_effort.py cmd_impact_effort._rec   1 0 0   100%
little_loops / cli / issues / impact_effort.py (no function)   14 0 3   100%
little_loops / cli / issues / list_cmd.py cmd_list   81 5 0   94%
little_loops / cli / issues / list_cmd.py (no function)   5 0 2   100%
little_loops / cli / issues / next_action.py cmd_next_action   26 0 0   100%
little_loops / cli / issues / next_action.py (no function)   4 0 2   100%
little_loops / cli / issues / next_id.py cmd_next_id   4 0 0   100%
little_loops / cli / issues / next_id.py (no function)   3 0 2   100%
little_loops / cli / issues / next_issue.py cmd_next_issue   23 3 0   87%
little_loops / cli / issues / next_issue.py (no function)   5 0 2   100%
little_loops / cli / issues / next_issues.py cmd_next_issues   24 3 0   88%
little_loops / cli / issues / next_issues.py (no function)   5 0 2   100%
little_loops / cli / issues / path_cmd.py cmd_path   15 2 0   87%
little_loops / cli / issues / path_cmd.py (no function)   4 0 3   100%
little_loops / cli / issues / refine_status.py _cmd_label   4 0 0   100%
little_loops / cli / issues / refine_status.py _source_label   5 1 0   80%
little_loops / cli / issues / refine_status.py _truncate   3 0 0   100%
little_loops / cli / issues / refine_status.py _col   1 0 0   100%
little_loops / cli / issues / refine_status.py _rcol   1 0 0   100%
little_loops / cli / issues / refine_status.py _apply_cell_color   19 2 0   89%
little_loops / cli / issues / refine_status.py _compute_min_total_width   16 1 0   94%
little_loops / cli / issues / refine_status.py _elide_columns   20 3 0   85%
little_loops / cli / issues / refine_status.py _elide_columns.fits   1 0 0   100%
little_loops / cli / issues / refine_status.py cmd_refine_status   62 0 0   100%
little_loops / cli / issues / refine_status.py cmd_refine_status._canonical_sort_key   4 0 0   100%
little_loops / cli / issues / refine_status.py cmd_refine_status._sort_key   1 0 0   100%
little_loops / cli / issues / refine_status.py cmd_refine_status._get_col_display_width   7 0 0   100%
little_loops / cli / issues / refine_status.py cmd_refine_status._render_cell   5 0 0   100%
little_loops / cli / issues / refine_status.py cmd_refine_status._header_cell   4 0 0   100%
little_loops / cli / issues / refine_status.py cmd_refine_status._cell_value   29 0 0   100%
little_loops / cli / issues / refine_status.py cmd_refine_status._build_row   23 0 0   100%
little_loops / cli / issues / refine_status.py _print_key   16 0 0   100%
little_loops / cli / issues / refine_status.py (no function)   34 0 3   100%
little_loops / cli / issues / search.py _parse_discovered_date   20 3 0   85%
little_loops / cli / issues / search.py _parse_updated_date   15 4 0   73%
little_loops / cli / issues / search.py _parse_labels_from_content   4 0 0   100%
little_loops / cli / issues / search.py _parse_priority_filter   11 0 0   100%
little_loops / cli / issues / search.py _load_issues_with_status   25 4 0   84%
little_loops / cli / issues / search.py build_sort_key   8 0 0   100%
little_loops / cli / issues / search.py build_sort_key.key   8 0 0   100%
little_loops / cli / issues / search.py _sort_issues   2 0 0   100%
little_loops / cli / issues / search.py _sort_issues.key   27 11 0   59%
little_loops / cli / issues / search.py cmd_search   120 7 0   94%
little_loops / cli / issues / search.py (no function)   16 0 5   100%
little_loops / cli / issues / sequence.py cmd_sequence   33 4 0   88%
little_loops / cli / issues / sequence.py (no function)   5 0 2   100%
little_loops / cli / issues / set_scores.py cmd_set_scores   26 0 0   100%
little_loops / cli / issues / set_scores.py (no function)   5 0 2   100%
little_loops / cli / issues / show.py _source_label   3 0 0   100%
little_loops / cli / issues / show.py _resolve_issue_id   33 2 0   94%
little_loops / cli / issues / show.py _parse_card_fields   81 11 0   86%
little_loops / cli / issues / show.py _strip_ansi   1 0 0   100%
little_loops / cli / issues / show.py _ljust   2 0 0   100%
little_loops / cli / issues / show.py _render_card   129 3 0   98%
little_loops / cli / issues / show.py cmd_show   12 0 0   100%
little_loops / cli / issues / show.py (no function)   16 0 2   100%
little_loops / cli / issues / skip.py cmd_skip   31 11 0   65%
little_loops / cli / issues / skip.py (no function)   5 0 3   100%
little_loops / cli / learning_tests.py cmd_check   8 0 0   100%
little_loops / cli / learning_tests.py cmd_list   5 0 0   100%
little_loops / cli / learning_tests.py cmd_mark_stale   8 0 0   100%
little_loops / cli / learning_tests.py main_learning_tests   17 2 0   88%
little_loops / cli / learning_tests.py (no function)   8 0 0   100%
little_loops / cli / logs.py _is_ll_relevant   26 7 0   73%
little_loops / cli / logs.py _has_ll_activity   17 5 0   71%
little_loops / cli / logs.py discover_all_projects   14 2 0   86%
little_loops / cli / logs.py _cmd_matches   9 0 0   100%
little_loops / cli / logs.py generate_index   41 7 0   83%
little_loops / cli / logs.py _cmd_extract   50 5 0   90%
little_loops / cli / logs.py _cmd_tail   24 1 0   96%
little_loops / cli / logs.py _build_parser   11 0 0   100%
little_loops / cli / logs.py _parse_args   1 0 0   100%
little_loops / cli / logs.py main_logs   19 4 0   79%
little_loops / cli / logs.py (no function)   24 0 0   100%
little_loops / cli / loop / __main__.py (no function)   1 1 2   0%
little_loops / cli / loop / _helpers.py _loop_signal_handler   21 0 0   100%
little_loops / cli / loop / _helpers.py _is_earliest_waiter   18 0 0   100%
little_loops / cli / loop / _helpers.py register_loop_signal_handlers   5 0 0   100%
little_loops / cli / loop / _helpers.py get_builtin_loops_dir   1 0 0   100%
little_loops / cli / loop / _helpers.py resolve_loop_path   13 1 0   92%
little_loops / cli / loop / _helpers.py load_loop   4 0 0   100%
little_loops / cli / loop / _helpers.py load_loop_with_spec   7 0 0   100%
little_loops / cli / loop / _helpers.py print_execution_plan   44 0 0   100%
little_loops / cli / loop / _helpers.py _make_instance_id   1 0 0   100%
little_loops / cli / loop / _helpers.py run_background   49 6 0   88%
little_loops / cli / loop / _helpers.py run_foreground   38 3 0   92%
little_loops / cli / loop / _helpers.py run_foreground.display_progress   135 6 0   96%
little_loops / cli / loop / _helpers.py (no function)   30 0 2   100%
little_loops / cli / loop / config_cmds.py cmd_validate   17 0 0   100%
little_loops / cli / loop / config_cmds.py cmd_install   19 0 0   100%
little_loops / cli / loop / config_cmds.py (no function)   6 0 0   100%
little_loops / cli / loop / info.py _load_loop_meta   16 2 0   88%
little_loops / cli / loop / info.py cmd_list   122 5 0   96%
little_loops / cli / loop / info.py _strip_ansi   1 0 0   100%
little_loops / cli / loop / info.py _truncate   5 0 0   100%
little_loops / cli / loop / info.py _format_history_event   113 29 0   74%
little_loops / cli / loop / info.py _format_duration   10 10 0   0%
little_loops / cli / loop / info.py _list_archived_runs   46 40 0   13%
little_loops / cli / loop / info.py cmd_history   34 0 0   100%
little_loops / cli / loop / info.py _compact_transitions   19 4 0   79%
little_loops / cli / loop / info.py _print_state_overview_table   39 4 0   90%
little_loops / cli / loop / info.py _humanize_evaluate_type   1 0 0   100%
little_loops / cli / loop / info.py cmd_show   171 37 0   78%
little_loops / cli / loop / info.py cmd_fragments   40 6 0   85%
little_loops / cli / loop / info.py (no function)   29 0 0   100%
little_loops / cli / loop / layout.py _colorize_label   13 4 0   69%
little_loops / cli / loop / layout.py _edge_line_color   12 1 0   92%
little_loops / cli / loop / layout.py _colorize_diagram_labels   5 0 0   100%
little_loops / cli / loop / layout.py _badge_display_width   2 0 0   100%
little_loops / cli / loop / layout.py _get_state_badge   14 0 0   100%
little_loops / cli / loop / layout.py _box_inner_lines   19 1 0   95%
little_loops / cli / loop / layout.py _collect_edges   28 3 0   89%
little_loops / cli / loop / layout.py _bfs_order   11 0 0   100%
little_loops / cli / loop / layout.py _trace_main_path   18 0 0   100%
little_loops / cli / loop / layout.py _classify_edges   17 0 0   100%
little_loops / cli / loop / layout.py TopologyDetector.__init__   4 0 0   100%
little_loops / cli / loop / layout.py TopologyDetector.classify   10 0 0   100%
little_loops / cli / loop / layout.py LayerAssigner.__init__   5 0 0   100%
little_loops / cli / loop / layout.py LayerAssigner.assign   51 0 0   100%
little_loops / cli / loop / layout.py CrossingMinimizer.__init__   3 0 0   100%
little_loops / cli / loop / layout.py CrossingMinimizer.minimize   34 0 0   100%
little_loops / cli / loop / layout.py _compute_display_labels   9 0 0   100%
little_loops / cli / loop / layout.py _compute_box_sizes   24 0 0   100%
little_loops / cli / loop / layout.py _draw_box   69 9 0   87%
little_loops / cli / loop / layout.py _draw_box._bc   1 0 0   100%
little_loops / cli / loop / layout.py _render_layered_diagram   559 45 0   92%
little_loops / cli / loop / layout.py _render_layered_diagram._lc   1 0 0   100%
little_loops / cli / loop / layout.py _render_layered_diagram._lc   1 0 0   100%
little_loops / cli / loop / layout.py _render_layered_diagram._lc   1 0 0   100%
little_loops / cli / loop / layout.py _render_layered_diagram._lc   1 0 0   100%
little_loops / cli / loop / layout.py _render_fsm_diagram   37 0 0   100%
little_loops / cli / loop / layout.py _render_horizontal_simple   44 15 0   66%
little_loops / cli / loop / layout.py (no function)   37 0 0   100%
little_loops / cli / loop / lifecycle.py _format_relative_time   2 0 0   100%
little_loops / cli / loop / lifecycle.py _read_pid_file   6 2 0   67%
little_loops / cli / loop / lifecycle.py _kill_with_timeout   10 0 0   100%
little_loops / cli / loop / lifecycle.py _status_single   61 2 0   97%
little_loops / cli / loop / lifecycle.py cmd_status   70 16 0   77%
little_loops / cli / loop / lifecycle.py cmd_stop   50 2 0   96%
little_loops / cli / loop / lifecycle.py cmd_resume   79 5 0   94%
little_loops / cli / loop / lifecycle.py cmd_resume._cleanup_pid   1 1 0   0%
little_loops / cli / loop / lifecycle.py (no function)   19 0 0   100%
little_loops / cli / loop / next_loop.py LoopCandidate.to_dict   1 0 0   100%
little_loops / cli / loop / next_loop.py _scan_history   23 4 0   83%
little_loops / cli / loop / next_loop.py _recency_score   10 3 0   70%
little_loops / cli / loop / next_loop.py _score_loop   13 1 0   92%
little_loops / cli / loop / next_loop.py _resolve_autodev_params   12 3 0   75%
little_loops / cli / loop / next_loop.py _resolve_params   7 2 0   71%
little_loops / cli / loop / next_loop.py _build_command   7 3 0   57%
little_loops / cli / loop / next_loop.py _build_rationale   17 4 0   76%
little_loops / cli / loop / next_loop.py cmd_next_loop   59 12 0   80%
little_loops / cli / loop / next_loop.py (no function)   32 0 0   100%
little_loops / cli / loop / run.py _parse_program_md   30 0 0   100%
little_loops / cli / loop / run.py _parse_program_md._extract   6 0 0   100%
little_loops / cli / loop / run.py cmd_run   170 22 0   87%
little_loops / cli / loop / run.py cmd_run._cleanup_pid   1 1 0   0%
little_loops / cli / loop / run.py cmd_run._cleanup_queue_entry   2 0 0   100%
little_loops / cli / loop / run.py cmd_run._cleanup_worktree_on_exit   1 1 0   0%
little_loops / cli / loop / run.py (no function)   14 0 0   100%
little_loops / cli / loop / testing.py cmd_test   98 20 0   80%
little_loops / cli / loop / testing.py cmd_simulate   29 3 0   90%
little_loops / cli / loop / testing.py cmd_simulate.simulation_callback   20 0 0   100%
little_loops / cli / loop / testing.py (no function)   8 0 0   100%
little_loops / cli / messages.py main_messages   87 4 0   95%
little_loops / cli / messages.py _save_combined   13 0 0   100%
little_loops / cli / messages.py (no function)   6 0 0   100%
little_loops / cli / migrate.py _set_fields   14 0 0   100%
little_loops / cli / migrate.py _extract_prefix_from_filename   2 0 0   100%
little_loops / cli / migrate.py _get_git_completion_date   9 3 0   67%
little_loops / cli / migrate.py _move_file   7 0 0   100%
little_loops / cli / migrate.py main_migrate   73 6 0   92%
little_loops / cli / migrate.py (no function)   16 0 0   100%
little_loops / cli / migrate_labels.py _parse_body_labels   4 0 0   100%
little_loops / cli / migrate_labels.py _set_labels_frontmatter   12 3 0   75%
little_loops / cli / migrate_labels.py _remove_labels_section   3 0 0   100%
little_loops / cli / migrate_labels.py _migrate_content   17 1 0   94%
little_loops / cli / migrate_labels.py main_migrate_labels   41 9 0   78%
little_loops / cli / migrate_labels.py (no function)   13 0 0   100%
little_loops / cli / migrate_relationships.py _set_fields   14 3 0   79%
little_loops / cli / migrate_relationships.py _migrate_content   19 1 0   95%
little_loops / cli / migrate_relationships.py main_migrate_relationships   42 9 0   79%
little_loops / cli / migrate_relationships.py (no function)   12 0 0   100%
little_loops / cli / migrate_status.py _migrate_content   4 0 0   100%
little_loops / cli / migrate_status.py _migrate_content._replace   6 0 0   100%
little_loops / cli / migrate_status.py main_migrate_status   42 9 0   79%
little_loops / cli / migrate_status.py (no function)   9 0 0   100%
little_loops / cli / output.py terminal_width   1 0 0   100%
little_loops / cli / output.py wrap_text   2 2 0   0%
little_loops / cli / output.py configure_output   7 0 0   100%
little_loops / cli / output.py use_color_enabled   1 0 0   100%
little_loops / cli / output.py colorize   3 0 0   100%
little_loops / cli / output.py print_json   1 0 0   100%
little_loops / cli / output.py format_relative_time   13 0 0   100%
little_loops / cli / output.py (no function)   17 0 2   100%
little_loops / cli / parallel.py main_parallel   67 6 0   91%
little_loops / cli / parallel.py (no function)   10 0 0   100%
little_loops / cli / schemas.py main_generate_schemas   14 3 0   79%
little_loops / cli / schemas.py (no function)   6 0 0   100%
little_loops / cli / session.py _build_parser   11 2 0   82%
little_loops / cli / session.py _parse_args   1 0 0   100%
little_loops / cli / session.py main_session   35 10 0   71%
little_loops / cli / session.py (no function)   9 2 0   78%
little_loops / cli / sprint / _helpers.py _score_suffix   10 0 0   100%
little_loops / cli / sprint / _helpers.py _render_execution_plan   89 4 0   96%
little_loops / cli / sprint / _helpers.py _build_issue_contents   1 0 0   100%
little_loops / cli / sprint / _helpers.py _render_dependency_analysis   49 36 0   27%
little_loops / cli / sprint / _helpers.py (no function)   7 0 4   100%
little_loops / cli / sprint / create.py _cmd_sprint_create   29 7 0   76%
little_loops / cli / sprint / create.py (no function)   6 0 0   100%
little_loops / cli / sprint / edit.py _cmd_sprint_edit   77 14 0   82%
little_loops / cli / sprint / edit.py (no function)   8 0 0   100%
little_loops / cli / sprint / manage.py _cmd_sprint_list   20 4 0   80%
little_loops / cli / sprint / manage.py _cmd_sprint_delete   6 2 0   67%
little_loops / cli / sprint / manage.py _cmd_sprint_analyze   93 8 0   91%
little_loops / cli / sprint / manage.py (no function)   12 0 0   100%
little_loops / cli / sprint / run.py _sprint_signal_handler   11 1 0   91%
little_loops / cli / sprint / run.py _get_sprint_state_file   1 0 0   100%
little_loops / cli / sprint / run.py _load_sprint_state   12 4 0   67%
little_loops / cli / sprint / run.py _save_sprint_state   6 0 0   100%
little_loops / cli / sprint / run.py _cleanup_sprint_state   4 0 0   100%
little_loops / cli / sprint / run.py _cmd_sprint_run   261 40 0   85%
little_loops / cli / sprint / run.py (no function)   23 0 3   100%
little_loops / cli / sprint / show.py _render_dependency_graph   26 0 0   100%
little_loops / cli / sprint / show.py _render_dependency_graph.build_chain   13 6 0   54%
little_loops / cli / sprint / show.py _render_health_summary   34 10 0   71%
little_loops / cli / sprint / show.py _cmd_sprint_show   63 13 0   79%
little_loops / cli / sprint / show.py _format_created   13 4 0   69%
little_loops / cli / sprint / show.py _print_composition   13 1 0   92%
little_loops / cli / sprint / show.py _print_run_state   23 4 0   83%
little_loops / cli / sprint / show.py _show_json   9 0 0   100%
little_loops / cli / sprint / show.py (no function)   15 0 3   100%
little_loops / cli / sync.py main_sync   74 26 0   65%
little_loops / cli / sync.py _print_sync_status   16 0 0   100%
little_loops / cli / sync.py _print_sync_result   30 0 0   100%
little_loops / cli / sync.py _print_diff_result   13 13 0   0%
little_loops / cli / sync.py (no function)   11 0 0   100%
little_loops / cli_args.py add_dry_run_arg   1 0 0   100%
little_loops / cli_args.py add_resume_arg   1 0 0   100%
little_loops / cli_args.py add_config_arg   1 0 0   100%
little_loops / cli_args.py add_only_arg   1 0 0   100%
little_loops / cli_args.py add_skip_arg   3 0 0   100%
little_loops / cli_args.py add_max_workers_arg   3 0 0   100%
little_loops / cli_args.py add_timeout_arg   3 0 0   100%
little_loops / cli_args.py add_idle_timeout_arg   1 0 0   100%
little_loops / cli_args.py add_handoff_threshold_arg   1 0 0   100%
little_loops / cli_args.py add_context_limit_arg   1 0 0   100%
little_loops / cli_args.py add_quiet_arg   1 0 0   100%
little_loops / cli_args.py add_skip_analysis_arg   1 0 0   100%
little_loops / cli_args.py add_max_issues_arg   1 0 0   100%
little_loops / cli_args.py parse_issue_ids   3 0 0   100%
little_loops / cli_args.py parse_issue_ids_ordered   3 0 0   100%
little_loops / cli_args.py _id_matches   3 0 0   100%
little_loops / cli_args.py parse_priorities   9 0 0   100%
little_loops / cli_args.py add_priority_arg   1 0 0   100%
little_loops / cli_args.py add_label_arg   1 0 0   100%
little_loops / cli_args.py parse_labels   3 0 0   100%
little_loops / cli_args.py add_type_arg   1 0 0   100%
little_loops / cli_args.py parse_issue_types   9 0 0   100%
little_loops / cli_args.py add_common_auto_args   13 0 0   100%
little_loops / cli_args.py add_common_parallel_args   12 0 0   100%
little_loops / cli_args.py (no function)   32 0 0   100%
little_loops / config / automation.py AutomationConfig.from_dict   1 0 0   100%
little_loops / config / automation.py ParallelAutomationConfig.from_dict   2 0 0   100%
little_loops / config / automation.py ConfidenceGateConfig.from_dict   2 0 0   100%
little_loops / config / automation.py RateLimitsConfig.from_dict   1 0 0   100%
little_loops / config / automation.py RecursiveRefineConfig.from_dict   1 0 0   100%
little_loops / config / automation.py CommandsConfig.from_dict   1 0 0   100%
little_loops / config / automation.py ScoringWeightsConfig.from_dict   1 0 0   100%
little_loops / config / automation.py DependencyMappingConfig.from_dict   1 0 0   100%
little_loops / config / automation.py (no function)   79 0 0   100%
little_loops / config / cli.py CliColorsLoggerConfig.from_dict   1 0 0   100%
little_loops / config / cli.py CliColorsPriorityConfig.from_dict   1 0 0   100%
little_loops / config / cli.py CliColorsTypeConfig.from_dict   1 0 0   100%
little_loops / config / cli.py CliColorsEdgeLabelsConfig.from_dict   1 0 0   100%
little_loops / config / cli.py CliColorsEdgeLabelsConfig.to_dict   1 0 0   100%
little_loops / config / cli.py CliColorsConfig.from_dict   1 0 0   100%
little_loops / config / cli.py RefineStatusConfig.from_dict   1 0 0   100%
little_loops / config / cli.py CliConfig.from_dict   1 0 0   100%
little_loops / config / cli.py (no function)   64 0 0   100%
little_loops / config / core.py deep_merge   8 0 0   100%
little_loops / config / core.py _config_candidates   6 0 0   100%
little_loops / config / core.py resolve_config_path   6 0 0   100%
little_loops / config / core.py ProjectConfig.from_dict   1 0 0   100%
little_loops / config / core.py BRConfig.__init__   3 0 0   100%
little_loops / config / core.py BRConfig._load_config   5 0 0   100%
little_loops / config / core.py BRConfig._parse_config   17 0 0   100%
little_loops / config / core.py BRConfig.project   1 0 0   100%
little_loops / config / core.py BRConfig.issues   1 0 0   100%
little_loops / config / core.py BRConfig.automation   1 0 0   100%
little_loops / config / core.py BRConfig.parallel   1 0 0   100%
little_loops / config / core.py BRConfig.commands   1 0 0   100%
little_loops / config / core.py BRConfig.scan   1 1 0   0%
little_loops / config / core.py BRConfig.sprints   1 0 0   100%
little_loops / config / core.py BRConfig.loops   1 0 0   100%
little_loops / config / core.py BRConfig.learning_tests   1 0 0   100%
little_loops / config / core.py BRConfig.sync   1 0 0   100%
little_loops / config / core.py BRConfig.dependency_mapping   1 0 0   100%
little_loops / config / core.py BRConfig.cli   1 0 0   100%
little_loops / config / core.py BRConfig.refine_status   1 0 0   100%
little_loops / config / core.py BRConfig.events   1 0 0   100%
little_loops / config / core.py BRConfig.orchestration   1 0 0   100%
little_loops / config / core.py BRConfig.extensions   1 0 0   100%
little_loops / config / core.py BRConfig.repo_path   1 0 0   100%
little_loops / config / core.py BRConfig.get_issue_dir   4 0 0   100%
little_loops / config / core.py BRConfig.get_completed_dir   2 0 0   100%
little_loops / config / core.py BRConfig.get_deferred_dir   2 0 0   100%
little_loops / config / core.py BRConfig.get_issue_prefix   3 0 0   100%
little_loops / config / core.py BRConfig.get_category_action   3 0 0   100%
little_loops / config / core.py BRConfig.get_loops_dir   1 1 0   0%
little_loops / config / core.py BRConfig.get_src_path   1 0 0   100%
little_loops / config / core.py BRConfig.get_worktree_base   1 1 0   0%
little_loops / config / core.py BRConfig.get_state_file   1 0 0   100%
little_loops / config / core.py BRConfig.get_parallel_state_file   1 0 0   100%
little_loops / config / core.py BRConfig.create_parallel_config   1 0 0   100%
little_loops / config / core.py BRConfig.issue_categories   1 0 0   100%
little_loops / config / core.py BRConfig.issue_priorities   1 0 0   100%
little_loops / config / core.py BRConfig.to_dict   1 0 0   100%
little_loops / config / core.py BRConfig.resolve_variable   11 0 0   100%
little_loops / config / core.py (no function)   89 0 0   100%
little_loops / config / features.py feature_enabled   6 0 0   100%
little_loops / config / features.py CategoryConfig.from_dict   1 0 0   100%
little_loops / config / features.py DuplicateDetectionConfig.from_dict   1 0 0   100%
little_loops / config / features.py NextIssueSortKey.from_dict   7 4 0   43%
little_loops / config / features.py NextIssueConfig.from_dict   8 0 0   100%
little_loops / config / features.py IssuesConfig.from_dict   6 0 0   100%
little_loops / config / features.py IssuesConfig.get_category_by_prefix   4 0 0   100%
little_loops / config / features.py IssuesConfig.get_category_by_dir   4 0 0   100%
little_loops / config / features.py IssuesConfig.get_all_prefixes   1 0 0   100%
little_loops / config / features.py IssuesConfig.get_all_dirs   1 0 0   100%
little_loops / config / features.py ScanConfig.from_dict   1 0 0   100%
little_loops / config / features.py SprintsConfig.from_dict   1 0 0   100%
little_loops / config / features.py LearningTestsConfig.from_dict   1 0 0   100%
little_loops / config / features.py LoopsGlyphsConfig.from_dict   1 0 0   100%
little_loops / config / features.py LoopsGlyphsConfig.to_dict   1 0 0   100%
little_loops / config / features.py LoopsConfig.from_dict   1 0 0   100%
little_loops / config / features.py GitHubSyncConfig.from_dict   1 0 0   100%
little_loops / config / features.py SyncConfig.from_dict   1 0 0   100%
little_loops / config / features.py SocketEventsConfig.from_dict   1 0 0   100%
little_loops / config / features.py OTelEventsConfig.from_dict   1 0 0   100%
little_loops / config / features.py WebhookEventsConfig.from_dict   1 0 0   100%
little_loops / config / features.py SqliteEventsConfig.from_dict   1 0 0   100%
little_loops / config / features.py EventsConfig.from_dict   1 0 0   100%
little_loops / config / features.py (no function)   140 0 0   100%
little_loops / config / orchestration.py OrchestrationConfig.from_dict   1 0 0   100%
little_loops / config / orchestration.py (no function)   8 0 0   100%
little_loops / dependency_graph.py DependencyGraph.from_issues   40 3 0   92%
little_loops / dependency_graph.py DependencyGraph.get_ready_issues   10 0 0   100%
little_loops / dependency_graph.py DependencyGraph.get_execution_waves   26 1 0   96%
little_loops / dependency_graph.py DependencyGraph.is_blocked   1 0 0   100%
little_loops / dependency_graph.py DependencyGraph.get_blocking_issues   3 0 0   100%
little_loops / dependency_graph.py DependencyGraph.get_blocked_by_issue   1 0 0   100%
little_loops / dependency_graph.py DependencyGraph.topological_sort   21 0 0   100%
little_loops / dependency_graph.py DependencyGraph.detect_cycles   9 0 0   100%
little_loops / dependency_graph.py DependencyGraph.detect_cycles.dfs   13 1 0   92%
little_loops / dependency_graph.py DependencyGraph.has_cycles   1 0 0   100%
little_loops / dependency_graph.py DependencyGraph.__len__   1 0 0   100%
little_loops / dependency_graph.py DependencyGraph.__contains__   1 0 0   100%
little_loops / dependency_graph.py refine_waves_for_contention   42 0 0   100%
little_loops / dependency_graph.py (no function)   31 0 3   100%
little_loops / dependency_mapper / analysis.py _basename   1 0 0   100%
little_loops / dependency_mapper / analysis.py _extract_semantic_targets   11 2 0   82%
little_loops / dependency_mapper / analysis.py _extract_section_mentions   14 2 0   86%
little_loops / dependency_mapper / analysis.py _classify_modification_type   9 0 0   100%
little_loops / dependency_mapper / analysis.py compute_conflict_score   18 0 0   100%
little_loops / dependency_mapper / analysis.py find_file_overlaps   71 3 0   96%
little_loops / dependency_mapper / analysis.py validate_dependencies   33 0 0   100%
little_loops / dependency_mapper / analysis.py validate_frontmatter_fields   11 1 0   91%
little_loops / dependency_mapper / analysis.py analyze_dependencies   4 0 0   100%
little_loops / dependency_mapper / analysis.py (no function)   25 0 3   100%
little_loops / dependency_mapper / formatting.py format_report   79 2 0   97%
little_loops / dependency_mapper / formatting.py format_text_graph   51 1 0   98%
little_loops / dependency_mapper / formatting.py format_text_graph._arrow   5 0 0   100%
little_loops / dependency_mapper / formatting.py format_text_graph.build_chain   13 6 0   54%
little_loops / dependency_mapper / formatting.py (no function)   5 0 3   100%
little_loops / dependency_mapper / models.py ValidationResult.has_issues   1 0 0   100%
little_loops / dependency_mapper / models.py (no function)   40 0 0   100%
little_loops / dependency_mapper / operations.py apply_proposals   22 9 0   59%
little_loops / dependency_mapper / operations.py _add_to_section   30 2 0   93%
little_loops / dependency_mapper / operations.py _remove_from_section   25 0 0   100%
little_loops / dependency_mapper / operations.py fix_dependencies   34 2 0   94%
little_loops / dependency_mapper / operations.py gather_all_issue_ids   13 0 0   100%
little_loops / dependency_mapper / operations.py (no function)   11 0 3   100%
little_loops / doc_counts.py VerificationResult.add_result   3 0 0   100%
little_loops / doc_counts.py count_files   6 1 0   83%
little_loops / doc_counts.py extract_count_from_line   5 0 0   100%
little_loops / doc_counts.py verify_documentation   25 1 0   96%
little_loops / doc_counts.py format_result_text   9 0 0   100%
little_loops / doc_counts.py format_result_json   3 0 0   100%
little_loops / doc_counts.py format_result_markdown   11 0 0   100%
little_loops / doc_counts.py _parse_skill_frontmatter   11 2 0   82%
little_loops / doc_counts.py check_skill_budget   20 3 0   85%
little_loops / doc_counts.py fix_counts   24 1 0   96%
little_loops / doc_counts.py (no function)   42 0 0   100%
little_loops / events.py LLEvent.to_dict   1 0 0   100%
little_loops / events.py LLEvent.from_dict   4 0 0   100%
little_loops / events.py LLEvent.from_raw_event   1 0 0   100%
little_loops / events.py EventBus.__init__   2 0 0   100%
little_loops / events.py EventBus.register   4 0 0   100%
little_loops / events.py EventBus.unregister   4 0 0   100%
little_loops / events.py EventBus.add_transport   1 0 0   100%
little_loops / events.py EventBus.close_transports   5 2 0   60%
little_loops / events.py EventBus.emit   13 0 0   100%
little_loops / events.py EventBus.read_events   12 0 0   100%
little_loops / events.py (no function)   29 0 2   100%
little_loops / extension.py LLExtension.on_event   1 1 0   0%
little_loops / extension.py InterceptorExtension.before_route   1 1 0   0%
little_loops / extension.py InterceptorExtension.after_route   1 1 0   0%
little_loops / extension.py InterceptorExtension.before_issue_close   1 1 0   0%
little_loops / extension.py ActionProviderExtension.provided_actions   1 1 0   0%
little_loops / extension.py EvaluatorProviderExtension.provided_evaluators   1 1 0   0%
little_loops / extension.py LLHookIntentExtension.provided_hook_intents   1 0 0   100%
little_loops / extension.py NoopLoggerExtension.__init__   2 0 0   100%
little_loops / extension.py NoopLoggerExtension.on_event   2 0 0   100%
little_loops / extension.py ExtensionLoader.from_config   10 0 0   100%
little_loops / extension.py ExtensionLoader.from_entry_points   12 7 0   42%
little_loops / extension.py ExtensionLoader.load_all   5 0 0   100%
little_loops / extension.py wire_extensions   32 0 0   100%
little_loops / extension.py wire_extensions._make_callback   2 0 0   100%
little_loops / extension.py wire_extensions._make_callback._cb   1 0 0   100%
little_loops / extension.py (no function)   37 0 6   100%
little_loops / extensions / reference_interceptor.py ReferenceInterceptorExtension.before_route   1 0 0   100%
little_loops / extensions / reference_interceptor.py ReferenceInterceptorExtension.before_issue_close   1 0 0   100%
little_loops / extensions / reference_interceptor.py (no function)   6 0 0   100%
little_loops / file_utils.py atomic_write   11 2 0   82%
little_loops / file_utils.py atomic_write_json   5 0 2   100%
little_loops / file_utils.py acquire_lock   18 2 0   89%
little_loops / file_utils.py (no function)   14 0 0   100%
little_loops / frontmatter.py parse_frontmatter   45 0 0   100%
little_loops / frontmatter.py strip_frontmatter   6 0 0   100%
little_loops / frontmatter.py update_frontmatter   8 0 0   100%
little_loops / frontmatter.py (no function)   10 0 0   100%
little_loops / fsm / concurrency.py _process_alive   7 0 0   100%
little_loops / fsm / concurrency.py _iso_now   1 0 0   100%
little_loops / fsm / concurrency.py ScopeLock.to_dict   1 0 0   100%
little_loops / fsm / concurrency.py ScopeLock.from_dict   1 0 0   100%
little_loops / fsm / concurrency.py LockManager.__init__   2 0 0   100%
little_loops / fsm / concurrency.py LockManager.acquire   15 0 0   100%
little_loops / fsm / concurrency.py LockManager.release   2 0 0   100%
little_loops / fsm / concurrency.py LockManager.find_conflict   17 0 0   100%
little_loops / fsm / concurrency.py LockManager.list_locks   14 1 0   93%
little_loops / fsm / concurrency.py LockManager.wait_for_scope   7 0 0   100%
little_loops / fsm / concurrency.py LockManager._scopes_overlap   5 0 0   100%
little_loops / fsm / concurrency.py LockManager._paths_overlap   15 0 0   100%
little_loops / fsm / concurrency.py LockManager._normalize_path   1 0 0   100%
little_loops / fsm / concurrency.py LockManager._process_alive   1 0 0   100%
little_loops / fsm / concurrency.py (no function)   33 0 0   100%
little_loops / fsm / evaluators.py evaluate_exit_code   6 0 0   100%
little_loops / fsm / evaluators.py evaluate_output_numeric   8 0 0   100%
little_loops / fsm / evaluators.py _extract_json_path   14 0 0   100%
little_loops / fsm / evaluators.py _compare_values   4 1 0   75%
little_loops / fsm / evaluators.py evaluate_output_json   16 0 0   100%
little_loops / fsm / evaluators.py evaluate_output_contains   8 2 0   75%
little_loops / fsm / evaluators.py evaluate_convergence   10 0 0   100%
little_loops / fsm / evaluators.py evaluate_diff_stall   38 2 0   95%
little_loops / fsm / evaluators.py evaluate_mcp_result   12 0 0   100%
little_loops / fsm / evaluators.py evaluate_harbor_scorer   7 0 0   100%
little_loops / fsm / evaluators.py evaluate_llm_structured   56 1 0   98%
little_loops / fsm / evaluators.py evaluate   61 6 0   90%
little_loops / fsm / evaluators.py (no function)   32 0 0   100%
little_loops / fsm / executor.py _iso_now   1 0 0   100%
little_loops / fsm / executor.py FSMExecutor.__init__   30 0 0   100%
little_loops / fsm / executor.py FSMExecutor.request_shutdown   1 0 0   100%
little_loops / fsm / executor.py FSMExecutor.run   78 2 0   97%
little_loops / fsm / executor.py FSMExecutor._execute_sub_loop   44 6 0   86%
little_loops / fsm / executor.py FSMExecutor._execute_sub_loop._sub_event_callback   4 0 0   100%
little_loops / fsm / executor.py FSMExecutor._execute_learning_state   22 0 0   100%
little_loops / fsm / executor.py FSMExecutor._execute_learning_state._blocked_target   3 0 0   100%
little_loops / fsm / executor.py FSMExecutor._check_throttle   19 0 0   100%
little_loops / fsm / executor.py FSMExecutor._execute_state   74 2 0   97%
little_loops / fsm / executor.py FSMExecutor._run_action   31 0 0   100%
little_loops / fsm / executor.py FSMExecutor._run_action._on_line   1 0 0   100%
little_loops / fsm / executor.py FSMExecutor._run_subprocess   22 1 0   95%
little_loops / fsm / executor.py FSMExecutor._run_subprocess._drain_stderr   3 1 0   67%
little_loops / fsm / executor.py FSMExecutor._evaluate   27 0 0   100%
little_loops / fsm / executor.py FSMExecutor._route   22 0 0   100%
little_loops / fsm / executor.py FSMExecutor._resolve_route   3 0 0   100%
little_loops / fsm / executor.py FSMExecutor._flush_pending_shell_state   9 2 0   78%
little_loops / fsm / executor.py FSMExecutor._action_mode   11 0 0   100%
little_loops / fsm / executor.py FSMExecutor._run_action_or_route   8 0 0   100%
little_loops / fsm / executor.py FSMExecutor._build_context   1 0 0   100%
little_loops / fsm / executor.py FSMExecutor._emit   1 0 0   100%
little_loops / fsm / executor.py FSMExecutor._handle_rate_limit   34 1 0   97%
little_loops / fsm / executor.py FSMExecutor._maybe_wait_for_circuit   10 0 0   100%
little_loops / fsm / executor.py FSMExecutor._interruptible_sleep   15 0 0   100%
little_loops / fsm / executor.py FSMExecutor._exhaust_rate_limit   7 0 0   100%
little_loops / fsm / executor.py FSMExecutor._handle_api_error   10 0 0   100%
little_loops / fsm / executor.py FSMExecutor._finish   2 0 0   100%
little_loops / fsm / executor.py FSMExecutor._handle_handoff   6 1 0   83%
little_loops / fsm / executor.py (no function)   77 0 0   100%
little_loops / fsm / fragments.py _deep_merge   6 0 0   100%
little_loops / fsm / fragments.py resolve_fragments   34 1 0   97%
little_loops / fsm / fragments.py resolve_inheritance   19 0 0   100%
little_loops / fsm / fragments.py resolve_flow   40 3 0   92%
little_loops / fsm / fragments.py resolve_flow._parse_name   1 0 0   100%
little_loops / fsm / fragments.py (no function)   9 0 0   100%
little_loops / fsm / handoff_handler.py HandoffHandler.__init__   1 0 0   100%
little_loops / fsm / handoff_handler.py HandoffHandler.handle   8 1 0   88%
little_loops / fsm / handoff_handler.py HandoffHandler._spawn_continuation   7 0 0   100%
little_loops / fsm / handoff_handler.py (no function)   18 0 0   100%
little_loops / fsm / interpolation.py InterpolationContext.resolve   22 0 0   100%
little_loops / fsm / interpolation.py InterpolationContext._get_nested   8 0 0   100%
little_loops / fsm / interpolation.py InterpolationContext._get_state_value   5 0 0   100%
little_loops / fsm / interpolation.py InterpolationContext._get_loop_value   9 0 0   100%
little_loops / fsm / interpolation.py interpolate   5 0 0   100%
little_loops / fsm / interpolation.py interpolate.replace_var   8 0 0   100%
little_loops / fsm / interpolation.py interpolate_dict   10 0 0   100%
little_loops / fsm / interpolation.py _interpolate_list   10 3 0   70%
little_loops / fsm / interpolation.py _format_duration   10 0 0   100%
little_loops / fsm / interpolation.py (no function)   29 0 0   100%
little_loops / fsm / persistence.py _parse_run_folder   2 0 0   100%
little_loops / fsm / persistence.py _iso_now   1 0 0   100%
little_loops / fsm / persistence.py _now_ms   1 0 0   100%
little_loops / fsm / persistence.py LoopState.to_dict   16 1 0   94%
little_loops / fsm / persistence.py LoopState.from_dict   8 0 0   100%
little_loops / fsm / persistence.py StatePersistence.__init__   6 0 0   100%
little_loops / fsm / persistence.py StatePersistence.initialize   1 0 0   100%
little_loops / fsm / persistence.py StatePersistence.save_state   10 3 0   70%
little_loops / fsm / persistence.py StatePersistence.load_state   11 0 0   100%
little_loops / fsm / persistence.py StatePersistence.clear_state   2 0 0   100%
little_loops / fsm / persistence.py StatePersistence.append_event   2 0 0   100%
little_loops / fsm / persistence.py StatePersistence.read_events   12 0 0   100%
little_loops / fsm / persistence.py StatePersistence.clear_events   2 0 0   100%
little_loops / fsm / persistence.py StatePersistence.archive_run   16 0 0   100%
little_loops / fsm / persistence.py StatePersistence.clear_all   3 0 0   100%
little_loops / fsm / persistence.py _reconcile_stale_runs   36 6 0   83%
little_loops / fsm / persistence.py PersistentExecutor.__init__   13 0 0   100%
little_loops / fsm / persistence.py PersistentExecutor._on_event   1 1 0   0%
little_loops / fsm / persistence.py PersistentExecutor._on_event   3 3 0   0%
little_loops / fsm / persistence.py PersistentExecutor.close_transports   1 0 0   100%
little_loops / fsm / persistence.py PersistentExecutor.request_shutdown   1 0 0   100%
little_loops / fsm / persistence.py PersistentExecutor._handle_event   9 1 0   89%
little_loops / fsm / persistence.py PersistentExecutor._save_state   7 0 0   100%
little_loops / fsm / persistence.py PersistentExecutor.run   16 2 0   88%
little_loops / fsm / persistence.py PersistentExecutor.resume   25 2 0   92%
little_loops / fsm / persistence.py _find_instances   20 4 0   80%
little_loops / fsm / persistence.py list_running_loops   23 2 0   91%
little_loops / fsm / persistence.py list_run_history   22 9 0   59%
little_loops / fsm / persistence.py get_archived_events   15 2 0   87%
little_loops / fsm / persistence.py get_loop_history   2 0 0   100%
little_loops / fsm / persistence.py (no function)   76 0 0   100%
little_loops / fsm / rate_limit_circuit.py RateLimitCircuit.__init__   2 0 0   100%
little_loops / fsm / rate_limit_circuit.py RateLimitCircuit.record_rate_limit   10 0 0   100%
little_loops / fsm / rate_limit_circuit.py RateLimitCircuit.get_estimated_recovery   7 0 0   100%
little_loops / fsm / rate_limit_circuit.py RateLimitCircuit.is_stale   7 1 0   86%
little_loops / fsm / rate_limit_circuit.py RateLimitCircuit.clear   4 0 0   100%
little_loops / fsm / rate_limit_circuit.py RateLimitCircuit._read_unlocked   14 6 0   57%
little_loops / fsm / rate_limit_circuit.py RateLimitCircuit._write_atomic   12 6 0   50%
little_loops / fsm / rate_limit_circuit.py (no function)   19 0 0   100%
little_loops / fsm / runners.py _now_ms   1 0 0   100%
little_loops / fsm / runners.py ActionRunner.run   1 1 0   0%
little_loops / fsm / runners.py DefaultActionRunner.__init__   1 0 0   100%
little_loops / fsm / runners.py DefaultActionRunner.run   33 0 0   100%
little_loops / fsm / runners.py DefaultActionRunner.run._stream_cb   2 2 0   0%
little_loops / fsm / runners.py DefaultActionRunner.run._on_proc_start   1 0 0   100%
little_loops / fsm / runners.py DefaultActionRunner.run._on_proc_end   1 0 0   100%
little_loops / fsm / runners.py DefaultActionRunner.run._drain_stderr   3 0 0   100%
little_loops / fsm / runners.py SimulationActionRunner.run   11 0 0   100%
little_loops / fsm / runners.py SimulationActionRunner._scenario_result   11 1 0   91%
little_loops / fsm / runners.py SimulationActionRunner._prompt_result   20 7 0   65%
little_loops / fsm / runners.py (no function)   24 0 0   100%
little_loops / fsm / schema.py EvaluateConfig.to_dict   32 7 0   78%
little_loops / fsm / schema.py EvaluateConfig.from_dict   1 0 0   100%
little_loops / fsm / schema.py RouteConfig.to_dict   6 0 0   100%
little_loops / fsm / schema.py RouteConfig.from_dict   2 0 0   100%
little_loops / fsm / schema.py ParameterSpec.to_dict   10 0 0   100%
little_loops / fsm / schema.py ParameterSpec.from_dict   1 0 0   100%
little_loops / fsm / schema.py ThrottleConfig.to_dict   8 0 0   100%
little_loops / fsm / schema.py ThrottleConfig.from_dict   1 0 0   100%
little_loops / fsm / schema.py LearningConfig.to_dict   1 0 0   100%
little_loops / fsm / schema.py LearningConfig.from_dict   1 0 0   100%
little_loops / fsm / schema.py StateConfig.to_dict   66 2 0   97%
little_loops / fsm / schema.py StateConfig.from_dict   15 0 0   100%
little_loops / fsm / schema.py StateConfig.get_referenced_states   29 1 0   97%
little_loops / fsm / schema.py LLMConfig.to_dict   10 2 0   80%
little_loops / fsm / schema.py LLMConfig.from_dict   1 0 0   100%
little_loops / fsm / schema.py LoopConfigOverrides.to_dict   13 0 0   100%
little_loops / fsm / schema.py LoopConfigOverrides.from_dict   10 1 0   90%
little_loops / fsm / schema.py TargetStateSpec.to_dict   1 0 0   100%
little_loops / fsm / schema.py TargetStateSpec.from_dict   1 0 0   100%
little_loops / fsm / schema.py TargetFileSpec.to_dict   8 1 0   88%
little_loops / fsm / schema.py TargetFileSpec.from_dict   1 0 0   100%
little_loops / fsm / schema.py FSMLoop.to_dict   41 10 0   76%
little_loops / fsm / schema.py FSMLoop.from_dict   9 0 0   100%
little_loops / fsm / schema.py FSMLoop.get_all_state_names   1 0 0   100%
little_loops / fsm / schema.py FSMLoop.get_terminal_states   1 0 0   100%
little_loops / fsm / schema.py FSMLoop.get_all_referenced_states   4 0 0   100%
little_loops / fsm / schema.py (no function)   163 0 0   100%
little_loops / fsm / signal_detector.py SignalPattern.__init__   2 0 0   100%
little_loops / fsm / signal_detector.py SignalPattern.search   5 0 0   100%
little_loops / fsm / signal_detector.py SignalDetector.__init__   1 0 0   100%
little_loops / fsm / signal_detector.py SignalDetector.detect   1 0 0   100%
little_loops / fsm / signal_detector.py SignalDetector.detect_first   4 0 0   100%
little_loops / fsm / signal_detector.py (no function)   18 0 0   100%
little_loops / fsm / types.py ExecutionResult.to_dict   8 0 0   100%
little_loops / fsm / types.py (no function)   23 0 4   100%
little_loops / fsm / validation.py ValidationError.__str__   4 0 0   100%
little_loops / fsm / validation.py _validate_evaluator   25 1 0   96%
little_loops / fsm / validation.py _validate_parameters   10 0 0   100%
little_loops / fsm / validation.py _check_param_type   11 11 0   0%
little_loops / fsm / validation.py _validate_with_bindings   28 6 0   79%
little_loops / fsm / validation.py _validate_state_action   20 8 0   60%
little_loops / fsm / validation.py _validate_state_routing   44 3 0   93%
little_loops / fsm / validation.py _validate_targets   5 0 0   100%
little_loops / fsm / validation.py _validate_failure_terminal_action   16 0 0   100%
little_loops / fsm / validation.py validate_fsm   38 1 0   97%
little_loops / fsm / validation.py _find_reachable_states   13 0 0   100%
little_loops / fsm / validation.py load_and_validate   33 0 0   100%
little_loops / fsm / validation.py (no function)   35 0 0   100%
little_loops / generate_schemas.py _str   1 0 0   100%
little_loops / generate_schemas.py _int   1 0 0   100%
little_loops / generate_schemas.py _number   1 0 0   100%
little_loops / generate_schemas.py _bool   1 0 0   100%
little_loops / generate_schemas.py _nullable_str   1 0 0   100%
little_loops / generate_schemas.py _nullable_bool   1 1 0   0%
little_loops / generate_schemas.py _schema   1 0 0   100%
little_loops / generate_schemas.py event_type_to_filename   1 0 0   100%
little_loops / generate_schemas.py generate_schemas   8 0 0   100%
little_loops / generate_schemas.py (no function)   17 0 5   100%
little_loops / git_operations.py GitignorePattern.__post_init__   3 0 0   100%
little_loops / git_operations.py GitignorePattern.is_wildcard   1 0 0   100%
little_loops / git_operations.py GitignorePattern.is_directory   1 0 0   100%
little_loops / git_operations.py GitignoreSuggestion.has_suggestions   1 0 0   100%
little_loops / git_operations.py GitignoreSuggestion.files_to_ignore   4 0 0   100%
little_loops / git_operations.py GitignoreSuggestion.summary   5 0 0   100%
little_loops / git_operations.py check_git_status   13 3 0   77%
little_loops / git_operations.py get_untracked_files   15 0 0   100%
little_loops / git_operations.py _read_existing_gitignore   13 2 0   85%
little_loops / git_operations.py _file_matches_pattern   22 8 0   64%
little_loops / git_operations.py _is_already_ignored   7 0 0   100%
little_loops / git_operations.py suggest_gitignore_patterns   29 2 0   93%
little_loops / git_operations.py add_patterns_to_gitignore   33 12 0   64%
little_loops / git_operations.py (no function)   39 0 0   100%
little_loops / goals_parser.py Persona.from_dict   1 0 0   100%
little_loops / goals_parser.py Priority.from_dict   1 0 0   100%
little_loops / goals_parser.py ProductGoals.from_file   7 0 0   100%
little_loops / goals_parser.py ProductGoals.from_content   25 0 0   100%
little_loops / goals_parser.py ProductGoals.is_valid   1 0 0   100%
little_loops / goals_parser.py validate_goals   16 0 0   100%
little_loops / goals_parser.py (no function)   30 0 0   100%
little_loops / hooks / __main__.py (no function)   1 1 2   0%
little_loops / hooks / post_tool_use.py handle   2 0 0   100%
little_loops / hooks / post_tool_use.py (no function)   3 0 0   100%
little_loops / hooks / pre_compact.py handle   38 8 0   79%
little_loops / hooks / pre_compact.py (no function)   10 0 0   100%
little_loops / hooks / pre_tool_use.py handle   2 0 0   100%
little_loops / hooks / pre_tool_use.py (no function)   3 0 0   100%
little_loops / hooks / session_start.py _parse_frontmatter   13 4 0   69%
little_loops / hooks / session_start.py handle   46 6 0   87%
little_loops / hooks / session_start.py _validate_features   12 0 0   100%
little_loops / hooks / session_start.py (no function)   14 0 0   100%
little_loops / hooks / types.py LLHookEvent.to_dict   6 0 0   100%
little_loops / hooks / types.py LLHookEvent.from_dict   1 0 0   100%
little_loops / hooks / types.py LLHookResult.to_dict   10 0 0   100%
little_loops / hooks / types.py LLHookResult.from_dict   1 0 0   100%
little_loops / hooks / types.py (no function)   24 0 0   100%
little_loops / hooks / user_prompt_submit.py _load_config   8 8 0   0%
little_loops / hooks / user_prompt_submit.py handle   34 34 0   0%
little_loops / hooks / user_prompt_submit.py (no function)   11 0 0   100%
little_loops / host_runner.py HostRunner.detect   1 1 0   0%
little_loops / host_runner.py HostRunner.build_streaming   1 1 0   0%
little_loops / host_runner.py HostRunner.build_blocking_json   1 1 0   0%
little_loops / host_runner.py HostRunner.build_version_check   1 1 0   0%
little_loops / host_runner.py HostRunner.build_detached   1 1 0   0%
little_loops / host_runner.py HostRunner.describe_capabilities   1 1 0   0%
little_loops / host_runner.py ClaudeCodeRunner.detect   1 1 0   0%
little_loops / host_runner.py ClaudeCodeRunner.build_streaming   19 0 0   100%
little_loops / host_runner.py ClaudeCodeRunner.build_blocking_json   5 0 0   100%
little_loops / host_runner.py ClaudeCodeRunner.build_version_check   1 0 0   100%
little_loops / host_runner.py ClaudeCodeRunner.build_detached   2 0 0   100%
little_loops / host_runner.py ClaudeCodeRunner.describe_capabilities   1 0 0   100%
little_loops / host_runner.py CodexRunner.detect   1 1 0   0%
little_loops / host_runner.py CodexRunner._emit_agent_warning   2 0 0   100%
little_loops / host_runner.py CodexRunner._inject_agent_persona   12 2 0   83%
little_loops / host_runner.py CodexRunner.build_streaming   24 6 0   75%
little_loops / host_runner.py CodexRunner.build_blocking_json   12 0 0   100%
little_loops / host_runner.py CodexRunner.build_version_check   1 0 0   100%
little_loops / host_runner.py CodexRunner.build_detached   2 0 0   100%
little_loops / host_runner.py CodexRunner.describe_capabilities   1 0 0   100%
little_loops / host_runner.py OpenCodeRunner.detect   1 1 0   0%
little_loops / host_runner.py OpenCodeRunner.build_streaming   1 0 0   100%
little_loops / host_runner.py OpenCodeRunner.build_blocking_json   1 0 0   100%
little_loops / host_runner.py OpenCodeRunner.build_version_check   1 0 0   100%
little_loops / host_runner.py OpenCodeRunner.build_detached   1 0 0   100%
little_loops / host_runner.py OpenCodeRunner.describe_capabilities   1 0 0   100%
little_loops / host_runner.py PiRunner.detect   1 1 0   0%
little_loops / host_runner.py PiRunner.build_streaming   1 0 0   100%
little_loops / host_runner.py PiRunner.build_blocking_json   1 0 0   100%
little_loops / host_runner.py PiRunner.build_version_check   1 0 0   100%
little_loops / host_runner.py PiRunner.build_detached   1 0 0   100%
little_loops / host_runner.py PiRunner.describe_capabilities   1 0 0   100%
little_loops / host_runner.py _remediation_hint   1 0 0   100%
little_loops / host_runner.py resolve_host   16 0 0   100%
little_loops / host_runner.py apply_host_cli_from_config   9 0 0   100%
little_loops / host_runner.py (no function)   97 0 0   100%
little_loops / issue_discovery / extraction.py _extract_fix_commit   4 0 0   100%
little_loops / issue_discovery / extraction.py _extract_files_changed   9 0 0   100%
little_loops / issue_discovery / extraction.py _extract_completion_date   7 2 0   71%
little_loops / issue_discovery / extraction.py _commit_exists_in_history   2 0 0   100%
little_loops / issue_discovery / extraction.py _get_files_modified_since_commit   20 20 0   0%
little_loops / issue_discovery / extraction.py detect_regression_or_duplicate   24 12 0   50%
little_loops / issue_discovery / extraction.py _build_reopen_section   26 0 0   100%
little_loops / issue_discovery / extraction.py (no function)   14 0 2   100%
little_loops / issue_discovery / matching.py FindingMatch.should_skip   1 0 0   100%
little_loops / issue_discovery / matching.py FindingMatch.should_update   1 0 0   100%
little_loops / issue_discovery / matching.py FindingMatch.should_create   1 0 0   100%
little_loops / issue_discovery / matching.py FindingMatch.should_reopen   1 0 0   100%
little_loops / issue_discovery / matching.py FindingMatch.should_reopen_as_regression   1 0 0   100%
little_loops / issue_discovery / matching.py FindingMatch.should_reopen_as_invalid_fix   1 0 0   100%
little_loops / issue_discovery / matching.py FindingMatch.is_unverified   1 0 0   100%
little_loops / issue_discovery / matching.py _normalize_text   1 0 0   100%
little_loops / issue_discovery / matching.py _extract_line_numbers   8 0 0   100%
little_loops / issue_discovery / matching.py _matches_issue_type   7 0 0   100%
little_loops / issue_discovery / matching.py (no function)   49 0 2   100%
little_loops / issue_discovery / search.py _get_all_issue_files   31 11 0   65%
little_loops / issue_discovery / search.py search_issues_by_content   17 3 0   82%
little_loops / issue_discovery / search.py search_issues_by_file_path   12 2 0   83%
little_loops / issue_discovery / search.py find_existing_issue   57 22 0   61%
little_loops / issue_discovery / search.py _get_category_from_issue_path   5 1 0   80%
little_loops / issue_discovery / search.py reopen_issue   35 11 0   69%
little_loops / issue_discovery / search.py update_existing_issue   15 5 0   67%
little_loops / issue_discovery / search.py (no function)   15 0 3   100%
little_loops / issue_history / _utils.py get_issue_content   6 0 0   100%
little_loops / issue_history / _utils.py (no function)   4 0 0   100%
little_loops / issue_history / analysis.py _load_issue_contents   7 0 0   100%
little_loops / issue_history / analysis.py calculate_analysis   45 8 0   82%
little_loops / issue_history / analysis.py (no function)   14 0 0   100%
little_loops / issue_history / coupling.py analyze_coupling   32 0 0   100%
little_loops / issue_history / coupling.py _build_coupling_clusters   30 0 0   100%
little_loops / issue_history / coupling.py (no function)   7 0 0   100%
little_loops / issue_history / debt.py detect_cross_cutting_smells   38 1 0   97%
little_loops / issue_history / debt.py analyze_agent_effectiveness   37 1 0   97%
little_loops / issue_history / debt.py analyze_complexity_proxy   75 2 0   97%
little_loops / issue_history / debt.py _calculate_debt_metrics   24 6 0   75%
little_loops / issue_history / debt.py (no function)   13 0 0   100%
little_loops / issue_history / doc_synthesis.py score_relevance   15 0 0   100%
little_loops / issue_history / doc_synthesis.py _compute_corpus_stats   14 1 0   93%
little_loops / issue_history / doc_synthesis.py _extract_section   10 0 0   100%
little_loops / issue_history / doc_synthesis.py _extract_title   2 0 0   100%
little_loops / issue_history / doc_synthesis.py synthesize_docs   24 1 0   96%
little_loops / issue_history / doc_synthesis.py build_narrative_doc   30 0 0   100%
little_loops / issue_history / doc_synthesis.py build_structured_doc   42 3 0   93%
little_loops / issue_history / doc_synthesis.py (no function)   13 0 0   100%
little_loops / issue_history / formatting.py format_summary_text   26 0 0   100%
little_loops / issue_history / formatting.py format_summary_json   1 0 0   100%
little_loops / issue_history / formatting.py format_analysis_json   1 0 0   100%
little_loops / issue_history / formatting.py format_analysis_yaml   5 0 0   100%
little_loops / issue_history / formatting.py format_analysis_text   293 1 0   99%
little_loops / issue_history / formatting.py format_analysis_markdown   324 205 0   37%
little_loops / issue_history / formatting.py (no function)   9 0 0   100%
little_loops / issue_history / hotspots.py analyze_hotspots   49 1 0   98%
little_loops / issue_history / hotspots.py (no function)   7 0 0   100%
little_loops / issue_history / models.py CompletedIssue.to_dict   1 0 0   100%
little_loops / issue_history / models.py HistorySummary.date_range_days   3 0 0   100%
little_loops / issue_history / models.py HistorySummary.velocity   3 0 0   100%
little_loops / issue_history / models.py HistorySummary.to_dict   1 0 0   100%
little_loops / issue_history / models.py PeriodMetrics.bug_ratio   4 0 0   100%
little_loops / issue_history / models.py PeriodMetrics.to_dict   1 0 0   100%
little_loops / issue_history / models.py SubsystemHealth.to_dict   1 0 0   100%
little_loops / issue_history / models.py Hotspot.to_dict   1 0 0   100%
little_loops / issue_history / models.py HotspotAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py CouplingPair.to_dict   1 0 0   100%
little_loops / issue_history / models.py CouplingAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py RegressionCluster.to_dict   1 0 0   100%
little_loops / issue_history / models.py RegressionAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py TestGap.to_dict   1 0 0   100%
little_loops / issue_history / models.py TestGapAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py RejectionMetrics.rejection_rate   3 0 0   100%
little_loops / issue_history / models.py RejectionMetrics.invalid_rate   3 0 0   100%
little_loops / issue_history / models.py RejectionMetrics.to_dict   1 0 0   100%
little_loops / issue_history / models.py RejectionAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py ManualPattern.to_dict   1 0 0   100%
little_loops / issue_history / models.py ManualPatternAnalysis.automatable_percentage   3 0 0   100%
little_loops / issue_history / models.py ManualPatternAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py ConfigGap.to_dict   1 0 0   100%
little_loops / issue_history / models.py ConfigGapsAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py AgentOutcome.total_count   1 0 0   100%
little_loops / issue_history / models.py AgentOutcome.success_rate   3 0 0   100%
little_loops / issue_history / models.py AgentOutcome.to_dict   1 0 0   100%
little_loops / issue_history / models.py AgentEffectivenessAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py TechnicalDebtMetrics.to_dict   1 0 0   100%
little_loops / issue_history / models.py ComplexityProxy.to_dict   1 0 0   100%
little_loops / issue_history / models.py ComplexityProxyAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py CrossCuttingSmell.to_dict   1 0 0   100%
little_loops / issue_history / models.py CrossCuttingAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py HistoryAnalysis.to_dict   1 0 0   100%
little_loops / issue_history / models.py (no function)   255 0 0   100%
little_loops / issue_history / parsing.py parse_completed_issue   19 0 0   100%
little_loops / issue_history / parsing.py _parse_iso_datetime   6 0 0   100%
little_loops / issue_history / parsing.py _parse_captured_at   1 0 0   100%
little_loops / issue_history / parsing.py _parse_completed_at   1 0 0   100%
little_loops / issue_history / parsing.py _parse_discovered_by   2 0 0   100%
little_loops / issue_history / parsing.py _batch_completion_dates   1 1 0   0%
little_loops / issue_history / parsing.py _parse_completion_date   20 3 0   85%
little_loops / issue_history / parsing.py _parse_resolution_action   20 0 0   100%
little_loops / issue_history / parsing.py _detect_processing_agent   21 0 0   100%
little_loops / issue_history / parsing.py scan_completed_issues   30 6 0   80%
little_loops / issue_history / parsing.py _parse_discovered_date   10 0 0   100%
little_loops / issue_history / parsing.py _extract_subsystem   6 0 0   100%
little_loops / issue_history / parsing.py _extract_paths_from_issue   1 0 0   100%
little_loops / issue_history / parsing.py _find_test_file   14 1 0   93%
little_loops / issue_history / parsing.py scan_active_issues   24 0 0   100%
little_loops / issue_history / parsing.py (no function)   26 0 0   100%
little_loops / issue_history / quality.py analyze_test_gaps   35 0 0   100%
little_loops / issue_history / quality.py _update_rejection_metrics   10 2 0   80%
little_loops / issue_history / quality.py analyze_rejection_rates   42 7 0   83%
little_loops / issue_history / quality.py detect_manual_patterns   33 0 0   100%
little_loops / issue_history / quality.py detect_config_gaps   45 2 0   96%
little_loops / issue_history / quality.py (no function)   15 0 0   100%
little_loops / issue_history / regressions.py analyze_regression_clustering   57 7 0   88%
little_loops / issue_history / regressions.py (no function)   6 0 0   100%
little_loops / issue_history / summary.py calculate_summary   15 0 0   100%
little_loops / issue_history / summary.py _calculate_period_label   7 2 0   71%
little_loops / issue_history / summary.py _group_by_period   42 2 0   95%
little_loops / issue_history / summary.py _calculate_trend   13 1 0   92%
little_loops / issue_history / summary.py _analyze_subsystems   25 0 0   100%
little_loops / issue_history / summary.py (no function)   14 0 0   100%
little_loops / issue_lifecycle.py _iso_now   1 0 0   100%
little_loops / issue_lifecycle.py _completed_at_now   1 0 0   100%
little_loops / issue_lifecycle.py classify_failure   29 2 0   93%
little_loops / issue_lifecycle.py _build_closure_resolution   6 2 0   67%
little_loops / issue_lifecycle.py _build_completion_resolution   6 2 0   67%
little_loops / issue_lifecycle.py _prepare_issue_content   4 0 0   100%
little_loops / issue_lifecycle.py _is_git_tracked   5 2 0   60%
little_loops / issue_lifecycle.py _commit_issue_completion   21 6 0   71%
little_loops / issue_lifecycle.py verify_issue_completed   16 3 0   81%
little_loops / issue_lifecycle.py create_issue_from_failure   25 0 0   100%
little_loops / issue_lifecycle.py close_issue   29 3 0   90%
little_loops / issue_lifecycle.py complete_issue_lifecycle   21 0 0   100%
little_loops / issue_lifecycle.py _build_deferred_section   2 0 0   100%
little_loops / issue_lifecycle.py _build_undeferred_section   2 0 0   100%
little_loops / issue_lifecycle.py defer_issue   21 3 0   86%
little_loops / issue_lifecycle.py _build_skip_section   3 0 0   100%
little_loops / issue_lifecycle.py skip_issue   16 10 0   38%
little_loops / issue_lifecycle.py undefer_issue   19 4 0   79%
little_loops / issue_lifecycle.py (no function)   35 0 0   100%
little_loops / issue_manager.py _compute_relative_path   5 0 0   100%
little_loops / issue_manager.py timed_phase   7 0 0   100%
little_loops / issue_manager.py run_claude_command   15 0 0   100%
little_loops / issue_manager.py run_claude_command.stream_callback   4 4 0   0%
little_loops / issue_manager.py run_with_continuation   80 4 0   95%
little_loops / issue_manager.py run_with_continuation._tracking_usage   4 1 0   75%
little_loops / issue_manager.py detect_plan_creation   9 0 0   100%
little_loops / issue_manager.py check_content_markers   6 0 0   100%
little_loops / issue_manager.py process_issue_inplace   168 12 0   93%
little_loops / issue_manager.py process_issue_inplace._on_usage_writer   8 8 0   0%
little_loops / issue_manager.py AutoManager.__init__   34 0 0   100%
little_loops / issue_manager.py AutoManager._signal_handler   2 0 0   100%
little_loops / issue_manager.py AutoManager._get_next_issue   22 2 0   91%
little_loops / issue_manager.py AutoManager._log_blocked_issues   8 0 0   100%
little_loops / issue_manager.py AutoManager.run   38 8 0   79%
little_loops / issue_manager.py AutoManager._log_timing_summary   30 17 0   43%
little_loops / issue_manager.py AutoManager._process_issue   19 4 0   79%
little_loops / issue_manager.py AutoManager._process_issue.on_model   2 0 0   100%
little_loops / issue_manager.py (no function)   51 0 0   100%
little_loops / issue_parser.py is_normalized   1 0 0   100%
little_loops / issue_parser.py is_formatted   27 5 0   81%
little_loops / issue_parser.py slugify   3 0 0   100%
little_loops / issue_parser.py get_next_issue_number   24 1 0   96%
little_loops / issue_parser.py ProductImpact.to_dict   1 0 0   100%
little_loops / issue_parser.py ProductImpact.from_dict   3 0 0   100%
little_loops / issue_parser.py IssueInfo.priority_int   4 0 0   100%
little_loops / issue_parser.py IssueInfo.to_dict   1 0 0   100%
little_loops / issue_parser.py IssueInfo.from_dict   1 0 0   100%
little_loops / issue_parser.py IssueParser.__init__   2 0 0   100%
little_loops / issue_parser.py IssueParser._build_prefix_map   3 0 0   100%
little_loops / issue_parser.py IssueParser.parse_file   79 5 0   94%
little_loops / issue_parser.py IssueParser._parse_priority   4 0 0   100%
little_loops / issue_parser.py IssueParser._get_category_for_prefix   1 0 0   100%
little_loops / issue_parser.py IssueParser._parse_type_and_id   15 0 0   100%
little_loops / issue_parser.py IssueParser._generate_id_from_filename   7 0 0   100%
little_loops / issue_parser.py IssueParser._read_content   5 0 0   100%
little_loops / issue_parser.py IssueParser._parse_title_from_content   8 0 0   100%
little_loops / issue_parser.py IssueParser._parse_section_items   14 0 0   100%
little_loops / issue_parser.py IssueParser._strip_code_fences   10 0 0   100%
little_loops / issue_parser.py IssueParser._parse_blocked_by   1 0 0   100%
little_loops / issue_parser.py IssueParser._parse_blocks   1 0 0   100%
little_loops / issue_parser.py IssueParser._parse_product_impact   4 0 0   100%
little_loops / issue_parser.py find_issues   27 0 0   100%
little_loops / issue_parser.py find_highest_priority_issue   2 0 0   100%
little_loops / issue_parser.py (no function)   81 0 2   100%
little_loops / issue_template.py _default_templates_dir   1 0 0   100%
little_loops / issue_template.py load_issue_sections   5 0 0   100%
little_loops / issue_template.py assemble_issue_markdown   36 3 0   92%
little_loops / issue_template.py _append_section   6 0 0   100%
little_loops / issue_template.py (no function)   8 0 0   100%
little_loops / issues / anchor_sweep.py _format_anchor_ref   5 1 0   80%
little_loops / issues / anchor_sweep.py _sweep_file   26 4 0   85%
little_loops / issues / anchor_sweep.py _sweep_file._in_fence   1 0 0   100%
little_loops / issues / anchor_sweep.py sweep_issues   11 2 0   82%
little_loops / issues / anchor_sweep.py (no function)   19 0 0   100%
little_loops / issues / anchors.py resolve_anchor   14 0 0   100%
little_loops / issues / anchors.py (no function)   5 0 0   100%
little_loops / learning_tests.py Assertion.to_dict   1 0 0   100%
little_loops / learning_tests.py Assertion.from_dict   1 0 0   100%
little_loops / learning_tests.py LearnTestRecord.to_dict   1 0 0   100%
little_loops / learning_tests.py LearnTestRecord.from_dict   1 0 0   100%
little_loops / learning_tests.py _resolve_base   1 0 0   100%
little_loops / learning_tests.py _slug_path   1 0 0   100%
little_loops / learning_tests.py _read_frontmatter_yaml   4 1 0   75%
little_loops / learning_tests.py write_record   7 0 0   100%
little_loops / learning_tests.py read_record   8 1 0   88%
little_loops / learning_tests.py list_records   9 0 0   100%
little_loops / learning_tests.py mark_stale   6 0 0   100%
little_loops / learning_tests.py check_learning_test   1 0 0   100%
little_loops / learning_tests.py (no function)   34 0 0   100%
little_loops / link_checker.py LinkCheckResult.has_errors   1 0 0   100%
little_loops / link_checker.py extract_links_from_markdown   13 0 0   100%
little_loops / link_checker.py is_internal_reference   7 1 0   86%
little_loops / link_checker.py should_ignore_url   4 0 0   100%
little_loops / link_checker.py check_url   15 3 0   80%
little_loops / link_checker.py check_markdown_links   40 6 0   85%
little_loops / link_checker.py load_ignore_patterns   19 3 0   84%
little_loops / link_checker.py format_result_text   20 0 0   100%
little_loops / link_checker.py format_result_json   2 0 0   100%
little_loops / link_checker.py format_result_markdown   23 0 0   100%
little_loops / link_checker.py (no function)   39 0 0   100%
little_loops / logger.py Logger.__init__   10 0 0   100%
little_loops / logger.py Logger._timestamp   1 0 0   100%
little_loops / logger.py Logger._format   4 0 0   100%
little_loops / logger.py Logger.info   2 0 0   100%
little_loops / logger.py Logger.debug   2 0 0   100%
little_loops / logger.py Logger.success   2 0 0   100%
little_loops / logger.py Logger.warning   2 0 0   100%
little_loops / logger.py Logger.error   2 0 0   100%
little_loops / logger.py Logger.timing   2 0 0   100%
little_loops / logger.py Logger.header   5 0 0   100%
little_loops / logger.py format_duration   3 0 0   100%
little_loops / logger.py (no function)   25 0 2   100%
little_loops / logo.py get_logo   4 4 0   0%
little_loops / logo.py print_logo   4 4 0   0%
little_loops / logo.py (no function)   4 4 0   0%
little_loops / loops / yaml_state_editor.py extract_action   3 0 0   100%
little_loops / loops / yaml_state_editor.py replace_action   6 0 0   100%
little_loops / loops / yaml_state_editor.py (no function)   8 0 0   100%
little_loops / mcp_call.py _load_mcp_config   5 0 0   100%
little_loops / mcp_call.py _find_server_config   3 0 0   100%
little_loops / mcp_call.py _send_jsonrpc   26 6 0   77%
little_loops / mcp_call.py call_mcp_tool   59 8 0   86%
little_loops / mcp_call.py call_mcp_tool._drain_stderr   3 1 0   67%
little_loops / mcp_call.py main   21 21 0   0%
little_loops / mcp_call.py (no function)   15 0 2   100%
little_loops / output_parsing.py _clean_verdict_content   6 0 0   100%
little_loops / output_parsing.py _extract_verdict_from_text   11 0 0   100%
little_loops / output_parsing.py parse_sections   12 0 0   100%
little_loops / output_parsing.py parse_validation_table   7 0 0   100%
little_loops / output_parsing.py parse_status_lines   4 0 0   100%
little_loops / output_parsing.py parse_ready_issue_output   95 5 0   95%
little_loops / output_parsing.py parse_manage_issue_output   36 0 0   100%
little_loops / output_parsing.py (no function)   14 0 0   100%
little_loops / parallel / file_hints.py FileHints.all_paths   1 0 0   100%
little_loops / parallel / file_hints.py FileHints.is_empty   1 0 0   100%
little_loops / parallel / file_hints.py FileHints.overlaps_with   28 0 0   100%
little_loops / parallel / file_hints.py FileHints.contends_with   5 0 0   100%
little_loops / parallel / file_hints.py FileHints.get_overlapping_paths   29 2 0   93%
little_loops / parallel / file_hints.py _is_common_file   2 0 0   100%
little_loops / parallel / file_hints.py _directories_overlap   7 0 0   100%
little_loops / parallel / file_hints.py _file_in_directory   5 0 0   100%
little_loops / parallel / file_hints.py _extract_write_target_files   8 0 0   100%
little_loops / parallel / file_hints.py _extract_write_target_directories   8 0 0   100%
little_loops / parallel / file_hints.py extract_file_hints   6 0 0   100%
little_loops / parallel / file_hints.py _is_valid_path   10 0 0   100%
little_loops / parallel / file_hints.py (no function)   31 0 2   100%
little_loops / parallel / git_lock.py GitLock.__init__   5 0 0   100%
little_loops / parallel / git_lock.py GitLock.__enter__   2 0 0   100%
little_loops / parallel / git_lock.py GitLock.__exit__   1 0 0   100%
little_loops / parallel / git_lock.py GitLock.run   2 0 0   100%
little_loops / parallel / git_lock.py GitLock._run_with_retry   27 5 0   81%
little_loops / parallel / git_lock.py GitLock._is_index_lock_error   4 0 0   100%
little_loops / parallel / git_lock.py (no function)   14 0 2   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.__init__   17 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.start   6 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.shutdown   7 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.queue_merge   3 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._stash_local_changes   27 2 0   93%
little_loops / parallel / merge_coordinator.py MergeCoordinator._pop_stash   21 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._mark_state_file_assume_unchanged   11 2 0   82%
little_loops / parallel / merge_coordinator.py MergeCoordinator._restore_state_file_tracking   10 2 0   80%
little_loops / parallel / merge_coordinator.py MergeCoordinator._is_local_changes_error   2 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._is_untracked_files_error   2 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._is_index_error   2 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._is_rebase_in_progress   3 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._abort_rebase_if_in_progress   9 9 0   0%
little_loops / parallel / merge_coordinator.py MergeCoordinator._is_unmerged_files_error   2 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._detect_conflict_commit   3 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._check_and_recover_index   37 16 0   57%
little_loops / parallel / merge_coordinator.py MergeCoordinator._attempt_hard_reset   7 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._merge_loop   10 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._process_merge   90 34 0   62%
little_loops / parallel / merge_coordinator.py MergeCoordinator._handle_conflict   39 3 0   92%
little_loops / parallel / merge_coordinator.py MergeCoordinator._handle_untracked_conflict   35 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._finalize_merge   7 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._handle_failure   6 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator._cleanup_worktree   8 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.merged_ids   2 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.failed_merges   2 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.pending_count   1 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.stash_pop_failures   2 0 0   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator.wait_for_completion   9 0 0   100%
little_loops / parallel / merge_coordinator.py (no function)   44 0 2   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator.__init__   26 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator.execution_duration   1 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator.run   24 4 0   83%
little_loops / parallel / orchestrator.py ParallelOrchestrator._setup_signal_handlers   2 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator._restore_signal_handlers   4 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator._ensure_gitignore_entries   18 1 0   94%
little_loops / parallel / orchestrator.py ParallelOrchestrator._cleanup_orphaned_worktrees   38 3 0   92%
little_loops / parallel / orchestrator.py ParallelOrchestrator._prune_ghost_worktree_refs   31 9 0   71%
little_loops / parallel / orchestrator.py ParallelOrchestrator._inspect_worktree   19 1 0   95%
little_loops / parallel / orchestrator.py ParallelOrchestrator._check_pending_worktrees   31 1 0   97%
little_loops / parallel / orchestrator.py ParallelOrchestrator._merge_pending_worktrees   20 7 0   65%
little_loops / parallel / orchestrator.py ParallelOrchestrator._signal_handler   3 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator._load_state   16 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator._save_state   19 3 0   84%
little_loops / parallel / orchestrator.py ParallelOrchestrator._cleanup_state   3 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator._dry_run   28 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator._maybe_report_status   35 6 0   83%
little_loops / parallel / orchestrator.py ParallelOrchestrator._execute   36 2 0   94%
little_loops / parallel / orchestrator.py ParallelOrchestrator._scan_issues   7 0 0   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator._process_sequential   11 3 0   73%
little_loops / parallel / orchestrator.py ParallelOrchestrator._process_parallel   11 1 0   91%
little_loops / parallel / orchestrator.py ParallelOrchestrator._on_worker_complete   49 10 0   80%
little_loops / parallel / orchestrator.py ParallelOrchestrator._requeue_deferred_issues   11 1 0   91%
little_loops / parallel / orchestrator.py ParallelOrchestrator._merge_sequential   15 2 0   87%
little_loops / parallel / orchestrator.py ParallelOrchestrator._wait_for_completion   19 2 0   89%
little_loops / parallel / orchestrator.py ParallelOrchestrator._report_results   71 35 0   51%
little_loops / parallel / orchestrator.py ParallelOrchestrator._complete_issue_lifecycle_if_needed   32 9 0   72%
little_loops / parallel / orchestrator.py ParallelOrchestrator._cleanup   8 0 0   100%
little_loops / parallel / orchestrator.py (no function)   55 0 2   100%
little_loops / parallel / overlap_detector.py OverlapResult.__bool__   1 0 0   100%
little_loops / parallel / overlap_detector.py OverlapDetector.__init__   3 0 0   100%
little_loops / parallel / overlap_detector.py OverlapDetector.register_issue   6 0 0   100%
little_loops / parallel / overlap_detector.py OverlapDetector.unregister_issue   4 0 0   100%
little_loops / parallel / overlap_detector.py OverlapDetector.check_overlap   14 0 0   100%
little_loops / parallel / overlap_detector.py OverlapDetector.get_active_issues   2 0 0   100%
little_loops / parallel / overlap_detector.py OverlapDetector.get_hints   2 0 0   100%
little_loops / parallel / overlap_detector.py OverlapDetector.clear   3 0 0   100%
little_loops / parallel / overlap_detector.py (no function)   21 0 3   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.__init__   6 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.add   13 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.add_many   5 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.get   8 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.mark_completed   3 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.mark_failed   3 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.requeue   9 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.empty   1 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.qsize   1 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.in_progress_count   2 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.completed_count   2 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.failed_count   2 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.in_progress_ids   2 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.completed_ids   2 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.failed_ids   2 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.load_completed   2 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.load_failed   2 0 0   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue.scan_issues   7 1 0   86%
little_loops / parallel / priority_queue.py (no function)   33 0 3   100%
little_loops / parallel / types.py QueuedIssue.__lt__   3 0 0   100%
little_loops / parallel / types.py QueuedIssue.to_dict   1 0 0   100%
little_loops / parallel / types.py WorkerResult.to_dict   1 0 0   100%
little_loops / parallel / types.py WorkerResult.from_dict   1 0 0   100%
little_loops / parallel / types.py MergeRequest.to_dict   1 0 0   100%
little_loops / parallel / types.py OrchestratorState.to_dict   1 0 0   100%
little_loops / parallel / types.py OrchestratorState.from_dict   1 0 0   100%
little_loops / parallel / types.py PendingWorktreeInfo.has_pending_work   1 0 0   100%
little_loops / parallel / types.py ParallelConfig.get_ready_command   2 0 0   100%
little_loops / parallel / types.py ParallelConfig.get_manage_command   2 0 0   100%
little_loops / parallel / types.py ParallelConfig.get_decide_command   2 0 0   100%
little_loops / parallel / types.py ParallelConfig.to_dict   1 0 0   100%
little_loops / parallel / types.py ParallelConfig.from_dict   5 0 0   100%
little_loops / parallel / types.py (no function)   122 0 2   100%
little_loops / parallel / worker_pool.py WorkerPool.__init__   15 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.start   6 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.shutdown   7 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.set_shutdown_requested   1 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.terminate_all_processes   17 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.submit   8 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._handle_completion   19 1 0   95%
little_loops / parallel / worker_pool.py WorkerPool._process_issue   80 12 0   85%
little_loops / parallel / worker_pool.py WorkerPool._setup_worktree   7 4 0   43%
little_loops / parallel / worker_pool.py WorkerPool._detect_worktree_model_via_api   15 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._cleanup_worktree   11 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._run_claude_command   5 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._run_claude_command.stream_callback   4 4 0   0%
little_loops / parallel / worker_pool.py WorkerPool._run_claude_command.on_start   3 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._run_claude_command.on_end   3 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._run_with_continuation   71 13 0   82%
little_loops / parallel / worker_pool.py WorkerPool._run_with_continuation._usage_tracker   2 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._get_changed_files   4 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._update_branch_base   10 2 0   80%
little_loops / parallel / worker_pool.py WorkerPool._verify_work_was_done   13 2 0   85%
little_loops / parallel / worker_pool.py WorkerPool._has_other_issue_id   7 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._detect_main_repo_leaks   36 5 0   86%
little_loops / parallel / worker_pool.py WorkerPool._cleanup_leaked_files   42 7 0   83%
little_loops / parallel / worker_pool.py WorkerPool._get_main_repo_baseline   12 2 0   83%
little_loops / parallel / worker_pool.py WorkerPool._get_main_head_sha   4 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool._detect_committed_leaks   10 1 0   90%
little_loops / parallel / worker_pool.py WorkerPool._recover_committed_leaks   22 3 0   86%
little_loops / parallel / worker_pool.py WorkerPool.active_count   5 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.set_worker_stage   2 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.get_worker_stage   2 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.get_active_stages   3 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.remove_worker_stage   2 0 0   100%
little_loops / parallel / worker_pool.py WorkerPool.cleanup_all_worktrees   8 0 0   100%
little_loops / parallel / worker_pool.py (no function)   51 0 4   100%
little_loops / session_log.py parse_session_log   5 0 0   100%
little_loops / session_log.py count_session_commands   7 0 0   100%
little_loops / session_log.py get_current_session_jsonl   7 0 0   100%
little_loops / session_log.py append_session_log_entry   16 0 0   100%
little_loops / session_log.py (no function)   12 0 0   100%
little_loops / session_store.py _now   1 0 0   100%
little_loops / session_store.py _current_version   5 0 0   100%
little_loops / session_store.py _apply_migrations   5 0 0   100%
little_loops / session_store.py ensure_db   7 0 0   100%
little_loops / session_store.py connect   4 0 0   100%
little_loops / session_store.py _index   1 0 0   100%
little_loops / session_store.py search   7 2 0   71%
little_loops / session_store.py recent   8 0 0   100%
little_loops / session_store.py SQLiteTransport.__init__   9 3 0   67%
little_loops / session_store.py SQLiteTransport.send   19 1 0   95%
little_loops / session_store.py SQLiteTransport.close   6 5 0   17%
little_loops / session_store.py _hash_args   5 3 0   40%
little_loops / session_store.py _backfill_issues   17 4 0   76%
little_loops / session_store.py _backfill_loops   19 6 0   68%
little_loops / session_store.py _backfill_tool_events   31 10 0   68%
little_loops / session_store.py backfill   14 5 0   64%
little_loops / session_store.py (no function)   33 3 0   91%
little_loops / skill_expander.py _find_plugin_root   4 0 0   100%
little_loops / skill_expander.py _resolve_content_path   7 0 0   100%
little_loops / skill_expander.py _substitute_config   2 0 0   100%
little_loops / skill_expander.py _substitute_config._replacer   5 0 0   100%
little_loops / skill_expander.py _substitute_relative_refs   2 0 0   100%
little_loops / skill_expander.py _substitute_relative_refs._replacer   7 0 0   100%
little_loops / skill_expander.py _substitute_arguments   2 0 0   100%
little_loops / skill_expander.py expand_skill   13 0 0   100%
little_loops / skill_expander.py (no function)   12 0 0   100%
little_loops / sprint.py SprintOptions.to_dict   1 0 0   100%
little_loops / sprint.py SprintOptions.from_dict   3 0 0   100%
little_loops / sprint.py SprintState.to_dict   1 0 0   100%
little_loops / sprint.py SprintState.from_dict   1 0 0   100%
little_loops / sprint.py Sprint.to_dict   4 0 0   100%
little_loops / sprint.py Sprint.from_dict   1 0 0   100%
little_loops / sprint.py Sprint.save   5 0 0   100%
little_loops / sprint.py Sprint.load   6 0 0   100%
little_loops / sprint.py SprintManager.__init__   7 0 0   100%
little_loops / sprint.py SprintManager.get_default_options   3 3 0   0%
little_loops / sprint.py SprintManager.create   3 0 0   100%
little_loops / sprint.py SprintManager.load   1 0 0   100%
little_loops / sprint.py SprintManager.list_all   6 0 0   100%
little_loops / sprint.py SprintManager.delete   5 0 0   100%
little_loops / sprint.py SprintManager._find_issue_path   7 1 0   86%
little_loops / sprint.py SprintManager.validate_issues   8 0 0   100%
little_loops / sprint.py SprintManager.load_issue_infos   14 0 0   100%
little_loops / sprint.py (no function)   51 0 3   100%
little_loops / state.py _iso_now   1 0 0   100%
little_loops / state.py ProcessingState.to_dict   1 0 0   100%
little_loops / state.py ProcessingState.from_dict   1 0 0   100%
little_loops / state.py StateManager.__init__   4 0 0   100%
little_loops / state.py StateManager._emit   2 0 0   100%
little_loops / state.py StateManager.state   3 0 0   100%
little_loops / state.py StateManager.load   11 2 0   82%
little_loops / state.py StateManager.save   14 0 0   100%
little_loops / state.py StateManager.cleanup   6 2 0   67%
little_loops / state.py StateManager.update_current   3 0 0   100%
little_loops / state.py StateManager.mark_attempted   3 0 0   100%
little_loops / state.py StateManager.mark_completed   7 0 0   100%
little_loops / state.py StateManager.mark_failed   3 0 0   100%
little_loops / state.py StateManager.is_attempted   1 0 0   100%
little_loops / state.py StateManager.record_corrections   3 0 0   100%
little_loops / state.py (no function)   38 0 0   100%
little_loops / subprocess_utils.py detect_context_handoff   1 0 0   100%
little_loops / subprocess_utils.py read_continuation_prompt   4 0 0   100%
little_loops / subprocess_utils.py read_sentinel   10 3 0   70%
little_loops / subprocess_utils.py write_sentinel   8 2 0   75%
little_loops / subprocess_utils.py assemble_guillotine_prompt   13 1 0   92%
little_loops / subprocess_utils.py _list_scratch_files   17 14 0   18%
little_loops / subprocess_utils.py run_claude_command   93 5 0   95%
little_loops / subprocess_utils.py (no function)   28 0 0   100%
little_loops / sync.py SyncResult.to_dict   1 0 0   100%
little_loops / sync.py SyncStatus.to_dict   1 0 0   100%
little_loops / sync.py _run_gh_command   4 4 0   0%
little_loops / sync.py _check_gh_auth   6 0 0   100%
little_loops / sync.py _get_repo_name   7 2 0   71%
little_loops / sync.py _update_issue_frontmatter   8 0 0   100%
little_loops / sync.py _parse_issue_title   11 0 0   100%
little_loops / sync.py _get_issue_body   7 1 0   86%
little_loops / sync.py GitHubSyncManager.__init__   6 0 0   100%
little_loops / sync.py GitHubSyncManager._get_local_issues   11 0 0   100%
little_loops / sync.py GitHubSyncManager._extract_issue_id   4 0 0   100%
little_loops / sync.py GitHubSyncManager._get_labels_for_issue   23 4 0   83%
little_loops / sync.py GitHubSyncManager.push_issues   27 10 0   63%
little_loops / sync.py GitHubSyncManager._push_single_issue   25 0 0   100%
little_loops / sync.py GitHubSyncManager._create_github_issue   18 5 0   72%
little_loops / sync.py GitHubSyncManager._update_github_issue   10 4 0   60%
little_loops / sync.py GitHubSyncManager._update_local_frontmatter   7 0 0   100%
little_loops / sync.py GitHubSyncManager.pull_issues   45 13 0   71%
little_loops / sync.py GitHubSyncManager._get_local_github_numbers   11 0 0   100%
little_loops / sync.py GitHubSyncManager._determine_issue_type   8 0 0   100%
little_loops / sync.py GitHubSyncManager._create_local_issue   43 2 0   95%
little_loops / sync.py GitHubSyncManager.get_status   18 0 0   100%
little_loops / sync.py GitHubSyncManager._find_local_issue   11 0 0   100%
little_loops / sync.py GitHubSyncManager.diff_issue   33 4 0   88%
little_loops / sync.py GitHubSyncManager.diff_all   42 8 0   81%
little_loops / sync.py GitHubSyncManager.close_issues   47 3 0   94%
little_loops / sync.py GitHubSyncManager.reopen_issues   54 7 0   87%
little_loops / sync.py (no function)   69 0 3   100%
little_loops / testing.py LLTestBus.__init__   3 0 0   100%
little_loops / testing.py LLTestBus.from_jsonl   2 0 0   100%
little_loops / testing.py LLTestBus.register   1 0 0   100%
little_loops / testing.py LLTestBus.replay   14 0 0   100%
little_loops / testing.py (no function)   11 0 2   100%
little_loops / text_utils.py extract_file_paths   13 1 0   92%
little_loops / text_utils.py extract_words   2 0 0   100%
little_loops / text_utils.py calculate_word_overlap   5 0 0   100%
little_loops / text_utils.py parse_duration   4 0 0   100%
little_loops / text_utils.py score_bm25   10 0 0   100%
little_loops / text_utils.py (no function)   17 0 0   100%
little_loops / transport.py Transport.send   1 1 0   0%
little_loops / transport.py Transport.close   1 1 0   0%
little_loops / transport.py JsonlTransport.__init__   2 0 0   100%
little_loops / transport.py JsonlTransport.send   2 0 0   100%
little_loops / transport.py JsonlTransport.close   1 0 0   100%
little_loops / transport.py _SocketClient.__init__   8 0 0   100%
little_loops / transport.py UnixSocketTransport.__init__   22 5 0   77%
little_loops / transport.py UnixSocketTransport._accept_loop   21 4 0   81%
little_loops / transport.py UnixSocketTransport._client_loop   17 2 0   88%
little_loops / transport.py UnixSocketTransport.send   8 0 0   100%
little_loops / transport.py UnixSocketTransport._record_drop   13 3 0   77%
little_loops / transport.py UnixSocketTransport.close   25 4 0   84%
little_loops / transport.py OTelTransport.__init__   19 5 0   74%
little_loops / transport.py OTelTransport.send   21 0 0   100%
little_loops / transport.py OTelTransport.close   2 0 0   100%
little_loops / transport.py OTelTransport._handle_loop_start   2 0 0   100%
little_loops / transport.py OTelTransport._handle_loop_resume   5 0 0   100%
little_loops / transport.py OTelTransport._handle_state_enter   8 2 0   75%
little_loops / transport.py OTelTransport._handle_action_start   7 2 0   71%
little_loops / transport.py OTelTransport._handle_action_complete   3 0 0   100%
little_loops / transport.py OTelTransport._handle_loop_complete   11 0 0   100%
little_loops / transport.py OTelTransport._add_span_event   5 1 0   80%
little_loops / transport.py OTelTransport._close_state_and_action   6 2 0   67%
little_loops / transport.py WebhookTransport.__init__   13 0 0   100%
little_loops / transport.py WebhookTransport.send   2 0 0   100%
little_loops / transport.py WebhookTransport.close   2 0 0   100%
little_loops / transport.py WebhookTransport._batch_loop   4 0 0   100%
little_loops / transport.py WebhookTransport._flush   9 0 0   100%
little_loops / transport.py WebhookTransport._post_with_retry   14 2 0   86%
little_loops / transport.py _make_seed_callback   3 0 0   100%
little_loops / transport.py _make_seed_callback._seed   7 7 0   0%
little_loops / transport.py wire_transports   22 0 0   100%
little_loops / transport.py _resolve_socket_path   6 3 0   50%
little_loops / transport.py (no function)   64 0 3   100%
little_loops / user_messages.py UserMessage.to_dict   4 0 0   100%
little_loops / user_messages.py ResponseMetadata.to_dict   1 0 0   100%
little_loops / user_messages.py CommandRecord.to_dict   1 0 0   100%
little_loops / user_messages.py ExampleRecord.to_dict   1 0 0   100%
little_loops / user_messages.py _extract_response_metadata   27 1 0   96%
little_loops / user_messages.py _aggregate_response_metadata   35 3 0   91%
little_loops / user_messages.py _detect_completion_status   12 0 0   100%
little_loops / user_messages.py _detect_error_message   10 0 0   100%
little_loops / user_messages.py get_project_folder   9 0 0   100%
little_loops / user_messages.py extract_user_messages   38 8 0   79%
little_loops / user_messages.py extract_commands   26 5 0   81%
little_loops / user_messages.py _parse_command_record   31 4 0   87%
little_loops / user_messages.py _parse_user_record   31 6 0   81%
little_loops / user_messages.py _extract_messages_with_context   16 0 0   100%
little_loops / user_messages.py save_messages   11 0 0   100%
little_loops / user_messages.py build_examples   19 0 0   100%
little_loops / user_messages.py print_messages_to_stdout   3 0 0   100%
little_loops / user_messages.py (no function)   57 0 0   100%
little_loops / work_verification.py filter_excluded_files   1 0 0   100%
little_loops / work_verification.py verify_work_was_done   47 2 0   96%
little_loops / work_verification.py (no function)   6 0 2   100%
little_loops / workflow_sequence / analysis.py extract_entities   7 0 0   100%
little_loops / workflow_sequence / analysis.py calculate_boundary_weight   13 0 0   100%
little_loops / workflow_sequence / analysis.py entity_overlap   5 0 0   100%
little_loops / workflow_sequence / analysis.py get_verb_class   6 0 0   100%
little_loops / workflow_sequence / analysis.py semantic_similarity   9 0 0   100%
little_loops / workflow_sequence / analysis.py _detect_handoff   3 0 0   100%
little_loops / workflow_sequence / analysis.py _parse_timestamps   12 0 0   100%
little_loops / workflow_sequence / analysis.py _group_by_session   7 0 0   100%
little_loops / workflow_sequence / analysis.py _link_sessions   47 5 0   89%
little_loops / workflow_sequence / analysis.py _cluster_by_entities   45 0 0   100%
little_loops / workflow_sequence / analysis.py _compute_boundaries   22 0 0   100%
little_loops / workflow_sequence / analysis.py _get_message_category   6 0 0   100%
little_loops / workflow_sequence / analysis.py _build_category_index   10 0 0   100%
little_loops / workflow_sequence / analysis.py _detect_workflows   51 2 0   96%
little_loops / workflow_sequence / analysis.py analyze_workflows   56 0 0   100%
little_loops / workflow_sequence / analysis.py (no function)   33 0 0   100%
little_loops / workflow_sequence / io.py _load_messages   15 0 0   100%
little_loops / workflow_sequence / io.py _load_patterns   2 0 0   100%
little_loops / workflow_sequence / io.py (no function)   8 0 0   100%
little_loops / workflow_sequence / models.py SessionLink.to_dict   1 0 0   100%
little_loops / workflow_sequence / models.py EntityCluster.to_dict   1 0 0   100%
little_loops / workflow_sequence / models.py WorkflowBoundary.to_dict   1 0 0   100%
little_loops / workflow_sequence / models.py Workflow.to_dict   1 0 0   100%
little_loops / workflow_sequence / models.py WorkflowAnalysis.to_dict   1 0 0   100%
little_loops / workflow_sequence / models.py (no function)   52 0 0   100%
little_loops / worktree_utils.py setup_worktree   33 1 0   97%
little_loops / worktree_utils.py cleanup_worktree   13 0 0   100%
little_loops / worktree_utils.py _is_ll_worktree   1 0 0   100%
little_loops / worktree_utils.py (no function)   10 0 3   100%
Total     21727 2249 145   90%

No items found using the specified filter.