Coverage report: 93%

Files Functions Classes

coverage.py v7.15.2, created at 2026-09-06 02:59 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src/footman/__init__.py main   100% 19 0 1   100% 8 0   100%
src/footman/__init__.py __getattr__   100% 37 0 0   100% 24 0   100%
src/footman/__init__.py (no function)   100% 8 0 103   100% 0 0   100%
src/footman/__main__.py (no function)   100% 1 0 2   100% 0 0   100%
src/footman/_app.py _builtin   50% 4 2 0   100% 0 0   50%
src/footman/_app.py _task_docs_url   100% 1 0 0   100% 0 0   100%
src/footman/_app.py _resolve_color   100% 8 0 0   100% 6 0   100%
src/footman/_app.py _set_colors   100% 2 0 0   100% 0 0   100%
src/footman/_app.py _error   100% 2 0 0   100% 0 0   100%
src/footman/_app.py _refuse   100% 5 0 0   100% 2 0   100%
src/footman/_app.py _wants_json   100% 6 0 0   100% 4 0   100%
src/footman/_app.py _print_version   100% 5 0 0   100% 2 0   100%
src/footman/_app.py _globals_to_dict   100% 12 0 0   100% 8 0   100%
src/footman/_app.py _uv_wanted   67% 6 2 0   50% 4 2   60%
src/footman/_app.py _config_arg   100% 2 0 0   100% 0 0   100%
src/footman/_app.py resolve_task_files   100% 33 0 0   100% 18 0   100%
src/footman/_app.py _base_tree   100% 16 0 0   100% 6 0   100%
src/footman/_app.py _discover_files   100% 24 0 0   100% 10 0   100%
src/footman/_app.py _print_footer   100% 2 0 0   100% 0 0   100%
src/footman/_app.py _styled_name   100% 4 0 0   100% 0 0   100%
src/footman/_app.py _styled_help   100% 5 0 0   100% 4 0   100%
src/footman/_app.py _print_two_band   100% 14 0 0   100% 6 0   100%
src/footman/_app.py _address_band   100% 1 0 0   100% 0 0   100%
src/footman/_app.py _sifted   83% 12 2 0   88% 8 1   85%
src/footman/_app.py _sections   100% 4 0 0   100% 2 0   100%
src/footman/_app.py _print_list   100% 9 0 0   100% 6 0   100%
src/footman/_app.py _print_tree   100% 9 0 0   100% 6 0   100%
src/footman/_app.py _print_branch   100% 17 0 0   100% 4 0   100%
src/footman/_app.py _last_of_each_branch   100% 9 0 0   100% 8 0   100%
src/footman/_app.py _print_option_rows   100% 21 0 0   100% 8 0   100%
src/footman/_app.py _print_param_rows   100% 7 0 0   100% 4 0   100%
src/footman/_app.py _choices_resolver   100% 4 0 0   100% 0 0   100%
src/footman/_app.py _choices_resolver.resolve   78% 18 4 0   50% 10 5   68%
src/footman/_app.py _print_task_help   97% 39 1 0   94% 18 1   96%
src/footman/_app.py _print_docs_line   100% 2 0 0   100% 2 0   100%
src/footman/_app.py _print_group_help   100% 25 0 0   92% 12 1   97%
src/footman/_app.py _print_global_help   100% 23 0 0   88% 8 1   97%
src/footman/_app.py _wants_help   100% 6 0 0   100% 6 0   100%
src/footman/_app.py _resolve_lenient   87% 15 2 0   80% 10 2   84%
src/footman/_app.py _help_targets   100% 12 0 0   100% 8 0   100%
src/footman/_app.py _print_help   93% 15 1 0   90% 10 1   92%
src/footman/_app.py _plugins_report   96% 54 2 0   88% 26 3   94%
src/footman/_app.py _plugins_report.walk   100% 9 0 0   100% 8 0   100%
src/footman/_app.py _plugins_report.described   100% 7 0 0   100% 4 0   100%
src/footman/_app.py _plugins_report.advertised   38% 13 8 0   33% 6 2   37%
src/footman/_app.py _plugins_report.mount_points   75% 4 1 0   50% 2 1   67%
src/footman/_app.py _where   86% 22 3 0   75% 8 2   83%
src/footman/_app.py _iter_task_nodes   100% 4 0 0   100% 4 0   100%
src/footman/_app.py _contract_entry   100% 19 0 0   83% 12 2   94%
src/footman/_app.py _describe_contract   96% 24 1 0   90% 10 1   94%
src/footman/_app.py _utf8   100% 1 0 0   100% 0 0   100%
src/footman/_app.py _emit_bytes   100% 8 0 0   100% 2 0   100%
src/footman/_app.py _emit_document   85% 13 2 0   100% 4 0   88%
src/footman/_app.py _stack_wanted   100% 1 0 0   100% 0 0   100%
src/footman/_app.py _print_summary   85% 55 8 0   79% 42 5   82%
src/footman/_app.py _check_returns   100% 20 0 0   100% 10 0   100%
src/footman/_app.py _print_json   100% 45 0 0   100% 32 0   100%
src/footman/_app.py _resolve_shell   100% 14 0 0   100% 6 0   100%
src/footman/_app.py _completion_action   100% 20 0 0   100% 8 0   100%
src/footman/_app.py run   100% 7 0 0   100% 0 0   100%
src/footman/_app.py _maybe_collect   100% 16 0 0   100% 4 0   100%
src/footman/_app.py _spawn_gc   100% 2 0 0   100% 0 0   100%
src/footman/_app.py _find_uv   0% 1 1 0   100% 0 0   0%
src/footman/_app.py _reexec   90% 10 1 0   100% 2 0   92%
src/footman/_app.py _script_hint   100% 7 0 0   100% 4 0   100%
src/footman/_app.py _inside   100% 1 0 0   100% 0 0   100%
src/footman/_app.py _locked_project   100% 1 0 0   100% 0 0   100%
src/footman/_app.py _pins_the_runner   100% 1 0 0   100% 0 0   100%
src/footman/_app.py _note_ignored_block   78% 9 2 0   67% 6 2   73%
src/footman/_app.py _script_source   100% 7 0 0   100% 0 0   100%
src/footman/_app.py _script_handoff   84% 45 7 0   92% 24 2   87%
src/footman/_app.py _uv_handoff   82% 28 5 0   86% 14 2   83%
src/footman/_app.py _uv_retry   88% 17 2 0   92% 12 1   90%
src/footman/_app.py _run   100% 34 0 0   100% 12 0   100%
src/footman/_app.py _execute   96% 68 3 0   96% 24 1   96%
src/footman/_app.py _run_tree   96% 113 4 0   97% 66 2   97%
src/footman/_app.py _run_tree.carriable   100% 1 0 0   100% 0 0   100%
src/footman/_app.py run_group   91% 23 2 0   100% 6 0   93%
src/footman/_app.py (no function)   100% 97 0 0   100% 0 0   100%
src/footman/_binder.py record_fields   100% 4 0 0   100% 2 0   100%
src/footman/_binder.py is_document_target   100% 4 0 0   100% 2 0   100%
src/footman/_binder.py _json_name   100% 1 0 0   100% 0 0   100%
src/footman/_binder.py _strip   67% 3 1 0   50% 2 1   60%
src/footman/_binder.py _optional_member   100% 8 0 0   100% 6 0   100%
src/footman/_binder.py _field_types   50% 4 2 0   100% 0 0   50%
src/footman/_binder.py bind_document   91% 34 3 0   88% 24 3   90%
src/footman/_binder.py _leaf   94% 32 2 0   88% 26 3   91%
src/footman/_binder.py _enum_member   100% 8 0 0   100% 8 0   100%
src/footman/_binder.py _phrase   86% 7 1 0   75% 4 1   82%
src/footman/_binder.py (no function)   100% 17 0 0   100% 0 0   100%
src/footman/_coerce.py _tag_of   100% 11 0 0   100% 10 0   100%
src/footman/_coerce.py _is_union   100% 1 0 0   100% 0 0   100%
src/footman/_coerce.py _strip_none   100% 1 0 0   100% 0 0   100%
src/footman/_coerce.py union_members   100% 3 0 0   100% 2 0   100%
src/footman/_coerce.py _union_of   80% 5 1 0   50% 2 1   71%
src/footman/_coerce.py collection_of   100% 8 0 0   100% 6 0   100%
src/footman/_coerce.py peel   100% 93 0 0   95% 62 3   98%
src/footman/_coerce.py emitted   100% 14 0 0   90% 10 1   96%
src/footman/_coerce.py emission_mode   100% 7 0 0   83% 6 1   92%
src/footman/_coerce.py Group.total   100% 1 0 0   100% 0 0   100%
src/footman/_coerce.py Group.build   100% 1 0 0   100% 0 0   100%
src/footman/_coerce.py Group.label   100% 3 0 0   100% 2 0   100%
src/footman/_coerce.py fields_of   100% 30 0 0   100% 16 0   100%
src/footman/_coerce.py _spellable   100% 4 0 0   100% 2 0   100%
src/footman/_coerce.py group_of   87% 15 2 0   83% 12 2   85%
src/footman/_coerce.py is_flag   100% 1 0 0   100% 0 0   100%
src/footman/_coerce.py inferred_type   100% 6 0 0   100% 6 0   100%
src/footman/_coerce.py sort_tags   100% 1 0 0   100% 0 0   100%
src/footman/_coerce.py element_tags   100% 5 0 0   100% 2 0   100%
src/footman/_coerce.py type_phrase   100% 1 0 0   100% 0 0   100%
src/footman/_coerce.py enum_token   100% 4 0 0   100% 2 0   100%
src/footman/_coerce.py enum_faces   100% 19 0 0   100% 14 0   100%
src/footman/_coerce.py token_of   100% 1 0 0   100% 0 0   100%
src/footman/_coerce.py enum_member_for   100% 4 0 0   100% 4 0   100%
src/footman/_coerce.py element_choices   100% 6 0 0   100% 4 0   100%
src/footman/_coerce.py enum_accepts   100% 8 0 0   100% 10 0   100%
src/footman/_coerce.py all_choices   100% 6 0 0   100% 4 0   100%
src/footman/_coerce.py eagerly_checkable   100% 8 0 0   100% 6 0   100%
src/footman/_coerce.py coerce_scalar   100% 18 0 0   94% 16 1   97%
src/footman/_coerce.py coerce_one   100% 18 0 0   100% 14 0   100%
src/footman/_coerce.py coerce_checked   53% 15 7 0   40% 10 4   48%
src/footman/_coerce.py _coerce_union   87% 23 3 0   77% 22 5   82%
src/footman/_coerce.py coerce_token   100% 7 0 0   100% 4 0   100%
src/footman/_coerce.py coerce_custom   92% 24 2 0   86% 14 2   89%
src/footman/_coerce.py (no function)   100% 111 0 0   100% 0 0   100%
src/footman/_complete.py _rejoin   100% 17 0 0   100% 6 0   100%
src/footman/_complete.py _csv_head   100% 4 0 0   100% 2 0   100%
src/footman/_complete.py _files_sentinel   100% 3 0 0   100% 0 0   100%
src/footman/_complete.py _choice_tokens   100% 5 0 0   100% 2 0   100%
src/footman/_complete.py _attached_value   100% 12 0 0   100% 4 0   100%
src/footman/_complete.py _consume_globals   100% 4 0 0   100% 2 0   100%
src/footman/_complete.py _Segment.__init__   100% 11 0 0   100% 2 0   100%
src/footman/_complete.py _has_any   100% 5 0 0   100% 4 0   100%
src/footman/_complete.py _cand   100% 1 0 0   100% 0 0   100%
src/footman/_complete.py _opt_rows   100% 5 0 0   100% 2 0   100%
src/footman/_complete.py _walk_address   87% 15 2 0   80% 10 2   84%
src/footman/_complete.py _open_head   100% 9 0 0   100% 6 0   100%
src/footman/_complete.py _leaf_fallback   100% 4 0 0   100% 0 0   100%
src/footman/_complete.py _leaf_fallback.walk   73% 11 3 0   75% 12 3   74%
src/footman/_complete.py _address_candidates   94% 47 3 0   89% 28 3   92%
src/footman/_complete.py complete   97% 104 3 0   94% 72 4   96%
src/footman/_complete.py _load_manifest   100% 6 0 0   100% 0 0   100%
src/footman/_complete.py _broken_line   100% 5 0 0   100% 4 0   100%
src/footman/_complete.py _maybe_refresh   85% 13 2 0   100% 4 0   88%
src/footman/_complete.py _spawn_refresh   100% 8 0 0   100% 2 0   100%
src/footman/_complete.py detach   100% 9 0 0   100% 2 0   100%
src/footman/_complete.py _cold_build   100% 12 0 0   100% 8 0   100%
src/footman/_complete.py _leading_global_value   100% 6 0 0   100% 6 0   100%
src/footman/_complete.py _tasks_file_from   100% 1 0 0   100% 0 0   100%
src/footman/_complete.py _emit   88% 8 1 0   75% 4 1   83%
src/footman/_complete.py _fresh_dynamic   100% 21 0 0   100% 10 0   100%
src/footman/_complete.py complete_cli   96% 79 3 0   93% 46 3   95%
src/footman/_complete.py main   0% 1 1 0   100% 0 0   0%
src/footman/_complete.py (no function)   100% 49 0 4   100% 0 0   100%
src/footman/_config.py cascade_mode   100% 14 0 0   100% 6 0   100%
src/footman/_config.py _decode   100% 9 0 0   100% 4 0   100%
src/footman/_config.py _read_toml   93% 15 1 0   83% 6 1   90%
src/footman/_config.py _footman_table   100% 8 0 0   100% 4 0   100%
src/footman/_config.py _dir_config   100% 12 0 0   100% 8 0   100%
src/footman/_config.py _parse_duration   100% 21 0 0   100% 12 0   100%
src/footman/_config.py completion_max_age   100% 3 0 0   100% 0 0   100%
src/footman/_config.py sort_listing   83% 6 1 0   75% 4 1   80%
src/footman/_config.py user_level_value   50% 4 2 0   100% 0 0   50%
src/footman/_config.py _builtins_table   100% 2 0 0   100% 0 0   100%
src/footman/_config.py discovery_mode   100% 4 0 0   100% 2 0   100%
src/footman/_config.py user_builtin   100% 4 0 0   100% 2 0   100%
src/footman/_config.py discovered_builtin   89% 9 1 0   50% 2 1   82%
src/footman/_config.py discovered_path   100% 2 0 0   100% 0 0   100%
src/footman/_config.py write_discovered   100% 4 0 0   100% 0 0   100%
src/footman/_config.py installed_entry_points   0% 3 3 0   100% 0 0   0%
src/footman/_config.py effective_builtin   100% 6 0 0   100% 2 0   100%
src/footman/_config.py load_config   100% 14 0 0   88% 8 1   95%
src/footman/_config.py (no function)   100% 37 0 0   100% 0 0   100%
src/footman/_describe.py wants_color   100% 6 0 0   100% 4 0   100%
src/footman/_describe.py ansi_capable   76% 29 7 0   50% 8 2   70%
src/footman/_describe.py link   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py docs_url_error   100% 7 0 0   100% 4 0   100%
src/footman/_describe.py docs_url_for   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py bold   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py dim   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py cyan   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py bold_cyan   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py red   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py _cell   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py display_width   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py pad_to   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py fit   100% 15 0 0   100% 6 0   100%
src/footman/_describe.py fit.take   100% 7 0 0   100% 4 0   100%
src/footman/_describe.py value_hint   91% 11 1 0   88% 8 1   89%
src/footman/_describe.py _repeats   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py usage_fragment   94% 16 1 0   90% 10 1   92%
src/footman/_describe.py param_label   100% 7 0 0   100% 4 0   100%
src/footman/_describe.py param_detail   100% 2 0 0   100% 0 0   100%
src/footman/_describe.py param_detail_parts   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py default_text   75% 12 3 0   70% 10 3   73%
src/footman/_describe.py _mechanics   81% 52 10 0   76% 46 7   79%
src/footman/_describe.py uses_line   100% 6 0 0   100% 2 0   100%
src/footman/_describe.py sample_value   100% 2 0 0   100% 0 0   100%
src/footman/_describe.py paint_cli   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py invocation_parts   100% 4 0 0   50% 2 1   83%
src/footman/_describe.py listed_params   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py usage_parts   100% 7 0 0   75% 4 1   91%
src/footman/_describe.py example_parts   100% 12 0 0   100% 8 0   100%
src/footman/_describe.py example   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py task_line   100% 9 0 0   100% 6 0   100%
src/footman/_describe.py default_line   100% 7 0 0   100% 4 0   100%
src/footman/_describe.py listed   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py has_listed   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py ordered_tasks   100% 4 0 0   100% 2 0   100%
src/footman/_describe.py walk   100% 11 0 0   100% 10 0   100%
src/footman/_describe.py iter_tasks   100% 3 0 0   100% 4 0   100%
src/footman/_describe.py sort_tree   100% 5 0 0   100% 0 0   100%
src/footman/_describe.py iter_group_paths   100% 3 0 0   100% 2 0   100%
src/footman/_describe.py json_default   81% 16 3 0   86% 14 2   83%
src/footman/_describe.py returns_json_schema   100% 24 0 0   94% 18 1   98%
src/footman/_describe.py returned_mismatch   88% 60 7 0   88% 56 7   88%
src/footman/_describe.py _object_mismatch   89% 19 2 0   94% 16 1   91%
src/footman/_describe.py _got   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py returns_phrase   95% 19 1 0   93% 14 1   94%
src/footman/_describe.py redact   100% 17 0 0   100% 14 0   100%
src/footman/_describe.py jsonable   100% 4 0 0   100% 0 0   100%
src/footman/_describe.py source_of   100% 3 0 0   100% 0 0   100%
src/footman/_describe.py _is_ours   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py user_frame   0% 5 5 0   0% 4 0   0%
src/footman/_describe.py stack_wanted   100% 1 0 0   100% 0 0   100%
src/footman/_describe.py user_traceback   100% 7 0 0   100% 2 0   100%
src/footman/_describe.py global_default_suffix   100% 8 0 0   100% 4 0   100%
src/footman/_describe.py (no function)   100% 72 0 0   100% 0 0   100%
src/footman/_discover.py TasksImportError.__init__   100% 6 0 0   100% 2 0   100%
src/footman/_discover.py HookError.__init__   100% 8 0 0   100% 2 0   100%
src/footman/_discover.py _import_file   95% 21 1 0   75% 4 1   92%
src/footman/_discover.py _evict_siblings   100% 13 0 0   100% 10 0   100%
src/footman/_discover.py _alias_error   100% 2 0 0   100% 0 0   100%
src/footman/_discover.py _claim   100% 5 0 0   100% 4 0   100%
src/footman/_discover.py _tag   100% 5 0 0   100% 4 0   100%
src/footman/_discover.py _overlay   100% 14 0 0   100% 8 0   100%
src/footman/_discover.py load_tree   100% 24 0 0   100% 8 0   100%
src/footman/_discover.py untag   100% 5 0 0   100% 6 0   100%
src/footman/_discover.py defining_dir   100% 1 0 0   100% 0 0   100%
src/footman/_discover.py shadowed   100% 1 0 0   100% 0 0   100%
src/footman/_discover.py shadow_chain   100% 4 0 0   100% 2 0   100%
src/footman/_discover.py (no function)   100% 25 0 0   100% 0 0   100%
src/footman/_encoding.py sniff_bom   100% 4 0 0   100% 4 0   100%
src/footman/_encoding.py (no function)   100% 4 0 0   100% 0 0   100%
src/footman/_executor.py TaskResult.failed_at   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py TaskResult.work_code   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py reported_state   100% 5 0 0   100% 4 0   100%
src/footman/_executor.py resolve   90% 10 1 0   83% 6 1   88%
src/footman/_executor.py _wants_context   100% 11 0 0   83% 6 1   94%
src/footman/_executor.py _computed_default   100% 3 0 0   100% 2 0   100%
src/footman/_executor.py _run_checks   100% 8 0 0   100% 4 0   100%
src/footman/_executor.py _validate_value   100% 18 0 0   100% 12 0   100%
src/footman/_executor.py _coerce_extra   100% 5 0 0   100% 0 0   100%
src/footman/_executor.py _env_value   100% 9 0 0   100% 4 0   100%
src/footman/_executor.py _env_value.one   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py _bind_group   75% 20 5 0   80% 10 2   77%
src/footman/_executor.py _container   100% 7 0 0   100% 2 0   100%
src/footman/_executor.py _decode_stdin   100% 5 0 0   100% 0 0   100%
src/footman/_executor.py _stdin_json   100% 6 0 0   100% 2 0   100%
src/footman/_executor.py _stdin_document   100% 4 0 0   100% 2 0   100%
src/footman/_executor.py _stdin_value   100% 37 0 0   100% 22 0   100%
src/footman/_executor.py _stdin_value.checked   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py _document_shape   100% 8 0 0   100% 6 0   100%
src/footman/_executor.py _stdin_fillable   60% 10 4 0   50% 4 2   57%
src/footman/_executor.py _prompt_param   93% 55 4 0   86% 22 3   91%
src/footman/_executor.py _prompt_param.note   100% 3 0 0   100% 0 0   100%
src/footman/_executor.py _SiblingView.__init__   100% 3 0 0   100% 0 0   100%
src/footman/_executor.py _SiblingView.__getitem__   100% 7 0 0   100% 6 0   100%
src/footman/_executor.py _SiblingView.__iter__   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py _SiblingView.__len__   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py _SiblingView.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/_executor.py _left_siblings   100% 17 0 0   100% 12 0   100%
src/footman/_executor.py resolve_asks   96% 23 1 0   94% 18 1   95%
src/footman/_executor.py bind   100% 104 0 0   97% 66 2   99%
src/footman/_executor.py forward_map   93% 30 2 0   89% 18 2   92%
src/footman/_executor.py _call_plan   100% 19 0 0   100% 8 0   100%
src/footman/_executor.py _validate_explicit   36% 11 7 0   17% 12 2   26%
src/footman/_executor.py _validate_explicit.one   67% 3 1 0   50% 2 1   60%
src/footman/_executor.py bind_call   81% 53 10 0   67% 30 6   76%
src/footman/_executor.py _call   100% 29 0 0   100% 8 0   100%
src/footman/_executor.py fold_post_error   100% 8 0 0   100% 4 0   100%
src/footman/_executor.py unavailable   100% 4 0 0   100% 2 0   100%
src/footman/_executor.py resolve_cwd   100% 21 0 0   100% 16 0   100%
src/footman/_executor.py _cwd_hold   100% 7 0 0   50% 2 1   89%
src/footman/_executor.py _serial_globals   100% 14 0 0   75% 4 1   94%
src/footman/_executor.py bind_global_options   98% 63 1 0   97% 32 1   98%
src/footman/_executor.py _config_value   86% 7 1 0   83% 6 1   85%
src/footman/_executor.py _assemble_global   87% 23 3 0   92% 12 1   89%
src/footman/_executor.py _absent_global   100% 11 0 0   88% 8 1   95%
src/footman/_executor.py _advise_unread_uses   100% 3 0 0   100% 4 0   100%
src/footman/_executor.py wide_moment   100% 4 0 0   100% 0 0   100%
src/footman/_executor.py install_lifecycle   100% 7 0 0   100% 4 0   100%
src/footman/_executor.py clear_lifecycle   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py run_post_tasks   100% 21 0 0   83% 6 1   96%
src/footman/_executor.py TaskHandle.__init__   100% 7 0 0   100% 0 0   100%
src/footman/_executor.py TaskHandle._bind   100% 2 0 0   100% 0 0   100%
src/footman/_executor.py TaskHandle.__setattr__   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py TaskHandle.args   87% 15 2 0   75% 4 1   84%
src/footman/_executor.py TaskHandle.env   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py TaskHandle.state   88% 8 1 0   75% 4 1   83%
src/footman/_executor.py TaskHandle.source_hash   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py ResultView.__init__   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py ResultView.__getattr__   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py ResultView.__setattr__   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py _reserved_note   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py _own_hook_error   0% 3 3 0   100% 0 0   0%
src/footman/_executor.py _enter_own_hooks   67% 6 2 0   100% 2 0   75%
src/footman/_executor.py _enter_bind_hooks   100% 15 0 0   100% 8 0   100%
src/footman/_executor.py _enter_task_hooks   100% 15 0 0   100% 8 0   100%
src/footman/_executor.py _exit_task_hooks   85% 41 6 0   58% 24 6   75%
src/footman/_executor.py run_task   96% 23 1 0   100% 6 0   97%
src/footman/_executor.py run_bound   96% 141 5 0   93% 58 4   95%
src/footman/_executor.py _result   100% 1 0 0   100% 0 0   100%
src/footman/_executor.py run_chain   100% 2 0 0   100% 0 0   100%
src/footman/_executor.py (no function)   100% 187 0 0   100% 0 0   100%
src/footman/_fetch.py cache_dir   100% 1 0 0   100% 0 0   100%
src/footman/_fetch.py _key   100% 1 0 0   100% 0 0   100%
src/footman/_fetch.py _manifest_path   100% 1 0 0   100% 0 0   100%
src/footman/_fetch.py _data_name   100% 1 0 0   100% 0 0   100%
src/footman/_fetch.py _cached_body   100% 5 0 0   100% 2 0   100%
src/footman/_fetch.py _load_meta   100% 5 0 0   100% 0 0   100%
src/footman/_fetch.py _digest   100% 5 0 0   100% 2 0   100%
src/footman/_fetch.py _resolve_backend   92% 13 1 0   92% 12 1   92%
src/footman/_fetch.py _available   100% 6 0 0   100% 4 0   100%
src/footman/_fetch.py _scratch   100% 3 0 0   100% 0 0   100%
src/footman/_fetch.py _download   100% 5 0 0   100% 4 0   100%
src/footman/_fetch.py _conditional_headers   83% 6 1 0   75% 4 1   80%
src/footman/_fetch.py _download_urllib   100% 24 0 0   90% 10 1   97%
src/footman/_fetch.py _download_curl   100% 18 0 0   100% 6 0   100%
src/footman/_fetch.py _last_response   100% 11 0 0   100% 6 0   100%
src/footman/_fetch.py _download_lib   100% 16 0 0   100% 4 0   100%
src/footman/_fetch.py fetch   95% 42 2 0   81% 16 3   91%
src/footman/_fetch.py _destination   100% 1 0 0   100% 0 0   100%
src/footman/_fetch.py _publish   100% 3 0 0   100% 0 0   100%
src/footman/_fetch.py _touch   100% 3 0 0   100% 2 0   100%
src/footman/_fetch.py _configured_backend   100% 1 0 0   100% 0 0   100%
src/footman/_fetch.py _deliver   100% 8 0 0   100% 6 0   100%
src/footman/_fetch.py _record   100% 2 0 0   100% 0 0   100%
src/footman/_fetch.py (no function)   100% 41 0 0   100% 0 0   100%
src/footman/_futures.py _Settled.__init__   100% 3 0 0   100% 0 0   100%
src/footman/_futures.py _Settled.done   100% 1 0 0   100% 0 0   100%
src/footman/_futures.py _Settled.set_result   100% 2 0 0   100% 0 0   100%
src/footman/_futures.py _Settled.set_exception   100% 2 0 0   100% 0 0   100%
src/footman/_futures.py _Settled.result   100% 4 0 0   100% 2 0   100%
src/footman/_futures.py _Cell.__init__   100% 4 0 0   100% 0 0   100%
src/footman/_futures.py _Session.__init__   100% 5 0 0   100% 0 0   100%
src/footman/_futures.py session   75% 8 2 0   50% 2 1   70%
src/footman/_futures.py active_session   100% 1 0 0   100% 0 0   100%
src/footman/_futures.py _sweep_ephemeral   75% 4 1 0   75% 4 1   75%
src/footman/_futures.py collected   100% 1 0 0   100% 0 0   100%
src/footman/_futures.py _freeze   100% 18 0 0   100% 10 0   100%
src/footman/_futures.py unshared   100% 6 0 0   100% 2 0   100%
src/footman/_futures.py _env_digest   100% 9 0 0   100% 2 0   100%
src/footman/_futures.py _key   80% 10 2 0   100% 2 0   83%
src/footman/_futures.py _deadlock   92% 13 1 0   83% 6 1   89%
src/footman/_futures.py _label   100% 1 0 0   100% 0 0   100%
src/footman/_futures.py call   99% 93 1 0   97% 30 1   98%
src/footman/_futures.py _claim   100% 12 0 0   100% 6 0   100%
src/footman/_futures.py work_of   100% 1 0 0   100% 0 0   100%
src/footman/_futures.py retire   86% 7 1 0   50% 4 2   73%
src/footman/_futures.py claim   100% 4 0 0   100% 2 0   100%
src/footman/_futures.py join   100% 6 0 0   100% 0 0   100%
src/footman/_futures.py resolve   100% 6 0 0   100% 4 0   100%
src/footman/_futures.py shared_result   100% 1 0 0   100% 0 0   100%
src/footman/_futures.py _record   100% 2 0 0   50% 2 1   75%
src/footman/_futures.py _shared_result   100% 10 0 0   50% 2 1   92%
src/footman/_futures.py _claim_unit   100% 11 0 0   100% 4 0   100%
src/footman/_futures.py _refuse_wide_moment   100% 7 0 0   100% 2 0   100%
src/footman/_futures.py _refuse_unrunnable   100% 5 0 0   100% 4 0   100%
src/footman/_futures.py _run_now   81% 42 8 0   73% 22 4   78%
src/footman/_futures.py (no function)   100% 51 0 3   100% 0 0   100%
src/footman/_gc.py collect   97% 61 2 0   95% 42 2   96%
src/footman/_gc.py collect.unlink   100% 5 0 0   100% 0 0   100%
src/footman/_gc.py _baked_cwd   100% 4 0 0   100% 2 0   100%
src/footman/_gc.py _idle   100% 5 0 0   100% 2 0   100%
src/footman/_gc.py main   100% 4 0 0   100% 2 0   100%
src/footman/_gc.py (no function)   100% 13 0 0   100% 0 0   100%
src/footman/_globals.py active   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py _inheritable   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py base_env   80% 5 1 0   75% 4 1   78%
src/footman/_globals.py _norm   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py _merged   100% 5 0 0   100% 2 0   100%
src/footman/_globals.py _note   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _in_task   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _install_environ   100% 29 0 0   100% 2 0   100%
src/footman/_globals.py _install_environ._virtual   75% 4 1 0   50% 2 1   67%
src/footman/_globals.py _install_environ.__getitem__   100% 3 0 0   100% 2 0   100%
src/footman/_globals.py _install_environ.__setitem__   88% 8 1 0   75% 4 1   83%
src/footman/_globals.py _install_environ.__delitem__   100% 9 0 0   100% 6 0   100%
src/footman/_globals.py _install_environ.__iter__   100% 3 0 0   100% 2 0   100%
src/footman/_globals.py _install_environ.__len__   0% 3 3 0   0% 2 0   0%
src/footman/_globals.py _install_environ.__contains__   100% 3 0 0   100% 2 0   100%
src/footman/_globals.py _install_environ.copy   67% 3 1 0   50% 2 1   60%
src/footman/_globals.py _install_environ.setdefault   88% 8 1 0   50% 2 1   80%
src/footman/_globals.py _restore_environ   100% 4 0 0   100% 2 0   100%
src/footman/_globals.py _managed_task   100% 4 0 0   100% 0 0   100%
src/footman/_globals.py _install_popen   100% 5 0 0   100% 0 0   100%
src/footman/_globals.py _install_popen.__init__   100% 13 0 0   100% 8 0   100%
src/footman/_globals.py _restore_popen   100% 4 0 0   50% 2 1   83%
src/footman/_globals.py _is_internal   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py internal   100% 4 0 0   100% 0 0   100%
src/footman/_globals.py internal._internal_cm   100% 5 0 0   100% 0 0   100%
src/footman/_globals.py warm_tempdir   100% 8 0 0   100% 4 0   100%
src/footman/_globals.py _install_os_guards   100% 30 0 0   75% 8 2   95%
src/footman/_globals.py _install_os_guards._chdir_error   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py _install_os_guards.chdir   78% 9 2 0   100% 4 0   85%
src/footman/_globals.py _install_os_guards.fchdir   0% 4 4 0   0% 2 0   0%
src/footman/_globals.py _install_os_guards.getcwd   86% 7 1 0   75% 4 1   82%
src/footman/_globals.py _install_os_guards._env_bypass_error   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py _install_os_guards.putenv   100% 4 0 0   100% 2 0   100%
src/footman/_globals.py _install_os_guards.unsetenv   75% 4 1 0   50% 2 1   67%
src/footman/_globals.py _install_os_guards.fork   100% 4 0 0   50% 2 1   83%
src/footman/_globals.py _restore_os_guards   92% 13 1 0   70% 10 3   83%
src/footman/_globals.py _install_multiprocessing   70% 10 3 0   50% 2 1   67%
src/footman/_globals.py _install_multiprocessing.start   100% 4 0 0   50% 2 1   83%
src/footman/_globals.py _restore_multiprocessing   100% 4 0 0   50% 2 1   83%
src/footman/_globals.py _ArgvProxy._ov   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.__getitem__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.__setitem__   75% 4 1 0   50% 2 1   67%
src/footman/_globals.py _ArgvProxy.__delitem__   75% 4 1 0   50% 2 1   67%
src/footman/_globals.py _ArgvProxy.__iter__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.__len__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.__contains__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.__repr__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.__eq__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.__add__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.append   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.extend   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.insert   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.pop   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.remove   0% 2 2 0   100% 0 0   0%
src/footman/_globals.py _ArgvProxy.clear   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.index   0% 2 2 0   100% 0 0   0%
src/footman/_globals.py _ArgvProxy.count   0% 2 2 0   100% 0 0   0%
src/footman/_globals.py _ArgvProxy.copy   0% 2 2 0   100% 0 0   0%
src/footman/_globals.py _ArgvProxy.__iadd__   80% 5 1 0   50% 2 1   71%
src/footman/_globals.py _ArgvProxy.__imul__   0% 5 5 0   0% 2 0   0%
src/footman/_globals.py _ArgvProxy.__mul__   0% 2 2 0   100% 0 0   0%
src/footman/_globals.py _ArgvProxy.__reversed__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.sort   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _ArgvProxy.reverse   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py argv_override   100% 4 0 0   100% 0 0   100%
src/footman/_globals.py argv_override._cm   100% 4 0 0   100% 0 0   100%
src/footman/_globals.py _install_argv   100% 3 0 0   100% 0 0   100%
src/footman/_globals.py _restore_argv   100% 4 0 0   50% 2 1   83%
src/footman/_globals.py _GuardedStdin.__init__   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py _GuardedStdin._guard   100% 4 0 0   100% 2 0   100%
src/footman/_globals.py _GuardedStdin.read   50% 2 1 0   100% 0 0   50%
src/footman/_globals.py _GuardedStdin.readline   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py _GuardedStdin.readlines   50% 2 1 0   100% 0 0   50%
src/footman/_globals.py _GuardedStdin.__iter__   50% 2 1 0   100% 0 0   50%
src/footman/_globals.py _GuardedStdin.__getattr__   100% 1 0 0   100% 0 0   100%
src/footman/_globals.py _install_stdin   100% 3 0 0   100% 0 0   100%
src/footman/_globals.py _restore_stdin   100% 4 0 0   50% 2 1   83%
src/footman/_globals.py Lane.__init__   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py Lane.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/_globals.py make_lane   100% 7 0 0   100% 2 0   100%
src/footman/_globals.py named_lanes   100% 4 0 0   100% 0 0   100%
src/footman/_globals.py named_lanes._hold   100% 25 0 0   100% 8 0   100%
src/footman/_globals.py lane   100% 4 0 0   100% 0 0   100%
src/footman/_globals.py lane._lane   100% 59 0 0   100% 38 0   100%
src/footman/_globals.py _suspend_status   100% 5 0 0   100% 2 0   100%
src/footman/_globals.py console_gate   100% 4 0 0   100% 0 0   100%
src/footman/_globals.py console_gate._gate   100% 7 0 0   100% 4 0   100%
src/footman/_globals.py _wait_note   33% 3 2 0   50% 2 1   40%
src/footman/_globals.py _waited   100% 2 0 0   100% 0 0   100%
src/footman/_globals.py parked   100% 4 0 0   100% 0 0   100%
src/footman/_globals.py parked._parked_cm   100% 10 0 0   100% 2 0   100%
src/footman/_globals.py defer_gc   100% 3 0 0   100% 0 0   100%
src/footman/_globals.py _resume_gc   100% 6 0 0   100% 2 0   100%
src/footman/_globals.py install   100% 15 0 0   100% 2 0   100%
src/footman/_globals.py uninstall   92% 13 1 0   75% 4 1   88%
src/footman/_globals.py (no function)   100% 115 0 0   100% 0 0   100%
src/footman/_manifest.py _warn   75% 4 1 0   50% 2 1   67%
src/footman/_manifest.py _memo   100% 2 0 0   100% 0 0   100%
src/footman/_manifest.py resolved_signature   100% 10 0 0   100% 2 0   100%
src/footman/_manifest.py _partially_resolved   100% 6 0 0   100% 0 0   100%
src/footman/_manifest.py _partially_resolved.resolve   100% 7 0 0   100% 2 0   100%
src/footman/_manifest.py call_signature   100% 10 0 0   100% 4 0   100%
src/footman/_manifest.py _unique_globals   100% 5 0 0   75% 4 1   89%
src/footman/_manifest.py _global_spec   100% 6 0 0   100% 2 0   100%
src/footman/_manifest.py param_spec   96% 113 5 0   93% 76 5   95%
src/footman/_manifest.py _shape_spec   88% 8 1 0   75% 4 1   83%
src/footman/_manifest.py _field_spec   100% 14 0 0   100% 10 0   100%
src/footman/_manifest.py _marker_keys   98% 52 1 0   94% 48 3   96%
src/footman/_manifest.py returned_spec   100% 9 0 0   100% 4 0   100%
src/footman/_manifest.py _returned_of   89% 82 9 0   88% 66 8   89%
src/footman/_manifest.py _returned_fields   87% 31 4 0   89% 18 2   88%
src/footman/_manifest.py _run_completer   100% 10 0 0   100% 4 0   100%
src/footman/_manifest.py _finish   100% 7 0 0   100% 4 0   100%
src/footman/_manifest.py _cli_params   100% 3 0 0   100% 0 0   100%
src/footman/_manifest.py _source_of   100% 1 0 0   100% 0 0   100%
src/footman/_manifest.py _task_node   100% 65 0 0   100% 50 0   100%
src/footman/_manifest.py _scoped   100% 6 0 0   100% 4 0   100%
src/footman/_manifest.py _hide   100% 3 0 0   100% 2 0   100%
src/footman/_manifest.py _node   100% 16 0 0   100% 10 0   100%
src/footman/_manifest.py tree_hash   100% 2 0 0   100% 0 0   100%
src/footman/_manifest.py build_manifest   100% 6 0 0   100% 0 0   100%
src/footman/_manifest.py _core_global_help   94% 16 1 0   92% 12 1   93%
src/footman/_manifest.py write_manifest   100% 13 0 0   75% 4 1   94%
src/footman/_manifest.py load_manifest   100% 5 0 0   100% 0 0   100%
src/footman/_manifest.py sync_manifest   100% 14 0 0   100% 8 0   100%
src/footman/_manifest.py (no function)   100% 58 0 0   100% 0 0   100%
src/footman/_notes.py validate   100% 13 0 0   100% 8 0   100%
src/footman/_notes.py _split_key   100% 6 0 0   100% 4 0   100%
src/footman/_notes.py install_policy   100% 5 0 0   100% 4 0   100%
src/footman/_notes.py resolve   100% 5 0 0   100% 4 0   100%
src/footman/_notes.py reset   100% 2 0 0   100% 0 0   100%
src/footman/_notes.py emit   100% 15 0 0   100% 6 0   100%
src/footman/_notes.py _site   84% 19 3 0   83% 6 1   84%
src/footman/_notes.py boundary_error   100% 8 0 0   100% 2 0   100%
src/footman/_notes.py program_name   88% 17 2 0   80% 10 2   85%
src/footman/_notes.py (no function)   100% 28 0 2   100% 0 0   100%
src/footman/_paths.py project_markers   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py _entries   50% 4 2 0   100% 0 0   50%
src/footman/_paths.py _named   100% 11 0 0   88% 8 1   95%
src/footman/_paths.py _any_named   100% 4 0 0   100% 2 0   100%
src/footman/_paths.py find_project_root   100% 7 0 0   100% 4 0   100%
src/footman/_paths.py find_repo_root   100% 6 0 0   100% 4 0   100%
src/footman/_paths.py dir_chain   100% 8 0 0   100% 4 0   100%
src/footman/_paths.py task_files   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py configure   100% 4 0 0   100% 0 0   100%
src/footman/_paths.py builtin   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py dist   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py declared_dist   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py child_args   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py configure_child   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py prog   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py env_prefix   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py tasks_file_name   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py env_var   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py data_home   100% 3 0 0   100% 0 0   100%
src/footman/_paths.py config_basename   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py config_table   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py _cache_home_str   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py cache_home   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py config_home   100% 3 0 0   100% 0 0   100%
src/footman/_paths.py footman_config_dir   100% 5 0 0   100% 2 0   100%
src/footman/_paths.py footman_config_file   100% 5 0 0   100% 2 0   100%
src/footman/_paths.py footman_cache_dir   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py _footman_cache_dir_str   100% 8 0 0   100% 6 0   100%
src/footman/_paths.py footman_data_dir   100% 7 0 0   100% 4 0   100%
src/footman/_paths.py check_locations   75% 8 2 0   100% 4 0   83%
src/footman/_paths.py user_stamp   100% 8 0 0   100% 2 0   100%
src/footman/_paths.py user_tasks_file   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py _dir_key_str   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py env_key   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py _manifest_file   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py manifest_path   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py times_path   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py _source_file   100% 4 0 0   100% 0 0   100%
src/footman/_paths.py source_manifest_path   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py _cwd_manifest_file   100% 1 0 0   100% 0 0   100%
src/footman/_paths.py cwd_manifest_path   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py _global_file   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py global_manifest_path   100% 2 0 0   100% 0 0   100%
src/footman/_paths.py (no function)   100% 60 0 3   100% 0 0   100%
src/footman/_progress.py default_jobs   100% 1 0 0   100% 0 0   100%
src/footman/_progress.py chain_key   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py estimate   100% 8 0 0   100% 4 0   100%
src/footman/_progress.py load_runs   86% 7 1 0   75% 4 1   82%
src/footman/_progress.py load_cmd_width   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py record   100% 27 0 0   100% 8 0   100%
src/footman/_progress.py _load   100% 5 0 0   100% 0 0   100%
src/footman/_progress.py fmt_secs   80% 5 1 0   75% 4 1   78%
src/footman/_progress.py StatusLine.__init__   100% 16 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.open   100% 2 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.close   100% 5 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine._run_ticker   100% 2 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine.unit_added   100% 2 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.unit_started   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.unit_counted   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.unit_finished   100% 7 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine.unit_skipped   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.notify   100% 5 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine.suspend   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.resume   100% 3 0 0   100% 0 0   100%
src/footman/_progress.py StatusLine.paint   100% 7 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine._clear_locked   100% 4 0 0   100% 2 0   100%
src/footman/_progress.py StatusLine._counted_fraction   91% 11 1 0   75% 8 2   84%
src/footman/_progress.py StatusLine._render   94% 33 2 0   86% 14 2   91%
src/footman/_progress.py (no function)   100% 49 0 0   100% 0 0   100%
src/footman/_refresh.py _maybe_reexec   100% 2 0 0   100% 0 0   100%
src/footman/_refresh.py _project_reexec   100% 6 0 0   100% 2 0   100%
src/footman/_refresh.py refresh_cwd   100% 4 0 0   100% 0 0   100%
src/footman/_refresh.py _rebuild   87% 53 7 0   85% 20 3   86%
src/footman/_refresh.py _write_marker   100% 6 0 0   100% 2 0   100%
src/footman/_refresh.py refresh_source   100% 4 0 0   100% 0 0   100%
src/footman/_refresh.py _rebuild_source   90% 21 2 0   75% 4 1   88%
src/footman/_refresh.py (no function)   100% 11 0 2   100% 0 0   100%
src/footman/_schedule.py _default_seg   100% 2 0 0   100% 0 0   100%
src/footman/_schedule.py _dep_key   100% 1 0 0   100% 0 0   100%
src/footman/_schedule.py resolve_inherited   100% 1 0 0   100% 0 0   100%
src/footman/_schedule.py _as_task   100% 10 0 0   100% 8 0   100%
src/footman/_schedule.py _owner_of   100% 4 0 0   100% 2 0   100%
src/footman/_schedule.py _segment_group   100% 7 0 0   100% 4 0   100%
src/footman/_schedule.py _build_dag   91% 34 3 0   93% 14 1   92%
src/footman/_schedule.py _build_dag.new_node   100% 4 0 0   100% 0 0   100%
src/footman/_schedule.py _build_dag.add_dep   100% 13 0 0   100% 4 0   100%
src/footman/_schedule.py _build_dag._thread   91% 32 3 0   64% 14 3   83%
src/footman/_schedule.py _build_dag._link   100% 12 0 0   100% 6 0   100%
src/footman/_schedule.py _check_cycles   100% 6 0 0   100% 4 0   100%
src/footman/_schedule.py _check_cycles.visit   93% 14 1 0   88% 8 1   91%
src/footman/_schedule.py _toposort   100% 7 0 0   100% 2 0   100%
src/footman/_schedule.py _toposort.visit   100% 7 0 0   83% 6 1   92%
src/footman/_schedule.py _plain_output   100% 1 0 0   100% 0 0   100%
src/footman/_schedule.py _make_ctx   100% 11 0 0   100% 0 0   100%
src/footman/_schedule.py resolve_keep_going   100% 7 0 0   100% 2 0   100%
src/footman/_schedule.py _scope_keep_going   100% 10 0 0   100% 8 0   100%
src/footman/_schedule.py dag_wants_progress   100% 5 0 0   100% 0 0   100%
src/footman/_schedule.py NotConfirmed.__init__   100% 1 0 0   100% 0 0   100%
src/footman/_schedule.py _ask_confirm   100% 4 0 0   100% 2 0   100%
src/footman/_schedule.py _gate_confirms   100% 20 0 0   88% 8 1   96%
src/footman/_schedule.py _answer_confirm   100% 1 0 0   100% 0 0   100%
src/footman/_schedule.py _dry_confirm   100% 3 0 0   100% 0 0   100%
src/footman/_schedule.py _gate_node_confirms   100% 16 0 0   100% 8 0   100%
src/footman/_schedule.py _not_confirmed   100% 1 0 0   100% 0 0   100%
src/footman/_schedule.py _in_request_order   100% 7 0 0   100% 2 0   100%
src/footman/_schedule.py confirm_gate   100% 6 0 0   100% 4 0   100%
src/footman/_schedule.py run_plan   100% 3 0 0   100% 0 0   100%
src/footman/_schedule.py _run_plan   97% 68 2 0   92% 24 2   96%
src/footman/_schedule.py _run_plan._lost   100% 2 0 0   100% 0 0   100%
src/footman/_schedule.py _run_plan._blocked_by   86% 7 1 0   88% 8 1   87%
src/footman/_schedule.py _run_sequential   86% 29 4 0   88% 16 2   87%
src/footman/_schedule.py _run_attempts   100% 12 0 0   100% 4 0   100%
src/footman/_schedule.py _make_status   100% 4 0 0   100% 2 0   100%
src/footman/_schedule.py _run_parallel   72% 57 16 0   70% 30 3   71%
src/footman/_schedule.py _run_parallel.dep_ok   100% 1 0 0   100% 0 0   100%
src/footman/_schedule.py _run_parallel.dep_lost   100% 2 0 0   100% 0 0   100%
src/footman/_schedule.py _run_parallel.dep_lost.lost   100% 1 0 0   100% 0 0   100%
src/footman/_schedule.py _run_parallel.run_node   100% 15 0 0   100% 8 0   100%
src/footman/_schedule.py (no function)   100% 60 0 0   100% 0 0   100%
src/footman/_script.py read_block   100% 14 0 0   100% 4 0   100%
src/footman/_script.py _canonical   100% 6 0 0   100% 4 0   100%
src/footman/_script.py declares   100% 5 0 0   100% 2 0   100%
src/footman/_script.py sync_argv   100% 6 0 0   100% 4 0   100%
src/footman/_script.py find_argv   100% 1 0 0   100% 0 0   100%
src/footman/_script.py find_uv   100% 8 0 0   75% 4 1   92%
src/footman/_script.py child_python   84% 19 3 0   90% 10 1   86%
src/footman/_script.py reexec_child   100% 3 0 0   100% 0 0   100%
src/footman/_script.py maybe_reexec   100% 5 0 0   100% 4 0   100%
src/footman/_script.py locked_project   100% 1 0 0   100% 0 0   100%
src/footman/_script.py pins_dist   67% 6 2 0   100% 0 0   67%
src/footman/_script.py inside   67% 3 1 0   100% 0 0   67%
src/footman/_script.py import_caused   100% 8 0 0   100% 4 0   100%
src/footman/_script.py project_home   100% 4 0 0   100% 2 0   100%
src/footman/_script.py venv_python   100% 3 0 0   100% 2 0   100%
src/footman/_script.py heal_project   75% 8 2 0   100% 2 0   80%
src/footman/_script.py project_reexec   100% 13 0 0   100% 10 0   100%
src/footman/_script.py (no function)   100% 28 0 0   100% 0 0   100%
src/footman/_shellcomp.py script_for   100% 2 0 0   100% 0 0   100%
src/footman/_shellcomp.py _sniff_encoding   100% 8 0 0   100% 2 0   100%
src/footman/_shellcomp.py _append_once   88% 17 2 0   100% 2 0   89%
src/footman/_shellcomp.py _manual_hint   100% 1 0 0   100% 0 0   100%
src/footman/_shellcomp.py _remove_once   89% 19 2 0   100% 4 0   91%
src/footman/_shellcomp.py _zsh_rc   100% 3 0 0   100% 0 0   100%
src/footman/_shellcomp.py _bash_rcs   100% 7 0 0   100% 2 0   100%
src/footman/_shellcomp.py detect_shell   100% 5 0 0   100% 4 0   100%
src/footman/_shellcomp.py _detect_posix   81% 21 4 0   88% 8 1   83%
src/footman/_shellcomp.py _ask_shell   45% 11 6 0   50% 6 1   47%
src/footman/_shellcomp.py _pwsh_profiles   100% 8 0 0   100% 6 0   100%
src/footman/_shellcomp.py _nu_config_path   75% 4 1 0   50% 2 1   67%
src/footman/_shellcomp.py _bash_path   90% 10 1 0   83% 6 1   88%
src/footman/_shellcomp.py install   100% 23 0 0   100% 12 0   100%
src/footman/_shellcomp.py hook_path   100% 4 0 0   100% 2 0   100%
src/footman/_shellcomp.py uninstall   100% 31 0 0   100% 18 0   100%
src/footman/_shellcomp.py (no function)   100% 33 0 0   100% 0 0   100%
src/footman/_signals.py Stop.__init__   100% 3 0 0   100% 0 0   100%
src/footman/_signals.py _bindings   100% 3 0 0   100% 2 0   100%
src/footman/_signals.py _handler   100% 2 0 0   100% 0 0   100%
src/footman/_signals.py _handler.stop   100% 4 0 0   100% 2 0   100%
src/footman/_signals.py _seconds_from_env   100% 12 0 0   100% 4 0   100%
src/footman/_signals.py _arm_dump   100% 9 0 0   100% 4 0   100%
src/footman/_signals.py _disarm_dump   100% 6 0 0   100% 4 0   100%
src/footman/_signals.py installed   100% 14 0 0   83% 6 1   95%
src/footman/_signals.py (no function)   100% 22 0 0   100% 0 0   100%
src/footman/_split.py _close1   80% 15 3 0   70% 10 3   76%
src/footman/_split.py _did_you_mean   100% 2 0 0   100% 0 0   100%
src/footman/_split.py _owners_of   100% 4 0 0   100% 0 0   100%
src/footman/_split.py _owners_of.walk   100% 5 0 0   100% 6 0   100%
src/footman/_split.py _unknown_global   100% 20 0 0   100% 14 0   100%
src/footman/_split.py _unexposed   100% 4 0 0   100% 2 0   100%
src/footman/_split.py _misplaced_global   100% 6 0 0   100% 2 0   100%
src/footman/_split.py _default_jobs   100% 2 0 0   100% 0 0   100%
src/footman/_split.py _CoreOption.__init__   100% 9 0 0   100% 2 0   100%
src/footman/_split.py _CoreOption._register   100% 0 0 0   100% 0 0   100%
src/footman/_split.py _color_from_env   100% 6 0 0   100% 4 0   100%
src/footman/_split.py _rows   100% 13 0 0   100% 8 0   100%
src/footman/_split.py _vouched_distributions   100% 3 0 0   100% 0 0   100%
src/footman/_split.py _own_plugin_flags   78% 23 5 0   88% 8 1   81%
src/footman/_split.py global_default   100% 10 0 0   100% 8 0   100%
src/footman/_split.py _required_label   100% 2 0 0   100% 0 0   100%
src/footman/_split.py _suggest_only   100% 1 0 0   100% 0 0   100%
src/footman/_split.py _check   100% 19 0 0   100% 16 0   100%
src/footman/_split.py _check_path   100% 3 0 0   100% 2 0   100%
src/footman/_split.py _check_bounds   86% 7 1 0   75% 4 1   82%
src/footman/_split.py live_choices   86% 7 1 0   75% 4 1   82%
src/footman/_split.py _validate   100% 8 0 0   100% 2 0   100%
src/footman/_split.py _check_arity   100% 8 0 0   100% 6 0   100%
src/footman/_split.py _follower   75% 4 1 0   50% 2 1   67%
src/footman/_split.py _expects_value   75% 4 1 0   50% 2 1   67%
src/footman/_split.py _hint_attachment   100% 10 0 0   100% 4 0   100%
src/footman/_split.py _parse_globals   100% 25 0 0   100% 16 0   100%
src/footman/_split.py flat_addresses   100% 4 0 0   100% 0 0   100%
src/footman/_split.py flat_addresses.walk   88% 8 1 0   88% 8 1   88%
src/footman/_split.py _children   100% 2 0 0   100% 0 0   100%
src/footman/_split.py _resolve_head   86% 73 10 0   86% 42 4   86%
src/footman/_split.py _default_notes   81% 21 4 0   72% 18 3   77%
src/footman/_split.py split_chain   100% 71 0 0   100% 34 0   100%
src/footman/_split.py _consume_option   95% 39 2 0   88% 26 3   92%
src/footman/_split.py _values   100% 3 0 0   100% 2 0   100%
src/footman/_split.py _consume_pair   100% 7 0 0   100% 2 0   100%
src/footman/_split.py _is_address   73% 11 3 0   62% 8 3   68%
src/footman/_split.py _consume_positional   100% 9 0 0   100% 6 0   100%
src/footman/_split.py (no function)   100% 86 0 0   100% 0 0   100%
src/footman/_step.py WorkItem.__init__   100% 7 0 0   100% 2 0   100%
src/footman/_step.py WorkItem.__name__   100% 1 0 0   100% 0 0   100%
src/footman/_step.py WorkItem.__call__   100% 2 0 0   100% 0 0   100%
src/footman/_step.py WorkItem.__repr__   100% 1 0 0   100% 0 0   100%
src/footman/_step.py StepFn.__init__   100% 5 0 0   100% 0 0   100%
src/footman/_step.py StepFn.__name__   100% 4 0 0   100% 2 0   100%
src/footman/_step.py StepFn.__call__   100% 1 0 0   100% 0 0   100%
src/footman/_step.py StepFn.opts   100% 10 0 0   100% 6 0   100%
src/footman/_step.py StepFn.pre_record   100% 2 0 0   100% 0 0   100%
src/footman/_step.py StepFn.post_step   100% 2 0 0   100% 0 0   100%
src/footman/_step.py _StepBlock.__init__   100% 2 0 0   100% 0 0   100%
src/footman/_step.py _StepBlock.__enter__   100% 2 0 0   100% 0 0   100%
src/footman/_step.py _StepBlock.__exit__   100% 10 0 0   100% 2 0   100%
src/footman/_step.py step   100% 0 0 1   100% 0 0   100%
src/footman/_step.py step   100% 0 0 1   100% 0 0   100%
src/footman/_step.py step   100% 0 0 1   100% 0 0   100%
src/footman/_step.py step   83% 12 2 0   80% 10 2   82%
src/footman/_step.py _pump   91% 122 11 0   94% 50 3   92%
src/footman/_step.py _pump.drive   93% 30 2 0   93% 14 1   93%
src/footman/_step.py (no function)   100% 38 0 8   100% 0 0   100%
src/footman/_suggest.py _maybe_reexec   100% 8 0 0   100% 2 0   100%
src/footman/_suggest.py _fresh   100% 2 0 0   100% 0 0   100%
src/footman/_suggest.py _values   86% 22 3 0   75% 12 3   82%
src/footman/_suggest.py _global_values   94% 16 1 0   88% 8 1   92%
src/footman/_suggest.py main   84% 37 6 0   65% 20 7   77%
src/footman/_suggest.py (no function)   100% 11 0 4   100% 0 0   100%
src/footman/app.py _prefix_from   90% 10 1 0   75% 8 2   83%
src/footman/app.py Brand.prefix   100% 1 0 0   100% 0 0   100%
src/footman/app.py Brand.config_stem   100% 1 0 0   100% 0 0   100%
src/footman/app.py Brand.env   100% 1 0 0   100% 0 0   100%
src/footman/app.py Brand.config_file   100% 1 0 0   100% 0 0   100%
src/footman/app.py Brand.install   100% 2 0 0   100% 0 0   100%
src/footman/app.py App.__init__   100% 4 0 0   100% 2 0   100%
src/footman/app.py App.run   85% 26 4 0   83% 6 1   84%
src/footman/app.py (no function)   100% 32 0 0   100% 0 0   100%
src/footman/compose.py _declares_tasks   100% 1 0 0   100% 0 0   100%
src/footman/compose.py _tree_of_module   91% 11 1 0   88% 8 1   89%
src/footman/compose.py _reconstruct   100% 20 0 0   89% 18 2   95%
src/footman/compose.py _adopt_explicit_group   100% 5 0 0   100% 2 0   100%
src/footman/compose.py _import_source   100% 18 0 0   100% 10 0   100%
src/footman/compose.py _fork   100% 7 0 0   100% 2 0   100%
src/footman/compose.py _stamp   100% 5 0 0   100% 4 0   100%
src/footman/compose.py _walk_subpath   100% 12 0 0   100% 6 0   100%
src/footman/compose.py _load_entry_point   97% 30 1 0   100% 14 0   98%
src/footman/compose.py _resolve_plugin   65% 20 7 0   75% 4 1   67%
src/footman/compose.py _resolve_module   96% 27 1 0   93% 14 1   95%
src/footman/compose.py _vivify_into   100% 19 0 0   100% 12 0   100%
src/footman/compose.py _merge_group   61% 31 12 0   58% 24 2   60%
src/footman/compose.py _merge_group.clash   100% 2 0 0   100% 0 0   100%
src/footman/compose.py _validate_filter   100% 15 0 0   100% 8 0   100%
src/footman/compose.py _keep_tree   100% 11 0 0   100% 8 0   100%
src/footman/compose.py _apply_only   100% 10 0 0   100% 10 0   100%
src/footman/compose.py _remove   88% 8 1 0   75% 4 1   83%
src/footman/compose.py _drop_empty   100% 4 0 0   100% 4 0   100%
src/footman/compose.py _prune   100% 7 0 0   100% 6 0   100%
src/footman/compose.py _mount   97% 36 1 0   96% 24 1   97%
src/footman/compose.py plugin   100% 2 0 0   100% 0 0   100%
src/footman/compose.py include   100% 9 0 0   100% 4 0   100%
src/footman/compose.py (no function)   100% 32 0 0   100% 0 0   100%
src/footman/context.py _audit_entry   100% 1 0 0   100% 0 0   100%
src/footman/context.py Argv.posix   100% 1 0 0   100% 0 0   100%
src/footman/context.py Argv.windows   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.__new__   100% 15 0 0   100% 0 0   100%
src/footman/context.py Result.to_argv   100% 3 0 0   100% 2 0   100%
src/footman/context.py Result.command   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.shown   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.stdout   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.stderr   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.duration   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.started   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.raw   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.timed_out   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.address   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.audit   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.env   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.cwd   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.__setattr__   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.code   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.ok   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.output   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.failed_at   100% 1 0 0   100% 0 0   100%
src/footman/context.py Result.work_code   100% 1 0 0   100% 0 0   100%
src/footman/context.py _failed_moment   83% 6 1 0   83% 6 1   83%
src/footman/context.py _earned_code   100% 4 0 0   100% 2 0   100%
src/footman/context.py ResultView.__init__   100% 9 0 0   100% 0 0   100%
src/footman/context.py ResultView.title   100% 1 0 0   100% 0 0   100%
src/footman/context.py ResultView.title   100% 2 0 0   100% 0 0   100%
src/footman/context.py ResultView.code   100% 1 0 0   100% 0 0   100%
src/footman/context.py ResultView.code   100% 2 0 0   100% 0 0   100%
src/footman/context.py ResultView.ok   100% 1 0 0   100% 0 0   100%
src/footman/context.py ResultView.stdout   100% 1 0 0   100% 0 0   100%
src/footman/context.py ResultView.stderr   0% 1 1 0   100% 0 0   0%
src/footman/context.py ResultView.output   0% 1 1 0   100% 0 0   0%
src/footman/context.py ResultView.duration   100% 1 0 0   100% 0 0   100%
src/footman/context.py ResultView.raw   0% 1 1 0   100% 0 0   0%
src/footman/context.py ResultView.command   0% 1 1 0   100% 0 0   0%
src/footman/context.py ResultView.returned   100% 1 0 0   100% 0 0   100%
src/footman/context.py ResultView.set_returned   100% 2 0 0   100% 0 0   100%
src/footman/context.py ResultView._fill   100% 3 0 0   100% 0 0   100%
src/footman/context.py Context.time_left   100% 3 0 0   100% 2 0   100%
src/footman/context.py Context.overdue   100% 1 0 0   100% 0 0   100%
src/footman/context.py Context.child   100% 4 0 0   100% 2 0   100%
src/footman/context.py current   100% 2 0 0   100% 0 0   100%
src/footman/context.py _SectionTimer.__init__   100% 4 0 0   100% 0 0   100%
src/footman/context.py _SectionTimer.__enter__   100% 2 0 0   100% 0 0   100%
src/footman/context.py _SectionTimer.__exit__   100% 1 0 0   100% 0 0   100%
src/footman/context.py _profiled_ctx   100% 4 0 0   100% 2 0   100%
src/footman/context.py _run_clock   100% 7 0 0   100% 4 0   100%
src/footman/context.py section   100% 1 0 0   100% 0 0   100%
src/footman/context.py mark   100% 2 0 0   100% 0 0   100%
src/footman/context.py Stream.__init__   100% 2 0 0   100% 0 0   100%
src/footman/context.py Stream.section   100% 0 0 1   100% 0 0   100%
src/footman/context.py Stream.section   100% 0 0 1   100% 0 0   100%
src/footman/context.py Stream.section   100% 11 0 0   100% 6 0   100%
src/footman/context.py stream   100% 3 0 0   100% 2 0   100%
src/footman/context.py chdir   77% 31 7 0   72% 18 5   76%
src/footman/context.py cache_dir   100% 2 0 0   100% 0 0   100%
src/footman/context.py data_dir   100% 2 0 0   100% 0 0   100%
src/footman/context.py prog   100% 2 0 0   100% 0 0   100%
src/footman/context.py dist   100% 2 0 0   100% 0 0   100%
src/footman/context.py config_dir   100% 2 0 0   100% 0 0   100%
src/footman/context.py config_file   100% 2 0 0   100% 0 0   100%
src/footman/context.py user_tasks_file   100% 2 0 0   100% 0 0   100%
src/footman/context.py project_root   100% 2 0 0   100% 0 0   100%
src/footman/context.py _make   100% 4 0 0   100% 2 0   100%
src/footman/context.py cwd   100% 2 0 0   100% 0 0   100%
src/footman/context.py use_context   100% 5 0 0   100% 0 0   100%
src/footman/context.py passthrough   100% 1 0 0   100% 0 0   100%
src/footman/context.py given   100% 11 0 0   100% 4 0   100%
src/footman/context.py attended   100% 2 0 0   100% 0 0   100%
src/footman/context.py tty   100% 1 0 0   100% 0 0   100%
src/footman/context.py colored   100% 1 0 0   100% 0 0   100%
src/footman/context.py progress   100% 9 0 0   100% 4 0   100%
src/footman/context.py track   100% 11 0 0   62% 8 3   84%
src/footman/context.py inherited   91% 11 1 0   75% 4 1   87%
src/footman/context.py inherited.call_inherited   100% 7 0 0   100% 0 0   100%
src/footman/context.py RunFailed.__init__   100% 2 0 0   100% 0 0   100%
src/footman/context.py RunTimeout.__init__   100% 3 0 0   100% 0 0   100%
src/footman/context.py CommandNotFound.__init__   100% 2 0 0   100% 0 0   100%
src/footman/context.py Failed.__init__   100% 3 0 0   100% 0 0   100%
src/footman/context.py effective_timeout   80% 5 1 0   75% 4 1   78%
src/footman/context.py TimedOut.__init__   92% 12 1 0   75% 4 1   88%
src/footman/context.py coroutine_refusal   100% 6 0 0   50% 4 2   80%
src/footman/context.py generator_refusal   100% 10 0 0   67% 6 2   88%
src/footman/context.py fail   100% 3 0 0   100% 2 0   100%
src/footman/context.py _is_deliberate_stop   100% 1 0 0   100% 0 0   100%
src/footman/context.py _was_expected   100% 1 0 0   100% 0 0   100%
src/footman/context.py context_param_name   100% 7 0 0   100% 4 0   100%
src/footman/context.py Status.unit_added   100% 0 0 1   100% 0 0   100%
src/footman/context.py Status.unit_started   100% 0 0 1   100% 0 0   100%
src/footman/context.py Status.unit_counted   100% 0 0 1   100% 0 0   100%
src/footman/context.py Status.unit_finished   100% 0 0 1   100% 0 0   100%
src/footman/context.py Status.unit_skipped   100% 0 0 1   100% 0 0   100%
src/footman/context.py Status.notify   100% 0 0 1   100% 0 0   100%
src/footman/context.py Status.suspend   100% 0 0 1   100% 0 0   100%
src/footman/context.py Status.resume   100% 0 0 1   100% 0 0   100%
src/footman/context.py seed_cmd_width   100% 1 0 0   100% 0 0   100%
src/footman/context.py cmd_width   100% 1 0 0   100% 0 0   100%
src/footman/context.py _observe_cmd   100% 3 0 0   100% 0 0   100%
src/footman/context.py set_status   100% 1 0 0   100% 0 0   100%
src/footman/context.py active_status   100% 1 0 0   100% 0 0   100%
src/footman/context.py _Router.__init__   67% 6 2 0   100% 0 0   67%
src/footman/context.py _Router._sink   100% 2 0 0   100% 0 0   100%
src/footman/context.py _Router.write   83% 6 1 0   75% 4 1   80%
src/footman/context.py _Router.flush   100% 1 0 0   100% 0 0   100%
src/footman/context.py _Router.isatty   100% 1 0 0   100% 0 0   100%
src/footman/context.py _Router.__getattr__   100% 1 0 0   100% 0 0   100%
src/footman/context.py real_stdout   100% 1 0 0   100% 0 0   100%
src/footman/context.py real_stderr   100% 1 0 0   100% 0 0   100%
src/footman/context.py real_stdin   100% 2 0 0   100% 0 0   100%
src/footman/context.py stdin_payload   33% 9 6 0   25% 4 1   31%
src/footman/context.py _Answers.__init__   100% 6 0 0   100% 2 0   100%
src/footman/context.py _Answers._key   78% 9 2 0   100% 4 0   85%
src/footman/context.py _Answers._checked   100% 9 0 0   100% 8 0   100%
src/footman/context.py _Answers.answer   100% 22 0 0   100% 16 0   100%
src/footman/context.py _inject_answers   100% 3 0 0   100% 0 0   100%
src/footman/context.py _scripted_answer   71% 7 2 0   75% 4 1   73%
src/footman/context.py _inject_stdin   100% 3 0 0   100% 0 0   100%
src/footman/context.py _restore_stdin_payload   100% 1 0 0   100% 0 0   100%
src/footman/context.py _stdin_is_tty   50% 4 2 0   100% 0 0   50%
src/footman/context.py _scrub   100% 1 0 0   100% 0 0   100%
src/footman/context.py _prompt_core   72% 25 7 0   75% 12 3   73%
src/footman/context.py _guard_interactive   100% 4 0 0   100% 2 0   100%
src/footman/context.py _refuse_prompt_markers   100% 4 0 0   100% 2 0   100%
src/footman/context.py prompt   100% 0 0 1   100% 0 0   100%
src/footman/context.py prompt   100% 0 0 1   100% 0 0   100%
src/footman/context.py prompt   100% 0 0 1   100% 0 0   100%
src/footman/context.py prompt   100% 30 0 0   100% 14 0   100%
src/footman/context.py confirm   100% 7 0 0   100% 4 0   100%
src/footman/context.py select   100% 0 0 1   100% 0 0   100%
src/footman/context.py select   100% 0 0 1   100% 0 0   100%
src/footman/context.py select   100% 0 0 1   100% 0 0   100%
src/footman/context.py select   100% 0 0 1   100% 0 0   100%
src/footman/context.py select   100% 2 0 0   100% 0 0   100%
src/footman/context.py _select_core   86% 28 4 0   75% 16 4   82%
src/footman/context.py _parse_one   100% 7 0 0   100% 2 0   100%
src/footman/context.py _parse_multi   100% 6 0 0   100% 4 0   100%
src/footman/context.py routing   100% 13 0 0   100% 4 0   100%
src/footman/context.py _is_code   100% 1 0 0   100% 0 0   100%
src/footman/context.py Invocation.text   100% 4 0 0   100% 2 0   100%
src/footman/context.py Invocation.painted   100% 4 0 0   100% 2 0   100%
src/footman/context.py _shell_quote   100% 3 0 0   100% 2 0   100%
src/footman/context.py argv_tokens   100% 6 0 0   100% 4 0   100%
src/footman/context.py container_error   88% 8 1 0   75% 4 1   83%
src/footman/context.py _exact   80% 5 1 0   75% 4 1   78%
src/footman/context.py _label   50% 4 2 0   50% 2 1   50%
src/footman/context.py _shown   100% 3 0 0   100% 0 0   100%
src/footman/context.py _exit_code   0% 1 1 0   100% 0 0   0%
src/footman/context.py _call_for_code   57% 7 3 0   50% 2 1   56%
src/footman/context.py _process_state   82% 11 2 0   50% 2 1   77%
src/footman/context.py _env_overlay   100% 5 0 0   100% 0 0   100%
src/footman/context.py _run_callable   93% 14 1 0   83% 6 1   90%
src/footman/context.py _leaf   100% 11 0 0   100% 6 0   100%
src/footman/context.py _next_label   100% 3 0 0   100% 0 0   100%
src/footman/context.py _addr_leaf   100% 7 0 0   100% 4 0   100%
src/footman/context.py _child_address   100% 2 0 0   100% 0 0   100%
src/footman/context.py _captured_streams   100% 10 0 0   100% 2 0   100%
src/footman/context.py abort_reaches   100% 1 0 0   100% 0 0   100%
src/footman/context.py _kill_tree   100% 8 0 0   100% 4 0   100%
src/footman/context.py _register_child   100% 5 0 0   100% 2 0   100%
src/footman/context.py _forget_child   100% 2 0 0   100% 0 0   100%
src/footman/context.py reset_abort   100% 2 0 0   100% 0 0   100%
src/footman/context.py terminate_live_children   100% 11 0 0   100% 6 0   100%
src/footman/context.py terminate_live_children._escalate   100% 4 0 0   100% 4 0   100%
src/footman/context.py _argv0   33% 6 4 0   25% 4 1   30%
src/footman/context.py _run_subprocess   92% 39 3 0   100% 18 0   95%
src/footman/context.py _dim   100% 1 0 0   100% 0 0   100%
src/footman/context.py _colored   100% 5 0 0   100% 4 0   100%
src/footman/context.py color_env   100% 3 0 0   100% 2 0   100%
src/footman/context.py run_colour_on   100% 4 0 0   100% 2 0   100%
src/footman/context.py color_environment   100% 10 0 0   100% 6 0   100%
src/footman/context.py _name_col   100% 6 0 0   100% 2 0   100%
src/footman/context.py _step_line   100% 11 0 0   100% 2 0   100%
src/footman/context.py _shell_operator   100% 5 0 0   100% 0 0   100%
src/footman/context.py _find_exe   100% 5 0 0   100% 4 0   100%
src/footman/context.py _resolve_shell   100% 24 0 0   100% 18 0   100%
src/footman/context.py _shell_kind_of   100% 1 0 0   100% 0 0   100%
src/footman/context.py _shell_prep   100% 11 0 0   88% 8 1   95%
src/footman/context.py _target_cwd   100% 13 0 0   100% 10 0   100%
src/footman/context.py _reviewed   100% 12 0 0   100% 2 0   100%
src/footman/context.py run   95% 129 6 0   96% 72 3   96%
src/footman/context.py _call_name   100% 4 0 0   100% 2 0   100%
src/footman/context.py Pending.__init__   100% 1 0 0   100% 0 0   100%
src/footman/context.py Pending._refuse   100% 1 0 0   100% 0 0   100%
src/footman/context.py Pending.__str__   0% 1 1 0   100% 0 0   0%
src/footman/context.py Pending.__eq__   0% 1 1 0   100% 0 0   0%
src/footman/context.py Pending.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/context.py Fanout.__init__   100% 8 0 0   100% 0 0   100%
src/footman/context.py Fanout.__enter__   100% 4 0 0   100% 0 0   100%
src/footman/context.py Fanout.__call__   88% 8 1 0   75% 4 1   83%
src/footman/context.py Fanout.__exit__   100% 15 0 0   100% 4 0   100%
src/footman/context.py Fanout.__exit__.thunk   100% 3 0 0   100% 0 0   100%
src/footman/context.py Fanout.__exit__.thunk.run   100% 5 0 0   100% 0 0   100%
src/footman/context.py _queue_call   100% 6 0 0   100% 2 0   100%
src/footman/context.py parallel   100% 0 0 1   100% 0 0   100%
src/footman/context.py parallel   100% 0 0 1   100% 0 0   100%
src/footman/context.py parallel   100% 17 0 0   100% 10 0   100%
src/footman/context.py _run_thunks   100% 27 0 0   100% 12 0   100%
src/footman/context.py _run_thunks.invoke   79% 43 9 0   75% 12 1   78%
src/footman/context.py (no function)   100% 419 0 66   100% 0 0   100%
src/footman/docstrings.py parse   95% 22 1 0   93% 14 1   94%
src/footman/docstrings.py _opens_with_section   100% 5 0 0   100% 2 0   100%
src/footman/docstrings.py _reindented   86% 7 1 0   75% 4 1   82%
src/footman/docstrings.py _long_end   89% 9 1 0   88% 8 1   88%
src/footman/docstrings.py _find_google   100% 6 0 0   100% 6 0   100%
src/footman/docstrings.py _find_numpy   100% 4 0 0   100% 4 0   100%
src/footman/docstrings.py _find_sphinx   100% 4 0 0   100% 4 0   100%
src/footman/docstrings.py _prose   100% 5 0 0   100% 4 0   100%
src/footman/docstrings.py _indent   100% 1 0 0   100% 0 0   100%
src/footman/docstrings.py _clean_name   100% 1 0 0   100% 0 0   100%
src/footman/docstrings.py _join   100% 1 0 0   100% 0 0   100%
src/footman/docstrings.py _store   100% 2 0 0   100% 2 0   100%
src/footman/docstrings.py _google_params   100% 22 0 0   100% 8 0   100%
src/footman/docstrings.py _numpy_params   100% 27 0 0   100% 10 0   100%
src/footman/docstrings.py _numpy_params.flush   100% 2 0 0   100% 2 0   100%
src/footman/docstrings.py _sphinx_params   100% 21 0 0   100% 10 0   100%
src/footman/docstrings.py _google_returns   100% 6 0 0   100% 4 0   100%
src/footman/docstrings.py _until_dedent   100% 6 0 0   100% 4 0   100%
src/footman/docstrings.py _numpy_returns   100% 15 0 0   100% 10 0   100%
src/footman/docstrings.py _sphinx_returns   100% 12 0 0   100% 8 0   100%
src/footman/docstrings.py (no function)   100% 45 0 0   100% 0 0   100%
src/footman/env_files.py load   100% 15 0 0   88% 8 1   96%
src/footman/env_files.py (no function)   100% 9 0 0   100% 0 0   100%
src/footman/invocation.py Invocation.__init__   100% 17 0 0   100% 0 0   100%
src/footman/invocation.py Invocation.freeze   100% 1 0 0   100% 0 0   100%
src/footman/invocation.py Invocation.__setattr__   100% 3 0 0   100% 2 0   100%
src/footman/invocation.py Invocation.__repr__   0% 2 2 0   100% 0 0   0%
src/footman/invocation.py (no function)   100% 15 0 2   100% 0 0   100%
src/footman/markdown.py branded   100% 2 0 0   100% 0 0   100%
src/footman/markdown.py config_table   100% 7 0 0   100% 0 0   100%
src/footman/markdown.py notes_table   100% 10 0 0   100% 2 0   100%
src/footman/markdown.py globals_table   100% 12 0 0   100% 2 0   100%
src/footman/markdown.py render_page   100% 5 0 0   100% 2 0   100%
src/footman/markdown.py render_site   100% 8 0 0   100% 2 0   100%
src/footman/markdown.py _resolve   100% 10 0 0   100% 6 0   100%
src/footman/markdown.py _slug   100% 1 0 0   100% 0 0   100%
src/footman/markdown.py _cell   100% 1 0 0   100% 0 0   100%
src/footman/markdown.py _h   100% 2 0 0   100% 0 0   100%
src/footman/markdown.py _type_cell   87% 15 2 0   83% 12 2   85%
src/footman/markdown.py _default_cell   100% 5 0 0   100% 4 0   100%
src/footman/markdown.py _returns_section   100% 16 0 0   100% 8 0   100%
src/footman/markdown.py _task_page   100% 26 0 0   100% 14 0   100%
src/footman/markdown.py _group_page   100% 9 0 0   100% 6 0   100%
src/footman/markdown.py _site_group   100% 16 0 0   88% 8 1   96%
src/footman/markdown.py (no function)   100% 21 0 0   100% 0 0   100%
src/footman/params.py Secret.__repr__   100% 1 0 0   100% 0 0   100%
src/footman/params.py Secret.reveal   100% 1 0 0   100% 0 0   100%
src/footman/params.py suggest.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py _takes_an_argument   67% 6 2 0   100% 0 0   67%
src/footman/params.py default.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py NoSplitMarker.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py HiddenMarker.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py ForwardMarker.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py ArgMarker.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py PathRequirement.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py PathRequirement.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py matching.__init__   67% 3 1 0   50% 2 1   60%
src/footman/params.py matching.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py between.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py env.__init__   100% 1 0 0   100% 0 0   100%
src/footman/params.py stdin.__init__   100% 4 0 0   100% 2 0   100%
src/footman/params.py StdoutMarker.__repr__   0% 1 1 0   100% 0 0   0%
src/footman/params.py check.__init__   100% 1 0 0   100% 0 0   100%
src/footman/params.py doc.__init__   100% 1 0 0   100% 0 0   100%
src/footman/params.py ask.__init__   100% 2 0 0   100% 0 0   100%
src/footman/params.py (no function)   100% 99 0 18   100% 0 0   100%
src/footman/profile.py arm   100% 6 0 0   100% 2 0   100%
src/footman/profile.py _sweep_orphan   0% 2 2 0   0% 2 0   0%
src/footman/profile.py _nests   100% 12 0 0   100% 6 0   100%
src/footman/profile.py _events   94% 50 3 0   91% 22 2   93%
src/footman/profile.py _events.us   100% 1 0 0   100% 0 0   100%
src/footman/profile.py _sweep_children   88% 24 3 0   75% 12 3   83%
src/footman/profile.py write   100% 12 0 0   100% 2 0   100%
src/footman/profile.py _self_ts   100% 2 0 0   100% 0 0   100%
src/footman/profile.py (no function)   100% 27 0 0   100% 0 0   100%
src/footman/pytest_plugin.py fm   100% 2 0 0   100% 0 0   100%
src/footman/pytest_plugin.py fm_project   100% 3 0 0   100% 0 0   100%
src/footman/pytest_plugin.py fm_project.make   100% 5 0 0   100% 0 0   100%
src/footman/pytest_plugin.py fm_record   100% 3 0 0   100% 0 0   100%
src/footman/pytest_plugin.py pytest_configure   100% 4 0 0   100% 2 0   100%
src/footman/pytest_plugin.py _TraceRecorder.__init__   100% 3 0 0   100% 0 0   100%
src/footman/pytest_plugin.py _TraceRecorder._tid   100% 1 0 0   100% 0 0   100%
src/footman/pytest_plugin.py _TraceRecorder.pytest_runtest_logreport   100% 7 0 0   100% 2 0   100%
src/footman/pytest_plugin.py _TraceRecorder.pytest_sessionfinish   100% 14 0 0   100% 4 0   100%
src/footman/pytest_plugin.py (no function)   100% 17 0 5   100% 0 0   100%
src/footman/registry.py _note_contribution   100% 2 0 0   100% 0 0   100%
src/footman/registry.py GlobalOption.__init__   94% 17 1 0   50% 2 1   89%
src/footman/registry.py GlobalOption._register   100% 1 0 0   100% 0 0   100%
src/footman/registry.py GlobalOption.value   100% 4 0 0   100% 2 0   100%
src/footman/registry.py GlobalOption.given   75% 4 1 0   50% 2 1   67%
src/footman/registry.py GlobalOption._mark_read   100% 9 0 0   100% 4 0   100%
src/footman/registry.py GlobalOption._as_parameter   100% 2 0 0   100% 0 0   100%
src/footman/registry.py GlobalOption.__repr__   0% 2 2 0   100% 0 0   0%
src/footman/registry.py config_section   100% 3 0 0   100% 0 0   100%
src/footman/registry.py _note_if_ephemeral   100% 4 0 0   100% 2 0   100%
src/footman/registry.py task_uses   100% 1 0 0   100% 0 0   100%
src/footman/registry.py validate_global_options   100% 15 0 0   100% 10 0   100%
src/footman/registry.py _resolve_config_sections   100% 17 0 0   100% 12 0   100%
src/footman/registry.py release_global_options   100% 4 0 0   100% 2 0   100%
src/footman/registry.py orphan_global_options   93% 14 1 0   83% 6 1   90%
src/footman/registry.py orphan_global_options._walk   100% 5 0 0   100% 6 0   100%
src/footman/registry.py validate_lanes   100% 6 0 0   100% 4 0   100%
src/footman/registry.py _validate_cwd   100% 6 0 0   100% 4 0   100%
src/footman/registry.py _validate_rel   100% 4 0 0   100% 2 0   100%
src/footman/registry.py task_name   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _checked_expose   100% 3 0 0   100% 2 0   100%
src/footman/registry.py expose   100% 3 0 1   100% 0 0   100%
src/footman/registry.py expose.mark   100% 2 0 0   100% 0 0   100%
src/footman/registry.py cli_name   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _isgeneratorfunction   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _check_hook_arity   75% 12 3 0   75% 4 1   75%
src/footman/registry.py _empty_body   80% 15 3 0   75% 4 1   79%
src/footman/registry.py _empty_body.inert   100% 1 0 0   100% 0 0   100%
src/footman/registry.py work_key   100% 6 0 0   100% 2 0   100%
src/footman/registry.py _opts_overrides   100% 18 0 0   100% 12 0   100%
src/footman/registry.py _Opted.__init__   100% 3 0 0   100% 0 0   100%
src/footman/registry.py _Opted.__getattr__   100% 4 0 0   100% 2 0   100%
src/footman/registry.py _Opted.__call__   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _Opted._plain_call   100% 13 0 0   100% 2 0   100%
src/footman/registry.py _Opted.opts   100% 4 0 0   100% 0 0   100%
src/footman/registry.py _Opted._dedup_key   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _TaskFn.__init__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _TaskFn.__call__   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _TaskFn.__getattr__   60% 5 2 0   100% 0 0   60%
src/footman/registry.py _TaskFn.opts   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _TaskFn.__repr__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py task_source   100% 2 0 0   100% 0 0   100%
src/footman/registry.py task_source_hash   78% 9 2 0   100% 0 0   78%
src/footman/registry.py task_source_file   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _apply_policy   100% 41 0 0   100% 38 0   100%
src/footman/registry.py own_hooks   100% 1 0 0   100% 0 0   100%
src/footman/registry.py has_own_hooks   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _attach_lifecycle   100% 9 0 0   100% 0 0   100%
src/footman/registry.py _attach_lifecycle._attacher   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _attach_lifecycle._attacher.attach   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _attach_lifecycle.wrap_task_sugar   92% 12 1 0   50% 2 1   86%
src/footman/registry.py _attach_lifecycle.wrap_task_sugar._spans   100% 4 0 0   100% 2 0   100%
src/footman/registry.py _attach_lifecycle.wrap_task_sugar._pre   67% 6 2 0   100% 0 0   67%
src/footman/registry.py _attach_lifecycle.wrap_task_sugar._post   78% 9 2 0   50% 2 1   73%
src/footman/registry.py _attach_lifecycle.wrap_bind_sugar   0% 15 15 0   0% 2 0   0%
src/footman/registry.py _attach_lifecycle.wrap_bind_sugar._spans   0% 4 4 0   0% 2 0   0%
src/footman/registry.py _attach_lifecycle.wrap_bind_sugar._bind   0% 6 6 0   100% 0 0   0%
src/footman/registry.py _attach_lifecycle.wrap_bind_sugar._enter   0% 10 10 0   0% 2 0   0%
src/footman/registry.py _attach_lifecycle.wrap_bind_sugar._post   0% 9 9 0   0% 2 0   0%
src/footman/registry.py TaskFn.__call__   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskFn.opts   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskFn.pre_bind   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskFn.pre_task   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskFn.pre_record   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskFn.post_task   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskFn.wrap_task   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskFn.wrap_bind   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskDecorator.__call__   100% 0 0 1   100% 0 0   100%
src/footman/registry.py TaskDecorator.__call__   100% 0 0 1   100% 0 0   100%
src/footman/registry.py GroupFactory.__call__   100% 0 0 1   100% 0 0   100%
src/footman/registry.py HookRegistrar.__call__   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.__init__   100% 8 0 0   100% 0 0   100%
src/footman/registry.py Group.default_task   100% 1 0 0   100% 0 0   100%
src/footman/registry.py Group._stamp_default   100% 6 0 0   100% 2 0   100%
src/footman/registry.py Group._free_ephemeral_key   100% 9 0 0   100% 6 0   100%
src/footman/registry.py Group._claim   100% 7 0 0   100% 6 0   100%
src/footman/registry.py Group._shadow_pulled   83% 6 1 0   75% 4 1   80%
src/footman/registry.py Group.task   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.task   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.task   100% 2 0 1   100% 0 0   100%
src/footman/registry.py Group.task.register   100% 19 0 0   100% 10 0   100%
src/footman/registry.py Group.group   88% 17 2 0   80% 10 2   85%
src/footman/registry.py Group.pre_tasks   100% 4 0 0   100% 0 0   100%
src/footman/registry.py Group.pre_bind   100% 4 0 0   100% 0 0   100%
src/footman/registry.py Group.post_tasks   100% 4 0 0   100% 0 0   100%
src/footman/registry.py Group.wrap_task   100% 14 0 0   100% 2 0   100%
src/footman/registry.py Group.wrap_task._pre   100% 6 0 0   100% 0 0   100%
src/footman/registry.py Group.wrap_task._post   100% 8 0 0   100% 2 0   100%
src/footman/registry.py Group.wrap_bind   100% 18 0 0   100% 2 0   100%
src/footman/registry.py Group.wrap_bind._bind_pre   67% 6 2 0   100% 0 0   67%
src/footman/registry.py Group.wrap_bind._pre   89% 9 1 0   50% 2 1   82%
src/footman/registry.py Group.wrap_bind._post   78% 18 4 0   62% 8 3   73%
src/footman/registry.py Group.pre_task   100% 4 0 0   100% 0 0   100%
src/footman/registry.py Group.post_task   100% 4 0 0   100% 0 0   100%
src/footman/registry.py Group.default   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.default   100% 0 0 1   100% 0 0   100%
src/footman/registry.py Group.default   100% 2 0 0   100% 0 0   100%
src/footman/registry.py Group.default.register   100% 6 0 0   100% 0 0   100%
src/footman/registry.py Group.opts   100% 1 0 0   100% 0 0   100%
src/footman/registry.py Group.__call__   100% 11 0 0   100% 8 0   100%
src/footman/registry.py reset   100% 4 0 0   100% 2 0   100%
src/footman/registry.py _importable   100% 5 0 0   100% 0 0   100%
src/footman/registry.py pre_deps   100% 1 0 0   100% 0 0   100%
src/footman/registry.py post_deps   100% 1 0 0   100% 0 0   100%
src/footman/registry.py mounted_from   67% 3 1 0   50% 2 1   60%
src/footman/registry.py default_group   100% 1 0 0   100% 0 0   100%
src/footman/registry.py fans_out   100% 1 0 0   100% 0 0   100%
src/footman/registry.py wants_progress   100% 5 0 0   100% 4 0   100%
src/footman/registry.py is_infinite   100% 1 0 0   100% 0 0   100%
src/footman/registry.py sharing   100% 1 0 0   100% 0 0   100%
src/footman/registry.py task_body   88% 8 1 0   83% 6 1   86%
src/footman/registry.py declared_hidden   100% 2 0 0   100% 0 0   100%
src/footman/registry.py declared_expose   100% 2 0 0   100% 0 0   100%
src/footman/registry.py seal_expose   100% 2 0 0   100% 0 0   100%
src/footman/registry.py seal_expose.walk   100% 6 0 0   100% 6 0   100%
src/footman/registry.py is_interactive   100% 1 0 0   100% 0 0   100%
src/footman/registry.py keeps_going   100% 1 0 0   100% 0 0   100%
src/footman/registry.py is_atomic   100% 1 0 0   100% 0 0   100%
src/footman/registry.py task_timeout   100% 2 0 0   100% 0 0   100%
src/footman/registry.py task_retries   100% 2 0 0   100% 0 0   100%
src/footman/registry.py task_confirm   100% 1 0 0   100% 0 0   100%
src/footman/registry.py task_cwd   100% 1 0 0   100% 0 0   100%
src/footman/registry.py task_rel   100% 1 0 0   100% 0 0   100%
src/footman/registry.py task_lane   100% 5 0 0   100% 4 0   100%
src/footman/registry.py _gate   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _gate.decorate   100% 2 0 0   100% 0 0   100%
src/footman/registry.py task_lanes   100% 1 0 0   100% 0 0   100%
src/footman/registry.py pre_record   100% 2 0 0   100% 0 0   100%
src/footman/registry.py pre_record.decorate   100% 2 0 0   100% 0 0   100%
src/footman/registry.py task_reviewers   100% 1 0 0   100% 0 0   100%
src/footman/registry.py requires   100% 2 0 1   100% 0 0   100%
src/footman/registry.py requires.check   100% 6 0 0   100% 0 0   100%
src/footman/registry.py requires_dep   100% 2 0 0   100% 0 0   100%
src/footman/registry.py requires_dep.check   100% 4 0 0   100% 2 0   100%
src/footman/registry.py requires_tool   100% 2 0 0   100% 0 0   100%
src/footman/registry.py requires_tool.check   100% 5 0 0   100% 2 0   100%
src/footman/registry.py requires_env   100% 2 0 0   100% 0 0   100%
src/footman/registry.py requires_env.check   100% 4 0 0   100% 2 0   100%
src/footman/registry.py availability   100% 2 0 0   100% 0 0   100%
src/footman/registry.py _as_fn   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.__init__   100% 7 0 0   100% 0 0   100%
src/footman/registry.py TaskView.path   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.address   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.mounted_from   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.pre   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.post   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.disabled   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.keep_going   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.atomic   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.infinite   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.interactive   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.hidden   0% 1 1 0   100% 0 0   0%
src/footman/registry.py TaskView.timed   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.confirm   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.defining_dir   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.shadowed   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.shadow_chain   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.source_file   50% 4 2 0   100% 0 0   50%
src/footman/registry.py TaskView.add_pre   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.add_post   100% 2 0 0   100% 0 0   100%
src/footman/registry.py TaskView.disable   100% 1 0 0   100% 0 0   100%
src/footman/registry.py TaskView.set_opts   100% 2 0 0   100% 2 0   100%
src/footman/registry.py Tasks.__init__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py Tasks.__iter__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py Tasks.get   100% 4 0 0   100% 2 0   100%
src/footman/registry.py Tasks.__getitem__   100% 3 0 0   100% 2 0   100%
src/footman/registry.py Tasks.__contains__   100% 1 0 0   100% 0 0   100%
src/footman/registry.py _task_views   100% 4 0 0   100% 4 0   100%
src/footman/registry.py capture   100% 9 0 0   100% 0 0   100%
src/footman/registry.py (no function)   100% 256 0 78   100% 0 0   100%
src/footman/tasks/__init__.py (no function)   100% 1 0 0   100% 0 0   100%
src/footman/tasks/docs.py invoking_prog   100% 1 0 0   100% 0 0   100%
src/footman/tasks/docs.py _project_tree   100% 14 0 0   100% 4 0   100%
src/footman/tasks/docs.py _prune_first_party   100% 7 0 0   100% 8 0   100%
src/footman/tasks/docs.py _path_of   100% 1 0 0   100% 0 0   100%
src/footman/tasks/docs.py page   100% 12 0 0   100% 2 0   100%
src/footman/tasks/docs.py site   85% 13 2 0   100% 2 0   87%
src/footman/tasks/docs.py reduce_frames   100% 3 0 0   100% 0 0   100%
src/footman/tasks/docs.py shots   95% 38 2 0   67% 6 2   91%
src/footman/tasks/docs.py keystrokes   100% 13 0 0   100% 10 0   100%
src/footman/tasks/docs.py _Descs.__init__   100% 1 0 0   100% 0 0   100%
src/footman/tasks/docs.py _Descs.feed   71% 7 2 0   50% 2 1   67%
src/footman/tasks/docs.py _answer_queries   100% 11 0 0   100% 14 0   100%
src/footman/tasks/docs.py _pty_session   95% 100 5 2   91% 32 3   94%
src/footman/tasks/docs.py _pty_session._own_the_tty   0% 2 2 0   100% 0 0   0%
src/footman/tasks/docs.py _cell_style   100% 19 0 0   100% 14 0   100%
src/footman/tasks/docs.py _cell_style.named   100% 1 0 0   100% 0 0   100%
src/footman/tasks/docs.py _event_screens   100% 12 0 0   100% 4 0   100%
src/footman/tasks/docs.py _screens   100% 14 0 0   100% 6 0   100%
src/footman/tasks/docs.py _luminance   100% 11 0 0   100% 2 0   100%
src/footman/tasks/docs.py _contrast   100% 2 0 0   100% 0 0   100%
src/footman/tasks/docs.py _with_caption   75% 8 2 0   50% 4 2   67%
src/footman/tasks/docs.py _xml_escape   100% 1 0 0   100% 0 0   100%
src/footman/tasks/docs.py compose_animation   100% 22 0 0   100% 2 0   100%
src/footman/tasks/docs.py _boot_shell   96% 27 1 0   90% 10 1   95%
src/footman/tasks/docs.py cast   89% 36 4 0   67% 18 6   81%
src/footman/tasks/docs.py errors   92% 40 3 0   86% 22 3   90%
src/footman/tasks/docs.py errors.template   100% 11 0 0   90% 10 1   95%
src/footman/tasks/docs.py config   75% 8 2 0   50% 2 1   70%
src/footman/tasks/docs.py notes   75% 8 2 0   50% 2 1   70%
src/footman/tasks/docs.py globals_   100% 8 0 0   100% 2 0   100%
src/footman/tasks/docs.py (no function)   100% 85 0 0   100% 0 0   100%
src/footman/tasks/new.py new   83% 6 1 0   50% 2 1   75%
src/footman/tasks/new.py (no function)   100% 7 0 0   100% 0 0   100%
src/footman/tasks/self_.py _uv   80% 5 1 0   50% 2 1   71%
src/footman/tasks/self_.py _dist   100% 1 0 0   100% 0 0   100%
src/footman/tasks/self_.py _tool_dir   75% 4 1 0   50% 2 1   67%
src/footman/tasks/self_.py _receipt_requirements   100% 9 0 0   100% 0 0   100%
src/footman/tasks/self_.py _extras   100% 2 0 0   100% 0 0   100%
src/footman/tasks/self_.py _added   50% 4 2 0   100% 0 0   50%
src/footman/tasks/self_.py _install   100% 4 0 0   100% 2 0   100%
src/footman/tasks/self_.py _rediscover   100% 7 0 0   100% 4 0   100%
src/footman/tasks/self_.py _candidates_in   21% 14 11 0   17% 6 1   20%
src/footman/tasks/self_.py install   100% 2 0 0   100% 0 0   100%
src/footman/tasks/self_.py add   100% 5 0 0   100% 4 0   100%
src/footman/tasks/self_.py remove   100% 9 0 0   100% 6 0   100%
src/footman/tasks/self_.py uninstall   100% 15 0 0   100% 12 0   100%
src/footman/tasks/self_.py _remove_hooks   100% 7 0 0   100% 4 0   100%
src/footman/tasks/self_.py path   100% 9 0 0   100% 6 0   100%
src/footman/tasks/self_.py (no function)   100% 34 0 0   100% 0 0   100%
src/footman/testing.py recording   100% 6 0 0   100% 2 0   100%
src/footman/testing.py InvokeResult.ok   100% 1 0 0   100% 0 0   100%
src/footman/testing.py _isolated   100% 16 0 0   100% 4 0   100%
src/footman/testing.py Runner.__init__   100% 1 0 0   100% 0 0   100%
src/footman/testing.py Runner.invoke   100% 12 0 0   100% 2 0   100%
src/footman/testing.py Runner._invoke   100% 8 0 0   100% 4 0   100%
src/footman/testing.py (no function)   100% 33 0 0   100% 0 0   100%
tasks.py lint   100% 1 0 0   100% 0 0   100%
tasks.py format   100% 1 0 0   100% 0 0   100%
tasks.py typecheck   100% 7 0 0   100% 0 0   100%
tasks.py typecheck.based   100% 1 0 0   100% 0 0   100%
tasks.py typecheck.mypy_linux   100% 1 0 0   100% 0 0   100%
tasks.py typecheck.mypy_darwin   100% 1 0 0   100% 0 0   100%
tasks.py typecheck.mypy_win32   100% 1 0 0   100% 0 0   100%
tasks.py typecheck.run_ty   100% 1 0 0   100% 0 0   100%
tasks.py typecheck.run_pyrefly   100% 1 0 0   100% 0 0   100%
tasks.py typecomplete   0% 1 1 0   100% 0 0   0%
tasks.py test   100% 1 0 0   100% 0 0   100%
tasks.py check   100% 14 0 0   100% 0 0   100%
tasks.py check.covered   100% 1 0 0   100% 0 0   100%
tasks.py sync   100% 1 0 0   100% 0 0   100%
tasks.py _scaffold_suggest_demo   100% 13 0 0   100% 0 0   100%
tasks.py _scaffold_completion_demo   0% 8 8 0   100% 0 0   0%
tasks.py _scaffold_hero_demo   0% 23 23 0   0% 2 0   0%
tasks.py _scaffold_interactive_demo   100% 7 0 0   100% 0 0   100%
tasks.py _bash_renders_value_menus   0% 5 5 0   0% 2 0   0%
tasks.py _record_cast   0% 11 11 0   0% 4 0   0%
tasks.py _assert_cast_captured   100% 5 0 0   100% 2 0   100%
tasks.py _write_latest_changes   100% 16 0 0   100% 2 0   100%
tasks.py _write_llms_txt   100% 27 0 0   100% 6 0   100%
tasks.py _write_llms_txt.walk   100% 5 0 0   100% 6 0   100%
tasks.py _write_llms_txt.first_sentence   97% 34 1 0   95% 20 1   96%
tasks.py _write_llms_txt.first_sentence.absolute   100% 5 0 0   100% 2 0   100%
tasks.py _write_llms_txt.resolve_snippets   100% 2 0 0   100% 0 0   100%
tasks.py _write_llms_txt.resolve_snippets.inline   100% 4 0 0   100% 2 0   100%
tasks.py serve   100% 2 0 0   100% 0 0   100%
tasks.py coverage   100% 7 0 0   100% 0 0   100%
tasks.py api   100% 2 0 0   100% 0 0   100%
tasks.py _api_markdown   84% 32 5 0   75% 20 5   81%
tasks.py _generate_pages   100% 18 0 0   100% 2 0   100%
tasks.py docs_build   100% 0 0 267   100% 0 0   100%
tasks.py _worktree   100% 8 0 0   100% 6 0   100%
tasks.py _gate_dir   100% 3 0 0   100% 0 0   100%
tasks.py _push_conflicts   100% 13 0 0   100% 0 0   100%
tasks.py pre_bash   100% 11 0 0   100% 8 0   100%
tasks.py post_edit   100% 9 0 0   100% 4 0   100%
tasks.py stop   100% 16 0 0   100% 4 0   100%
tasks.py build   100% 1 0 0   100% 0 0   100%
tasks.py clean   100% 1 0 0   100% 0 0   100%
tasks.py (no function)   100% 84 0 2   100% 0 0   100%
Total     94% 13584 749 613   90% 5204 412   93%

No items found using the specified filter.