Coverage for 9f6f025b48bdca0c358bde44a0cdd27f3c46a8b4: 100%

Files Functions Classes

coverage.py v7.13.5, created at 2026-08-03 20:19 +0000

File function   statements missing excluded   coverage
src / library_skills / __init__.py (no function)   0 0 0   100%
src / library_skills / __main__.py (no function)   2 0 0   100%
src / library_skills / cli.py _get_rich_toolkit   1 0 0   100%
src / library_skills / cli.py _get_project_context   10 0 0   100%
src / library_skills / cli.py _scan_context   17 0 0   100%
src / library_skills / cli.py _print_warnings   1 0 0   100%
src / library_skills / cli.py _display_path   7 0 0   100%
src / library_skills / cli.py _target_prompt_name   5 0 0   100%
src / library_skills / cli.py _target_short_name   5 0 0   100%
src / library_skills / cli.py _print_context   18 0 0   100%
src / library_skills / cli.py _print_skills_table   4 0 0   100%
src / library_skills / cli.py _top_level_skills   14 0 0   100%
src / library_skills / cli.py _scan_json_payload   1 0 0   100%
src / library_skills / cli.py _workspace_root   5 0 0   100%
src / library_skills / cli.py _print_action_header   1 0 0   100%
src / library_skills / cli.py _select_skills_interactive   2 0 0   100%
src / library_skills / cli.py _select_targets_interactive   6 0 0   100%
src / library_skills / cli.py _select_install_targets   3 0 0   100%
src / library_skills / cli.py _select_tool_skill_interactive   4 0 0   100%
src / library_skills / cli.py _find_collisions   2 0 0   100%
src / library_skills / cli.py _deduplicate_skills   9 0 0   100%
src / library_skills / cli.py _filter_installable_skills   10 0 0   100%
src / library_skills / cli.py _installed_statuses   27 0 0   100%
src / library_skills / cli.py _print_status_table   1 0 0   100%
src / library_skills / cli.py _print_tool_skill_status_table   1 0 0   100%
src / library_skills / cli.py _print_installed_skills_table   5 0 0   100%
src / library_skills / cli.py _select_installed_skills_interactive   4 0 0   100%
src / library_skills / cli.py _sync_target_dirs   5 0 0   100%
src / library_skills / cli.py _repairable_statuses   1 0 0   100%
src / library_skills / cli.py _removable_statuses   1 0 0   100%
src / library_skills / cli.py _select_statuses_interactive   7 0 0   100%
src / library_skills / cli.py _repair_selected   8 0 0   100%
src / library_skills / cli.py _remove_selected   7 0 0   100%
src / library_skills / cli.py _install_selected   14 0 0   100%
src / library_skills / cli.py _sync_tool_skill   17 0 0   100%
src / library_skills / cli.py _tool_skill_is_missing   1 0 0   100%
src / library_skills / cli.py _sync   68 0 0   100%
src / library_skills / cli.py callback   2 0 0   100%
src / library_skills / cli.py scan   13 0 0   100%
src / library_skills / cli.py list_cmd   14 0 0   100%
src / library_skills / cli.py install   17 0 0   100%
src / library_skills / cli.py remove   17 0 0   100%
src / library_skills / cli.py main   1 0 0   100%
src / library_skills / cli.py (no function)   83 0 0   100%
src / library_skills / deps.py get_python_top_level_deps   4 0 0   100%
src / library_skills / deps.py get_python_top_level_deps_from_files   14 0 0   100%
src / library_skills / deps.py _extract_python_top_level_deps   16 0 0   100%
src / library_skills / deps.py get_node_top_level_deps   4 0 0   100%
src / library_skills / deps.py get_node_top_level_deps_from_files   13 0 0   100%
src / library_skills / deps.py _read_package_json   7 0 0   100%
src / library_skills / deps.py _extract_node_top_level_deps   6 0 0   100%
src / library_skills / deps.py get_top_level_deps   4 0 0   100%
src / library_skills / deps.py get_workspace_top_level_deps   1 0 0   100%
src / library_skills / deps.py get_node_workspace_top_level_deps   1 0 0   100%
src / library_skills / deps.py _extract_deps_from_specs   6 0 0   100%
src / library_skills / deps.py _extract_deps_from_dependency_group   15 0 0   100%
src / library_skills / deps.py (no function)   20 0 2   100%
src / library_skills / installer.py get_target_dirs   4 0 0   100%
src / library_skills / installer.py get_all_target_dirs   1 0 0   100%
src / library_skills / installer.py get_default_install_target_dirs   10 0 0   100%
src / library_skills / installer.py get_existing_target_dirs   3 0 0   100%
src / library_skills / installer.py install_skill   18 0 0   100%
src / library_skills / installer.py _get_symlink_target   4 0 0   100%
src / library_skills / installer.py uninstall_skill   5 0 0   100%
src / library_skills / installer.py get_tool_skill_template   1 0 0   100%
src / library_skills / installer.py get_tool_skill_version   4 0 0   100%
src / library_skills / installer.py inspect_tool_skill   18 0 0   100%
src / library_skills / installer.py install_tool_skill   10 0 0   100%
src / library_skills / installer.py _target_for_path   3 0 0   100%
src / library_skills / installer.py _is_managed_tool_skill_marker   5 0 0   100%
src / library_skills / installer.py list_installed_skills   14 0 0   100%
src / library_skills / installer.py (no function)   44 0 0   100%
src / library_skills / python_env.py find_project_root   10 0 0   100%
src / library_skills / python_env.py find_venv   30 0 0   100%
src / library_skills / python_env.py get_site_packages_dir   11 0 0   100%
src / library_skills / python_env.py find_node_modules   6 0 0   100%
src / library_skills / python_env.py _is_relative_to   5 0 0   100%
src / library_skills / python_env.py _venv_from_dot_venv   8 0 0   100%
src / library_skills / python_env.py _read_venv_redirect_file   14 0 0   100%
src / library_skills / python_env.py (no function)   10 0 0   100%
src / library_skills / scanner.py scan_python_distributions   20 0 0   100%
src / library_skills / scanner.py scan_node_packages   21 0 0   100%
src / library_skills / scanner.py _iter_node_package_roots   10 0 0   100%
src / library_skills / scanner.py _read_node_package_info   12 0 0   100%
src / library_skills / scanner.py _read_distribution_info   10 0 0   100%
src / library_skills / scanner.py _scan_distribution_records   24 0 0   100%
src / library_skills / scanner.py _is_skill_file_record   7 0 0   100%
src / library_skills / scanner.py _scan_editable_direct_url   20 0 0   100%
src / library_skills / scanner.py _read_editable_source_root   20 0 0   100%
src / library_skills / scanner.py _is_relative_to   5 0 0   100%
src / library_skills / scanner.py _load_skill   9 0 0   100%
src / library_skills / scanner.py _parse_skill_frontmatter   24 0 0   100%
src / library_skills / scanner.py _validate_skill_metadata   11 0 0   100%
src / library_skills / scanner.py _normalize_package_name   1 0 0   100%
src / library_skills / scanner.py (no function)   42 0 0   100%
src / library_skills / tool_skill / __init__.py (no function)   0 0 0   100%
src / library_skills / ui.py _console   1 0 0   100%
src / library_skills / ui.py get_toolkit   3 0 0   100%
src / library_skills / ui.py print_line   1 0 0   100%
src / library_skills / ui.py print_title   4 0 0   100%
src / library_skills / ui.py print_warning   1 0 0   100%
src / library_skills / ui.py print_hint   1 0 0   100%
src / library_skills / ui.py print_message   1 0 0   100%
src / library_skills / ui.py print_action_header   4 0 0   100%
src / library_skills / ui.py print_warnings   2 0 0   100%
src / library_skills / ui.py context_table   6 0 0   100%
src / library_skills / ui.py skills_table   8 0 0   100%
src / library_skills / ui.py status_table   9 0 0   100%
src / library_skills / ui.py tool_skill_status_table   7 0 0   100%
src / library_skills / ui.py print_table   1 0 0   100%
src / library_skills / ui.py print_result   1 0 0   100%
src / library_skills / ui.py print_skipped   1 0 0   100%
src / library_skills / ui.py _badge   4 0 0   100%
src / library_skills / ui.py _styled_status   4 0 0   100%
src / library_skills / ui.py print_summary   10 0 0   100%
src / library_skills / ui.py (no function)   27 0 0   100%
src / library_skills / workspace.py find_uv_workspace   10 0 0   100%
src / library_skills / workspace.py find_node_workspace   11 0 0   100%
src / library_skills / workspace.py workspace_dependency_files   3 0 0   100%
src / library_skills / workspace.py node_workspace_dependency_files   3 0 0   100%
src / library_skills / workspace.py _read_pyproject   5 0 0   100%
src / library_skills / workspace.py _read_package_json   5 0 0   100%
src / library_skills / workspace.py _has_uv_workspace   9 0 0   100%
src / library_skills / workspace.py _find_workspace_members   21 0 0   100%
src / library_skills / workspace.py _get_node_workspace_globs   9 0 0   100%
src / library_skills / workspace.py _find_node_workspace_members   13 0 0   100%
src / library_skills / workspace.py _get_workspace_table   10 0 0   100%
src / library_skills / workspace.py _is_excluded   1 0 0   100%
src / library_skills / workspace.py _find_current_member   5 0 0   100%
src / library_skills / workspace.py _is_relative_to   5 0 0   100%
src / library_skills / workspace.py (no function)   31 0 2   100%
tests / test_cli.py FakeToolkit.__init__   1 0 0   100%
tests / test_cli.py FakeToolkit.ask   1 0 0   100%
tests / test_cli.py write_project   7 0 0   100%
tests / test_cli.py write_workspace   12 0 0   100%
tests / test_cli.py write_node_workspace   10 0 0   100%
tests / test_cli.py add_node_workspace_files   6 0 0   100%
tests / test_cli.py write_distribution_skill   9 0 0   100%
tests / test_cli.py write_node_package_skill   2 0 0   100%
tests / test_cli.py write_node_package_skill_at   5 0 0   100%
tests / test_cli.py write_distribution   5 0 0   100%
tests / test_cli.py make_cli_skill   5 0 0   100%
tests / test_cli.py test_scan_filters_to_top_level_dependencies_by_default   16 0 0   100%
tests / test_cli.py test_workspace_member_scan_uses_workspace_venv_and_member_deps   31 0 0   100%
tests / test_cli.py test_combined_uv_and_node_workspace_member_scan_uses_both_member_deps   17 0 0   100%
tests / test_cli.py test_workspace_root_scan_uses_root_and_all_member_deps   15 0 0   100%
tests / test_cli.py test_combined_uv_and_node_workspace_root_scan_uses_all_deps   15 0 0   100%
tests / test_cli.py test_workspace_non_member_subdir_uses_root_and_all_member_deps   12 0 0   100%
tests / test_cli.py test_workspace_scan_prints_workspace_context   12 0 0   100%
tests / test_cli.py test_node_workspace_scan_prints_workspace_context   11 0 0   100%
tests / test_cli.py test_node_workspace_member_scan_uses_member_deps_and_root_node_modules   15 0 0   100%
tests / test_cli.py test_node_workspace_root_scan_uses_root_and_all_member_deps   14 0 0   100%
tests / test_cli.py test_node_workspace_non_member_subdir_uses_root_and_all_member_deps   11 0 0   100%
tests / test_cli.py test_node_workspace_member_local_node_modules_is_not_ignored   10 0 0   100%
tests / test_cli.py test_scan_includes_python_and_node_package_skills   27 0 0   100%
tests / test_cli.py test_install_skill_can_explicitly_select_transitive_dependency   9 0 0   100%
tests / test_cli.py test_yes_repairs_broken_managed_symlink_without_installing_new_skills   13 0 0   100%
tests / test_cli.py test_yes_removes_orphaned_and_unrecoverable_broken_symlinks   19 0 0   100%
tests / test_cli.py test_yes_repairs_existing_claude_target_without_claude_flag   13 0 0   100%
tests / test_cli.py test_check_reports_fixable_drift_without_modifying_files   9 0 0   100%
tests / test_cli.py test_check_ignores_tool_skill_drift_unless_requested   5 0 0   100%
tests / test_cli.py test_check_tool_skill_reports_missing_default_and_claude_targets   7 0 0   100%
tests / test_cli.py test_tool_skill_installs_and_updates_copied_skill   13 0 0   100%
tests / test_cli.py test_no_tool_skill_skips_management   5 0 0   100%
tests / test_cli.py test_explicit_tool_skill_fails_on_hand_authored_directory   9 0 0   100%
tests / test_cli.py test_default_sync_with_no_changes_reports_no_changes_needed   6 0 0   100%
tests / test_cli.py test_default_sync_prompts_for_missing_tool_skill_without_new_skills   12 0 0   100%
tests / test_cli.py test_list_json_reports_discovered_and_installed_skills   13 0 0   100%
tests / test_cli.py test_list_installed_prints_no_skills_when_target_is_empty   5 0 0   100%
tests / test_cli.py test_list_installed_prints_installed_statuses   13 0 0   100%
tests / test_cli.py test_install_all_copy_mode_installs_to_agents_and_claude   12 0 0   100%
tests / test_cli.py test_install_interactive_can_choose_claude_only   12 0 0   100%
tests / test_cli.py test_install_interactive_can_choose_both_targets   13 0 0   100%
tests / test_cli.py test_install_with_no_selected_targets_cancels   9 0 0   100%
tests / test_cli.py test_default_sync_with_no_selected_targets_cancels   9 0 0   100%
tests / test_cli.py test_install_without_selection_and_yes_prints_no_skills_selected   5 0 0   100%
tests / test_cli.py test_remove_named_symlink   12 0 0   100%
tests / test_cli.py test_list_installed_includes_existing_claude_target_without_flag   13 0 0   100%
tests / test_cli.py test_remove_includes_existing_claude_target_without_flag   13 0 0   100%
tests / test_cli.py test_list_installed_and_remove_do_not_create_missing_target_dirs   9 0 0   100%
tests / test_cli.py test_remove_with_yes_and_no_names_does_not_prompt   5 0 0   100%
tests / test_cli.py test_check_exits_non_zero_for_colliding_skill_names   7 0 0   100%
tests / test_cli.py test_scan_without_target_environment_prints_warning   11 0 0   100%
tests / test_cli.py test_default_check_without_environment_reports_no_discovered_skills   9 0 0   100%
tests / test_cli.py test_list_without_installed_option_prints_discovered_skills   7 0 0   100%
tests / test_cli.py test_install_interactive_selection_installs_selected_skill   10 0 0   100%
tests / test_cli.py test_default_command_interactive_selection_installs_selected_skill   14 0 0   100%
tests / test_cli.py test_default_command_copy_installs_selected_skill_as_directory   12 0 0   100%
tests / test_cli.py test_default_command_deduplicates_new_skills_across_targets   14 0 0   100%
tests / test_cli.py test_default_command_deduplicates_new_skills_across_targets.select_skills   2 0 0   100%
tests / test_cli.py test_remove_interactive_selection_removes_selected_skill   12 0 0   100%
tests / test_cli.py test_remove_prints_not_found_when_uninstall_returns_false   11 0 0   100%
tests / test_cli.py test_installed_statuses_classifies_name_mismatch_outdated_and_orphaned   19 0 0   100%
tests / test_cli.py test_filter_installable_skills_skips_collisions   4 0 0   100%
tests / test_cli.py test_select_helpers_use_rich_toolkit   9 0 0   100%
tests / test_cli.py test_reconcile_helpers_cover_selection_skip_and_not_found   20 0 0   100%
tests / test_cli.py test_reconcile_helpers_cover_selection_skip_and_not_found.FakeMenu.__init__   5 0 0   100%
tests / test_cli.py test_reconcile_helpers_cover_selection_skip_and_not_found.FakeMenu.ask   2 0 0   100%
tests / test_cli.py test_select_targets_interactive_preselects_defaults   7 0 0   100%
tests / test_cli.py test_select_targets_interactive_preselects_defaults.FakeMenu.__init__   3 0 0   100%
tests / test_cli.py test_select_targets_interactive_preselects_defaults.FakeMenu.ask   2 0 0   100%
tests / test_cli.py test_select_tool_skill_interactive_uses_checked_menu   9 0 0   100%
tests / test_cli.py test_select_tool_skill_interactive_uses_checked_menu.FakeMenu.__init__   4 0 0   100%
tests / test_cli.py test_select_tool_skill_interactive_uses_checked_menu.FakeMenu.ask   2 0 0   100%
tests / test_cli.py test_get_rich_toolkit_returns_toolkit_instance   1 0 0   100%
tests / test_cli.py test_ui_badge_fallback_status_and_summary   7 0 0   100%
tests / test_cli.py test_install_selected_continues_after_install_error   4 0 0   100%
tests / test_cli.py test_display_path_prefers_project_relative_paths   8 0 0   100%
tests / test_cli.py test_target_prompt_labels_are_user_facing   9 0 0   100%
tests / test_cli.py test_main_module_invokes_cli_main   7 0 0   100%
tests / test_cli.py test_main_invokes_typer_app   4 0 0   100%
tests / test_cli.py (no function)   86 0 0   100%
tests / test_deps.py test_get_python_top_level_deps_normalizes_required_and_optional_deps   3 0 0   100%
tests / test_deps.py test_get_python_top_level_deps_includes_dependency_groups   2 0 0   100%
tests / test_deps.py test_get_python_top_level_deps_returns_none_without_pyproject   3 0 0   100%
tests / test_deps.py test_get_python_top_level_deps_returns_none_for_invalid_toml   2 0 0   100%
tests / test_deps.py test_get_python_top_level_deps_returns_empty_set_for_invalid_project_table   2 0 0   100%
tests / test_deps.py test_get_python_top_level_deps_ignores_non_string_dependencies   2 0 0   100%
tests / test_deps.py test_get_node_top_level_deps_normalizes_dependency_fields   2 0 0   100%
tests / test_deps.py test_get_node_top_level_deps_handles_missing_invalid_and_non_object   7 0 0   100%
tests / test_deps.py test_get_top_level_deps_combines_python_and_node_metadata   3 0 0   100%
tests / test_deps.py (no function)   10 0 0   100%
tests / test_installer.py make_skill   5 0 0   100%
tests / test_installer.py test_get_target_dirs_always_includes_agents_and_optionally_claude   8 0 0   100%
tests / test_installer.py test_default_install_target_dirs_follow_project_state   11 0 0   100%
tests / test_installer.py test_existing_target_dirs_only_include_concrete_skills_dirs   6 0 0   100%
tests / test_installer.py test_install_skill_creates_symlink_and_list_installed_skills_reports_it   11 0 0   100%
tests / test_installer.py test_install_skill_copy_mode_copies_directory   6 0 0   100%
tests / test_installer.py test_install_skill_symlink_failure_raises_install_error   6 0 0   100%
tests / test_installer.py test_install_skill_symlink_failure_raises_install_error.fail_symlink   1 0 0   100%
tests / test_installer.py test_install_skill_refuses_to_overwrite_non_symlink_directory   5 0 0   100%
tests / test_installer.py test_install_skill_refuses_to_overwrite_non_symlink_file   6 0 0   100%
tests / test_installer.py test_install_skill_replaces_existing_symlink   10 0 0   100%
tests / test_installer.py test_get_symlink_target_falls_back_to_absolute_on_relpath_error   7 0 0   100%
tests / test_installer.py test_get_symlink_target_falls_back_to_absolute_on_relpath_error.raise_value_error   1 0 0   100%
tests / test_installer.py test_get_symlink_target_preserves_native_relative_targets   4 0 0   100%
tests / test_installer.py test_list_installed_skills_handles_missing_target_and_directories   12 0 0   100%
tests / test_installer.py test_list_installed_skills_reports_dangling_symlink   10 0 0   100%
tests / test_installer.py test_uninstall_skill_only_removes_symlinks   9 0 0   100%
tests / test_installer.py test_uninstall_skill_removes_dangling_symlink   6 0 0   100%
tests / test_installer.py test_install_tool_skill_copies_template_and_marker   8 0 0   100%
tests / test_installer.py test_install_tool_skill_updates_managed_stale_copy   6 0 0   100%
tests / test_installer.py test_tool_skill_version_falls_back_when_distribution_is_missing   3 0 0   100%
tests / test_installer.py test_tool_skill_version_falls_back_when_distribution_is_missing.missing_version   1 0 0   100%
tests / test_installer.py test_inspect_tool_skill_reports_file_blocker   5 0 0   100%
tests / test_installer.py test_inspect_tool_skill_classifies_claude_target   3 0 0   100%
tests / test_installer.py test_inspect_tool_skill_reports_stale_when_managed_skill_md_is_missing   6 0 0   100%
tests / test_installer.py test_inspect_tool_skill_reports_stale_when_managed_skill_md_is_invalid_utf8   7 0 0   100%
tests / test_installer.py test_install_tool_skill_refuses_hand_authored_directory   9 0 0   100%
tests / test_installer.py test_install_tool_skill_refuses_invalid_marker   9 0 0   100%
tests / test_installer.py (no function)   30 0 0   100%
tests / test_prepare_release.py test_bump_version   1 0 0   100%
tests / test_prepare_release.py test_update_version_file   3 0 0   100%
tests / test_prepare_release.py test_update_version_file_requires_newer_version   3 0 0   100%
tests / test_prepare_release.py test_update_json_version_file   3 0 0   100%
tests / test_prepare_release.py test_update_package_lock_file   3 0 0   100%
tests / test_prepare_release.py test_update_release_notes   3 0 0   100%
tests / test_prepare_release.py test_update_release_notes_rejects_existing_version   3 0 0   100%
tests / test_prepare_release.py test_get_release_notes_body_with_dated_heading   3 0 0   100%
tests / test_prepare_release.py test_get_release_notes_body_with_plain_heading   3 0 0   100%
tests / test_prepare_release.py test_get_release_notes_body_allows_non_version_h2_content   3 0 0   100%
tests / test_prepare_release.py test_get_release_notes_body_requires_version_section   3 0 0   100%
tests / test_prepare_release.py test_get_release_notes_body_requires_non_empty_section   3 0 0   100%
tests / test_prepare_release.py test_cli_updates_configured_files   15 0 0   100%
tests / test_prepare_release.py test_cli_accepts_env_vars   22 0 0   100%
tests / test_prepare_release.py test_cli_prints_current_version   5 0 0   100%
tests / test_prepare_release.py test_cli_prints_release_notes   7 0 0   100%
tests / test_prepare_release.py (no function)   39 0 0   100%
tests / test_python_env.py make_venv   3 0 0   100%
tests / test_python_env.py clear_python_env_vars   3 0 0   100%
tests / test_python_env.py test_find_project_root_uses_nearest_python_project_marker   9 0 0   100%
tests / test_python_env.py test_find_project_root_uses_node_project_markers   8 0 0   100%
tests / test_python_env.py test_find_venv_prefers_uv_project_environment   9 0 0   100%
tests / test_python_env.py test_find_venv_resolves_uv_project_environment_from_workspace_root   10 0 0   100%
tests / test_python_env.py test_find_venv_returns_none_for_workspace_without_root_environment   8 0 0   100%
tests / test_python_env.py test_find_venv_supports_pep_832_redirect_file   8 0 0   100%
tests / test_python_env.py test_find_venv_supports_absolute_pep_832_redirect_file   6 0 0   100%
tests / test_python_env.py test_find_venv_ignores_invalid_pep_832_redirect_file   10 0 0   100%
tests / test_python_env.py test_find_venv_ignores_invalid_pep_832_entries   13 0 0   100%
tests / test_python_env.py test_find_venv_ignores_invalid_pep_832_entries.read_text   1 0 0   100%
tests / test_python_env.py test_find_venv_ignores_virtual_env_outside_project   6 0 0   100%
tests / test_python_env.py test_find_venv_uses_virtual_env_inside_project   8 0 0   100%
tests / test_python_env.py test_find_venv_uses_conda_prefix_when_no_project_env   7 0 0   100%
tests / test_python_env.py test_get_site_packages_dir_supports_windows_lib_and_lib64   8 0 0   100%
tests / test_python_env.py test_get_site_packages_dir_returns_none_without_site_packages   3 0 0   100%
tests / test_python_env.py test_find_node_modules_uses_nearest_ancestor   7 0 0   100%
tests / test_python_env.py (no function)   19 0 0   100%
tests / test_scanner.py write_skill   5 0 0   100%
tests / test_scanner.py write_dist_info   6 0 0   100%
tests / test_scanner.py write_node_package   4 0 0   100%
tests / test_scanner.py test_scan_python_distributions_discovers_record_based_skills   14 0 0   100%
tests / test_scanner.py test_scan_python_distributions_parses_folded_skill_description   9 0 0   100%
tests / test_scanner.py test_scan_node_packages_discovers_package_skills   12 0 0   100%
tests / test_scanner.py test_scan_node_packages_deduplicates_resolved_skill_dirs   7 0 0   100%
tests / test_scanner.py test_scan_node_packages_warns_for_missing_or_invalid_metadata   19 0 0   100%
tests / test_scanner.py test_scan_node_packages_warns_for_invalid_skill_metadata   7 0 0   100%
tests / test_scanner.py test_scan_python_distributions_warns_for_invalid_skill_metadata   8 0 0   100%
tests / test_scanner.py test_scan_python_distributions_uses_editable_direct_url_fallback   9 0 0   100%
tests / test_scanner.py test_scan_python_distributions_does_not_claim_nested_site_packages_skills   10 0 0   100%
tests / test_scanner.py test_scan_python_distributions_warns_when_site_packages_is_missing   3 0 0   100%
tests / test_scanner.py test_scan_python_distributions_warns_for_invalid_distribution_metadata   6 0 0   100%
tests / test_scanner.py test_scan_python_distributions_skips_dist_info_files   6 0 0   100%
tests / test_scanner.py test_scan_python_distributions_warns_for_metadata_without_name   8 0 0   100%
tests / test_scanner.py test_scan_python_distributions_ignores_empty_non_skill_and_duplicate_records   8 0 0   100%
tests / test_scanner.py test_scan_python_distributions_warns_for_invalid_skill_files   8 0 0   100%
tests / test_scanner.py test_scan_python_distributions_warns_when_skill_file_is_not_utf8   8 0 0   100%
tests / test_scanner.py test_read_editable_source_root_rejects_invalid_direct_url_payloads   4 0 0   100%
tests / test_scanner.py test_is_relative_to_returns_false_for_unrelated_paths   1 0 0   100%
tests / test_scanner.py test_scan_editable_direct_url_skips_symlinked_skills_outside_source_root   12 0 0   100%
tests / test_scanner.py test_scan_editable_direct_url_skips_seen_skill_dirs   8 0 0   100%
tests / test_scanner.py test_scan_editable_direct_url_reports_invalid_skill_warning   10 0 0   100%
tests / test_scanner.py (no function)   31 0 0   100%
tests / test_workspace.py test_find_uv_workspace_handles_invalid_and_missing_workspace_tables   12 0 0   100%
tests / test_workspace.py test_find_uv_workspace_filters_members_and_selects_nearest_member   20 0 0   100%
tests / test_workspace.py test_find_node_workspace_filters_members_and_selects_nearest_member   21 0 0   100%
tests / test_workspace.py test_find_node_workspace_supports_npm_object_form   9 0 0   100%
tests / test_workspace.py test_find_node_workspace_handles_invalid_and_non_object_package_json   9 0 0   100%
tests / test_workspace.py (no function)   7 0 0   100%
Total     2932 0 4   100%

No items found using the specified filter.