AI Slop Code RIsk Monitor

homeassistant-ai/ha-mcp

The Unofficial and Awesome Home Assistant MCP Server

32.7 High pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for homeassistant-ai/ha-mcp, a Python project with 5,018 GitHub stars. SynthScan examined 819,318 lines of code across 1982 source files, recording 21543 pattern matches distributed across 24 syntactic categories. The legacy adjusted pattern signal is 32.7 (High pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

32.7
Adjusted Signal
32.7
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
5.0K
Stars
Python
Language
819.3K
Lines of Code
2.0K
Files
21.5K
Pattern Hits
2026-10-12
Scan Date
0.47
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 59.8/100 · HIGH

Can maintainers explain intent, assumptions, and trade-offs? 16195 finding(s).

Hallucinated Dependency & Supply Chain Risk 13.2/100 · LOW

Are imports declared and package/API names verified? 1778 finding(s).

Agent Over-Engineering Ratio 73.9/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 18190 finding(s).

PR Review Velocity Impact 83.4/100 · CRITICAL

Which changes need focused human review? 21543 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 3HIGH 933MEDIUM 1606LOW 19001

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 21543 distinct pattern matches across 24 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers14453 hits · 12378 pts
SeverityFileLineSnippetContext
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.py293def resolve_effective_log_level() -> int:CODE
LOWhomeassistant-addon/start.py327def maybe_auto_enable_beta_master(config: dict[str, Any], subflags: list[str]) -> None:CODE
LOWhomeassistant-addon/start.py373def cleanup_stale_migration_marker(data_dir: Path) -> None:CODE
LOWhomeassistant-addon/start.py392def _warn_gated_off_beta_subflags(CODE
LOWhomeassistant-addon/start.py418def _arm_kill_signal_diagnostics_if_debug(effective_log_level: int) -> None:CODE
LOW⚡tests/uat/test_openai_agent.py806 async def test_none_when_model_not_listed(self, monkeypatch):CODE
LOW⚡tests/uat/test_openai_agent.py815 async def test_none_when_entry_has_no_quant(self, monkeypatch):CODE
LOW⚡tests/uat/test_openai_agent.py822 async def test_none_on_transport_error(self, monkeypatch):CODE
LOW⚡tests/uat/test_openai_agent.py831 async def test_none_on_http_error_status(self, monkeypatch):CODE
LOW⚡tests/uat/test_openai_agent.py855 def test_extracts_requested_and_context_tokens(self):CODE
LOW⚡tests/uat/test_openai_agent.py861 def test_none_for_unrelated_bad_request(self):CODE
LOW⚡tests/uat/test_openai_agent.py865 def test_marker_without_numbers_returns_none_pair(self):CODE
LOW⚡tests/uat/test_openai_agent.py870 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.py65 def test_warmup_failure_is_reported_on_stderr(self):CODE
LOWtests/uat/test_openai_agent.py93 def test_basic_tool_conversion(self):CODE
LOWtests/uat/test_openai_agent.py123 def test_tool_with_no_parameters(self):CODE
LOWtests/uat/test_openai_agent.py142 async def test_direct_text_response(self):CODE
LOWtests/uat/test_openai_agent.py169 async def test_no_think_sends_enable_thinking_false(self):CODE
LOWtests/uat/test_openai_agent.py203 async def test_no_think_default_omits_extra_body(self):CODE
LOWtests/uat/test_openai_agent.py225 async def test_no_think_warns_when_backend_still_reasons(self, caplog):CODE
LOWtests/uat/test_openai_agent.py253 async def test_no_think_silent_when_backend_honors_it(self, caplog):CODE
LOWtests/uat/test_openai_agent.py281 async def test_reasoning_tokens_captured_in_tokens_thoughts(self):CODE
LOWtests/uat/test_openai_agent.py308 async def test_tokens_thoughts_zero_when_backend_omits_details(self):CODE
LOWtests/uat/test_openai_agent.py333 async def test_no_think_warns_on_reasoning_content_without_token_detail(CODE
LOWtests/uat/test_openai_agent.py365 async def test_no_think_warns_on_inline_think_block(self, caplog):CODE
LOWtests/uat/test_openai_agent.py394 async def test_no_think_warns_only_once_across_turns(self, caplog):CODE
LOWtests/uat/test_openai_agent.py488 async def test_tool_call_failure_counted(self):CODE
LOWtests/uat/test_openai_agent.py529 async def test_malformed_tool_arguments_reported_as_error(self):CODE
LOWtests/uat/test_openai_agent.py570 async def test_max_iterations_reached(self):CODE
LOWtests/uat/test_openai_agent.py635 async def test_empty_choices_raises(self):CODE
LOWtests/uat/test_openai_agent.py673 async def test_no_think_prepends_token_and_sends_kwarg(self):CODE
LOWtests/uat/test_openai_agent.py691 async def test_default_omits_prepend_and_kwarg(self):CODE
LOWtests/uat/test_openai_agent.py714 def test_non_text_content_falls_back_to_str(self):CODE
LOWtests/uat/test_openai_agent.py724 def test_no_content_falls_back_to_str(self):CODE
LOWtests/uat/test_openai_agent.py738 async def test_returns_first_model_id(self):CODE
LOWtests/uat/test_openai_agent.py747 async def test_raises_when_no_models(self):CODE
LOWtests/uat/test_openai_agent.py889 async def test_overflow_raises_context_window_exceeded(self):CODE
LOWtests/uat/test_openai_agent.py912 async def test_unrelated_bad_request_propagates(self):CODE
LOWtests/uat/openai_agent.py570async def create_and_warm_openai_client(CODE
LOWtests/uat/test_openai_agent_search_trace.py79 async def test_trace_lists_the_tools_a_search_returned(CODE
LOWtests/uat/test_openai_agent_search_trace.py104 async def test_trace_flags_a_search_result_it_cannot_read(self):CODE
LOW⚡tests/uat/stories/test_run_story_record.py74def test_tokens_thoughts_defaults_to_zero_when_absent(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py83def test_model_from_call_site_param(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py89def test_model_call_site_arg_wins_over_test_phase(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py95def test_model_from_test_phase(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py101def test_model_defaults_to_none_when_absent(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py108def test_quantization_threaded_into_record(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py114def test_quantization_defaults_to_none_when_absent(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py121def test_extract_model_reads_claude_session(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py127def test_extract_model_none_on_malformed_session(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py134def test_model_from_claude_session_fallback(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py144def test_compute_passed_incomplete_run_fails_despite_verify():CODE
LOW⚡tests/uat/stories/test_run_story_record.py233def test_clean_record_omits_error_fields(tmp_path):CODE
LOW⚡tests/uat/stories/test_run_story_record.py245def test_run_completed_uses_explicit_flag():CODE
LOW⚡tests/uat/stories/test_run_story_record.py251def test_run_completed_fail_closed_on_missing_summary():CODE
LOW⚡tests/uat/stories/test_run_story_record.py261def test_run_completed_present_summary_missing_flag_uses_exit_code():CODE
14393 more matches not shown…
Decorative Section Separators1420 hits · 4790 pts
SeverityFileLineSnippetContext
MEDIUMtests/uat/run_uat.py74# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py76# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py138# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py140# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py307# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py309# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py653# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py655# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py773# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/run_uat.py775# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/conftest.py44# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/conftest.py46# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py63# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/conftest.py65# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/conftest.py124# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/conftest.py126# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/conftest.py136# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/conftest.py138# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/test_run_story_record.py141# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/test_run_story_record.py143# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/test_run_story_record.py240# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/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
MEDIUM⚡tests/uat/stories/run_story.py98# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/run_story.py100# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/run_story.py107# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/run_story.py109# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/run_story.py301# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/run_story.py303# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/run_story.py345# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/run_story.py364# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/run_story.py366# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py177# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py179# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py670# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py672# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py720# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py722# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py773# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py775# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py993# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/uat/stories/run_story.py995# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/uat/stories/scripts/verify_story.py130# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/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.py125# ┌──────────────────────┬────────────────────────────────────────────────┐COMMENT
MEDIUMtests/haos_image_build/build_image.py127# ├──────────────────────┼────────────────────────────────────────────────┤COMMENT
MEDIUMtests/haos_image_build/build_image.py141# └──────────────────────┴────────────────────────────────────────────────┘COMMENT
MEDIUMtests/haos_image_build/build_image.py280# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/haos_image_build/build_image.py282# ---------------------------------------------------------------------------COMMENT
1360 more matches not shown…
Cross-File Repetition483 hits · 2415 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_rest_client_retry.py0``homeassistantclient`` with stubbed internals — no real network.STRING
HIGHtests/src/unit/test_rest_client_admin_gate.py0``homeassistantclient`` with stubbed internals — no real network.STRING
HIGHtests/src/unit/test_rest_client_states.py0``homeassistantclient`` with stubbed internals — no real network.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/_ratchet_repo.py0an empty git repository with no exclusions and an empty baseline.STRING
HIGHtests/src/unit/test_module_size_ratchet.py0an empty git repository with no exclusions and an empty baseline.STRING
HIGHtests/src/unit/test_duplicate_code_ratchet.py0an empty git repository with no exclusions and an empty baseline.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_embedded.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/cloudhook.py0buffer the upstream reply into a plain response, with a deadline for cloudhooks.STRING
HIGH…ant-addon-webhook-proxy-dev/mcp_proxy_dev/cloudhook.py0buffer the upstream reply into a plain response, with a deadline for cloudhooks.STRING
HIGH…meassistant-addon-webhook-proxy/mcp_proxy/cloudhook.py0buffer the upstream reply into a plain response, with a deadline for cloudhooks.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
423 more matches not shown…
Unused Imports1604 hits · 1387 pts
SeverityFileLineSnippetContext
LOWtests/uat/run_uat.py18CODE
LOWtests/uat/conftest.py8CODE
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/test_openai_agent_search_trace.py3CODE
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/test_run_story_cli.py3CODE
LOWtests/uat/stories/run_story.py41CODE
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
1544 more matches not shown…
Excessive Try-Catch Wrapping1000 hits · 963 pts
SeverityFileLineSnippetContext
LOW.gemini/styleguide.md210except Exception as exc:CODE
LOWhomeassistant-addon/start.py122 except Exception as e: # noqa: BLE001CODE
LOWhomeassistant-addon/start.py132 except Exception as e: # noqa: BLE001CODE
LOWhomeassistant-addon/start.py314 except Exception as e: # noqa: BLE001CODE
LOWhomeassistant-addon/start.py435 except Exception as e: # noqa: BLE001CODE
LOWhomeassistant-addon/start.py498 except Exception as e: # noqa: BLE001CODE
LOWhomeassistant-addon/start.py623 except Exception as e: # noqa: BLE001CODE
LOWtests/test_env_manager.py232 except Exception as e: # noqa: BLE001CODE
LOWtests/test_env_manager.py262 except Exception: # noqa: BLE001CODE
LOWtests/test_env_manager.py353 except Exception as e: # noqa: BLE001CODE
LOWtests/uat/run_uat.py125 except Exception:CODE
LOWtests/uat/openai_agent.py162 except Exception as e: # best-effort enrichment, never fatal # noqa: BLE001CODE
LOWtests/uat/openai_agent.py317 except Exception as e: # noqa: BLE001CODE
LOWtests/uat/openai_agent.py615 except Exception:CODE
LOWtests/uat/openai_agent.py626 except Exception:CODE
LOW⚡tests/uat/stories/conftest.py147 except Exception as e:CODE
LOWtests/uat/stories/conftest.py160 except Exception as e: # noqa: BLE001CODE
LOW⚡tests/uat/stories/run_story.py294 except Exception as exc: # noqa: BLE001CODE
LOW⚡tests/uat/stories/run_story.py354 except Exception:CODE
LOWtests/uat/stories/run_story.py155 except Exception:CODE
LOWtests/uat/stories/run_story.py213 except Exception as exc: # noqa: BLE001CODE
LOWtests/uat/stories/run_story.py239 except Exception as exc: # noqa: BLE001CODE
LOWtests/uat/stories/run_story.py550 except Exception as e:CODE
LOWtests/uat/stories/run_story.py686 except Exception as e: # noqa: BLE001CODE
LOWtests/uat/stories/run_story.py706 except Exception as e: # noqa: BLE001CODE
LOWtests/uat/stories/run_story.py1064 except Exception as e: # noqa: BLE001CODE
LOWtests/uat/stories/run_story.py1086 except Exception as e: # noqa: BLE001CODE
LOWtests/uat/stories/scripts/verify_story.py69 except Exception: # noqa: BLE001CODE
LOWtests/uat/stories/scripts/verify_story.py88 except Exception: # noqa: BLE001CODE
LOWtests/uat/stories/scripts/verify_story.py151 except Exception: # noqa: BLE001CODE
LOWtests/uat/stories/scripts/verify_story.py231 except Exception as e: # noqa: BLE001CODE
LOWtests/uat/stories/scripts/verify_story.py257 except Exception as e: # noqa: BLE001CODE
LOWtests/uat/stories/scripts/verify_story.py285 except Exception as e: # noqa: BLE001CODE
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.py148 except Exception as e: # noqa: BLE001STRING
MEDIUMtests/haos_image_build/build_image.py815def send() -> None:CODE
LOWtests/haos_image_build/build_image.py490 except Exception as e: # noqa: BLE001CODE
LOWtests/haos_image_build/build_image.py823 except Exception as exc: # noqa: BLE001CODE
LOWtests/haos_image_build/build_image.py2805 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.py262 except Exception as exc: # noqa: BLE001CODE
LOWtests/src/haos_runtime.py268 except Exception as probe_err: # noqa: BLE001 # 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: # noqa: BLE001CODE
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.py871 except Exception: # noqa: BLE001CODE
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: # noqa: BLE001CODE
LOWtests/src/unit/test_usage_logger.py130 except Exception as e: # noqa: BLE001CODE
LOWtests/src/e2e/_conftest_readiness.py447 except Exception as exc: # noqa: BLE001CODE
LOWtests/src/e2e/_conftest_readiness.py510 except Exception as exc: # noqa: BLE001CODE
LOWtests/src/e2e/conftest.py233 except Exception as e: # noqa: BLE001CODE
LOWtests/src/e2e/conftest.py390 except Exception as e: # noqa: BLE001CODE
940 more matches not shown…
Cross-Language Confusion161 hits · 896 pts
SeverityFileLineSnippetContext
HIGHtests/haos_image_build/build_image.py2452 # the config_entries/disable WS command (disabled_by=null).COMMENT
HIGH⚡tests/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.py1036 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_tools_entities.py2464 [[None, "Maanlamp"], '[null, "Maanlamp"]'],CODE
HIGHtests/src/unit/test_tools_entities.py2417 """Registry has [null]; a string-only list must not drop it."""STRING
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_custom_card_limits.py50 + ("undefined;" if module else "globalThis;")STRING
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
HIGH⚡tests/src/unit/test_oauth_ha_auth.py1181 b'{"refresh_token":null}',CODE
HIGH⚡tests/src/unit/test_best_practice_checker.py2438 """A variables key reading a LATER sibling renders undefined, silently."""STRING
HIGHtests/src/unit/test_e2e_lane_env_shape.py521 " - run: cd tests && uv run pytest src/e2e/performance/ -m perf\n"CODE
HIGHtests/src/unit/test_e2e_lane_env_shape.py524 " - run: cd tests && uv run pytest src/e2e/ --tb=short\n",CODE
HIGH⚡tests/src/unit/test_server_prefs_seed.py55 getItem: (k) => _storage[k] || null,CODE
HIGH⚡tests/src/unit/test_server_prefs_seed.py63 value: {{ getAttribute: (name) => name === 'data-prefs' ? serverPrefsJson : null }},CODE
HIGH⚡tests/src/unit/test_server_prefs_seed.py83 getItem: (k) => _storage[k] || null,CODE
HIGH⚡tests/src/unit/test_server_prefs_seed.py90 value: { getAttribute: (name) => name === 'data-prefs' ? '__HA_MCP_THEME_PREFS__' : null },CODE
HIGH⚡tests/src/unit/test_server_prefs_seed.py105 getItem: (k) => _storage[k] || null,CODE
HIGH⚡tests/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
HIGH⚡tests/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
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py40 if (path !== null) {CODE
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py467 if (opts && opts.method === 'PUT' && ++putCount === %d) await sleep(1500);CODE
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py555 await fill(null, '"garage"');CODE
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py220 await fill(null, '"turn_off"');STRING
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py359 if (opts && opts.method === 'PUT' && !held) { held = true; await sleep(2000); }STRING
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py391 if (opts && opts.method === 'PUT' && !held) { held = true; await sleep(2000); }STRING
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py436 if (opts && opts.method === 'PUT' && !held) { held = true; await sleep(2000); }STRING
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py619 await fill(null, '"garage"');STRING
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py656 await fill(null, '"turn_off"');STRING
HIGH…sts/src/unit/test_settings_ui_policy_and_conditions.py731 .filter(n => !(n.classList && n.classList.contains('visually-hidden')))STRING
HIGHtests/src/unit/test_settings_ui_js_behavior.py95 # returns null) and the behavioural tests find an empty body.COMMENT
HIGH⚡tests/src/unit/test_settings_ui_js_behavior.py1680 master.indeterminate || master.disabled);CODE
HIGH⚡tests/src/unit/test_settings_ui_js_behavior.py1682 tool.indeterminate && tool.disabled);CODE
HIGH⚡tests/src/unit/test_settings_ui_js_behavior.py1684 !!notice && notice.classList.contains('show'));CODE
HIGH⚡tests/src/unit/test_settings_ui_js_behavior.py1785 !!notice && notice.classList.contains('show'));CODE
HIGH⚡tests/src/unit/test_settings_ui_js_behavior.py1787 master.indeterminate && master.disabled);CODE
HIGH⚡tests/src/unit/test_settings_ui_js_behavior.py1789 tool.indeterminate && tool.disabled);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1629 probe.dataset.blocked = String(cb.indeterminate && cb.disabled);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py1631 !!notice && notice.classList.contains('show'));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py2186 const rem = card ? card.querySelector('.policy-remember-minutes') : null;CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py4553 document.body.setAttribute('data-rendered', String(!!cb && cb.checked));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py5917 !!notice && notice.classList.contains('show'));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6063 + `dismiss=${!!(t && t.querySelector('.ha-toast-dismiss'))}`);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6101 + `dismiss=${!!(t && t.querySelector('.ha-toast-dismiss'))}`);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6391 if (document.activeElement && document.activeElement.blur) {CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6459 const checkedBefore = !!(before && before.checked);CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py6464 document.body.setAttribute('data-after', String(!!(after && after.checked)));CODE
HIGHtests/src/unit/test_settings_ui_js_behavior.py7915 policyState.toolsEffect = null;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
101 more matches not shown…
Empty Error Handlers170 hits · 840 pts
SeverityFileLineSnippetContext
HIGHtests/uat/run_uat.py426except json.JSONDecodeError:CODE
HIGHtests/uat/stories/run_story.py459except json.JSONDecodeError:CODE
HIGHtests/uat/stories/scripts/ha_query.py142except json.JSONDecodeError:CODE
HIGHtests/haos_image_build/build_image.py327except (OSError, UnicodeDecodeError):CODE
HIGH…/initial_test_state/custom_components/hacs/__init__.py82except BaseException: # lgtm [py/catch-base-exception] pylint: disable=broad-exceptCODE
HIGH…/initial_test_state/custom_components/hacs/__init__.py212except AttributeError:CODE
HIGH…/initial_test_state/custom_components/hacs/__init__.py113except ImportError:CODE
HIGHtests/initial_test_state/custom_components/hacs/base.py1036except HacsException:CODE
HIGH…ial_test_state/custom_components/hacs/utils/version.py25except (AwesomeVersionException, AttributeError, KeyError):CODE
HIGH…nitial_test_state/custom_components/hacs/utils/data.py164except HomeAssistantError:CODE
HIGH…st_state/custom_components/hacs/repositories/plugin.py108except BaseException: # lgtm [py/catch-base-exception] pylint: disable=broad-exceptCODE
HIGH…test_state/custom_components/hacs/repositories/base.py727except BaseException:CODE
HIGHtests/src/unit/conftest.py102except ImportError:CODE
HIGHtests/src/unit/_js_harness.py312except OSError:CODE
HIGHtests/src/unit/test_graceful_shutdown.py258except asyncio.CancelledError:CODE
HIGHtests/src/unit/test_graceful_shutdown.py294except (TimeoutError, asyncio.CancelledError):CODE
HIGHtests/src/unit/test_graceful_shutdown.py342except (TimeoutError, asyncio.CancelledError):CODE
HIGHtests/src/unit/test_graceful_shutdown.py418except asyncio.CancelledError:CODE
HIGHtests/src/unit/test_python_sandbox.py661except PythonSandboxValidationError:CODE
HIGHtests/src/unit/test_python_sandbox.py672except PythonSandboxExecutionError:CODE
HIGHtests/src/unit/test_identifier_validation_family.py699except (AttributeError, KeyError, TypeError):CODE
HIGHtests/src/unit/test_identifier_validation_family.py871except Exception: # noqa: BLE001CODE
HIGHtests/src/unit/policy/test_middleware.py1420except ToolError:CODE
HIGHtests/src/e2e/_conftest_readiness.py201except requests.exceptions.RequestException:CODE
HIGHtests/src/e2e/_conftest_haos.py298except (CODE
HIGHtests/src/e2e/_conftest_seed.py194except FileNotFoundError:CODE
HIGHtests/src/e2e/_conftest_embedded.py295except requests.exceptions.RequestException:CODE
HIGHtests/src/e2e/workflows/todo/test_lifecycle.py560except Exception: # noqa: BLE001CODE
HIGH…rc/e2e/workflows/embedded/test_embedded_update_path.py322except OSError:CODE
HIGH…rc/e2e/workflows/embedded/test_embedded_update_path.py332except requests.exceptions.RequestException:CODE
HIGH…sts/src/e2e/workflows/embedded/test_embedded_server.py219except OSError:CODE
HIGH…sts/src/e2e/workflows/embedded/test_embedded_server.py229except requests.exceptions.RequestException:CODE
HIGH…orkflows/embedded/test_embedded_dependency_conflict.py352except OSError:CODE
HIGH…orkflows/embedded/test_embedded_dependency_conflict.py379except requests.exceptions.RequestException:CODE
HIGH…ts/src/e2e/workflows/hacs/test_auto_refresh_startup.py155except HomeAssistantCommandTimeout:CODE
HIGHtests/src/e2e/workflows/entities/test_show_as.py53except ToolError:CODE
HIGHtests/src/e2e/utilities/wait_helpers.py773except (websockets.exceptions.WebSocketException, OSError):CODE
HIGHtests/src/e2e/utilities/wait_helpers.py871except (websockets.exceptions.WebSocketException, OSError):CODE
HIGHcustom_components/ha_mcp_tools/embedded_server.py1746except ImportError:CODE
HIGHcustom_components/ha_mcp_tools/embedded_server.py1777except ImportError:CODE
HIGHcustom_components/ha_mcp_tools/embedded_server.py484except RuntimeError:CODE
HIGHcustom_components/ha_mcp_tools/embedded_setup.py368except ImportError:CODE
HIGHcustom_components/ha_mcp_tools/embedded_setup.py366except CloudNotAvailable:CODE
HIGHcustom_components/ha_mcp_tools/card_runtime.py26except metadata.PackageNotFoundError:CODE
HIGH…stom_components/ha_mcp_tools/dependency_diagnostics.py296except InvalidVersion:CODE
HIGHcustom_components/ha_mcp_tools/oauth_ha_auth.py321except ValueError:CODE
HIGHcustom_components/ha_mcp_tools/websocket_api/bulk.py297except TimeoutError:CODE
HIGH…_components/ha_mcp_tools/websocket_api/call_service.py379except TimeoutError:CODE
HIGHscripts/translate_locales.py766except (KeyError, IndexError, TypeError):CODE
HIGHscripts/bake_pagination_seed.py129except requests.exceptions.RequestException:CODE
HIGHscripts/bake_pagination_seed.py146except requests.exceptions.RequestException:CODE
HIGHscripts/bake_local_calendar.py139except requests.exceptions.RequestException:CODE
HIGHscripts/bake_local_calendar.py204except subprocess.CalledProcessError:CODE
HIGH.github/dev-ha-env/hold.py184except requests.ConnectionError:CODE
HIGHhomeassistant-addon-webhook-proxy-dev/start.py708except OSError:CODE
HIGHhomeassistant-addon-webhook-proxy-dev/start.py245except Exception:CODE
HIGHhomeassistant-addon-webhook-proxy-dev/start.py276except Exception:CODE
HIGHhomeassistant-addon-webhook-proxy-dev/start.py542except OSError:CODE
HIGHhomeassistant-addon-webhook-proxy-dev/start.py1670except OSError:CODE
HIGH…sistant-addon-webhook-proxy-dev/mcp_proxy_dev/oauth.py250except OSError:CODE
110 more matches not shown…
Docstring Block Structure116 hits · 580 pts
SeverityFileLineSnippetContext
HIGHtests/src/e2e/workflows/device_control/test_lights.py28Validate and return entity state data. Args: state_data: Parsed MCP result from ha_get_state entitySTRING
HIGHtests/src/e2e/utilities/wait_helpers.py359 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.py668Subscribe → sample-after-subscribe → wait-for-event pattern, test-side. Mirrors :func:`ha_mcp.tools.ws_waiters._ws_STRING
HIGHsrc/ha_mcp/tools/backup.py223 Retrieve default backup password from Home Assistant configuration. Args: ws_client: Connected WebSockSTRING
HIGHsrc/ha_mcp/tools/device_control.py111 Universal smart device control with async verification. This tool provides intelligent device control STRING
HIGHsrc/ha_mcp/tools/coercion.py37 Parse flexibly JSON string or return existing dict/list. Args: param: JSON string, dict, list, or NoneSTRING
HIGHsrc/ha_mcp/tools/flow_helper_lookup.py155Resolve a flow-helper target to its config_entry_id via entity_registry. Used by ha_remove_helpers_integrations wheSTRING
HIGHsrc/ha_mcp/tools/helpers.py179Reject ``None``, empty, or whitespace-only identifier values. Surfaces a structured ``VALIDATION_INVALID_PARAMETER`STRING
HIGHsrc/ha_mcp/tools/helpers.py565 Convert an exception to a structured error response. This function maps common exception types to appropriate STRING
HIGHsrc/ha_mcp/tools/smart_search/_entities.py75 Search entities with fuzzy matching and typo tolerance. Args: query: Search query (can be STRING
HIGHsrc/ha_mcp/tools/smart_search/_entities.py458 Get entities grouped by area/room using the HA registries for accurate area resolution. Uses the entitSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/tools/tool_transform.py48Forward to parent tool with argument transformation applied. This function can only be called from within a transfoSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/tools/tool_transform.py78Forward directly to parent tool without transformation. This function bypasses all argument transformation and valiSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/tools/tool_transform.py413Create a transformed tool from a parent tool. Args: tool: The parent tool to transform. STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/server.py1384Call a tool by name. This is the public API for executing tools. By default, middleware is applied. ArSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/server.py1574Read a resource by URI. This is the public API for reading resources. By default, middleware is applied. STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/server.py1733Render a prompt by name. This is the public API for rendering prompts. By default, middleware is applied. STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/dependencies.py1417Get a specific claim from the access token. This dependency extracts a single claim value from the current access tSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/lifespan.py95Compose with another lifespan using the | operator. Args: other: Another Lifespan instance. STRING
HIGH…_mcp/_vendor/fastmcp/server/auth/identity_assertion.py330Validate an ID-JAG and return its claims. Args: assertion: The compact-serialized ID-JAG JWT. STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py176Resolve hostname to IP addresses using DNS. Args: hostname: Hostname to resolve port: Port number (STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py275Validate URL for SSRF and resolve to IPs. Args: url: URL to validate require_path: If True, requireSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py378Fetch URL with comprehensive SSRF protection and DNS pinning. Security measures: 1. HTTPS only 2. DNS resolSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/auth/cimd.py316Fetch and validate a CIMD document with SSRF protection. Uses ssrf_safe_fetch_response for the HTTP layer, whicSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/auth/cimd.py534Validate JWT assertion from client. Args: assertion: The JWT assertion string client_idSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/auth/cimd.py654Extract public key from inline JWKS. Args: token: JWT token to extract kid from jwks: JSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/auth/cimd.py803Validate JWT assertion for private_key_jwt auth. Args: assertion: JWT assertion string from client STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py237Verify and decode a FastMCP token. Validates JWT signature, expiration, issuer, audience, and token type. STRING
HIGH…/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py630Get a cached or new OnBehalfOfCredential for OBO token exchange. Credentials are cached by user assertion so thSTRING
HIGH…/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py872Exchange the user's Entra token for a downstream API token via OBO. This dependency performs a Microsoft Entra On-BSTRING
HIGH…endor/fastmcp/server/providers/filesystem_discovery.py143Import a Python file as a module. If the file is part of a package (directory has __init__.py), imports it as aSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/utilities/auth.py11Decode a JWT part (header or payload) without signature verification. Args: token: JWT token string (headerSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/utilities/auth.py33Decode JWT header without signature verification. Useful for extracting the key ID (kid) for JWKS lookup. ArgsSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/utilities/auth.py50Decode JWT payload without signature verification. Use only for tokens received directly from trusted sources (e.g.STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/utilities/skills.py88Get the manifest for a specific skill. Args: client: Connected FastMCP client skill_name: Name of tSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/utilities/skills.py134Download a skill and all its files to a local directory. Creates a subdirectory named after the skill containing alSTRING
HIGH…c/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py170Convert JSON schema to appropriate Python type with validation. Args: schema: A JSON Schema dictionary defiSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/utilities/pagination.py65Paginate a sequence of items. Args: items: The full sequence to paginate. cursor: Optional cursor fSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py626 Extract only the schema definitions needed for input (parameters and request body). Args: STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py80 Replace openapi $ref with jsonschema $defs recursively. Examples: - {"type": "object", "properties": {"$reSTRING
HIGH…cp/utilities/mcp_server_config/v1/mcp_server_config.py224Load configuration from a JSON file. Args: file_path: Path to the configuration file ReturSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/apps/file_upload.py233Read a file's contents by name. Args: name: The filename to read. ctx: The current requSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/client.py897Send an initialize request to the server. This method performs the MCP initialization handshake with the serverSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/client.py1166Await a coroutine while monitoring the session task for errors. When using HTTP transports, server errors (4xx/STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/client.py1470Send a completion request and return the complete MCP protocol result. Args: ref (mcp_types.ResourcSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/client.py1501Send a completion request to the server. Args: ref (mcp_types.ResourceTemplateReference | mcp_typesSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/tools.py40Send a tools/list request and return the complete MCP protocol result. Args: cursor: Optional paginSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/tools.py96Retrieve all tools available on the server. This method automatically fetches all pages if the server paginatesSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/tools.py154Send a tools/call request and return the complete MCP protocol result. This method returns the raw CallToolResuSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/tools.py292Call a tool on the server. Unlike call_tool_mcp, this method raises a ToolError if the tool call results in an STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py34Send a prompts/list request and return the complete MCP protocol result. Args: cursor: Optional pagSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py76Retrieve all prompts available on the server. This method automatically fetches all pages if the server paginatSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py126Send a prompts/get request and return the complete MCP protocol result. Args: name (str): The name STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py194Retrieve a rendered prompt message list from the server. Args: name (str): The name of the prompt tSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/resources.py34Send a resources/list request and return the complete MCP protocol result. Args: cursor: Optional pSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/resources.py76Retrieve all resources available on the server. This method automatically fetches all pages if the server paginSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/resources.py125Send a resources/listResourceTemplates request and return the complete MCP protocol result. Args: cSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/resources.py170Retrieve all resource templates available on the server. This method automatically fetches all pages if the serSTRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/resources.py218Send a resources/read request and return the complete MCP protocol result. Args: uri (AnyUrl | str)STRING
HIGHsrc/ha_mcp/_vendor/fastmcp/client/mixins/resources.py274Read the contents of a resource or resolved template. Args: uri (AnyUrl | str): The URI of the resoSTRING
56 more matches not shown…
Modern Structural Boilerplate496 hits · 498 pts
SeverityFileLineSnippetContext
LOWtests/test_env_manager.py34logger = logging.getLogger(__name__)CODE
LOW⚡tests/uat/stories/conftest.py37logger = 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.py401 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.py132def _setup_visibility_disabled(tmp_path: Any, monkeypatch: Any) -> None:CODE
LOWtests/src/unit/test_ha_overview_component_routing.py159def _setup_visibility_disabled(tmp_path: Any, monkeypatch: Any) -> None:CODE
LOWtests/src/unit/_component_ws_api.py24__all__ = ["COMPONENT_VERSION", "wsapi"]CODE
LOWtests/src/unit/test_wait_helpers.py374 def set_unsubscribe_failure(self, exc: Exception | None) -> None:CODE
LOWtests/src/e2e/_conftest_readiness.py13logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/conftest.py95logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/_conftest_testcontainer.py54logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/_conftest_haos.py53logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/_conftest_seed.py14logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/_conftest_seed.py145def _setup_config_permissions(config_path: Path) -> None:CODE
LOWtests/src/e2e/_conftest_embedded.py18logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_radio_management.py41logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_security_policy_tool.py33logger = logging.getLogger(__name__)CODE
LOW⚡tests/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.py17logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/tools/test_search_entities.py23logger = 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.py36logger = 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.py15logger = logging.getLogger(__name__)CODE
LOW…s/src/e2e/haos_only/test_dashboard_screenshot_addon.py203async 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
LOW…ts/src/e2e/haos_only/test_zz_reentrant_log_deadlock.py41logger = logging.getLogger(__name__)CODE
LOWtests/src/e2e/haos_only/test_stdio_entity_visibility.py20logger = logging.getLogger(__name__)CODE
LOW⚡tests/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.py26logger = 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.py24logger = logging.getLogger(__name__)CODE
436 more matches not shown…
Over-Commented Block500 hits · 424 pts
SeverityFileLineSnippetContext
LOWpyproject.toml61 "uvicorn>=0.35; sys_platform != 'emscripten'",COMMENT
LOWpyproject.toml341# stalls the run silently until the JOB timeout - observed as a 22-minuteCOMMENT
LOWpyproject.toml401 # Real voluptuous-openapi for the embedded e2e LLM-API test: it convertsCOMMENT
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 - "8086:8086"COMMENT
LOWdocker-compose.yml41COMMENT
LOW.coderabbit.yaml1# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.jsonCOMMENT
LOW.coderabbit.yaml21 # a rate-limited push gets a comment plus a deliberately-passing "ReviewCOMMENT
LOWhomeassistant-addon/config.yaml21# homeassistant-addon-dev/config.yaml.COMMENT
LOWhomeassistant-addon/start.py521 subflags = beta_subflags(options)COMMENT
LOWhomeassistant-addon/start.py621 try:COMMENT
LOWtests/haos_image_build/requirements.txt1# Build-script dependencies. Installed in CI by the haos-e2e-tests,COMMENT
LOWtests/haos_image_build/build_image.py61# project's style guide.COMMENT
LOWtests/haos_image_build/build_image.py121# new addon doesn't add a shape that no other entry covers, it does notCOMMENT
LOWtests/haos_image_build/build_image.py141# └──────────────────────┴────────────────────────────────────────────────┘COMMENT
LOWtests/haos_image_build/build_image.py161 # which is the canonical "hidden sidebar" shape that ``ha_get_app``COMMENT
LOWtests/haos_image_build/build_image.py201COMMENT
LOWtests/haos_image_build/build_image.py221# the fastmcp tree plus a server thread, and we only want that cost on the oneCOMMENT
LOWtests/haos_image_build/build_image.py241# that if the _conftest_haos.py delivery step ever fails to overwrite it, the entry'sCOMMENT
LOWtests/haos_image_build/build_image.py261# that serves balloob Puppet's HTTP contract WITHOUT Chromium. The real PuppetCOMMENT
LOWtests/haos_image_build/build_image.py1141# the addon boots cleanly.COMMENT
LOWtests/haos_image_build/build_image.py1221 # in root" (verified on PR #1375 CI run 29357350 for Node-RED).COMMENT
LOWtests/haos_image_build/build_image.py1461 f"homeassistant-addon-webhook-proxy not found at {src_dir} — "COMMENT
LOWtests/haos_image_build/build_image.py2761 # Stage the ha-mcp dev addon source into /supervisor/addons/local/ BEFORE firstCOMMENT
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
LOW…t_state/custom_packages/core_2026_9_child_devices.yaml1# Core 2026.9 fixture with one main power-strip device and child outlet devices.COMMENT
LOWtests/addon/test_webhook_proxy.py3441 first_install, version_changed = start._install_integration()COMMENT
LOWtests/addon/test_webhook_proxy.py6501COMMENT
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
LOWtests/src/haos_runtime.py1881 time.sleep(3.0)COMMENT
LOWtests/src/doomed_run.py41 return FalseCOMMENT
LOW…/unit/test_ha_config_list_helpers_component_routing.py61# {"storage": [...], "config": [...]} — the UI-created persons and theCOMMENT
LOWtests/src/unit/test_component_ws_phase2_async.py1901COMMENT
LOWtests/src/unit/test_e2e_lane_env_shape.py441 assert path.is_file(), f"{workflow} no longer exists, but is excluded"COMMENT
LOWtests/src/unit/test_llm_api.py941 async def test_loopback_factory_works_on_pre_1_24_sdks(self, monkeypatch):COMMENT
LOWtests/src/unit/test_backup_manager.py2121 assert result["patch"] == []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.py1021COMMENT
LOWtests/src/unit/test_locale_parity.py1241 _MAX_COMPONENT_IDENTICAL_SHARE,COMMENT
LOWtests/src/unit/test_locale_parity.py1441 if key in sent and not _is_owed_a_rewrite(TOOL_SOURCES_SURFACE, key, locale)COMMENT
LOWtests/src/unit/test_locale_parity.py1461 # carries its own floor, and the set of surfaces is asserted rather thanCOMMENT
LOWtests/src/unit/test_locale_parity.py2041 # ... and a grouped endpoint stays one endpoint, not two numbers.COMMENT
LOWtests/src/unit/test_locale_parity.py2321 # The whole letter run is the suffix. "5KB" is five kilobytes whereCOMMENT
LOWtests/src/unit/test_locale_parity.py2341 # "9584 to", which case-folding would read as terabytes.COMMENT
LOWtests/src/unit/test_read_only.py741# safe because it is gated by an inspected dispatch field (scope/action/COMMENT
LOWtests/src/unit/test_read_only.py881 # Selector for the allowed reads (list/get/substitute) and for theCOMMENT
LOWtests/src/unit/test_settings_ui_js_behavior.py81 # enable_security_policy_tool (#2148) — registersCOMMENT
LOWtests/src/unit/test_settings_ui_js_behavior.py2341# to a value the server no longer holds, under a message asserting exactlyCOMMENT
LOWtests/src/unit/test_settings_ui_js_behavior.py4241 window.__fb = fb ? fb.innerHTML : '';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.py121 field = FieldInfo(annotation=annotation, default=0, alias="SOME_ENV")COMMENT
LOW…/unit/test_fields_projection_docstring_completeness.py41# ``fields=`` Annotated[..., Field(description=...)] textCOMMENT
440 more matches not shown…
Deep Nesting483 hits · 411 pts
SeverityFileLineSnippetContext
LOWhomeassistant-addon/start.py82CODE
LOWtests/test_env_manager.py284CODE
LOWtests/test_env_manager.py307CODE
LOWtests/test_env_manager.py145CODE
LOWtests/uat/run_uat.py570CODE
LOWtests/uat/ha_wait.py24CODE
LOWtests/uat/ha_wait.py60CODE
LOWtests/uat/openai_agent.py139CODE
LOWtests/uat/stories/run_story.py180CODE
LOWtests/uat/stories/run_story.py220CODE
LOWtests/uat/stories/run_story.py264CODE
LOWtests/haos_image_build/build_image.py355CODE
LOWtests/haos_image_build/build_image.py379CODE
LOWtests/haos_image_build/build_image.py397CODE
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.py1843CODE
LOWtests/src/haos_runtime.py2178CODE
LOWtests/src/haos_runtime.py2225CODE
LOWtests/src/unit/test_renovate_configuration.py12CODE
LOWtests/src/unit/test_area_filter_search.py46CODE
LOWtests/src/unit/test_haos_image_workflow_shape.py100CODE
LOWtests/src/unit/test_lite_docstrings.py735CODE
LOWtests/src/unit/test_lite_docstrings.py303CODE
LOWtests/src/unit/test_e2e_lane_env_shape.py354CODE
LOWtests/src/unit/test_tool_schema_exclusive_bounds.py87CODE
LOWtests/src/unit/test_graceful_shutdown.py354CODE
LOWtests/src/unit/test_template_restore_safety.py339CODE
LOWtests/src/unit/test_locale_parity.py397CODE
LOWtests/src/unit/test_read_only.py916CODE
LOWtests/src/unit/test_read_only.py923CODE
LOWtests/src/unit/test_creation_snapshot_flow.py88CODE
LOWtests/src/unit/test_settings_ui_handler_selection.py85CODE
LOWtests/src/unit/test_advanced_settings_coverage.py198CODE
LOWtests/src/unit/test_advanced_settings_coverage.py249CODE
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.py669CODE
LOWtests/src/unit/test_skill_content_wiring.py300CODE
LOWtests/src/unit/test_skill_content_wiring.py328CODE
LOWtests/src/unit/test_dashboard_edit_routing.py901CODE
LOWtests/src/unit/test_agent_docs_structure.py100CODE
LOWtests/src/unit/test_skills_instructions.py520CODE
423 more matches not shown…
Self-Referential Comments106 hits · 306 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.py547 # Create the package object first so submodules have a parent with __path__.COMMENT
MEDIUMtests/src/unit/test_oauth.py383 # Create a stateless refresh token (as exchange_authorization_code would)COMMENT
MEDIUMtests/src/unit/test_oauth.py1316 # 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
MEDIUM⚡tests/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
MEDIUM⚡tests/src/e2e/workflows/config/test_label_crud.py308 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_label_crud.py398 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_label_crud.py439 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_label_crud.py480 # Create a test labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_helper_crud.py1838 # Create a dedicated areaCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_helper_crud.py1902 # Create a dedicated labelCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_helper_crud.py1973 # Create a dedicated areaCOMMENT
MEDIUMtests/src/e2e/workflows/config/test_helper_crud.py2263 # Create a dedicated area + labelCOMMENT
MEDIUM…/e2e/workflows/auto_backup/test_capture_and_restore.py244 # 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.py737 # Create a file with a list valueCOMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py1042 # Create a file with !secret tag under 'template' keyCOMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py1268 # Create the theme file.COMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py1441 # Create the key — no prior value, so capture is skipped.COMMENT
MEDIUM…s/src/e2e/workflows/filesystem/test_file_operations.py690 # Create a file to deleteCOMMENT
MEDIUMtests/src/e2e/workflows/groups/test_verification.py69 # Create a group firstCOMMENT
MEDIUM…/workflows/integrations/test_integration_management.py96 # 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.py375 # Create a resource firstCOMMENT
MEDIUMtests/src/e2e/workflows/dashboards/test_resources.py415 # 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.py611 # Create the labels this test assigns. Creation happens inside theCOMMENT
MEDIUMtests/src/e2e/workflows/automation/test_lifecycle.py930 # Create the automation - THIS IS THE KEY TESTCOMMENT
MEDIUM…/src/e2e/workflows/automation/test_python_transform.py580 # 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
MEDIUM⚡tests/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.py393 # Create a test areaCOMMENT
46 more matches not shown…
Structural Annotation Overuse108 hits · 198 pts
SeverityFileLineSnippetContext
LOW⚡tests/src/unit/test_oauth.py765 # Step 5: Verify access token contains only ha_token (no ha_url - SSRF fix)COMMENT
LOW⚡tests/src/unit/test_oauth.py771 # Step 6: Use stateless refresh token to get new access tokenCOMMENT
LOW⚡tests/src/unit/test_oauth.py785 # Step 7: Verify refreshed access token is valid and carries HA credentialsCOMMENT
LOW⚡tests/src/unit/test_oauth.py792 # Step 8: Verify chained refresh also worksCOMMENT
LOWtests/src/unit/test_oauth.py695 # Step 1: Client registrationCOMMENT
LOWtests/src/unit/test_oauth.py709 # Step 2: Authorization requestCOMMENT
LOWtests/src/unit/test_oauth.py729 # Step 3: Simulate consent form submissionCOMMENT
LOWtests/src/unit/test_oauth.py753 # Step 4: Exchange auth code for tokensCOMMENT
LOW⚡tests/src/unit/test_flow_multistep.py563 # Step 1: the user stepCOMMENT
LOW⚡tests/src/unit/test_flow_multistep.py571 # Step 2: the state_characteristic step — MUST receive its key,COMMENT
LOW⚡tests/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
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1243 # Step 1: List automation blueprintsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1253 # Step 2: List script blueprintsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1263 # Step 3: If blueprints exist, explore oneCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1334 # Step 1: List available blueprintsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1349 # Step 2: Get blueprint details to understand required inputsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1358 # Step 3: Create automation from blueprint (no trigger/action fields)COMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1406 # Step 4: Wait for automation to be registered, then verify no trigger/action fieldsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1414 # Step 5: Clean upCOMMENT
LOW⚡tests/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
LOW⚡tests/src/e2e/workflows/scripts/test_lifecycle.py1185 # Step 2: Get blueprint details to understand required inputsCOMMENT
LOW⚡tests/src/e2e/workflows/scripts/test_lifecycle.py1194 # Step 3: Create script from blueprint (no sequence field)COMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1240 # Step 4: Wait for script to be registered, then verify no sequence fieldCOMMENT
LOW⚡tests/src/e2e/workflows/services/test_list_services.py373 # Step 1: Discover light services (use full detail to see fields)COMMENT
LOW⚡tests/src/e2e/workflows/services/test_list_services.py383 # Step 2: Find a light entity to test withCOMMENT
LOW⚡tests/src/e2e/workflows/services/test_list_services.py400 # Step 3: Use discovered service to control lightCOMMENT
LOW⚡tests/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.md169## Step 2: Run Target VersionCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md184## Step 3: White-Box AnalysisCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md217## Step 4: Score & CompareCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md261## Step 5: Update JSONLCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md272## Step 6: ReportCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md329## Step 7: Investigate OutliersCOMMENT
LOW.claude/skills/bat-story-eval/SKILL.md343## 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
LOW⚡docs/macOS-uv-guide.md60## Step 3: Install or Restart Claude DesktopCOMMENT
LOW⚡docs/macOS-uv-guide.md66## Step 4: Test ItCOMMENT
48 more matches not shown…
Redundant / Tautological Comments117 hits · 174 pts
SeverityFileLineSnippetContext
LOWhomeassistant-addon/start.py109 # Check if we have a stored secret pathCOMMENT
LOWtests/src/unit/_js_harness.py606 # Check if this is a data-purpose script and incorporate thatCOMMENT
LOWtests/src/e2e/_conftest_testcontainer.py438 # Check if container is actually runningCOMMENT
LOWtests/src/e2e/_conftest_seed.py352 # Check if HACS is installed and frontend is missing or invalid.COMMENT
LOWtests/src/e2e/workflows/blueprints/test_blueprints.py1380 # Check if it was our validation or HA's validation that failedCOMMENT
LOWtests/src/e2e/workflows/device_control/test_lights.py40 # Check if this is a successful response with entity dataCOMMENT
LOW⚡tests/src/e2e/workflows/config/test_label_crud.py318 # Assign label to entityCOMMENT
LOWtests/src/e2e/workflows/config/test_helper_crud.py1160 # 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.py1179 # 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.py158 # Check if we got the "not installed" errorCOMMENT
LOW…s/src/e2e/workflows/filesystem/test_file_operations.py642 # Write file with nested directoriesCOMMENT
LOWtests/src/e2e/workflows/todo/test_lifecycle.py581 # Check if any todo entities foundCOMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1214 # Check if it was our validation or HA's validation that failedCOMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py358 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.py171 # 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__.py1220 # Check if it's one of the explicitly allowed files in config rootCOMMENT
LOWcustom_components/ha_mcp_tools/__init__.py1224 # 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
LOWhomeassistant-addon-webhook-proxy-dev/start.py976 # Check if integration already loaded (user restarted fast)COMMENT
LOWhomeassistant-addon-webhook-proxy/start.py974 # Check if integration already loaded (user restarted fast)COMMENT
LOWsrc/ha_mcp/__main__.py835 # Check if stdin is available (fails in Docker without -i flag)COMMENT
LOWsrc/ha_mcp/__main__.py211 # Check if stdin is closedSTRING
LOWsrc/ha_mcp/tools/tools_yaml_config.py436 # Check if custom component is availableCOMMENT
LOW⚡src/ha_mcp/tools/tools_traces.py452 # Check if enabled (state is 'on' for automations, 'off' is disabled)COMMENT
LOW⚡src/ha_mcp/tools/tools_traces.py462 # Check if tracing is stored - only for automationsCOMMENT
LOWsrc/ha_mcp/tools/tools_filesystem.py591 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_filesystem.py707 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_filesystem.py815 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_filesystem.py911 # Check if custom component is availableCOMMENT
LOWsrc/ha_mcp/tools/tools_updates.py391 # Check if rate limitedCOMMENT
LOWsrc/ha_mcp/tools/tools_updates.py453 # Check if rate limitedCOMMENT
LOWsrc/ha_mcp/tools/tools_config_dashboards.py2257 # Check if request failed (after potential retry)COMMENT
LOWsrc/ha_mcp/tools/tools_service.py1198 # Check if this is a timeout - for service calls, timeouts typicallyCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/mcp_config.py322 # Check if any values look like server configsCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/tools/tool_transform.py336 # Check if this parameter has a default_factory from transform_argsCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/tools/tool_transform.py512 # Check if function returns ToolResult (or subclass) - if so, don't fall back to parent.COMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/tools/tool_transform.py543 # Check if function is missing any parameters required after transformationCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/tools/tool_transform.py660 # Check if parameter is in transform_argsCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/tools/function_parsing.py483 # Check if schema is an object type, resolving $ref referencesCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/resources/template.py778 # Check if required parameters are a subset of the path parametersCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/resources/template.py784 # Check if all URI parameters are valid function parameters (skip if **kwargs present)COMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/server/elicitation.py61 # Check if items are enum/LiteralCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/server/elicitation.py73 # Check if items are Literal (which Pydantic represents differently)COMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/server/elicitation.py511 # Check if it's a primitive typeCOMMENT
LOW…_vendor/fastmcp/server/middleware/response_limiting.py141 # Check if we should limit this toolCOMMENT
LOW…mcp/_vendor/fastmcp/server/auth/redirect_validation.py456 # Check if URI matches any allowed patternCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/server/auth/cimd.py625 # Check if JTI was already used (and hasn't expired from cache)COMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/server/auth/middleware.py75 # Check if Authorization header is presentCOMMENT
LOW…a_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py1256 # Check if code expiredCOMMENT
57 more matches not shown…
AI Structural Patterns167 hits · 149 pts
SeverityFileLineSnippetContext
LOWtests/uat/stories/run_story.py407CODE
LOWtests/src/unit/test_config_get_component_routing.py88CODE
LOWtests/src/unit/_js_harness.py135CODE
LOWtests/src/unit/test_statistics_units.py47CODE
LOWtests/src/unit/test_component_ws_search.py193CODE
LOWtests/src/unit/test_component_ws_search.py289CODE
LOWtests/src/unit/test_component_ws_search.py435CODE
LOWtests/src/unit/test_component_ws_search.py514CODE
LOWtests/src/unit/test_component_ws_search.py653CODE
LOWtests/src/unit/test_component_ws_search.py748CODE
LOWsrc/ha_mcp/tools/tools_config_helpers.py532CODE
LOWsrc/ha_mcp/tools/tools_energy.py85CODE
LOWsrc/ha_mcp/tools/auto_backup.py149CODE
LOWsrc/ha_mcp/tools/log_sources.py241CODE
LOWsrc/ha_mcp/tools/tools_history.py206CODE
LOWsrc/ha_mcp/tools/backup.py1646CODE
LOWsrc/ha_mcp/tools/tools_config_scripts.py485CODE
LOWsrc/ha_mcp/tools/tools_search.py60CODE
LOWsrc/ha_mcp/tools/tools_search.py430CODE
LOWsrc/ha_mcp/tools/tools_bug_report.py840CODE
LOWsrc/ha_mcp/tools/tools_traces.py44CODE
LOWsrc/ha_mcp/tools/tools_dev.py825CODE
LOWsrc/ha_mcp/tools/tools_logs.py167CODE
LOWsrc/ha_mcp/tools/tools_registry.py774CODE
LOWsrc/ha_mcp/tools/tools_config_automations.py656CODE
LOWsrc/ha_mcp/tools/tools_config_scenes.py612CODE
LOWsrc/ha_mcp/tools/tools_system.py485CODE
LOWsrc/ha_mcp/tools/tools_dashboard_screenshot.py116CODE
LOWsrc/ha_mcp/tools/tools_assist_pipeline.py541CODE
LOWsrc/ha_mcp/tools/tools_config_dashboards.py1634CODE
LOWsrc/ha_mcp/tools/tools_config_dashboards.py2454CODE
LOWsrc/ha_mcp/tools/tools_blueprints.py164CODE
LOWsrc/ha_mcp/tools/tools_integrations.py448CODE
LOWsrc/ha_mcp/tools/tools_integrations.py1734CODE
LOWsrc/ha_mcp/tools/tools_areas.py607CODE
LOWsrc/ha_mcp/tools/tools_addons.py1645CODE
LOWsrc/ha_mcp/tools/tools_addons.py2274CODE
LOWsrc/ha_mcp/tools/tools_addons.py3822CODE
LOWsrc/ha_mcp/tools/tools_entities.py1473CODE
LOWsrc/ha_mcp/tools/tools_service.py1820CODE
LOWsrc/ha_mcp/tools/tools_service.py2196CODE
LOWsrc/ha_mcp/tools/search/legacy.py152CODE
LOWsrc/ha_mcp/tools/search/legacy.py438CODE
LOWsrc/ha_mcp/tools/smart_search/_deep.py131CODE
LOWsrc/ha_mcp/tools/smart_search/_deep.py1239CODE
LOWsrc/ha_mcp/tools/smart_search/_deep.py1357CODE
LOWsrc/ha_mcp/tools/smart_search/_overview.py36CODE
LOWsrc/ha_mcp/tools/smart_search/_entities.py62CODE
LOWsrc/ha_mcp/_vendor/fastmcp/telemetry.py66CODE
LOW…/_vendor/fastmcp/experimental/transforms/jev_search.py129CODE
LOWsrc/ha_mcp/_vendor/fastmcp/tools/tool_transform.py399CODE
LOWsrc/ha_mcp/_vendor/fastmcp/tools/function_tool.py514CODE
LOWsrc/ha_mcp/_vendor/fastmcp/tools/function_tool.py531CODE
LOWsrc/ha_mcp/_vendor/fastmcp/tools/function_tool.py550CODE
LOWsrc/ha_mcp/_vendor/fastmcp/tools/function_tool.py219CODE
LOWsrc/ha_mcp/_vendor/fastmcp/tools/base.py311CODE
LOWsrc/ha_mcp/_vendor/fastmcp/tools/base.py443CODE
LOW…/ha_mcp/_vendor/fastmcp/resources/function_resource.py223CODE
LOW…/ha_mcp/_vendor/fastmcp/resources/function_resource.py84CODE
LOWsrc/ha_mcp/_vendor/fastmcp/resources/template.py337CODE
107 more matches not shown…
Verbosity Indicators68 hits · 132 pts
SeverityFileLineSnippetContext
LOW⚡tests/src/unit/test_oauth.py765 # Step 5: Verify access token contains only ha_token (no ha_url - SSRF fix)COMMENT
LOW⚡tests/src/unit/test_oauth.py771 # Step 6: Use stateless refresh token to get new access tokenCOMMENT
LOW⚡tests/src/unit/test_oauth.py785 # Step 7: Verify refreshed access token is valid and carries HA credentialsCOMMENT
LOW⚡tests/src/unit/test_oauth.py792 # Step 8: Verify chained refresh also worksCOMMENT
LOWtests/src/unit/test_oauth.py695 # Step 1: Client registrationCOMMENT
LOWtests/src/unit/test_oauth.py709 # Step 2: Authorization requestCOMMENT
LOWtests/src/unit/test_oauth.py729 # Step 3: Simulate consent form submissionCOMMENT
LOWtests/src/unit/test_oauth.py753 # Step 4: Exchange auth code for tokensCOMMENT
LOW⚡tests/src/unit/test_flow_multistep.py563 # Step 1: the user stepCOMMENT
LOW⚡tests/src/unit/test_flow_multistep.py571 # Step 2: the state_characteristic step — MUST receive its key,COMMENT
LOW⚡tests/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
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1243 # Step 1: List automation blueprintsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1253 # Step 2: List script blueprintsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1263 # Step 3: If blueprints exist, explore oneCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1334 # Step 1: List available blueprintsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1349 # Step 2: Get blueprint details to understand required inputsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1358 # Step 3: Create automation from blueprint (no trigger/action fields)COMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1406 # Step 4: Wait for automation to be registered, then verify no trigger/action fieldsCOMMENT
LOW⚡tests/src/e2e/workflows/blueprints/test_blueprints.py1414 # Step 5: Clean upCOMMENT
LOW⚡tests/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
LOW⚡tests/src/e2e/workflows/scripts/test_lifecycle.py1185 # Step 2: Get blueprint details to understand required inputsCOMMENT
LOW⚡tests/src/e2e/workflows/scripts/test_lifecycle.py1194 # Step 3: Create script from blueprint (no sequence field)COMMENT
LOWtests/src/e2e/workflows/scripts/test_lifecycle.py1240 # Step 4: Wait for script to be registered, then verify no sequence fieldCOMMENT
LOW⚡tests/src/e2e/workflows/services/test_list_services.py373 # Step 1: Discover light services (use full detail to see fields)COMMENT
LOW⚡tests/src/e2e/workflows/services/test_list_services.py383 # Step 2: Find a light entity to test withCOMMENT
LOW⚡tests/src/e2e/workflows/services/test_list_services.py400 # Step 3: Use discovered service to control lightCOMMENT
LOW⚡tests/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
LOW⚡scripts/install.sh239# Step 2: Configure Claude DesktopCOMMENT
LOWscripts/install.sh372# Step 3: Pre-download dependenciesCOMMENT
LOW⚡src/ha_mcp/tools/tools_integrations.py2546 # Step 2: collect sub-entity IDs for the wait phaseCOMMENT
LOW⚡src/ha_mcp/tools/tools_integrations.py2550 # Step 3: delete the config entryCOMMENT
LOW⚡src/ha_mcp/tools/tools_integrations.py2560 # Step 4: wait for all sub-entities to be removed in parallelCOMMENT
LOWsrc/ha_mcp/tools/tools_integrations.py2495 # Step 1: resolve target → entry_id (typed reason on failure)COMMENT
LOW…/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py112 # Step 1: Validate token via introspection (RFC 7662).COMMENT
LOW…/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py187 # Step 2: Fetch user profile via userinfo.COMMENT
LOW…ha_mcp/_vendor/fastmcp/server/auth/providers/google.py114 # Step 1: Verify token via tokeninfo endpoint.COMMENT
LOW…ha_mcp/_vendor/fastmcp/server/auth/providers/google.py180 # Step 2: Fetch user profile from v2 userinfo endpoint.COMMENT
LOW…fastmcp/contrib/component_manager/component_manager.py101 # We need to check if it's a template (contains {}) and use "template" if soCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py580 # Step 1: replace everything except [0-9a-zA-Z_] with underscoresCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py582 # Step 2: deduplicate underscoresCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py584 # Step 3: if the first char of original name isn't a letter or underscore, prepend field_COMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py587 # Step 4: deduplicate againCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py589 # Step 5: only strip trailing underscores if they weren't in the original nameCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py592 # Step 6: if result is a Python keyword, append an underscore (PEP 8 convention)COMMENT
LOW⚡…dor/fastmcp/utilities/openapi/json_schema_converter.py92 # Step 1: Handle nullable field conversion (OpenAPI 3.0 only)COMMENT
LOW⚡…dor/fastmcp/utilities/openapi/json_schema_converter.py96 # Step 2: Convert oneOf to anyOf if requestedCOMMENT
LOW⚡…dor/fastmcp/utilities/openapi/json_schema_converter.py100 # Step 3: Preserve discriminator tag presence before removing the keywordCOMMENT
LOW⚡…dor/fastmcp/utilities/openapi/json_schema_converter.py103 # Step 4: Remove OpenAPI-specific fieldsCOMMENT
LOW⚡…dor/fastmcp/utilities/openapi/json_schema_converter.py107 # Step 5: Handle readOnly/writeOnly property removalCOMMENT
LOW⚡…dor/fastmcp/utilities/openapi/json_schema_converter.py113 # Step 6: Recursively process nested schemasCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py72 # Step 1: Un-flatten arguments into path, query, body, etc. using parameter mapCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py81 # Step 2: Serialize query parameters according to OpenAPI style/explodeCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py84 # Step 3: Build base URL with path parametersCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py87 # Step 4: Prepare request dataCOMMENT
LOW⚡…c/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py94 # Step 5: Determine the declared content type from the OpenAPI spec.COMMENT
8 more matches not shown…
AI Slop Vocabulary51 hits · 111 pts
SeverityFileLineSnippetContext
MEDIUMpyproject.toml203 "ASYNC", # async best practicesCODE
MEDIUMpyproject.toml205 "LOG", # logging best practicesCODE
MEDIUMpyproject.toml381 # runtime harness, the image bake, wait_helpers) to talk to HomeCOMMENT
MEDIUMtests/haos_image_build/build_image.py208# The secret_path option must be set deterministically so the test harnessCOMMENT
MEDIUMtests/src/haos_runtime.py2110 # The e2e harness logs at INFO, so a DEBUG-only cause would leave aCOMMENT
MEDIUMtests/src/unit/_js_harness.py32# Path to the harness — repo-relative, resolved once at import time.COMMENT
MEDIUMtests/src/unit/_js_harness.py214 # 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
MEDIUM⚡tests/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.py253 # module attribute) is robust to either `import httpx` or a futureCOMMENT
MEDIUMtests/src/unit/test_locale_parity.py2418 # 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
MEDIUM⚡tests/src/unit/test_build_skill_content.py116 assert result == {"SKILL.md": "# best practices\n"}CODE
MEDIUMtests/src/unit/test_build_skill_content.py50 (skill / "SKILL.md").write_text("# best practices\n")CODE
MEDIUMtests/src/unit/test_settings_ui_js_behavior.py976 // assertion below — querying via JS is more robust thanCOMMENT
MEDIUMtests/src/unit/test_settings_ui_js_behavior.py1007 # flipped one. The harness's `responses: [...]` shape advancesSTRING
MEDIUMtests/src/unit/test_settings_ui_js_behavior.py4245 # The harness serialises window globals into result.dom — pickSTRING
MEDIUMtests/src/unit/test_astro_tools_description_fold.py22# The harness has no module resolution, and the rest of the frontmatter walksCOMMENT
MEDIUMtests/src/e2e/tools/test_radio_management.py100 # robust to exactly where they land.COMMENT
MEDIUMtests/src/e2e/tools/test_search_entities.py1824 # 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.py525 # ``replace`` ops on a path ending in ``/alias`` to stay robustCOMMENT
MEDIUMtests/src/e2e/workflows/filesystem/test_yaml_config.py1548 # robust whether the read fails because the file is missing orCOMMENT
MEDIUM…/workflows/integrations/test_integration_management.py398 # integration in the harness that implements async_step_reconfigure, and itCOMMENT
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
MEDIUM⚡custom_components/ha_mcp_tools/ui_panel.py519# harness for every surface); coverage = the node --check syntax test plus theCOMMENT
MEDIUM…_components/ha_mcp_tools/websocket_api/call_service.py314 # the unit-test harness MagicMock-stubs ``homeassistant.core``, so the decoratorCOMMENT
MEDIUMscripts/bake_pagination_seed.py38HOST_PORT = 32788 # off the dev-harness 32769 to avoid clashesCODE
MEDIUMsrc/ha_mcp/settings_ui/__init__.py116# esbuild/jsdom JS harness (tests/js/harness.mjs) -- `const DEFAULT_PINNED =COMMENT
MEDIUMsrc/ha_mcp/tools/tools_bug_report.py559 # Broad by design — the bug-report path must stay robust whatever theCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/server/lifespan.py136 # self._fn is already a context manager factory, just call itCOMMENT
MEDIUMsrc/ha_mcp/_vendor/fastmcp/server/middleware/logging.py149 """Middleware that provides comprehensive request and response logging.STRING
MEDIUMsrc/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py378 """Fetch URL with comprehensive SSRF protection and DNS pinning.STRING
LOW…mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py582 # Keep the browser's consent state bounded. The cookie just set alwaysCOMMENT
MEDIUM…mcp/_vendor/fastmcp/server/auth/providers/in_memory.py114 # The AuthorizationHandler already does robust validation using client.validate_redirect_uriCOMMENT
LOW⚡…_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py276 # If we can't parse the response, just return the originalSTRING
LOW…endor/fastmcp/server/providers/filesystem_discovery.py50 # If root is a file, just return it (if it's a .py file)COMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/cli/cli.py60 return "npx" # On Unix-like systems, just use npxCODE
MEDIUMsrc/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py315 # A harness must surface a broken teardown rather than swallow it — but never atCOMMENT
LOW…c/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py825 # Otherwise just use the dataCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/utilities/cli.py81 # MCPConfig - we don't process these here, just pass throughCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/utilities/cli.py94 # Not a valid MCPServerConfig, just pass throughCOMMENT
LOWsrc/ha_mcp/_vendor/fastmcp/utilities/cli.py97 # Not a valid JSON file, just pass throughCOMMENT
MEDIUMsrc/ha_mcp/_vendor/websockets/frames.py194 # and robust. Also support frames fragmented within UTF-8 sequences.COMMENT
LOW…c/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py111 # if the redirect URI is invalid, ignore it & just return theCOMMENT
LOWsrc/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py74 # if token is not found, just return HTTP 200 per the RFCCOMMENT
LOW…vendor/mcp/server/mcpserver/utilities/func_metadata.py324 # This raise could perhaps be skipped, and we (MCPServer) just callCOMMENT
LOWsrc/ha_mcp/_vendor/mcp/cli/cli.py53 return "npx" # On Unix-like systems, just use npxCODE
MEDIUMsrc/ha_mcp/_vendor/mcp/client/session_group.py312 # Create read and write streams that facilitate io with the server.COMMENT
MEDIUMsrc/ha_mcp/utils/fuzzy_search.py465 """Calculate a comprehensive fuzzy score for an entity name/domain.STRING
Modern AI Meta-Vocabulary21 hits · 56 pts
SeverityFileLineSnippetContext
MEDIUMtests/src/unit/test_settings_ui_js_behavior.py124 # 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
MEDIUM⚡tests/src/unit/test_tools_bug_report.py1855 # what biases agents and invites hallucinations).COMMENT
MEDIUM⚡tests/src/unit/test_tools_bug_report.py1864 # hallucination bait we removed.COMMENT
MEDIUMtests/src/unit/test_tools_bug_report.py1696 # 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.py286 # event-driven re-samples against the right baseline.COMMENT
MEDIUMtests/src/e2e/utilities/wait_helpers.py441 PR #1382 for the broader event-driven-wait migration.STRING
MEDIUMtests/src/e2e/utilities/wait_helpers.py1048 # the sample-after-subscribe pattern the other event-driven waitersCOMMENT
MEDIUMsrc/ha_mcp/tool_dispatch.py20# Code mode is local orchestration that can issue many nested HA calls. ItsCOMMENT
MEDIUMsrc/ha_mcp/tools/log_sources.py291 # the LLM context window during debugging workflows.COMMENT
MEDIUMsrc/ha_mcp/tools/ws_waiters.py24# --- WS-event-driven wait helpers (#1152) -----------------------------------COMMENT
MEDIUMsrc/ha_mcp/tools/ws_waiters.py35# The new pattern is WS-event-driven with a REST sample after subscribe and aCOMMENT
MEDIUMsrc/ha_mcp/tools/tools_code.py73# 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
MEDIUMsrc/ha_mcp/_vendor/fastmcp/server/context.py281 # Set current server for dependency injection (use weakref to avoid reference cycles)COMMENT
MEDIUM…a_mcp/_vendor/fastmcp/server/auth/providers/descope.py113 # An MCP server ID extends the project's agentic path and a tenant IDCOMMENT
MEDIUM…a_mcp/_vendor/fastmcp/server/auth/providers/descope.py115 # The agentic path is checked first as the more specific of the two.COMMENT
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.py62 ``mcp.server.lowlevel.server.Server.run()`` dispatches each incomingSTRING
Magic Placeholder Names3 hits · 15 pts
SeverityFileLineSnippetContext
HIGH…cp/_vendor/fastmcp/contrib/component_manager/README.md108 -H "Authorization: Bearer YOUR_TOKEN_HERE" \CODE
HIGH…cp/_vendor/fastmcp/contrib/component_manager/README.md134 -H "Authorization: Bearer YOUR_TOKEN_HERE" \CODE
HIGH…cp/_vendor/fastmcp/contrib/component_manager/README.md140 -H "Authorization: Bearer YOUR_TOKEN_HERE" \CODE
Fake / Example Data7 hits · 6 pts
SeverityFileLineSnippetContext
LOWtests/src/unit/test_card_review_round6.py61 assert result["value"][0]["selector"]["icon"]["placeholder"] == "mdi:link"CODE
LOWtests/src/unit/test_config.py470 monkeypatch.setenv("SUPERVISOR_TOKEN", "fake-token-for-test")CODE
LOWtests/src/unit/test_config.py507 monkeypatch.setenv("SUPERVISOR_TOKEN", "fake-token-for-test")CODE
LOW⚡tests/src/e2e/policy/test_redact_secrets.py119 assert "placeholder" in error.get("message", ""), bodyCODE
LOWsrc/ha_mcp/settings_ui/settings_js/01_i18n_state.js123 for (const attribute of ['placeholder', 'title', 'aria-label']) {CODE
LOWsrc/ha_mcp/tools/tools_bug_report.py1339- Email addresses -> Replace with "user@example.com"CODE
LOW…ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py163 return "user@example.com"CODE
Overly Generic Function Names3 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡tests/src/unit/test_python_sandbox.py330 expr = "def helper():\n return 1"CODE
LOWsrc/ha_mcp/_vendor/mcp/server/streamable_http.py474 async def handle_request(self, scope: Scope, receive: Receive, send: Send) -> None:CODE
LOW…c/ha_mcp/_vendor/mcp/server/streamable_http_manager.py176 async def handle_request(self, scope: Scope, receive: Receive, send: Send) -> None:CODE
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWdocker-compose.screenshot.yml57# Usage:COMMENT
LOWdocker-compose.yml50# Usage:COMMENT
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMsrc/ha_mcp/_vendor/fastmcp/client/transports/base.py124CODE