Repository Analysis

homeassistant-ai/ha-mcp

The Unofficial and Awesome Home Assistant MCP Server

31.1 Strong AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of homeassistant-ai/ha-mcp, a Python project with 4,543 GitHub stars. SynthScan v2.0 examined 592,385 lines of code across 1187 source files, recording 15865 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 31.1 places this repository in the Strong AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

31.1
Adjusted Score
31.1
Raw Score
100%
Time Factor
2026-08-29
Last Push
4.5K
Stars
Python
Language
592.4K
Lines of Code
1.2K
Files
15.9K
Pattern Hits
2026-08-29
Scan Date
0.31
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 3HIGH 360MEDIUM 1342LOW 14160

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 15865 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers11563 hits · 9622 pts
SeverityFileLineSnippetContext
LOWpackaging/mcpb/generate_manifest.py12def _get_docstring_description(node: ast.AsyncFunctionDef) -> str:CODE
LOWpackaging/mcpb/generate_manifest.py18def _extract_title_and_decorator_description(CODE
LOWhomeassistant-addon/start.py37def widen_fastmcp_log_console(width: int = 200) -> None:CODE
LOWhomeassistant-addon/start.py82def get_or_create_secret_path(data_dir: Path, custom_path: str = "") -> str:CODE
LOWhomeassistant-addon/start.py165def maybe_persist_secret_path(CODE
LOWhomeassistant-addon/start.py230def resolve_effective_log_level() -> int:CODE
LOWhomeassistant-addon/start.py289def maybe_auto_enable_beta_master(config: dict[str, Any]) -> None:CODE
LOWhomeassistant-addon/start.py335def cleanup_stale_migration_marker(data_dir: Path) -> None:CODE
LOWhomeassistant-addon/start.py422def _warn_gated_off_beta_subflags(CODE
LOWhomeassistant-addon/start.py449def _arm_kill_signal_diagnostics_if_debug(effective_log_level: int) -> None:CODE
LOWtests/uat/test_openai_agent.py776 async def test_none_when_model_not_listed(self, monkeypatch):CODE
LOWtests/uat/test_openai_agent.py785 async def test_none_when_entry_has_no_quant(self, monkeypatch):CODE
LOWtests/uat/test_openai_agent.py792 async def test_none_on_transport_error(self, monkeypatch):CODE
LOWtests/uat/test_openai_agent.py801 async def test_none_on_http_error_status(self, monkeypatch):CODE
LOWtests/uat/test_openai_agent.py825 def test_extracts_requested_and_context_tokens(self):CODE
LOWtests/uat/test_openai_agent.py831 def test_none_for_unrelated_bad_request(self):CODE
LOWtests/uat/test_openai_agent.py835 def test_marker_without_numbers_returns_none_pair(self):CODE
LOWtests/uat/test_openai_agent.py840 def test_extracts_from_sdk_wire_format(self):CODE
LOWtests/uat/test_openai_agent.py24 def test_missing_required_args_exits(self):CODE
LOWtests/uat/test_openai_agent.py63 def test_basic_tool_conversion(self):CODE
LOWtests/uat/test_openai_agent.py93 def test_tool_with_no_parameters(self):CODE
LOWtests/uat/test_openai_agent.py112 async def test_direct_text_response(self):CODE
LOWtests/uat/test_openai_agent.py139 async def test_no_think_sends_enable_thinking_false(self):CODE
LOWtests/uat/test_openai_agent.py173 async def test_no_think_default_omits_extra_body(self):CODE
LOWtests/uat/test_openai_agent.py195 async def test_no_think_warns_when_backend_still_reasons(self, caplog):CODE
LOWtests/uat/test_openai_agent.py223 async def test_no_think_silent_when_backend_honors_it(self, caplog):CODE
LOWtests/uat/test_openai_agent.py251 async def test_reasoning_tokens_captured_in_tokens_thoughts(self):CODE
LOWtests/uat/test_openai_agent.py278 async def test_tokens_thoughts_zero_when_backend_omits_details(self):CODE
LOWtests/uat/test_openai_agent.py303 async def test_no_think_warns_on_reasoning_content_without_token_detail(CODE
LOWtests/uat/test_openai_agent.py335 async def test_no_think_warns_on_inline_think_block(self, caplog):CODE
LOWtests/uat/test_openai_agent.py364 async def test_no_think_warns_only_once_across_turns(self, caplog):CODE
LOWtests/uat/test_openai_agent.py458 async def test_tool_call_failure_counted(self):CODE
LOWtests/uat/test_openai_agent.py499 async def test_malformed_tool_arguments_reported_as_error(self):CODE
LOWtests/uat/test_openai_agent.py540 async def test_max_iterations_reached(self):CODE
LOWtests/uat/test_openai_agent.py605 async def test_empty_choices_raises(self):CODE
LOWtests/uat/test_openai_agent.py643 async def test_no_think_prepends_token_and_sends_kwarg(self):CODE
LOWtests/uat/test_openai_agent.py661 async def test_default_omits_prepend_and_kwarg(self):CODE
LOWtests/uat/test_openai_agent.py684 def test_non_text_content_falls_back_to_str(self):CODE
LOWtests/uat/test_openai_agent.py694 def test_no_content_falls_back_to_str(self):CODE
LOWtests/uat/test_openai_agent.py708 async def test_returns_first_model_id(self):CODE
LOWtests/uat/test_openai_agent.py717 async def test_raises_when_no_models(self):CODE
LOWtests/uat/test_openai_agent.py859 async def test_overflow_raises_context_window_exceeded(self):CODE
LOWtests/uat/test_openai_agent.py882 async def test_unrelated_bad_request_propagates(self):CODE
LOWtests/uat/openai_agent.py541async def create_and_warm_openai_client(CODE
LOWtests/uat/stories/test_run_story_record.py74def test_tokens_thoughts_defaults_to_zero_when_absent(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py83def test_model_from_call_site_param(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py89def test_model_call_site_arg_wins_over_test_phase(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py95def test_model_from_test_phase(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py101def test_model_defaults_to_none_when_absent(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py108def test_quantization_threaded_into_record(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py114def test_quantization_defaults_to_none_when_absent(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py121def test_extract_model_reads_claude_session(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py127def test_extract_model_none_on_malformed_session(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py134def test_model_from_claude_session_fallback(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py144def test_compute_passed_incomplete_run_fails_despite_verify():CODE
LOWtests/uat/stories/test_run_story_record.py233def test_clean_record_omits_error_fields(tmp_path):CODE
LOWtests/uat/stories/test_run_story_record.py245def test_run_completed_uses_explicit_flag():CODE
LOWtests/uat/stories/test_run_story_record.py251def test_run_completed_fail_closed_on_missing_summary():CODE
LOWtests/uat/stories/test_run_story_record.py261def test_run_completed_present_summary_missing_flag_uses_exit_code():CODE
LOWtests/uat/stories/test_run_story_record.py268async def test_context_overflow_degraded_counts_still_fails(monkeypatch):CODE
11503 more matches not shown…
Decorative Section Separators1203 hits · 4099 pts
SeverityFileLineSnippetContext
MEDIUMtests/uat/run_uat.py73# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py75# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py137# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py139# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py297# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py299# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py643# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py645# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py763# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py765# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py43# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py45# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py62# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py64# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py123# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py125# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py135# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py137# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/test_run_story_record.py141# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/test_run_story_record.py143# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/test_run_story_record.py240# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/test_run_story_record.py244# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/test_run_story_record.py304# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/test_run_story_record.py309# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py91# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py93# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py100# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py102# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py294# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py296# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py338# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py357# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py359# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py170# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py172# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py663# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py665# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py713# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py715# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py766# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py768# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py986# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py988# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py130# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py132# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py26# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py28# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py209# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py211# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py300# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py302# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py360# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py362# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py386# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/scripts/verify_story.py388# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/haos_image_build/build_image.py119# ┌──────────────────────┬────────────────────────────────────────────────┐COMMENT
MEDIUMtests/haos_image_build/build_image.py121# ├──────────────────────┼────────────────────────────────────────────────┤COMMENT
MEDIUMtests/haos_image_build/build_image.py135# └──────────────────────┴────────────────────────────────────────────────┘COMMENT
MEDIUMtests/haos_image_build/build_image.py274# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/haos_image_build/build_image.py276# ---------------------------------------------------------------------------COMMENT
1143 more matches not shown…
Cross-File Repetition224 hits · 1120 pts
SeverityFileLineSnippetContext
HIGHtests/addon/test_webhook_proxy.py0a valid (code_verifier, code_challenge) pair per rfc 7636 s256.STRING
HIGHtests/src/unit/test_oauth_autoapprove.py0a valid (code_verifier, code_challenge) pair per rfc 7636 s256.STRING
HIGHtests/src/unit/test_oauth_legacy_component.py0a valid (code_verifier, code_challenge) pair per rfc 7636 s256.STRING
HIGHtests/src/unit/test_alias_fetch_chunking.py0create smartsearchtools with mocked global settings.STRING
HIGHtests/src/unit/test_deep_search_tier3_parallel.py0create smartsearchtools with mocked global settings.STRING
HIGHtests/src/unit/test_performance_parallelization.py0create smartsearchtools with mocked global settings.STRING
HIGHtests/src/unit/test_smart_search_flow_helpers.py0construct smartsearchtools without loading global settings.STRING
HIGHtests/src/unit/test_smart_search_scene_phase25.py0construct smartsearchtools without loading global settings.STRING
HIGH…/src/unit/test_deep_search_helper_dashboard_partial.py0construct smartsearchtools without loading global settings.STRING
HIGHtests/src/unit/test_deep_search_helper_rename_1794.py0construct smartsearchtools without loading global settings.STRING
HIGHtests/src/unit/test_radio_management.py0register tools onto a mock mcp and return {tool_name: bound_method}.STRING
HIGHtests/src/unit/test_radio_thread.py0register tools onto a mock mcp and return {tool_name: bound_method}.STRING
HIGHtests/src/unit/test_radio_zwave.py0register tools onto a mock mcp and return {tool_name: bound_method}.STRING
HIGHtests/src/unit/test_radio_zigbee.py0register tools onto a mock mcp and return {tool_name: bound_method}.STRING
HIGHtests/src/unit/test_helper_param_rejection.py0register helper config tools and return the captured tool functions.STRING
HIGHtests/src/unit/test_helper_registry_id_validation.py0register helper config tools and return the captured tool functions.STRING
HIGHtests/src/unit/test_action_and_collision.py0register helper config tools and return the captured tool functions.STRING
HIGHtests/src/unit/test_helper_update_persistence.py0register helper config tools and return the captured tool functions.STRING
HIGHtests/src/unit/test_helper_field_persistence.py0register helper config tools and return the captured tool functions.STRING
HIGHtests/src/unit/test_flow_name_injection.py0register helper config tools and return the captured tool functions.STRING
HIGHtests/src/unit/test_action_discriminator.py0register helper config tools and return the captured tool functions.STRING
HIGHtests/src/unit/test_yaml_themes.py0minimal hass mock that runs executor jobs synchronously.STRING
HIGHtests/src/unit/test_yaml_whole_file_replace.py0minimal hass mock that runs executor jobs synchronously.STRING
HIGHtests/src/unit/test_yaml_edit_untouched_content.py0minimal hass mock that runs executor jobs synchronously.STRING
HIGHtests/src/unit/test_yaml_dashboards.py0minimal hass mock that runs executor jobs synchronously.STRING
HIGHtests/src/unit/test_oauth_autoapprove.py0return whether a module name is ``root`` or one of its children.STRING
HIGHtests/src/unit/test_oauth_ha_auth.py0return whether a module name is ``root`` or one of its children.STRING
HIGHtests/src/unit/test_oauth_dcr.py0return whether a module name is ``root`` or one of its children.STRING
HIGH…/unit/test_ha_config_list_helpers_component_routing.py0a non-unknown command error → legacy path and a warnings[] entry.STRING
HIGHtests/src/unit/test_ha_search_component_routing.py0a non-unknown command error → legacy path and a warnings[] entry.STRING
HIGHtests/src/unit/test_ha_get_zone_component_routing.py0a non-unknown command error → legacy path and a warnings[] entry.STRING
HIGHtests/src/unit/test_ha_overview_component_routing.py0a non-unknown command error → legacy path and a warnings[] entry.STRING
HIGHtests/src/unit/test_ws_connect_auth_classification.py0yield the singleton manager with isolated, restored pool state.STRING
HIGHtests/src/unit/test_ws_pool_loop_change_1994.py0yield the singleton manager with isolated, restored pool state.STRING
HIGHtests/src/unit/test_ws_pool_stale_client_2127.py0yield the singleton manager with isolated, restored pool state.STRING
HIGHtests/src/e2e/conftest.py0parse a streamable-http mcp response (json body or sse) to a json-rpc dict.STRING
HIGHtests/src/e2e/haos_only/test_embedded_server_haos.py0parse a streamable-http mcp response (json body or sse) to a json-rpc dict.STRING
HIGH…sts/src/e2e/workflows/embedded/test_embedded_server.py0parse a streamable-http mcp response (json body or sse) to a json-rpc dict.STRING
HIGH…/src/e2e/workflows/dashboards/test_python_transform.py0test that python_transform is mutually exclusive with config.STRING
HIGH…sts/src/e2e/workflows/scripts/test_python_transform.py0test that python_transform is mutually exclusive with config.STRING
HIGH…/src/e2e/workflows/automation/test_python_transform.py0test that python_transform is mutually exclusive with config.STRING
HIGHcustom_components/ha_mcp_tools/oauth_dcr.py0(scheme, host, port) origin identity with the scheme default applied. the one normalizer shared by registration validatiSTRING
HIGH…ant-addon-webhook-proxy-dev/mcp_proxy_dev/oauth_dcr.py0(scheme, host, port) origin identity with the scheme default applied. the one normalizer shared by registration validatiSTRING
HIGH…meassistant-addon-webhook-proxy/mcp_proxy/oauth_dcr.py0(scheme, host, port) origin identity with the scheme default applied. the one normalizer shared by registration validatiSTRING
HIGHcustom_components/ha_mcp_tools/oauth_dcr.py0the request body, or none when it exceeds ``max_dcr_body_bytes``. reads to eof rather than taking one ``streamreader.reaSTRING
HIGH…ant-addon-webhook-proxy-dev/mcp_proxy_dev/oauth_dcr.py0the request body, or none when it exceeds ``max_dcr_body_bytes``. reads to eof rather than taking one ``streamreader.reaSTRING
HIGH…meassistant-addon-webhook-proxy/mcp_proxy/oauth_dcr.py0the request body, or none when it exceeds ``max_dcr_body_bytes``. reads to eof rather than taking one ``streamreader.reaSTRING
HIGHcustom_components/ha_mcp_tools/oauth_dcr.py0bind the view to the ha instance; liveness is resolved per request.STRING
HIGHcustom_components/ha_mcp_tools/mcp_webhook.py0bind the view to the ha instance; liveness is resolved per request.STRING
HIGHcustom_components/ha_mcp_tools/oauth_autoapprove.py0bind the view to the ha instance; liveness is resolved per request.STRING
HIGH…n-webhook-proxy-dev/mcp_proxy_dev/oauth_autoapprove.py0bind the view to the ha instance; liveness is resolved per request.STRING
HIGH…ant-addon-webhook-proxy/mcp_proxy/oauth_autoapprove.py0bind the view to the ha instance; liveness is resolved per request.STRING
HIGHcustom_components/ha_mcp_tools/mcp_webhook.py0rfc 8414 authorization-server metadata for none-mode auto-approve. points mcp clients at our own ``oauth_base`` ``/authoSTRING
HIGH…n-webhook-proxy-dev/mcp_proxy_dev/oauth_autoapprove.py0rfc 8414 authorization-server metadata for none-mode auto-approve. points mcp clients at our own ``oauth_base`` ``/authoSTRING
HIGH…ant-addon-webhook-proxy/mcp_proxy/oauth_autoapprove.py0rfc 8414 authorization-server metadata for none-mode auto-approve. points mcp clients at our own ``oauth_base`` ``/authoSTRING
HIGHcustom_components/ha_mcp_tools/oauth_legacy.py0stable fingerprint of the oauth identity bound to the root views.STRING
HIGH…tant-addon-webhook-proxy-dev/mcp_proxy_dev/__init__.py0stable fingerprint of the oauth identity bound to the root views.STRING
HIGHhomeassistant-addon-webhook-proxy/mcp_proxy/__init__.py0stable fingerprint of the oauth identity bound to the root views.STRING
HIGHcustom_components/ha_mcp_tools/oauth_legacy.py0shape of an entry in oauthprovider._codes. typeddict so a typo on one of these keys (`expires`/`redirect_uri`/`code_chalSTRING
HIGH…sistant-addon-webhook-proxy-dev/mcp_proxy_dev/oauth.py0shape of an entry in oauthprovider._codes. typeddict so a typo on one of these keys (`expires`/`redirect_uri`/`code_chalSTRING
164 more matches not shown…
Excessive Try-Catch Wrapping729 hits · 668 pts
SeverityFileLineSnippetContext
LOWAGENTS.md658except Exception as e:CODE
LOWCLAUDE.md658except Exception as e:CODE
LOWhomeassistant-addon/start.py122 except Exception as e:CODE
LOWhomeassistant-addon/start.py132 except Exception as e:CODE
LOWhomeassistant-addon/start.py251 except Exception as e:CODE
LOWhomeassistant-addon/start.py466 except Exception as e:CODE
LOWhomeassistant-addon/start.py739 except Exception as e:CODE
LOWhomeassistant-addon/start.py931 except Exception as e:CODE
LOWtests/test_env_manager.py232 except Exception as e:CODE
LOWtests/test_env_manager.py262 except Exception:CODE
LOWtests/test_env_manager.py353 except Exception as e:CODE
LOWtests/uat/run_uat.py124 except Exception:CODE
LOWtests/uat/openai_agent.py160 except Exception as e: # best-effort enrichment, never fatalCODE
LOWtests/uat/openai_agent.py299 except Exception as e:CODE
LOWtests/uat/openai_agent.py586 except Exception:CODE
LOWtests/uat/openai_agent.py597 except Exception:CODE
LOWtests/uat/stories/conftest.py146 except Exception as e:CODE
LOWtests/uat/stories/conftest.py159 except Exception as e:CODE
LOWtests/uat/stories/run_story.py287 except Exception as exc:CODE
LOWtests/uat/stories/run_story.py347 except Exception:CODE
LOWtests/uat/stories/run_story.py148 except Exception:CODE
LOWtests/uat/stories/run_story.py206 except Exception as exc:CODE
LOWtests/uat/stories/run_story.py232 except Exception as exc:CODE
LOWtests/uat/stories/run_story.py543 except Exception as e:CODE
LOWtests/uat/stories/run_story.py679 except Exception as e:CODE
LOWtests/uat/stories/run_story.py699 except Exception as e:CODE
LOWtests/uat/stories/run_story.py1056 except Exception as e:CODE
LOWtests/uat/stories/run_story.py1078 except Exception as e:CODE
LOWtests/uat/stories/scripts/verify_story.py69 except Exception:CODE
LOWtests/uat/stories/scripts/verify_story.py88 except Exception:CODE
LOWtests/uat/stories/scripts/verify_story.py151 except Exception:CODE
LOWtests/uat/stories/scripts/verify_story.py231 except Exception as e:CODE
LOWtests/uat/stories/scripts/verify_story.py257 except Exception as e:CODE
LOWtests/uat/stories/scripts/verify_story.py285 except Exception as e:CODE
MEDIUMtests/uat/stories/scripts/ha_query.py250 print(f"Error: {args.agent} CLI not found", file=sys.stderr)CODE
LOWtests/uat/stories/scripts/measure_tools.py147 except Exception as e:STRING
MEDIUMtests/haos_image_build/build_image.py809def send() -> None:CODE
LOWtests/haos_image_build/build_image.py484 except Exception as e:CODE
LOWtests/haos_image_build/build_image.py817 except Exception as exc:CODE
LOWtests/haos_image_build/build_image.py2716 except Exception:CODE
LOW…itial_test_state/custom_components/hacs/data_client.py56 except Exception as exception:CODE
LOW…t_state/custom_components/hacs/websocket/repository.py50 except Exception as exception: # pylint: disable=broad-exceptCODE
LOW…t_state/custom_components/hacs/websocket/repository.py266 except Exception as exception: # pylint: disable=broad-exceptCODE
LOW…t_state/custom_components/hacs/websocket/repository.py351 except Exception as exception:CODE
LOW…ate/custom_components/hacs/repositories/integration.py216 except Exception: # pylint: disable=broad-exceptCODE
LOW…test_state/custom_components/hacs/repositories/base.py1374 except Exception: # pylint: disable=broad-exceptCODE
LOWtests/addon/test_addon_structure.py457 except Exception as exc:CODE
LOWtests/src/haos_runtime.py268 except Exception as probe_err: # pragma: no cover - diagnostics best-effortCODE
LOWtests/src/unit/_embedded_stubs.py269 except Exception as err: # matches real HA's broad catch-and-logCODE
MEDIUMtests/src/unit/_embedded_stubs.py266def async_refresh(self) -> None:CODE
LOWtests/src/unit/test_session_disconnect_log_filter.py49 except Exception as exc:CODE
LOWtests/src/unit/test_component_backup_prep_contract.py53 except Exception as exc: # the REAL component's raise pathCODE
LOWtests/src/unit/test_identifier_validation_family.py877 except Exception:CODE
MEDIUMtests/src/unit/test_usage_logger.py113def writer_thread(thread_id):CODE
MEDIUMtests/src/unit/test_usage_logger.py125def reader_thread():CODE
LOWtests/src/unit/test_usage_logger.py122 except Exception as e:CODE
LOWtests/src/unit/test_usage_logger.py130 except Exception as e:CODE
LOWtests/src/e2e/conftest.py1546 except Exception as exc:CODE
LOWtests/src/e2e/conftest.py1609 except Exception as exc:CODE
LOWtests/src/e2e/conftest.py1754 except Exception as exc:CODE
669 more matches not shown…
Unused Imports648 hits · 574 pts
SeverityFileLineSnippetContext
LOWpackaging/mcpb/generate_manifest.py4CODE
LOWpackaging/binary/pyinstaller_hooks/runtime_hook.py7CODE
LOWpackaging/binary/pyinstaller_hooks/runtime_hook.py15CODE
LOWtests/uat/run_uat.py18CODE
LOWtests/uat/_logging.py3CODE
LOWtests/uat/ha_wait.py8CODE
LOWtests/uat/test_openai_agent.py3CODE
LOWtests/uat/openai_agent.py15CODE
LOWtests/uat/_inprocess.py8CODE
LOWtests/uat/stories/conftest.py10CODE
LOWtests/uat/stories/test_stories.py13CODE
LOWtests/uat/stories/test_run_story_record.py3CODE
LOWtests/uat/stories/test_verify_story.py3CODE
LOWtests/uat/stories/run_story.py35CODE
LOWtests/uat/stories/scripts/verify_story.py3CODE
LOWtests/uat/stories/scripts/ha_query.py27CODE
LOWtests/uat/stories/scripts/measure_tools.py19CODE
LOWtests/haos_image_build/build_image.py16CODE
LOWtests/haos_image_build/screenshot_engine_mock/server.py24CODE
LOW…ts/initial_test_state/custom_components/hacs/update.py3CODE
LOW…itial_test_state/custom_components/hacs/coordinator.py3CODE
LOW…itial_test_state/custom_components/hacs/diagnostics.py3CODE
LOW…/initial_test_state/custom_components/hacs/frontend.py3CODE
LOW…/initial_test_state/custom_components/hacs/__init__.py7CODE
LOW…/initial_test_state/custom_components/hacs/__init__.py112CODE
LOW…ts/initial_test_state/custom_components/hacs/switch.py3CODE
LOW…s/initial_test_state/custom_components/hacs/repairs.py3CODE
LOW…itial_test_state/custom_components/hacs/data_client.py3CODE
LOW…ts/initial_test_state/custom_components/hacs/entity.py3CODE
LOWtests/initial_test_state/custom_components/hacs/base.py3CODE
LOW…itial_test_state/custom_components/hacs/config_flow.py3CODE
LOW…ustom_components/hacs/validate/integration_manifest.py1CODE
LOW…l_test_state/custom_components/hacs/validate/issues.py1CODE
LOW…test_state/custom_components/hacs/validate/archived.py1CODE
LOW…t_state/custom_components/hacs/validate/description.py1CODE
LOW…t_state/custom_components/hacs/validate/information.py1CODE
LOW…test_state/custom_components/hacs/validate/hacsjson.py1CODE
LOW…l_test_state/custom_components/hacs/validate/topics.py1CODE
LOW…l_test_state/custom_components/hacs/validate/brands.py1CODE
LOW…l_test_state/custom_components/hacs/validate/images.py1CODE
LOW…_test_state/custom_components/hacs/validate/manager.py3CODE
LOW…ial_test_state/custom_components/hacs/validate/base.py3CODE
LOW…est_state/custom_components/hacs/websocket/critical.py3CODE
LOW…est_state/custom_components/hacs/websocket/__init__.py3CODE
LOW…state/custom_components/hacs/websocket/repositories.py3CODE
LOW…t_state/custom_components/hacs/websocket/repository.py3CODE
LOW…tial_test_state/custom_components/hacs/utils/backup.py3CODE
LOW…ial_test_state/custom_components/hacs/utils/version.py3CODE
LOW…l_test_state/custom_components/hacs/utils/decorator.py3CODE
LOW…al_test_state/custom_components/hacs/utils/validate.py3CODE
LOW…test_state/custom_components/hacs/utils/file_system.py3CODE
LOW…nitial_test_state/custom_components/hacs/utils/path.py3CODE
LOW…nitial_test_state/custom_components/hacs/utils/json.py3CODE
LOW…itial_test_state/custom_components/hacs/utils/regex.py3CODE
LOW…ial_test_state/custom_components/hacs/utils/filters.py3CODE
LOW…nitial_test_state/custom_components/hacs/utils/data.py3CODE
LOW…st_state/custom_components/hacs/utils/queue_manager.py3CODE
LOW…est_state/custom_components/hacs/repositories/theme.py3CODE
LOW…_state/custom_components/hacs/repositories/__init__.py3CODE
LOW…ate/custom_components/hacs/repositories/integration.py3CODE
588 more matches not shown…
Cross-Language Confusion85 hits · 474 pts
SeverityFileLineSnippetContext
HIGHtests/haos_image_build/build_image.py2364 # the config_entries/disable WS command (disabled_by=null).COMMENT
HIGHtests/lab-setup/test_setup_script.py14 assert 'git -C "$SETUP_HOME/ha-mcp" pull --ff-only || true' not in contentCODE
HIGHtests/src/conftest.py8 cd tests && uv run pytest src/unit/ -n2STRING
HIGHtests/src/conftest.py9 cd tests && uv run pytest src/e2e/ -n2 --dist loadscopeSTRING
HIGHtests/src/unit/test_webhook_proxy_oauth_unified.py980 b'{"refresh_token":null}',CODE
HIGHtests/src/unit/test_alias_fetch_chunking.py208 then carries ``aliases: [null, ...]``. Ingesting the null would putSTRING
HIGHtests/src/unit/test_helper_list_registry_join.py112 """When the registry entry has no custom name (name is null), the currentSTRING
HIGHtests/src/unit/test_anti_fouc_behavior.py168 getItem: (k) => _storage[k] || null,CODE
HIGHtests/src/unit/test_anti_fouc_behavior.py246 getItem: (k) => _storage[k] || null,CODE
HIGHtests/src/unit/test_anti_fouc_behavior.py295 getItem: (k) => _storage[k] || null,CODE
HIGHtests/src/unit/test_oauth_ha_auth.py1181 b'{"refresh_token":null}',CODE
HIGHtests/src/unit/test_best_practice_checker.py2439 """A variables key reading a LATER sibling renders undefined, silently."""STRING
HIGHtests/src/unit/test_server_prefs_seed.py55 getItem: (k) => _storage[k] || null,CODE
HIGHtests/src/unit/test_server_prefs_seed.py63 value: {{ getAttribute: (name) => name === 'data-prefs' ? serverPrefsJson : null }},CODE
HIGHtests/src/unit/test_server_prefs_seed.py83 getItem: (k) => _storage[k] || null,CODE
HIGHtests/src/unit/test_server_prefs_seed.py90 value: { getAttribute: (name) => name === 'data-prefs' ? '__HA_MCP_THEME_PREFS__' : null },CODE
HIGHtests/src/unit/test_server_prefs_seed.py105 getItem: (k) => _storage[k] || null,CODE
HIGHtests/src/unit/test_server_prefs_seed.py111 value: { getAttribute: (name) => name === 'data-prefs' ? 'not valid json {{{' : null },CODE
HIGHtests/src/unit/test_server_prefs_seed.py130 getItem: (k) => _storage[k] || null,CODE
HIGHtests/src/unit/test_server_prefs_seed.py137 value: {{ getAttribute: (name) => name === 'data-prefs' ? serverPrefsJson : null }},CODE
HIGHtests/src/unit/test_graceful_shutdown.py510 """Stdin should not be available when char device but not tty (like /dev/null)."""STRING
HIGHtests/src/unit/test_astro_setup_js_behavior.py552 document.body.dataset.configCode = (codeEl && codeEl.textContent) || '';CODE
HIGHtests/src/unit/test_astro_setup_js_behavior.py554 (instructionsEl && instructionsEl.innerHTML || '').lengthCODE
HIGHtests/src/unit/test_astro_setup_js_behavior.py699 (instructionsEl && instructionsEl.innerHTML) || ''CODE
HIGHtests/src/unit/test_astro_setup_js_behavior.py839 (instructionsEl && instructionsEl.innerHTML) || ''CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py93 # returns null) and the behavioural tests find an empty body.COMMENT
HIGHtests/src/unit/test_settings_ui_js_behavior.py1661 master.indeterminate || master.disabled);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1663 tool.indeterminate && tool.disabled);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1665 !!notice && notice.classList.contains('show'));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1766 !!notice && notice.classList.contains('show'));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1768 master.indeterminate && master.disabled);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1770 tool.indeterminate && tool.disabled);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py2156 (r && r.querySelector('code')) ? r.querySelector('code').textContent : '';CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py2158 String(!!(r && r.querySelector('.policy-edit-predicate')));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py2164 const rem = card ? card.querySelector('.policy-remember-minutes') : null;CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1610 probe.dataset.blocked = String(cb.indeterminate && cb.disabled);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1612 !!notice && notice.classList.contains('show'));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py4570 document.body.setAttribute('data-rendered', String(!!cb && cb.checked));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py5934 !!notice && notice.classList.contains('show'));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6080 + `dismiss=${!!(t && t.querySelector('.ha-toast-dismiss'))}`);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6118 + `dismiss=${!!(t && t.querySelector('.ha-toast-dismiss'))}`);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6408 if (document.activeElement && document.activeElement.blur) {CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6476 const checkedBefore = !!(before && before.checked);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6481 document.body.setAttribute('data-after', String(!!(after && after.checked)));CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py109 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py161 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py218 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py264 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py324 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py423 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py523 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py588 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py665 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py671 let _mqlListener = null;CODE
HIGHtests/src/unit/test_theme_toggle_behavior.py742 getItem: (k) => _storage.hasOwnProperty(k) ? _storage[k] : null,CODE
HIGHtests/src/unit/test_util_helpers.py771 instead of ``{"data": null}``, which would be indistinguishable from aSTRING
HIGHtests/src/unit/test_e2e_wait_helpers.py62 wrapper = _mcp_result('{"data": null}')CODE
HIGHtests/src/unit/test_websocket_client.py511 emits ``{"id": N, "type": "result", "success": true, "result": null}``.STRING
HIGHtests/src/unit/visibility/test_enforcement.py1148 # A degenerate success payload ({"result": [null]}) passes the shapeCOMMENT
HIGHtests/src/e2e/haos_only/test_embedded_server_haos.py349 # carrying type=null), both land before any change event — drain them soCOMMENT
25 more matches not shown…
Over-Commented Block409 hits · 319 pts
SeverityFileLineSnippetContext
LOWpyproject.toml41 # conflicting version demands and any of their installs can replace orCOMMENT
LOWpyproject.toml261]COMMENT
LOWdocker-compose.screenshot.yml1# Example: dashboard-screenshot engine sidecar for Docker / Container installsCOMMENT
LOWdocker-compose.screenshot.yml21 # No `volumes:` here on purpose. Compose merges service volumes by theirCOMMENT
LOWdocker-compose.yml21 # and several settings ask you to restart before they take effect.COMMENT
LOWdocker-compose.yml41 # `docker run` recipe, the OAuth persistence-failure hint, and theCOMMENT
LOW.coderabbit.yaml1# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.jsonCOMMENT
LOW.coderabbit.yaml21 # Bot-authored PRs are knowingly excluded from automatic review. NothingCOMMENT
LOW.coderabbit.yaml41 # the app install got an enrichment comment until this was set explicitly.COMMENT
LOW.coderabbit.yaml101 planning:COMMENT
LOWhomeassistant-addon/config.yaml21# homeassistant-addon-dev/config.yaml.COMMENT
LOWhomeassistant-addon/start.py261 return logging.INFOCOMMENT
LOWhomeassistant-addon/start.py781 os.environ["READ_ONLY_MODE"] = str(read_only_mode).lower()COMMENT
LOWhomeassistant-addon/start.py861 os.environ["ENABLE_BETA_FEATURES"] = str(enable_beta_features).lower()COMMENT
LOWhomeassistant-addon/start.py961 # under the secret path (for direct port access). SeeCOMMENT
LOWtests/pytest.ini81# Per-test timeout (pytest-timeout). A stuck server-side await otherwiseCOMMENT
LOWtests/uat/stories/run_story.py521 # degenerate-loop generation on a local model can outrun even a generousCOMMENT
LOWtests/haos_image_build/requirements.txt1# Build-script dependencies. Installed in CI by the haos-e2e-tests andCOMMENT
LOWtests/haos_image_build/build_image.py61# QEMU's hostfwd needs the port up front (no equivalent of bind-to-0-then-COMMENT
LOWtests/haos_image_build/build_image.py121# ├──────────────────────┼────────────────────────────────────────────────┤COMMENT
LOWtests/haos_image_build/build_image.py141# start=False addons fail to start without config and would block the build:COMMENT
LOWtests/haos_image_build/build_image.py181# Advanced SSH & Web Terminal — used by the inaddon CI tier for networkCOMMENT
LOWtests/haos_image_build/build_image.py201#COMMENT
LOWtests/haos_image_build/build_image.py221#COMMENT
LOWtests/haos_image_build/build_image.py241COMMENT
LOWtests/haos_image_build/build_image.py1121 if addon.repo is not None and c.get("repository") != "core":COMMENT
LOWtests/haos_image_build/build_image.py1141# these makes the bake's start-state stable across boots.COMMENT
LOWtests/haos_image_build/build_image.py1201 _add_repository(ws, addon.repo)COMMENT
LOWtests/haos_image_build/build_image.py1441 if not src_dir.exists():COMMENT
LOWtests/haos_image_build/build_image.py2661 ws.reconnect()COMMENT
LOWtests/initial_test_state/configuration.yaml21# NO `http:` BLOCK HERE, DELIBERATELY. HA 2026.8 moved HTTP config into aCOMMENT
LOWtests/initial_test_state/configuration.yaml41input_number:COMMENT
LOWtests/addon/test_webhook_proxy.py3401 with patch.object(start, "Path", side_effect=path_factory):COMMENT
LOWtests/src/haos_runtime.py81OVMF_CODE_PATH = os.environ.get("HAOS_BUILD_OVMF", "/usr/share/OVMF/OVMF_CODE.fd")COMMENT
LOWtests/src/haos_runtime.py101# deps into the test runtime path).COMMENT
LOWtests/src/haos_runtime.py121# build_image.install_advanced_ssh; available on host portCOMMENT
LOWtests/src/haos_runtime.py161 # of ``-p`` on the command line — ``-p`` makes the credentialCOMMENT
LOWtests/src/haos_runtime.py421COMMENT
LOWtests/src/haos_runtime.py601 # ``home-assistant_v2.db-shm`` in the supervisor data dir. OurCOMMENT
LOW…/unit/test_ha_config_list_helpers_component_routing.py61# HA's PersonStorageCollectionWebsocket overrides the base ws_list_item to sendCOMMENT
LOWtests/src/unit/test_backup_manager.py1441 result = await mgr.diff_snapshot(path.name)COMMENT
LOWtests/src/unit/test_locale_parity.py81COMPONENT_STRINGS = _REPO_ROOT / "custom_components" / "ha_mcp_tools" / "strings.json"COMMENT
LOWtests/src/unit/test_locale_parity.py1021 )COMMENT
LOWtests/src/unit/test_locale_parity.py1241 _component_catalog("en"),COMMENT
LOWtests/src/unit/test_locale_parity.py1441 (TOOL_SOURCES_SURFACE, key, text, sent[key])COMMENT
LOWtests/src/unit/test_locale_parity.py1461 # one surface, and the only other test that sees surface drift isCOMMENT
LOWtests/src/unit/test_locale_parity.py2041 ("Range 1–600.", "Bereich 1-600.", []),COMMENT
LOWtests/src/unit/test_locale_parity.py2341 # the one for the other. The second row is why the run is comparedCOMMENT
LOWtests/src/unit/test_locale_parity.py2361 ("limit is 1-256 MB", "limite de 1-256 go", ["256 MB"]),COMMENT
LOWtests/src/unit/test_settings_ui_js_behavior.py81 # enable_security_policy_tool (#2148) — registersCOMMENT
LOWtests/src/unit/test_settings_ui_js_behavior.py2321#COMMENT
LOWtests/src/unit/test_settings_ui_js_behavior.py4261 _assert_clean_init(result)COMMENT
LOWtests/src/unit/test_config_flow.py801 # replaces. No override stored -> empty field.COMMENT
LOWtests/src/unit/test_translate_locales.py41# Catalogs that carry translated text. A catalog with no `messages` yet has noCOMMENT
LOWtests/src/unit/test_helper_classifier.py161 "error_str,expected_code",COMMENT
LOWtests/src/unit/test_advanced_settings_coverage.py181# becomes a Settings field, so it stays invisible to the web Settings UICOMMENT
LOW…/unit/test_fields_projection_docstring_completeness.py41# ``fields=`` Annotated[..., Field(description=...)] textCOMMENT
LOW…/unit/test_fields_projection_docstring_completeness.py681 f"them, or document why the tool is intentionally excluded."COMMENT
LOWtests/src/unit/test_context_injection.py581 )COMMENT
LOWtests/src/unit/test_wait_helpers.py321 mock_client,COMMENT
349 more matches not shown…
Modern Structural Boilerplate309 hits · 313 pts
SeverityFileLineSnippetContext
LOWtests/test_env_manager.py34logger = logging.getLogger(__name__)CODE
LOWtests/uat/stories/conftest.py36logger = logging.getLogger(__name__)CODE
LOWtests/uat/stories/test_stories.py25logger = logging.getLogger(__name__)CODE
LOW…ts/initial_test_state/custom_components/hacs/update.py148 def _update_download_progress(self, data: dict) -> None:CODE
LOW…ts/initial_test_state/custom_components/hacs/update.py155 def _update_in_progress(self, progress: int | bool) -> None:CODE
LOW…ts/initial_test_state/custom_components/hacs/entity.py68 def _update_and_write_state(self, _: Any) -> None:CODE
LOWtests/initial_test_state/custom_components/hacs/base.py136 def update_from_dict(self, data: dict) -> None:CODE
LOWtests/initial_test_state/custom_components/hacs/base.py388 def set_stage(self, stage: HacsStage | None) -> None:CODE
LOWtests/initial_test_state/custom_components/hacs/base.py765 def set_active_categories(self) -> None:CODE
LOWtests/initial_test_state/custom_components/hacs/base.py994 async def update_repository(repository: HacsRepository) -> None:CODE
LOWtests/initial_test_state/custom_components/hacs/base.py1010 async def update_coordinators() -> None:CODE
LOW…nitial_test_state/custom_components/hacs/utils/json.py5__all__ = ["json_loads"]CODE
LOW…est_state/custom_components/hacs/repositories/theme.py113 def update_filenames(self) -> None:CODE
LOW…st_state/custom_components/hacs/repositories/plugin.py111 def update_filenames(self) -> None:CODE
LOW…st_state/custom_components/hacs/repositories/plugin.py205 async def update_dashboard_resources(self) -> None:CODE
LOW…e/custom_components/hacs/repositories/python_script.py105 def update_filenames(self) -> None:CODE
LOW…test_state/custom_components/hacs/repositories/base.py194 def update_data(self, data: dict, action: bool = False) -> None:CODE
LOW…test_state/custom_components/hacs/repositories/base.py256 def update_data(self, data: dict) -> None:CODE
LOW…test_state/custom_components/hacs/repositories/base.py467 async def update_repository(self, ignore_issues=False, force=False) -> None:CODE
LOW…test_state/custom_components/hacs/repositories/base.py1018 def update_filenames(self) -> None:CODE
LOWtests/src/unit/_embedded_stubs.py355 def set_cookie(self, name: str, value: str, **attrs: Any) -> None:CODE
LOW…src/unit/test_ha_dev_server_entry_component_routing.py69 def set_flow(self, entry_id: str, flow: Any) -> None:CODE
LOWtests/src/unit/test_ha_search_component_routing.py127def _setup_visibility_disabled(tmp_path: Any, monkeypatch: Any) -> None:CODE
LOWtests/src/unit/test_ha_overview_component_routing.py153def _setup_visibility_disabled(tmp_path: Any, monkeypatch: Any) -> None:CODE
LOWtests/src/unit/test_wait_helpers.py374 def set_unsubscribe_failure(self, exc: Exception | None) -> None:CODE
LOWtests/src/e2e/conftest.py96logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/conftest.py665def _setup_config_permissions(config_path: Path) -> None:CODE
LOWtests/src/e2e/tools/test_radio_management.py35logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_security_policy_tool.py32logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_deep_search_exact_match.py17logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_bm25_fuzzy_search.py18logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_skills_resources.py19logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_search_entities.py21logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_create_custom_tool.py24logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_dev_mode_tools.py32logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_deep_search_many_configs.py24logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_deep_search.py12logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_logbook.py15logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_search_reference_graph.py45logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_tools_knx.py20logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_tools_energy.py18logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_ha_call_event.py14logger = logging.getLogger(__name__)CODE
LOW…s/src/e2e/haos_only/test_dashboard_screenshot_addon.py202async def _set_options(mcp_client: Any, slug: str, options: dict[str, Any]) -> None:CODE
LOWtests/src/e2e/haos_only/test_manage_addon_modes.py50logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/haos_only/test_stdio_entity_visibility.py20logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/haos_only/test_webhook_proxy_addon.py164async def _set_options(mcp_client: Any, slug: str, options: dict[str, Any]) -> None:CODE
LOWtests/src/e2e/basic/test_connection.py11logger = logging.getLogger(__name__)CODE
LOW…/src/e2e/workflows/webhook_proxy/test_webhook_proxy.py23logger = logging.getLogger(__name__)CODE
LOW…rc/e2e/workflows/scenes/test_yaml_scene_not_storage.py37logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/scenes/test_lifecycle.py28logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py25logger = logging.getLogger(__name__)CODE
LOW…flows/device_control/test_action_service_resolution.py27logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/device_control/test_lights.py23logger = logging.getLogger(__name__)CODE
LOW…/e2e/workflows/device_control/test_operation_status.py14logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/calendar/test_calendar.py29logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/core/test_service.py14logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/core/test_templates.py14logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/core/test_assist_pipeline.py16logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/core/test_bulk.py24logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/workflows/core/test_state.py14logger = logging.getLogger(__name__)CODE
249 more matches not shown…
Docstring Block Structure51 hits · 255 pts
SeverityFileLineSnippetContext
HIGHtests/src/e2e/workflows/device_control/test_lights.py27Validate and return entity state data. Args: state_data: Parsed MCP result from ha_get_state entitySTRING
HIGHtests/src/e2e/utilities/wait_helpers.py358 Poll an MCP tool until the result satisfies a predicate. Useful when an entity was just created and needs timeSTRING
HIGHtests/src/e2e/utilities/wait_helpers.py667Subscribe → sample-after-subscribe → wait-for-event pattern, test-side. Mirrors :func:`ha_mcp.tools.util_helpers._wSTRING
HIGHsrc/ha_mcp/tools/backup.py209 Retrieve default backup password from Home Assistant configuration. Args: ws_client: Connected WebSockSTRING
HIGHsrc/ha_mcp/tools/device_control.py108 Universal smart device control with async verification. This tool provides intelligent device control STRING
HIGHsrc/ha_mcp/tools/util_helpers.py99 Parse flexibly JSON string or return existing dict/list. Args: param: JSON string, dict, list, or NoneSTRING
HIGHsrc/ha_mcp/tools/tools_utility.py131 Evaluate Jinja2 templates using Home Assistant's template engine. This tool allows testing and debuggiSTRING
HIGHsrc/ha_mcp/tools/helpers.py124Reject ``None``, empty, or whitespace-only identifier values. Surfaces a structured ``VALIDATION_INVALID_PARAMETER`STRING
HIGHsrc/ha_mcp/tools/helpers.py456 Convert an exception to a structured error response. This function maps common exception types to appropriate STRING
HIGHsrc/ha_mcp/tools/smart_search/_entities.py71 Search entities with fuzzy matching and typo tolerance. Args: query: Search query (can be STRING
HIGHsrc/ha_mcp/tools/smart_search/_entities.py454 Get entities grouped by area/room using the HA registries for accurate area resolution. Uses the entitSTRING
HIGHsrc/ha_mcp/_vendor/websockets/server.py238 Check a handshake request and negotiate extensions and subprotocol. This function doesn't check the ``STRING
HIGHsrc/ha_mcp/_vendor/websockets/server.py317 Handle the Origin HTTP request header. Args: headers: WebSocket handshake request headers.STRING
HIGHsrc/ha_mcp/_vendor/websockets/server.py355 Handle the Sec-WebSocket-Extensions HTTP request header. Accept or reject each extension proposed in tSTRING
HIGHsrc/ha_mcp/_vendor/websockets/server.py433 Handle the Sec-WebSocket-Protocol HTTP request header. Args: headers: WebSocket handshake STRING
HIGHsrc/ha_mcp/_vendor/websockets/server.py460 Pick a subprotocol among those offered by the client. If several subprotocols are supported by both thSTRING
HIGHsrc/ha_mcp/_vendor/websockets/proxy.py49 Parse and validate a proxy. Args: proxy: proxy. Returns: Parsed proxy. Raises: STRING
HIGHsrc/ha_mcp/_vendor/websockets/client.py178 Handle the Sec-WebSocket-Extensions HTTP response header. Check that each extension is supported, as wSTRING
HIGHsrc/ha_mcp/_vendor/websockets/uri.py61 Parse and validate a WebSocket URI. Args: uri: WebSocket URI. Returns: Parsed WebSocket USTRING
HIGHsrc/ha_mcp/_vendor/websockets/trio/connection.py266 Receive the next message. When the connection is closed, :meth:`recv` raises :exc:`~websocketsSTRING
HIGHsrc/ha_mcp/_vendor/websockets/trio/connection.py344 Receive the next message frame by frame. This method is designed for receiving fragmented messages. ItSTRING
HIGHsrc/ha_mcp/_vendor/websockets/trio/connection.py683 Send a Ping_. .. _Ping: https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2 A ping maSTRING
HIGHsrc/ha_mcp/_vendor/websockets/legacy/handshake.py38 Check a handshake request received from the client. This function doesn't verify that the request is an HTTP/1STRING
HIGHsrc/ha_mcp/_vendor/websockets/legacy/server.py560 Perform the server side of the opening handshake. Args: origins: List of acceptable valuesSTRING
HIGHsrc/ha_mcp/_vendor/websockets/legacy/protocol.py787 Send a Ping_. .. _Ping: https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2 A ping maSTRING
HIGHsrc/ha_mcp/_vendor/websockets/extensions/base.py22 Decode an incoming frame. Args: frame: Incoming frame. max_size: Maximum payloSTRING
HIGHsrc/ha_mcp/_vendor/websockets/extensions/base.py76 Process parameters received from the server. Args: params: Parameters received from the seSTRING
HIGHsrc/ha_mcp/_vendor/websockets/extensions/base.py107 Process parameters received from the client. Args: params: Parameters received from the clSTRING
HIGHsrc/ha_mcp/_vendor/websockets/sync/connection.py273 Receive the next message. When the connection is closed, :meth:`recv` raises :exc:`~websocketsSTRING
HIGHsrc/ha_mcp/_vendor/websockets/sync/connection.py352 Receive the next message frame by frame. This method is designed for receiving fragmented messages. ItSTRING
HIGHsrc/ha_mcp/_vendor/websockets/sync/connection.py616 Send a Ping_. .. _Ping: https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2 A ping maSTRING
HIGHsrc/ha_mcp/_vendor/websockets/sync/utils.py26 Calculate a timeout from a deadline. Args: raise_if_elapsed: Whether to raise :exc:`TimeouSTRING
HIGHsrc/ha_mcp/_vendor/websockets/asyncio/connection.py250 Receive the next message. When the connection is closed, :meth:`recv` raises :exc:`~websocketsSTRING
HIGHsrc/ha_mcp/_vendor/websockets/asyncio/connection.py328 Receive the next message frame by frame. This method is designed for receiving fragmented messages. ItSTRING
HIGHsrc/ha_mcp/_vendor/websockets/asyncio/connection.py659 Send a Ping_. .. _Ping: https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2 A ping maSTRING
HIGHsrc/ha_mcp/utils/python_sandbox.py340 Execute a validated Python expression in a restricted environment. The expression runs with ``variables`` avaiSTRING
HIGHsrc/ha_mcp/utils/python_sandbox.py410 Execute validated Python expression against a ``config`` dict. Thin wrapper around :func:`safe_execute_expressSTRING
HIGHsrc/ha_mcp/client/supervisor_client.py31Construct an ``httpx.AsyncClient`` pre-configured for the Supervisor REST API. Args: timeout: Per-request tSTRING
HIGHsrc/ha_mcp/client/rest_client.py409 Make authenticated request to Home Assistant API and parse JSON body. Args: method: HTTP mSTRING
HIGHsrc/ha_mcp/client/rest_client.py1173 Convert entity_id to unique_id if needed, or return unique_id as-is. Args: identifier: EitSTRING
HIGHsrc/ha_mcp/client/rest_client.py1209 Get automation configuration by unique_id or entity_id. Args: identifier: Either automatioSTRING
HIGHsrc/ha_mcp/client/rest_client.py1244 Create new automation or update existing one. Args: config: Automation configuration dictiSTRING
HIGHsrc/ha_mcp/client/rest_client.py1381 Delete automation configuration by entity_id or unique_id. Args: identifier: Either automaSTRING
HIGHsrc/ha_mcp/client/rest_client.py1437 Start a config entry flow. Args: handler: Integration domain (e.g., "template", "group") STRING
HIGHsrc/ha_mcp/client/rest_client.py1482 Submit data for a config flow step. Args: flow_id: Flow ID from start_config_flow or previSTRING
HIGHsrc/ha_mcp/client/rest_client.py1505 Abort an in-progress config entry flow. Args: flow_id: Flow ID to abort Returns: STRING
HIGHsrc/ha_mcp/client/rest_client.py1521 Start an options flow for a config entry. The options flow allows configuring an existing integration STRING
HIGHsrc/ha_mcp/client/rest_client.py1547 Submit data for an options flow step. Args: flow_id: Flow ID from start_options_flow or prSTRING
HIGHsrc/ha_mcp/client/rest_client.py1568 Abort an in-progress options flow without saving changes. Args: flow_id: Flow ID to abort STRING
HIGHsrc/ha_mcp/client/rest_client.py1692 Get config entry details. Note: Home Assistant doesn't have a direct REST API endpoint for individual STRING
HIGHsrc/ha_mcp/client/rest_client.py1722Delete a config entry via REST API. The WebSocket command ``config_entries/delete`` is not supported by STRING
Self-Referential Comments77 hits · 226 pts
SeverityFileLineSnippetContext
MEDIUM…s/uat/stories/catalog/s02_automation_motion_light.yaml18 # Create an input_boolean to simulate a motion sensorCOMMENT
MEDIUM…ories/catalog/s07_automation_update_add_condition.yaml18 # Create the automation to be modifiedCOMMENT
MEDIUM…ories/catalog/s07_automation_update_add_condition.yaml34 # Create a presence indicatorCOMMENT
MEDIUMtests/addon/test_webhook_proxy.py543 # Create the package object first so submodules have a parent with __path__.COMMENT
MEDIUMtests/src/unit/test_oauth.py377 # Create a stateless refresh token (as exchange_authorization_code would)COMMENT
MEDIUMtests/src/unit/test_oauth.py1303 # Create a cached clientCOMMENT
MEDIUMtests/src/unit/test_graceful_shutdown.py74 # Create a mock eventCOMMENT
MEDIUMtests/src/unit/test_graceful_shutdown.py226 # Create a mock MCP that runs foreverCOMMENT
MEDIUMtests/src/unit/policy/test_approval_queue.py275 # Create a second entry — forces eviction of 'a' (only one pending)COMMENT
MEDIUMtests/src/e2e/test_entity_visibility.py147 # Create a label and assign it to the probe so the entity-registry entryCOMMENT
MEDIUMtests/src/e2e/tools/test_deep_search_exact_match.py25 # Create an automation with a distinctive entity referenceCOMMENT
MEDIUMtests/src/e2e/tools/test_deep_search_exact_match.py141 # Create a dashboard with a distinctive entity referenceCOMMENT
MEDIUMtests/src/e2e/tools/test_bm25_fuzzy_search.py106 # Create an automation with terms that are non-adjacentCOMMENT
MEDIUMtests/src/e2e/tools/test_deep_search.py46 # Create the automationCOMMENT
MEDIUMtests/src/e2e/tools/test_deep_search.py116 # Create a test script with distinctive contentCOMMENT
MEDIUMtests/src/e2e/tools/test_deep_search.py128 # Create the scriptCOMMENT
MEDIUMtests/src/e2e/tools/test_deep_search.py203 # Create a test input_select helper with distinctive optionsCOMMENT
MEDIUMtests/src/e2e/tools/test_deep_search.py209 # Create the helperCOMMENT
MEDIUMtests/src/e2e/workflows/calendar/test_calendar.py215 # Create an event for tomorrowCOMMENT
MEDIUMtests/src/e2e/workflows/core/test_service.py194 # Create a test automation firstCOMMENT
MEDIUMtests/src/e2e/workflows/core/test_service.py373 # Create a test input_booleanCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_label_crud.py307 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_label_crud.py397 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_label_crud.py438 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_label_crud.py479 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_helper_crud.py1907 # Create a dedicated areaCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_helper_crud.py1971 # Create a dedicated labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_helper_crud.py2042 # Create a dedicated areaCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_helper_crud.py2332 # Create a dedicated area + labelCOMMENT
MEDIUM…/e2e/workflows/auto_backup/test_capture_and_restore.py228 # Create an automation to snapshot. We do NOT edit it — theCOMMENT
MEDIUMtests/src/e2e/workflows/labels/test_label_operations.py49 # Create the test labelCOMMENT
MEDIUMtests/src/e2e/workflows/labels/test_label_operations.py341 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py733 # Create a file with a list valueCOMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py1038 # Create a file with !secret tag under 'template' keyCOMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py1264 # Create the theme file.COMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py1437 # Create the key — no prior value, so capture is skipped.COMMENT
MEDIUM…s/src/e2e/workflows/filesystem/test_file_operations.py686 # Create a file to deleteCOMMENT
MEDIUMtests/src/e2e/workflows/groups/test_verification.py69 # Create a group firstCOMMENT
MEDIUM…/workflows/integrations/test_integration_management.py95 # Create a temporary light group helperCOMMENT
MEDIUMtests/src/e2e/workflows/system/test_system_tools.py825 # Create a test notificationCOMMENT
MEDIUMtests/src/e2e/workflows/dashboards/test_resources.py374 # Create a resource firstCOMMENT
MEDIUMtests/src/e2e/workflows/dashboards/test_resources.py414 # Create a known inline resource so the flag has something to act on;COMMENT
MEDIUM…sts/src/e2e/workflows/registry/test_voice_assistant.py96 # Create a test entity firstCOMMENT
MEDIUM…sts/src/e2e/workflows/registry/test_voice_assistant.py145 # Create a test entityCOMMENT
MEDIUM…sts/src/e2e/workflows/registry/test_voice_assistant.py202 # Create a test entityCOMMENT
MEDIUM…sts/src/e2e/workflows/registry/test_device_registry.py399 # Create the labels this test assigns. Creation happens inside theCOMMENT
MEDIUMtests/src/e2e/workflows/automation/test_lifecycle.py921 # Create the automation - THIS IS THE KEY TESTCOMMENT
MEDIUM…/src/e2e/workflows/automation/test_python_transform.py578 # Create a categoryCOMMENT
MEDIUMtests/src/e2e/workflows/convenience/test_backup.py271 # Create a backup (which internally retrieves config/password)COMMENT
MEDIUM…2e/workflows/categories/test_config_tool_categories.py28 # Create a category firstCOMMENT
MEDIUM…2e/workflows/categories/test_config_tool_categories.py87 # Create a category firstCOMMENT
MEDIUM…2e/workflows/categories/test_config_tool_categories.py145 # Create a categoryCOMMENT
MEDIUM…2e/workflows/categories/test_config_tool_categories.py254 # Create a categoryCOMMENT
MEDIUM…2e/workflows/categories/test_config_tool_categories.py317 # Create a categoryCOMMENT
MEDIUM…2e/workflows/categories/test_config_tool_categories.py361 # Create a category for helpersCOMMENT
MEDIUM…sts/src/e2e/workflows/categories/test_category_crud.py235 # Create a test categoryCOMMENT
MEDIUM…sts/src/e2e/workflows/categories/test_category_crud.py281 # Create a test categoryCOMMENT
MEDIUMtests/src/e2e/workflows/entities/test_entity_remove.py19 # Create a temporary input_boolean to removeCOMMENT
MEDIUM…s/src/e2e/workflows/entities/test_entity_management.py41 # Create a test areaCOMMENT
MEDIUM…s/src/e2e/workflows/entities/test_entity_management.py349 # Create a test areaCOMMENT
17 more matches not shown…
Deep Nesting277 hits · 224 pts
SeverityFileLineSnippetContext
LOWpackaging/mcpb/generate_manifest.py18CODE
LOWhomeassistant-addon/start.py82CODE
LOWtests/test_env_manager.py284CODE
LOWtests/test_env_manager.py307CODE
LOWtests/test_env_manager.py145CODE
LOWtests/uat/run_uat.py560CODE
LOWtests/uat/ha_wait.py24CODE
LOWtests/uat/ha_wait.py60CODE
LOWtests/uat/openai_agent.py137CODE
LOWtests/uat/stories/run_story.py173CODE
LOWtests/uat/stories/run_story.py213CODE
LOWtests/uat/stories/run_story.py257CODE
LOWtests/haos_image_build/build_image.py349CODE
LOWtests/haos_image_build/build_image.py373CODE
LOWtests/haos_image_build/build_image.py391CODE
LOWtests/initial_test_state/custom_components/hacs/base.py430CODE
LOWtests/initial_test_state/custom_components/hacs/base.py523CODE
LOWtests/initial_test_state/custom_components/hacs/base.py838CODE
LOWtests/initial_test_state/custom_components/hacs/base.py433CODE
LOW…t_state/custom_components/hacs/validate/information.py21CODE
LOW…ial_test_state/custom_components/hacs/utils/filters.py8CODE
LOW…nitial_test_state/custom_components/hacs/utils/data.py156CODE
LOW…st_state/custom_components/hacs/repositories/plugin.py111CODE
LOW…test_state/custom_components/hacs/repositories/base.py194CODE
LOW…test_state/custom_components/hacs/repositories/base.py360CODE
LOW…test_state/custom_components/hacs/repositories/base.py410CODE
LOW…test_state/custom_components/hacs/repositories/base.py657CODE
LOW…test_state/custom_components/hacs/repositories/base.py781CODE
LOW…test_state/custom_components/hacs/repositories/base.py1046CODE
LOW…test_state/custom_components/hacs/repositories/base.py1171CODE
LOW…test_state/custom_components/hacs/repositories/base.py684CODE
LOWtests/src/haos_runtime.py476CODE
LOWtests/src/haos_runtime.py1654CODE
LOWtests/src/haos_runtime.py1986CODE
LOWtests/src/haos_runtime.py2033CODE
LOWtests/src/unit/test_area_filter_search.py46CODE
LOWtests/src/unit/test_haos_image_workflow_shape.py91CODE
LOWtests/src/unit/test_lite_docstrings.py736CODE
LOWtests/src/unit/test_lite_docstrings.py303CODE
LOWtests/src/unit/test_graceful_shutdown.py354CODE
LOWtests/src/unit/test_locale_parity.py399CODE
LOWtests/src/unit/test_read_only.py881CODE
LOWtests/src/unit/test_read_only.py888CODE
LOWtests/src/unit/test_settings_ui_handler_selection.py84CODE
LOWtests/src/unit/test_advanced_settings_coverage.py246CODE
LOWtests/src/unit/test_advanced_settings_coverage.py297CODE
LOW…/unit/test_fields_projection_docstring_completeness.py242CODE
LOW…/unit/test_fields_projection_docstring_completeness.py293CODE
LOW…/unit/test_fields_projection_docstring_completeness.py386CODE
LOW…/unit/test_fields_projection_docstring_completeness.py433CODE
LOW…/unit/test_fields_projection_docstring_completeness.py654CODE
LOWtests/src/unit/test_skill_content_wiring.py282CODE
LOWtests/src/unit/test_skill_content_wiring.py310CODE
LOWtests/src/e2e/conftest.py548CODE
LOWtests/src/e2e/conftest.py567CODE
LOWtests/src/e2e/conftest.py1062CODE
LOWtests/src/e2e/conftest.py1427CODE
LOWtests/src/e2e/conftest.py1555CODE
LOWtests/src/e2e/conftest.py1964CODE
LOWtests/src/e2e/conftest.py2479CODE
217 more matches not shown…
Structural Annotation Overuse79 hits · 141 pts
SeverityFileLineSnippetContext
LOWtests/src/unit/test_oauth.py758 # Step 5: Verify access token contains only ha_token (no ha_url - SSRF fix)COMMENT
LOWtests/src/unit/test_oauth.py764 # Step 6: Use stateless refresh token to get new access tokenCOMMENT
LOWtests/src/unit/test_oauth.py778 # Step 7: Verify refreshed access token is valid and carries HA credentialsCOMMENT
LOWtests/src/unit/test_oauth.py785 # Step 8: Verify chained refresh also worksCOMMENT
LOWtests/src/unit/test_oauth.py688 # Step 1: Client registrationCOMMENT
LOWtests/src/unit/test_oauth.py702 # Step 2: Authorization requestCOMMENT
LOWtests/src/unit/test_oauth.py722 # Step 3: Simulate consent form submissionCOMMENT
LOWtests/src/unit/test_oauth.py746 # Step 4: Exchange auth code for tokensCOMMENT
LOWtests/src/unit/test_flow_multistep.py563 # Step 1: the user stepCOMMENT
LOWtests/src/unit/test_flow_multistep.py571 # Step 2: the state_characteristic step — MUST receive its key,COMMENT
LOWtests/src/e2e/tools/test_create_custom_tool.py1053 # Step 1: save a tool we'll then delete.COMMENT
LOWtests/src/e2e/tools/test_create_custom_tool.py1065 # Step 2: delete it from inside the sandbox.COMMENT
LOWtests/src/e2e/tools/test_create_custom_tool.py1086 # Step 3: confirm running it now fails (entry is gone).COMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py554 # Step 1: List automation blueprintsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py564 # Step 2: List script blueprintsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py574 # Step 3: If blueprints exist, explore oneCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py640 # Step 1: List available blueprintsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py655 # Step 2: Get blueprint details to understand required inputsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py664 # Step 3: Create automation from blueprint (no trigger/action fields)COMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py712 # Step 4: Wait for automation to be registered, then verify no trigger/action fieldsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py720 # Step 5: Clean upCOMMENT
LOWtests/src/e2e/workflows/system/test_system_tools.py716 # Step 1: Check configuration (folded into ha_get_system_health)COMMENT
LOWtests/src/e2e/workflows/system/test_system_tools.py728 # Step 2: Reload automationsCOMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1183 # Step 2: Get blueprint details to understand required inputsCOMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1192 # Step 3: Create script from blueprint (no sequence field)COMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1238 # Step 4: Wait for script to be registered, then verify no sequence fieldCOMMENT
LOWtests/src/e2e/workflows/services/test_list_services.py373 # Step 1: Discover light services (use full detail to see fields)COMMENT
LOWtests/src/e2e/workflows/services/test_list_services.py383 # Step 2: Find a light entity to test withCOMMENT
LOWtests/src/e2e/workflows/services/test_list_services.py400 # Step 3: Use discovered service to control lightCOMMENT
LOWtests/src/e2e/workflows/services/test_list_services.py410 # Step 4: Call discovered serviceCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md31## Step 0: Triage (Diff Analysis + Custom Story Design)COMMENT
LOW.claude/skills/bat-story-eval/SKILL.md108## Step 1: Run Baseline VersionCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md167## Step 2: Run Target VersionCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md182## Step 3: White-Box AnalysisCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md215## Step 4: Score & CompareCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md259## Step 5: Update JSONLCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md270## Step 6: ReportCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md327## Step 7: Investigate OutliersCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md341## Step 8: Tool Description SizeCOMMENT
LOW…kills/bat-story-eval/references/regression-protocol.md29## Step 1: Re-Run (Flakiness Check)COMMENT
LOW…kills/bat-story-eval/references/regression-protocol.md45## Step 2: Control Run (Baseline Version)COMMENT
LOW…kills/bat-story-eval/references/regression-protocol.md62## Step 3: Cross-Agent CheckCOMMENT
LOW…kills/bat-story-eval/references/regression-protocol.md92## Step 4: DiagnoseCOMMENT
LOW…kills/bat-story-eval/references/regression-protocol.md133## Step 5: ReportCOMMENT
LOW.claude/skills/my-pr-checker/SKILL.md12## Step 1: Full PR AssessmentCOMMENT
LOW.claude/skills/my-pr-checker/SKILL.md34## Step 2: Triage CommentsCOMMENT
LOW.claude/skills/my-pr-checker/SKILL.md42## Step 3: Fix Code IssuesCOMMENT
LOW.claude/skills/my-pr-checker/SKILL.md59## Step 4: Resolve Each Thread (both steps required)COMMENT
LOW.claude/skills/my-pr-checker/SKILL.md80## Step 5: Wait and Re-checkCOMMENT
LOW.claude/skills/my-pr-checker/SKILL.md91## Step 6: Final ReportCOMMENT
LOW.claude/skills/issue-analysis/SKILL.md15## Step 1: Fetch Issue DetailsCOMMENT
LOW.claude/skills/issue-analysis/SKILL.md26## Step 2: Research Phase (before drawing conclusions)COMMENT
LOW.claude/skills/issue-analysis/SKILL.md33## Step 3: Assess Other Open Issues (for priority context)COMMENT
LOW.claude/skills/issue-analysis/SKILL.md39## Step 4: Determine LabelsCOMMENT
LOW.claude/skills/issue-analysis/SKILL.md51## Step 5: Draft Analysis for UserCOMMENT
LOW.claude/skills/issue-analysis/SKILL.md57## Step 6: Apply Labels and Post CommentCOMMENT
LOWdocs/macOS-uv-guide.md7## Step 1: Create a Claude AccountCOMMENT
LOWdocs/macOS-uv-guide.md11## Step 2: Run the InstallerCOMMENT
LOWdocs/macOS-uv-guide.md60## Step 3: Install or Restart Claude DesktopCOMMENT
LOWdocs/macOS-uv-guide.md66## Step 4: Test ItCOMMENT
19 more matches not shown…
Redundant / Tautological Comments58 hits · 87 pts
SeverityFileLineSnippetContext
LOWhomeassistant-addon/start.py109 # Check if we have a stored secret pathCOMMENT
LOWtests/src/unit/_js_harness.py469 # Check if this is a data-purpose script and incorporate thatCOMMENT
LOWtests/src/e2e/conftest.py872 # Check if HACS is installed and frontend is missing or invalid.COMMENT
LOWtests/src/e2e/conftest.py2525 # Check if container is actually runningCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py686 # Check if it was our validation or HA's validation that failedCOMMENT
LOWtests/src/e2e/workflows/device_control/test_lights.py39 # Check if this is a successful response with entity dataCOMMENT
LOWtests/src/e2e/workflows/core/test_history.py527 # Check if requested types are in responseCOMMENT
LOWtests/src/e2e/workflows/config/test_label_crud.py317 # Assign label to entityCOMMENT
LOWtests/src/e2e/workflows/config/test_helper_crud.py1176 # Check if 'data' key exists (not 'success' key which doesn't exist in parse_mcp_result)COMMENT
LOWtests/src/e2e/workflows/config/test_helper_crud.py1195 # Check if 'data' key exists (not 'success' key which doesn't exist in parse_mcp_result)COMMENT
LOW…s/src/e2e/workflows/filesystem/test_file_operations.py154 # Check if we got the "not installed" errorCOMMENT
LOW…s/src/e2e/workflows/filesystem/test_file_operations.py638 # Write file with nested directoriesCOMMENT
LOW…s/src/e2e/workflows/filesystem/test_file_operations.py964 # Check if the ha_mcp_tools service is actually availableCOMMENT
LOWtests/src/e2e/workflows/todo/test_lifecycle.py581 # Check if any todo entities foundCOMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1212 # Check if it was our validation or HA's validation that failedCOMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py356 if state_data.get("success"): # Check if state is accessibleCODE
LOWtests/src/e2e/workflows/automation/test_helpers.py54 # Check if we have valid entity dataCOMMENT
LOWtests/src/e2e/workflows/automation/test_helpers.py1156 # Check if our test helper is in the resultsCOMMENT
LOWtests/src/e2e/workflows/convenience/test_backup.py59 # Check if backup password is configuredCOMMENT
LOWtests/src/e2e/workflows/convenience/test_backup.py131 # Check if backup password is configuredCOMMENT
LOWtests/src/e2e/workflows/convenience/test_backup.py289 # Check if error is about missing passwordCOMMENT
LOW…sts/src/e2e/workflows/categories/test_category_crud.py247 # Assign category to entityCOMMENT
LOW…s/src/e2e/workflows/entities/test_entity_management.py52 # Assign entity to areaCOMMENT
LOW…s/src/e2e/workflows/entities/test_entity_management.py96 # Assign entity to area firstCOMMENT
LOWtests/src/e2e/utilities/wait_helpers.py170 # Check if 'data' key exists (not 'success' key which doesn't exist in parse_mcp_result)COMMENT
LOWtests/src/e2e/utilities/assertions.py62 # Check if this is an error response (from ToolError). fastmcp'sCOMMENT
LOWtests/src/e2e/utilities/cleanup.py201 # Check if entity ID or name contains test patternsCOMMENT
LOWcustom_components/ha_mcp_tools/__init__.py1208 # Check if it's one of the explicitly allowed files in config rootCOMMENT
LOWcustom_components/ha_mcp_tools/__init__.py1212 # Check if path starts with an allowed directoryCOMMENT
LOWscripts/install.sh250# Check if config file exists and handle accordinglyCOMMENT
LOWscripts/install.sh258 # Check if ha-mcp is already configuredCOMMENT
LOW.github/workflows/_build-and-release.yml186 # Check if release exists and is draftCOMMENT
LOWsite/src/data/tools.json3655 "description": "Evaluate Jinja2 templates using Home Assistant's template engine.\n\nThis tool allows testing and deCODE
LOWhomeassistant-addon-webhook-proxy-dev/start.py970 # Check if integration already loaded (user restarted fast)COMMENT
LOWhomeassistant-addon-webhook-proxy/start.py968 # Check if integration already loaded (user restarted fast)COMMENT
LOWsrc/ha_mcp/__main__.py834 # Check if stdin is available (fails in Docker without -i flag)COMMENT
LOWsrc/ha_mcp/__main__.py213 # Check if stdin is closedSTRING
LOWsrc/ha_mcp/tools/tools_yaml_config.py466 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_traces.py488 # Check if enabled (state is 'on' for automations, 'off' is disabled)COMMENT
LOWsrc/ha_mcp/tools/tools_traces.py498 # Check if tracing is stored - only for automationsCOMMENT
LOWsrc/ha_mcp/tools/tools_filesystem.py830 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_filesystem.py545 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_filesystem.py688 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_filesystem.py955 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_updates.py389 # Check if rate limitedCOMMENT
LOWsrc/ha_mcp/tools/tools_updates.py451 # Check if rate limitedCOMMENT
LOWsrc/ha_mcp/tools/tools_config_dashboards.py2544 # Check if request failed (after potential retry)COMMENT
LOWsrc/ha_mcp/tools/tools_hacs.py394 # Check if HACS is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_hacs.py458 # Check if HACS is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_hacs.py551 # Check if HACS is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_hacs.py846 # Check if HACS is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_utility.py183 {{ is_state('light.living_room', 'on') }} # Check if entity has specific stateSTRING
LOWsrc/ha_mcp/tools/tools_service.py1103 # Check if this is a timeout - for service calls, timeouts typicallyCOMMENT
LOWsrc/ha_mcp/_vendor/websockets/trio/connection.py1023 # Check if the connection is expected to close soon.COMMENT
LOWsrc/ha_mcp/_vendor/websockets/sync/connection.py978 # Check if the connection is expected to close soon.COMMENT
LOWsrc/ha_mcp/_vendor/websockets/asyncio/connection.py902 # Check if the connection is expected to close soon.COMMENT
LOWsrc/ha_mcp/auth/provider.py660 # Check if authorization request is expired (5 minutes)COMMENT
LOWsrc/ha_mcp/utils/operation_manager.py133 # Check if operation has timed outCOMMENT
AI Slop Vocabulary34 hits · 82 pts
SeverityFileLineSnippetContext
MEDIUMpyproject.toml166 "ASYNC", # async best practicesCODE
MEDIUMpyproject.toml168 "LOG", # logging best practicesCODE
MEDIUMpyproject.toml275 # runtime harness, the image bake, wait_helpers) to talk to HomeCOMMENT
MEDIUMtests/haos_image_build/build_image.py202# The secret_path option must be set deterministically so the test harnessCOMMENT
MEDIUMtests/src/haos_runtime.py1918 # The e2e harness logs at INFO, so a DEBUG-only cause would leave aCOMMENT
MEDIUMtests/src/unit/_js_harness.py28# Path to the harness — repo-relative, resolved once at import time.COMMENT
MEDIUMtests/src/unit/_js_harness.py193 # degrade to U+FFFD and surface in the harness's own error reporting.COMMENT
MEDIUMtests/src/unit/test_oauth_autoapprove.py227 # this HTTP-level harness and must not leak into the rest of the unit suite.COMMENT
MEDIUMtests/src/unit/test_server_prefs_seed.py71 # the harness result, but we can infer correctness by re-running theSTRING
MEDIUMtests/src/unit/test_tools_utility_supervisor_logs.py251 # module attribute) is robust to either `import httpx` or a futureCOMMENT
MEDIUMtests/src/unit/test_locale_parity.py2436 # The harness puts `scripts/` on PYTHONPATH, and the child would inheritCOMMENT
MEDIUMtests/src/unit/test_astro_setup_js_behavior.py796 # placeholder in this harness), so this doesn't assert its contents.STRING
MEDIUMtests/src/unit/test_build_skill_content.py115 assert result == {"SKILL.md": "# best practices\n"}CODE
MEDIUMtests/src/unit/test_build_skill_content.py49 (skill / "SKILL.md").write_text("# best practices\n")CODE
MEDIUMtests/src/unit/test_settings_ui_js_behavior.py965 // assertion below — querying via JS is more robust thanCOMMENT
MEDIUMtests/src/unit/test_settings_ui_js_behavior.py996 # flipped one. The harness's `responses: [...]` shape advancesSTRING
MEDIUMtests/src/unit/test_settings_ui_js_behavior.py4262 # The harness serialises window globals into result.dom — pickSTRING
MEDIUMtests/src/unit/test_helper_schema_inline.py509 """The high-leverage simple-helper validation gates insideSTRING
MEDIUMtests/src/e2e/tools/test_radio_management.py68 # robust to exactly where they land.COMMENT
MEDIUMtests/src/e2e/tools/test_search_entities.py1788 # penalty → 80. Asserting ``< 100`` keeps the test robust to smallCOMMENT
MEDIUMtests/src/e2e/tools/test_deep_search_many_configs.py120 # failing setup — keeps the fixture robust if the WS path dropsCOMMENT
MEDIUM…/e2e/workflows/auto_backup/test_capture_and_restore.py515 # ``replace`` ops on a path ending in ``/alias`` to stay robustCOMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py1544 # robust whether the read fails because the file is missing orCOMMENT
MEDIUM…/workflows/integrations/test_integration_management.py397 # integration in the harness that implements async_step_reconfigure, and itCOMMENT
MEDIUM…/workflows/integrations/test_integration_management.py555 # only observable because the harness installs ha_mcp_toolsCOMMENT
MEDIUMtests/src/e2e/workflows/system/test_system_tools.py783 # Log comprehensive overviewCOMMENT
MEDIUMtests/src/e2e/workflows/automation/test_lifecycle.py185 # Extract automation entity ID with robust error handlingCOMMENT
MEDIUMcustom_components/ha_mcp_tools/websocket_api.py5844 # the unit-test harness MagicMock-stubs ``homeassistant.core``, so the decoratorCOMMENT
MEDIUMcustom_components/ha_mcp_tools/ui_panel.py519# harness for every surface); coverage = the node --check syntax test plus theCOMMENT
MEDIUMscripts/bake_pagination_seed.py38HOST_PORT = 32788 # off the dev-harness 32769 to avoid clashesCODE
MEDIUMsrc/ha_mcp/settings_ui/__init__.py107# esbuild/jsdom JS harness (tests/js/harness.mjs) -- `const DEFAULT_PINNED =COMMENT
MEDIUMsrc/ha_mcp/tools/tools_bug_report.py620 # Broad by design — the bug-report path must stay robust whatever theCOMMENT
MEDIUMsrc/ha_mcp/_vendor/websockets/frames.py194 # and robust. Also support frames fragmented within UTF-8 sequences.COMMENT
MEDIUMsrc/ha_mcp/utils/fuzzy_search.py465 """Calculate a comprehensive fuzzy score for an entity name/domain.STRING
Verbosity Indicators38 hits · 74 pts
SeverityFileLineSnippetContext
LOWtests/src/unit/test_oauth.py758 # Step 5: Verify access token contains only ha_token (no ha_url - SSRF fix)COMMENT
LOWtests/src/unit/test_oauth.py764 # Step 6: Use stateless refresh token to get new access tokenCOMMENT
LOWtests/src/unit/test_oauth.py778 # Step 7: Verify refreshed access token is valid and carries HA credentialsCOMMENT
LOWtests/src/unit/test_oauth.py785 # Step 8: Verify chained refresh also worksCOMMENT
LOWtests/src/unit/test_oauth.py688 # Step 1: Client registrationCOMMENT
LOWtests/src/unit/test_oauth.py702 # Step 2: Authorization requestCOMMENT
LOWtests/src/unit/test_oauth.py722 # Step 3: Simulate consent form submissionCOMMENT
LOWtests/src/unit/test_oauth.py746 # Step 4: Exchange auth code for tokensCOMMENT
LOWtests/src/unit/test_flow_multistep.py563 # Step 1: the user stepCOMMENT
LOWtests/src/unit/test_flow_multistep.py571 # Step 2: the state_characteristic step — MUST receive its key,COMMENT
LOWtests/src/e2e/tools/test_create_custom_tool.py1053 # Step 1: save a tool we'll then delete.COMMENT
LOWtests/src/e2e/tools/test_create_custom_tool.py1065 # Step 2: delete it from inside the sandbox.COMMENT
LOWtests/src/e2e/tools/test_create_custom_tool.py1086 # Step 3: confirm running it now fails (entry is gone).COMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py554 # Step 1: List automation blueprintsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py564 # Step 2: List script blueprintsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py574 # Step 3: If blueprints exist, explore oneCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py640 # Step 1: List available blueprintsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py655 # Step 2: Get blueprint details to understand required inputsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py664 # Step 3: Create automation from blueprint (no trigger/action fields)COMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py712 # Step 4: Wait for automation to be registered, then verify no trigger/action fieldsCOMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py720 # Step 5: Clean upCOMMENT
LOWtests/src/e2e/workflows/system/test_system_tools.py716 # Step 1: Check configuration (folded into ha_get_system_health)COMMENT
LOWtests/src/e2e/workflows/system/test_system_tools.py728 # Step 2: Reload automationsCOMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1183 # Step 2: Get blueprint details to understand required inputsCOMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1192 # Step 3: Create script from blueprint (no sequence field)COMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1238 # Step 4: Wait for script to be registered, then verify no sequence fieldCOMMENT
LOWtests/src/e2e/workflows/services/test_list_services.py373 # Step 1: Discover light services (use full detail to see fields)COMMENT
LOWtests/src/e2e/workflows/services/test_list_services.py383 # Step 2: Find a light entity to test withCOMMENT
LOWtests/src/e2e/workflows/services/test_list_services.py400 # Step 3: Use discovered service to control lightCOMMENT
LOWtests/src/e2e/workflows/services/test_list_services.py410 # Step 4: Call discovered serviceCOMMENT
LOWscripts/install.sh89# Step 1: Check/install uvCOMMENT
LOWscripts/install.sh200 # Step 3: Pre-download dependenciesCOMMENT
LOWscripts/install.sh239# Step 2: Configure Claude DesktopCOMMENT
LOWscripts/install.sh372# Step 3: Pre-download dependenciesCOMMENT
LOWsrc/ha_mcp/tools/tools_integrations.py2485 # Step 1: resolve target → entry_id (typed reason on failure)COMMENT
LOWsrc/ha_mcp/tools/tools_integrations.py2492 # Step 2: collect sub-entity IDs for the wait phaseCOMMENT
LOWsrc/ha_mcp/tools/tools_integrations.py2498 # Step 3: delete the config entryCOMMENT
LOWsrc/ha_mcp/tools/tools_integrations.py2508 # Step 4: wait for all sub-entities to be removed in parallelCOMMENT
Modern AI Meta-Vocabulary18 hits · 48 pts
SeverityFileLineSnippetContext
MEDIUMtests/src/unit/test_settings_ui_js_behavior.py122 # Full modal scaffold (mirrors settings.html) so the focus-trapCOMMENT
MEDIUMtests/src/unit/test_e2e_wait_helpers.py3The test-side migration in #1382 added a WS-event-driven path to threeSTRING
MEDIUMtests/src/unit/test_tools_bug_report.py2007 # what biases agents and invites hallucinations).COMMENT
MEDIUMtests/src/unit/test_tools_bug_report.py2015 # hallucination bait we removed.COMMENT
MEDIUMtests/src/unit/test_tools_bug_report.py1838 # hallucination-bait we removed.COMMENT
MEDIUMtests/src/e2e/haos_only/test_integration_setup.py59# substantial new test scaffolding; for now the integration-setupCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_ws_event_waiter.py2E2E regression coverage for #1152 — WS-event-driven entity-registration wait.STRING
MEDIUMtests/src/e2e/workflows/config/test_ws_event_waiter.py46 """Regression coverage for the #1152 WS-event-driven waiter."""STRING
MEDIUMtests/src/e2e/utilities/wait_helpers.py285 # event-driven re-samples against the right baseline.COMMENT
MEDIUMtests/src/e2e/utilities/wait_helpers.py440 PR #1382 for the broader event-driven-wait migration.STRING
MEDIUMtests/src/e2e/utilities/wait_helpers.py1047 # the sample-after-subscribe pattern the other event-driven waitersCOMMENT
MEDIUMsrc/ha_mcp/config.py992# Bounds added purely as UI/POST guardrails (no Field constraint):COMMENT
MEDIUMsrc/ha_mcp/tools/log_sources.py231 # the LLM context window during debugging workflows.COMMENT
MEDIUMsrc/ha_mcp/tools/util_helpers.py820# --- WS-event-driven wait helpers (#1152) -----------------------------------COMMENT
MEDIUMsrc/ha_mcp/tools/util_helpers.py831# The new pattern is WS-event-driven with a REST sample after subscribe and aCOMMENT
MEDIUMsrc/ha_mcp/tools/tools_code.py65# scaffolding rather than per-user data, that ``run_saved`` executes with theCOMMENT
MEDIUMsrc/ha_mcp/tools/hacs_registration.py158# dominant cost in the HAOS E2E suite per #1515); 10 s still leaves event-drivenCOMMENT
MEDIUMsrc/ha_mcp/tools/hacs_registration.py253 # we subscribed successfully but the event-driven pathCOMMENT
AI Structural Patterns52 hits · 40 pts
SeverityFileLineSnippetContext
LOWtests/uat/stories/run_story.py400CODE
LOWtests/src/unit/test_config_get_component_routing.py88CODE
LOWtests/src/unit/_js_harness.py132CODE
LOWtests/src/unit/test_component_ws_search.py189CODE
LOWtests/src/unit/test_component_ws_search.py285CODE
LOWtests/src/unit/test_component_ws_search.py431CODE
LOWtests/src/unit/test_component_ws_search.py557CODE
LOWtests/src/unit/test_component_ws_search.py652CODE
LOWsrc/ha_mcp/tools/tools_config_helpers.py4392CODE
LOWsrc/ha_mcp/tools/tools_energy.py380CODE
LOWsrc/ha_mcp/tools/log_sources.py181CODE
LOWsrc/ha_mcp/tools/tools_history.py137CODE
LOWsrc/ha_mcp/tools/backup.py1684CODE
LOWsrc/ha_mcp/tools/tools_search.py2030CODE
LOWsrc/ha_mcp/tools/tools_search.py2755CODE
LOWsrc/ha_mcp/tools/tools_search.py3894CODE
LOWsrc/ha_mcp/tools/tools_search.py4471CODE
LOWsrc/ha_mcp/tools/tools_traces.py48CODE
LOWsrc/ha_mcp/tools/tools_dev.py825CODE
LOWsrc/ha_mcp/tools/tools_logs.py165CODE
LOWsrc/ha_mcp/tools/tools_registry.py860CODE
LOWsrc/ha_mcp/tools/tools_config_automations.py524CODE
LOWsrc/ha_mcp/tools/tools_system.py583CODE
LOWsrc/ha_mcp/tools/tools_dashboard_screenshot.py118CODE
LOWsrc/ha_mcp/tools/tools_assist_pipeline.py540CODE
LOWsrc/ha_mcp/tools/tools_config_dashboards.py1769CODE
LOWsrc/ha_mcp/tools/tools_config_dashboards.py2740CODE
LOWsrc/ha_mcp/tools/tools_integrations.py468CODE
LOWsrc/ha_mcp/tools/tools_integrations.py1805CODE
LOWsrc/ha_mcp/tools/tools_addons.py1637CODE
LOWsrc/ha_mcp/tools/tools_addons.py2266CODE
LOWsrc/ha_mcp/tools/tools_addons.py3532CODE
LOWsrc/ha_mcp/tools/tools_entities.py1533CODE
LOWsrc/ha_mcp/tools/tools_service.py1638CODE
LOWsrc/ha_mcp/tools/tools_service.py1970CODE
LOWsrc/ha_mcp/tools/smart_search/_deep.py122CODE
LOWsrc/ha_mcp/tools/smart_search/_deep.py1244CODE
LOWsrc/ha_mcp/tools/smart_search/_deep.py1352CODE
LOWsrc/ha_mcp/tools/smart_search/_overview.py20CODE
LOWsrc/ha_mcp/tools/smart_search/_entities.py58CODE
LOWsrc/ha_mcp/_vendor/websockets/trio/server.py361CODE
LOWsrc/ha_mcp/_vendor/websockets/trio/client.py236CODE
LOWsrc/ha_mcp/_vendor/websockets/legacy/server.py90CODE
LOWsrc/ha_mcp/_vendor/websockets/legacy/server.py970CODE
LOWsrc/ha_mcp/_vendor/websockets/legacy/protocol.py156CODE
LOWsrc/ha_mcp/_vendor/websockets/legacy/client.py418CODE
LOWsrc/ha_mcp/_vendor/websockets/sync/server.py467CODE
LOWsrc/ha_mcp/_vendor/websockets/sync/client.py131CODE
LOWsrc/ha_mcp/_vendor/websockets/asyncio/server.py478CODE
LOWsrc/ha_mcp/_vendor/websockets/asyncio/client.py302CODE
LOWsrc/ha_mcp/dashboard_screenshot/capture.py832CODE
LOWsrc/ha_mcp/transforms/categorized_search.py314CODE
Hallucination Indicators3 hits · 20 pts
SeverityFileLineSnippetContext
CRITICALtests/src/unit/test_webhook_proxy_liveness.py100 assert oauth.web.json_response.call_args.kwargs.get("status") in (None, 200)CODE
CRITICALtests/src/unit/test_session_disconnect_log_filter.py32 exception -- reproducing the actual shape mcp.server.lowlevel.server.Server.run()STRING
CRITICALsrc/ha_mcp/log_filters.py95 ``mcp.server.lowlevel.server.Server.run()`` dispatches each incomingSTRING
Fake / Example Data5 hits · 4 pts
SeverityFileLineSnippetContext
LOWtests/src/unit/test_config.py457 monkeypatch.setenv("SUPERVISOR_TOKEN", "fake-token-for-test")CODE
LOWtests/src/unit/test_config.py494 monkeypatch.setenv("SUPERVISOR_TOKEN", "fake-token-for-test")CODE
LOWtests/src/e2e/policy/test_redact_secrets.py119 assert "placeholder" in error.get("message", ""), bodyCODE
LOWsrc/ha_mcp/settings_ui/settings.js109 for (const attribute of ['placeholder', 'title', 'aria-label']) {CODE
LOWsrc/ha_mcp/tools/tools_bug_report.py1689- Email addresses -> Replace with "user@example.com"CODE
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWdocker-compose.screenshot.yml57# Usage:COMMENT
LOWdocker-compose.yml45# Usage:COMMENT
Overly Generic Function Names1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtests/src/unit/test_python_sandbox.py330 expr = "def helper():\n return 1"CODE