{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-e0e54c5df34703ee", "name": "Possibly dead Python function: recover_on_boot", "shortDescription": {"text": "Possibly dead Python function: recover_on_boot"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e7ea7a2f5d7bd7a0", "name": "Possibly dead Python function: set_device_setting", "shortDescription": {"text": "Possibly dead Python function: set_device_setting"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6df602ca380d7489", "name": "Possibly dead Python function: set_peak_shaving", "shortDescription": {"text": "Possibly dead Python function: set_peak_shaving"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d03b8ab85d174633", "name": "Possibly dead Python function: do_GET", "shortDescription": {"text": "Possibly dead Python function: do_GET"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f31c1121a0dc452", "name": "Possibly dead Python function: log_message", "shortDescription": {"text": "Possibly dead Python function: log_message"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7c198fddd1b7596", "name": "Possibly dead Python function: stop_cycle", "shortDescription": {"text": "Possibly dead Python function: stop_cycle"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16cbaa3513f46ce7", "name": "Possibly dead Python function: do_HEAD", "shortDescription": {"text": "Possibly dead Python function: do_HEAD"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faddc97692b08d95", "name": "Possibly dead Python function: do_GET", "shortDescription": {"text": "Possibly dead Python function: do_GET"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30e263de696ac5bc", "name": "Possibly dead Python function: do_POST", "shortDescription": {"text": "Possibly dead Python function: do_POST"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-854cd87c2436845f", "name": "Possibly dead Python function: do_OPTIONS", "shortDescription": {"text": "Possibly dead Python function: do_OPTIONS"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a14bcd461073e04", "name": "Possibly dead Python function: log_message", "shortDescription": {"text": "Possibly dead Python function: log_message"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31e6aaf113f0390a", "name": "Possibly dead Python function: set_fixed_setpoint_mode", "shortDescription": {"text": "Possibly dead Python function: set_fixed_setpoint_mode"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71ff4412e1ebcb3e", "name": "Possibly dead Python function: bulletproof_daikin_consumption_rollup_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_daikin_consumption_rollup_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18702e4a9046f126", "name": "Possibly dead Python function: bulletproof_fox_energy_rollup_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_fox_energy_rollup_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-373e111e20df2837", "name": "Possibly dead Python function: bulletproof_octopus_retry_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_octopus_retry_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85905d0a37bc2ca3", "name": "Possibly dead Python function: bulletproof_morning_brief_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_morning_brief_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-89574850384dbdf4", "name": "Possibly dead Python function: bulletproof_consumption_backfill_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_consumption_backfill_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5df728fa3bc39ce", "name": "Possibly dead Python function: bulletproof_forecast_skill_log_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_forecast_skill_log_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47bc4e5f552da63d", "name": "Possibly dead Python function: bulletproof_pv_error_log_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_pv_error_log_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26be0bbdf8c0cdf6", "name": "Possibly dead Python function: bulletproof_export_opportunity_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_export_opportunity_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fdfd4917ed984d7f", "name": "Possibly dead Python function: bulletproof_night_brief_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_night_brief_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9776a073b2347b6e", "name": "Possibly dead Python function: bulletproof_plan_push_job", "shortDescription": {"text": "Possibly dead Python function: bulletproof_plan_push_job"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d75aa2e653decbe", "name": "Privileged port 1001 in use", "shortDescription": {"text": "Privileged port 1001 in use"}, "fullDescription": {"text": "Port 1001 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-99f99900a41f0daf", "name": "Docker base image is tag-pinned but not digest-pinned: python:${PYTHON_VERSION}", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:${PYTHON_VERSION}"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3d6571dae270b93", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b90e649010ca4ebe", "name": "Dockerfile runs as root: ui/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: ui/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf2bb77f0962b04d", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55e02aadb3daadda", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:1.27-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:1.27-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36beb05ae983aea8", "name": "Insecure pattern 'cors_wildcard' in src/daikin/auth.py:226", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/daikin/auth.py:226"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f4c232b4aa78fc9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77166cbd46fcd8e4", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b841c61fdfcff569", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-076b03a16e76601d", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a50467f36b413ec", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-452bef14e53d7233", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41953b31b531f331", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de53ac274e5b4ecf", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37716d9c0a33ad5c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-598dbf359ab4bce2", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae2d94f5d4d8e61a", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71cc53f61e29f180", "name": "Very large file: tests/test_lp_pv_abundance.py (1187 lines)", "shortDescription": {"text": "Very large file: tests/test_lp_pv_abundance.py (1187 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44f5665bcb0beeff", "name": "Very large file: src/config.py (1968 lines)", "shortDescription": {"text": "Very large file: src/config.py (1968 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef41f2ff4efd0fa3", "name": "Very large file: src/weather.py (2581 lines)", "shortDescription": {"text": "Very large file: src/weather.py (2581 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a8b06d4cf65f78e", "name": "Very large file: src/mcp_server.py (3676 lines)", "shortDescription": {"text": "Very large file: src/mcp_server.py (3676 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77f0eb79e25f83a0", "name": "Very large file: src/db.py (6912 lines)", "shortDescription": {"text": "Very large file: src/db.py (6912 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ca2cc9a85f29b59", "name": "Very large file: src/api/main.py (5066 lines)", "shortDescription": {"text": "Very large file: src/api/main.py (5066 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb18876b87865614", "name": "Very large file: src/analytics/daily_brief.py (1497 lines)", "shortDescription": {"text": "Very large file: src/analytics/daily_brief.py (1497 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b08bc066f952e9c", "name": "Very large file: src/scheduler/appliance_dispatch.py (1927 lines)", "shortDescription": {"text": "Very large file: src/scheduler/appliance_dispatch.py (1927 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26a693733062bd45", "name": "Very large file: src/scheduler/lp_dispatch.py (1716 lines)", "shortDescription": {"text": "Very large file: src/scheduler/lp_dispatch.py (1716 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-510cb64ec5bfe92d", "name": "Very large file: src/scheduler/optimizer.py (2255 lines)", "shortDescription": {"text": "Very large file: src/scheduler/optimizer.py (2255 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2cf3e3494e76c259", "name": "Very large file: src/scheduler/runner.py (2206 lines)", "shortDescription": {"text": "Very large file: src/scheduler/runner.py (2206 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b6f3378aadc9c0b", "name": "Very large file: src/scheduler/lp_optimizer.py (1359 lines)", "shortDescription": {"text": "Very large file: src/scheduler/lp_optimizer.py (1359 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 405 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 17 placeholder/mock markers across 7 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17d866d91a7c451e", "name": "Agent instruction/config may expose a secret: CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3322c83144ae611e", "name": "Commented-code block (5 lines) in tests/test_daikin_lwt_prefilter.py:27", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_daikin_lwt_prefilter.py:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2accd5ad1e0698ec", "name": "Legacy-named symbol `out_legacy` in tests/test_today_factor_scope.py:129", "shortDescription": {"text": "Legacy-named symbol `out_legacy` in tests/test_today_factor_scope.py:129"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f40c37ee8b54c772", "name": "Commented-code block (5 lines) in tests/test_daikin_passive_mode.py:155", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_daikin_passive_mode.py:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0020ddfe38640171", "name": "Commented-code block (5 lines) in tests/test_brief_expanded.py:139", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_brief_expanded.py:139"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c5b5d3b4ac27612", "name": "Commented-code block (6 lines) in tests/test_fox_groups_overflow.py:141", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_fox_groups_overflow.py:141"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74406cce410256b5", "name": "Legacy-named symbol `residual_load_profile_v2` in tests/test_db_residual_profile_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in tests/test_db_residual_profile_v2.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-733ecc94a933c38e", "name": "Commented-code block (7 lines) in tests/test_telegram_transport.py:481", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_telegram_transport.py:481"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-016eab675bed30f6", "name": "Commented-code block (5 lines) in tests/test_lp_dhw_draw_model.py:114", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_lp_dhw_draw_model.py:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb6096b7892b01de", "name": "Legacy-named symbol `test_perturb_base_load_factor_one_returns_copy` in tests/test_scenarios.py:52", "shortDescription": {"text": "Legacy-named symbol `test_perturb_base_load_factor_one_returns_copy` in tests/test_scenarios.py:52"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ebe96e4bd629147", "name": "Commented-code block (5 lines) in tests/test_lp_optimizer.py:631", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_lp_optimizer.py:631"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a46dca6d8e878020", "name": "Commented-code block (6 lines) in tests/test_heuristic_fallback.py:146", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_heuristic_fallback.py:146"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ea35305949cf612", "name": "Commented-code block (5 lines) in tests/test_brief_mtd_and_forgone_lines.py:102", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_brief_mtd_and_forgone_lines.py:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdf0ece57beb3e95", "name": "Commented-code block (8 lines) in tests/test_lp_shower_floor_soft.py:54", "shortDescription": {"text": "Commented-code block (8 lines) in tests/test_lp_shower_floor_soft.py:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f9a827787934bfa", "name": "Legacy-named symbol `_flat_v2` in tests/test_lp_load_scale.py:54", "shortDescription": {"text": "Legacy-named symbol `_flat_v2` in tests/test_lp_load_scale.py:54"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4dafdc05748527c7", "name": "Commented-code block (6 lines) in tests/test_pv_calibration_3d.py:127", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_pv_calibration_3d.py:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5551fdb33fde06d4", "name": "Commented-code block (9 lines) in tests/test_dhw_prefire_real_scenarios.py:79", "shortDescription": {"text": "Commented-code block (9 lines) in tests/test_dhw_prefire_real_scenarios.py:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e31058324d4593dc", "name": "Commented-code block (5 lines) in tests/test_mpc_event_triggers.py:242", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_mpc_event_triggers.py:242"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0284adb479d8993", "name": "Commented-code block (5 lines) in tests/test_user_override.py:277", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_user_override.py:277"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c88b5ca9452fa87b", "name": "Commented-code block (6 lines) in tests/test_lp_tank_idle_resolve_during_window.py:148", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_lp_tank_idle_resolve_during_window.py:148"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-604b46d01e92c552", "name": "Commented-code block (5 lines) in tests/test_tariff_aware_load_profile.py:89", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_tariff_aware_load_profile.py:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-024fdbdc338f538f", "name": "Commented-code block (5 lines) in tests/test_db_residual_profile.py:87", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_db_residual_profile.py:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acdf389968b8bdcf", "name": "Commented-code block (6 lines) in tests/test_lp_hp_min_on.py:43", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_lp_hp_min_on.py:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d827098d607823e4", "name": "Commented-code block (6 lines) in tests/test_lp_appliance_real_solver.py:170", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_lp_appliance_real_solver.py:170"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a15d2833fd4164d", "name": "Commented-code block (5 lines) in tests/test_dispatch_decisions_api.py:248", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_dispatch_decisions_api.py:248"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb4c428eb5ffb0e9", "name": "Commented-code block (6 lines) in tests/test_lp_dhw_pinning.py:355", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_lp_dhw_pinning.py:355"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95841e4b32390ff2", "name": "Commented-code block (5 lines) in tests/test_lp_legionella_cycle.py:101", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_lp_legionella_cycle.py:101"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b82548bd828a685", "name": "Commented-code block (5 lines) in tests/test_lp_pv_abundance.py:222", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_lp_pv_abundance.py:222"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b717aa1f6a87313", "name": "Commented-code block (6 lines) in tests/scheduler/test_appliance_battery_aware.py:456", "shortDescription": {"text": "Commented-code block (6 lines) in tests/scheduler/test_appliance_battery_aware.py:456"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-643db670a0c167cb", "name": "Commented-code block (5 lines) in tests/scheduler/test_solve_lp_boundary_matrix.py:88", "shortDescription": {"text": "Commented-code block (5 lines) in tests/scheduler/test_solve_lp_boundary_matrix.py:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9b737b39b0e07c7", "name": "Commented-code block (5 lines) in scripts/check_lp_regression.py:284", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/check_lp_regression.py:284"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-caacd322eface844", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/check_lp_regression.py:290", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/check_lp_regression.py:290"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80aade04ef69d6dc", "name": "Commented-code block (10 lines) in src/daikin_bulletproof.py:188", "shortDescription": {"text": "Commented-code block (10 lines) in src/daikin_bulletproof.py:188"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1153ffe6ce24570", "name": "Legacy-named symbol `residual_load_profile_v2` in src/config.py:780", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/config.py:780"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-442f8604decc782a", "name": "Commented-code block (9 lines) in src/config.py:136", "shortDescription": {"text": "Commented-code block (9 lines) in src/config.py:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2ee407ff601654b4", "name": "Commented-code block (5 lines) in src/notifier.py:301", "shortDescription": {"text": "Commented-code block (5 lines) in src/notifier.py:301"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-766b17e92e656936", "name": "Commented-code block (7 lines) in src/weather.py:253", "shortDescription": {"text": "Commented-code block (7 lines) in src/weather.py:253"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84aa4df09d5f9216", "name": "Commented-code block (8 lines) in src/dhw_policy.py:201", "shortDescription": {"text": "Commented-code block (8 lines) in src/dhw_policy.py:201"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8dd7951413f4d861", "name": "Commented-code block (5 lines) in src/physics.py:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/physics.py:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-022c3860c181d024", "name": "Commented-code block (5 lines) in src/dhw_demand.py:156", "shortDescription": {"text": "Commented-code block (5 lines) in src/dhw_demand.py:156"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8238df81fd87988b", "name": "Legacy-named symbol `pvnet_v2` in src/runtime_settings.py:328", "shortDescription": {"text": "Legacy-named symbol `pvnet_v2` in src/runtime_settings.py:328"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69c42e411c249727", "name": "Commented-code block (6 lines) in src/runtime_settings.py:43", "shortDescription": {"text": "Commented-code block (6 lines) in src/runtime_settings.py:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4dc2d6dbfc313ab", "name": "Commented-code block (5 lines) in src/mcp_server.py:593", "shortDescription": {"text": "Commented-code block (5 lines) in src/mcp_server.py:593"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b085487c0bc97f2b", "name": "Commented-code block (5 lines) in src/state_machine.py:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/state_machine.py:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80d5445017a6edff", "name": "Legacy-named symbol `residual_load_profile_v2` in src/db.py:1931", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/db.py:1931"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf389e691541b60a", "name": "Commented-code block (5 lines) in src/db.py:401", "shortDescription": {"text": "Commented-code block (5 lines) in src/db.py:401"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8c57d9419032dd5", "name": "Commented-code block (6 lines) in src/foxess/client.py:80", "shortDescription": {"text": "Commented-code block (6 lines) in src/foxess/client.py:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7925768bd98464c", "name": "Commented-code block (6 lines) in src/api/models.py:271", "shortDescription": {"text": "Commented-code block (6 lines) in src/api/models.py:271"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c7da7ae6c89a1c8", "name": "Legacy-named symbol `residual_load_profile_v2` in src/api/main.py:1299", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/api/main.py:1299"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c2a07b8c133a2f69", "name": "Commented-code block (6 lines) in src/api/main.py:183", "shortDescription": {"text": "Commented-code block (6 lines) in src/api/main.py:183"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a65eddb1ec3bdc1c", "name": "Commented-code block (8 lines) in src/api/routers/dispatch.py:276", "shortDescription": {"text": "Commented-code block (8 lines) in src/api/routers/dispatch.py:276"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f96f603ef3b2dac7", "name": "Legacy-named symbol `residual_load_profile_v2` in src/api/routers/pv.py:123", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/api/routers/pv.py:123"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dff521e086f19bd1", "name": "Commented-code block (8 lines) in src/api/routers/pv.py:152", "shortDescription": {"text": "Commented-code block (8 lines) in src/api/routers/pv.py:152"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e54134b744d1b7d", "name": "Network/subprocess call without timeout or try/except \u2014 src/smartthings/auth.py:178", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/smartthings/auth.py:178"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c877a3cba35b658c", "name": "Commented-code block (5 lines) in src/analytics/pnl.py:203", "shortDescription": {"text": "Commented-code block (5 lines) in src/analytics/pnl.py:203"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4635cc891ccd830b", "name": "Commented-code block (9 lines) in src/analytics/daily_brief.py:537", "shortDescription": {"text": "Commented-code block (9 lines) in src/analytics/daily_brief.py:537"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a43aa8c745d3c8e", "name": "Commented-code block (5 lines) in src/google_calendar/tiers.py:32", "shortDescription": {"text": "Commented-code block (5 lines) in src/google_calendar/tiers.py:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fac55b47017368a", "name": "Commented-code block (6 lines) in src/cli/__main__.py:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/cli/__main__.py:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffd01c45dc2ef477", "name": "Network/subprocess call without timeout or try/except \u2014 src/cli/__main__.py:445", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/cli/__main__.py:445"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8baaebf2b433d5f7", "name": "Commented-code block (8 lines) in src/daikin/auth.py:39", "shortDescription": {"text": "Commented-code block (8 lines) in src/daikin/auth.py:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ea535d54cb4d252", "name": "Commented-code block (9 lines) in src/daikin/client.py:59", "shortDescription": {"text": "Commented-code block (9 lines) in src/daikin/client.py:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf7b310ba2277165", "name": "Commented-code block (5 lines) in src/daikin/service.py:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/daikin/service.py:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c18d3672f7bea6a", "name": "Commented-code block (5 lines) in src/energy/tariff_engine.py:166", "shortDescription": {"text": "Commented-code block (5 lines) in src/energy/tariff_engine.py:166"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10007b7219b9429f", "name": "Commented-code block (5 lines) in src/energy/monthly.py:810", "shortDescription": {"text": "Commented-code block (5 lines) in src/energy/monthly.py:810"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab212b70ffdcebdb", "name": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/appliance_dispatch.py:205", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/appliance_dispatch.py:205"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0b6ab843289f827e", "name": "Commented-code block (7 lines) in src/scheduler/appliance_dispatch.py:318", "shortDescription": {"text": "Commented-code block (7 lines) in src/scheduler/appliance_dispatch.py:318"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8717458763586c20", "name": "Commented-code block (7 lines) in src/scheduler/consumption_backfill.py:166", "shortDescription": {"text": "Commented-code block (7 lines) in src/scheduler/consumption_backfill.py:166"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b07515c1a4a7faed", "name": "Commented-code block (5 lines) in src/scheduler/lp_dispatch.py:97", "shortDescription": {"text": "Commented-code block (5 lines) in src/scheduler/lp_dispatch.py:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-deee53f6b8d11ed2", "name": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/lp_simulation.py:51", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/lp_simulation.py:51"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-785fef7ae0804893", "name": "Commented-code block (5 lines) in src/scheduler/lp_replay.py:255", "shortDescription": {"text": "Commented-code block (5 lines) in src/scheduler/lp_replay.py:255"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3927e22b247ed053", "name": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/optimizer.py:1364", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/optimizer.py:1364"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ac1d795b3259d3e", "name": "Commented-code block (6 lines) in src/scheduler/optimizer.py:129", "shortDescription": {"text": "Commented-code block (6 lines) in src/scheduler/optimizer.py:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35f8455f9c0b815d", "name": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/scenarios.py:119", "shortDescription": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/scenarios.py:119"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4426b0f7b3843a58", "name": "Commented-code block (6 lines) in src/scheduler/runner.py:36", "shortDescription": {"text": "Commented-code block (6 lines) in src/scheduler/runner.py:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0de22a1eb2831494", "name": "Commented-code block (5 lines) in src/scheduler/lp_optimizer.py:54", "shortDescription": {"text": "Commented-code block (5 lines) in src/scheduler/lp_optimizer.py:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41a7ee37a813aa0e", "name": "Commented-code block (5 lines) in src/scheduler/octopus_fetch.py:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/scheduler/octopus_fetch.py:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c37533e4d931b798", "name": "Commented-code block (5 lines) in ui/vite.config.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in ui/vite.config.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c8d2ccecc24f293", "name": "Commented-code block (6 lines) in ui/src/components/insights/SystemHealthCard.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/components/insights/SystemHealthCard.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5dfecfd415d620e3", "name": "Commented-code block (5 lines) in ui/src/components/home/FeedbackPanel.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/home/FeedbackPanel.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e4bc3a823e0dec0", "name": "Commented-code block (5 lines) in ui/src/components/home/CostBreakdownChart.tsx:28", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/home/CostBreakdownChart.tsx:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9433ce60c07f73ac", "name": "Commented-code block (6 lines) in ui/src/components/home/LifetimeStrip.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/components/home/LifetimeStrip.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48f75a2d9c5079d4", "name": "Commented-code block (6 lines) in ui/src/components/home/TodayPlanWidget.tsx:27", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/components/home/TodayPlanWidget.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e180dc056af735c", "name": "Commented-code block (5 lines) in ui/src/components/home/Hero.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/home/Hero.tsx:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1bdea93fa0e93fa0", "name": "Commented-code block (9 lines) in ui/src/components/home/EnergyChartWidget.tsx:35", "shortDescription": {"text": "Commented-code block (9 lines) in ui/src/components/home/EnergyChartWidget.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-015cb5d7919faeee", "name": "Commented-code block (5 lines) in ui/src/components/home/HeatingControls.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/home/HeatingControls.tsx:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1730e350a469d44e", "name": "Commented-code block (6 lines) in ui/src/components/home/MetricTimeline.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/components/home/MetricTimeline.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bc12a3e090b52ab", "name": "Commented-code block (11 lines) in ui/src/components/home/OperateCard.tsx:30", "shortDescription": {"text": "Commented-code block (11 lines) in ui/src/components/home/OperateCard.tsx:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b778b014b5f8814", "name": "Commented-code block (5 lines) in ui/src/components/home/TriggersFeed.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/home/TriggersFeed.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6aa7ba3601c75b7f", "name": "Commented-code block (5 lines) in ui/src/components/home/ApplianceWidget.tsx:20", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/home/ApplianceWidget.tsx:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ee27ccdde963f18", "name": "Commented-code block (6 lines) in ui/src/components/home/HeatingPlanWidget.tsx:17", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/components/home/HeatingPlanWidget.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1e0fd21ac4c4367", "name": "Commented-code block (5 lines) in ui/src/components/settings/BatchBar.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/settings/BatchBar.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e02056264ee9ac2", "name": "Commented-code block (5 lines) in ui/src/components/cockpit/LivePowerWidget.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/cockpit/LivePowerWidget.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c99b35c8c5effab", "name": "Commented-code block (5 lines) in ui/src/components/cockpit/PowerFlow.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/cockpit/PowerFlow.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-591911318a7abc8c", "name": "Commented-code block (6 lines) in ui/src/components/shell/PeriodNavigator.tsx:17", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/components/shell/PeriodNavigator.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68a59fc08ad6d0ad", "name": "Commented-code block (6 lines) in ui/src/components/shell/AlertStrip.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/components/shell/AlertStrip.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4cee3162ea6ec7c2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/components/common/RefreshAction.tsx:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/components/common/RefreshAction.tsx:15"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d3d8fea3ba7e5623", "name": "Commented-code block (5 lines) in ui/src/components/common/TankScheduleBadges.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/common/TankScheduleBadges.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51b11b4edf1fe913", "name": "Commented-code block (5 lines) in ui/src/components/common/Icon.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/common/Icon.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6aabdefa19ce2963", "name": "Commented-code block (5 lines) in ui/src/components/common/RadialGauge.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/components/common/RadialGauge.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1481e5232647f39b", "name": "Commented-code block (6 lines) in ui/src/lib/motion.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/lib/motion.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cbaafe697a83882", "name": "Commented-code block (6 lines) in ui/src/lib/useAnimatedNumber.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/lib/useAnimatedNumber.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5d665739c69acc3", "name": "Commented-code block (6 lines) in ui/src/lib/freshness.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/lib/freshness.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c9acdb5d83c2be1", "name": "Commented-code block (6 lines) in ui/src/lib/charts.ts:174", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/lib/charts.ts:174"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0248e1296d4edde", "name": "Commented-code block (6 lines) in ui/src/lib/api.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/lib/api.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-106f49d3abdd1bba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/lib/api.ts:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/lib/api.ts:1"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e33394e9aa02874f", "name": "Commented-code block (6 lines) in ui/src/lib/auth.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in ui/src/lib/auth.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b50dc993f06242e", "name": "Commented-code block (5 lines) in ui/src/lib/types.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/lib/types.ts:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b87058ce1b7b928b", "name": "Commented-code block (5 lines) in ui/src/lib/poll.ts:130", "shortDescription": {"text": "Commented-code block (5 lines) in ui/src/lib/poll.ts:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-91476fa5353cdbd7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/lib/poll.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/lib/poll.ts:12"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0897a2f0de04292", "name": "Commented-code block (10 lines) in ui/src/routes/landing.tsx:41", "shortDescription": {"text": "Commented-code block (10 lines) in ui/src/routes/landing.tsx:41"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9232646d783c64c7", "name": "327 env vars used in code but missing from .env.example", "shortDescription": {"text": "327 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ACKNOWLEDGED_WARNINGS_RETENTION_DAYS`, `AGILE_TARIFF_START_DATE`, `AI_ASSISTANT_MODEL`, `AI_ASSISTANT_PROVIDER`, `ANTHROPIC_API_KEY`, `APPLIANCE_BATTERY_AWARE_ENABLED`, `APPLIANCE_BATTERY_ROUND_TRIP_EFF`, `APPLIANCE_DEFAULT_BASE_LOAD_KW` + 319 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/check_lp_regression.py:passed, scripts/check_lp_regression.py:passed\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4cfdc77060cdbd4", "name": "FastAPI POST `forecast` without auth dependency \u2014 quartz/app.py:88", "shortDescription": {"text": "FastAPI POST `forecast` without auth dependency \u2014 quartz/app.py:88"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f7b800e9dbe8db9", "name": "FastAPI POST `workbench_simulate` without auth dependency \u2014 src/api/routers/workbench.py:71", "shortDescription": {"text": "FastAPI POST `workbench_simulate` without auth dependency \u2014 src/api/routers/workbench.py:71"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9bd78129c122d6c", "name": "FastAPI POST `workbench_promote_simulate` without auth dependency \u2014 src/api/routers/workbench.py:129", "shortDescription": {"text": "FastAPI POST `workbench_promote_simulate` without auth dependency \u2014 src/api/routers/workbench.py:129"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d82291ac31cf8f5", "name": "FastAPI POST `workbench_promote` without auth dependency \u2014 src/api/routers/workbench.py:164", "shortDescription": {"text": "FastAPI POST `workbench_promote` without auth dependency \u2014 src/api/routers/workbench.py:164"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0294b33d1eee1a4", "name": "FastAPI POST `save_profile` without auth dependency \u2014 src/api/routers/workbench.py:269", "shortDescription": {"text": "FastAPI POST `save_profile` without auth dependency \u2014 src/api/routers/workbench.py:269"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3286f5a055799359", "name": "FastAPI DELETE `delete_profile` without auth dependency \u2014 src/api/routers/workbench.py:291", "shortDescription": {"text": "FastAPI DELETE `delete_profile` without auth dependency \u2014 src/api/routers/workbench.py:291"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de3fb79b24f790a6", "name": "FastAPI POST `discover_appliances` without auth dependency \u2014 src/api/routers/appliances.py:128", "shortDescription": {"text": "FastAPI POST `discover_appliances` without auth dependency \u2014 src/api/routers/appliances.py:128"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6ff9183c4d748e3", "name": "FastAPI PATCH `update_appliance` without auth dependency \u2014 src/api/routers/appliances.py:169", "shortDescription": {"text": "FastAPI PATCH `update_appliance` without auth dependency \u2014 src/api/routers/appliances.py:169"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-efe922fb3c74e032", "name": "FastAPI DELETE `delete_appliance` without auth dependency \u2014 src/api/routers/appliances.py:185", "shortDescription": {"text": "FastAPI DELETE `delete_appliance` without auth dependency \u2014 src/api/routers/appliances.py:185"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9855159371fca8ca", "name": "FastAPI POST `cancel_job` without auth dependency \u2014 src/api/routers/appliances.py:268", "shortDescription": {"text": "FastAPI POST `cancel_job` without auth dependency \u2014 src/api/routers/appliances.py:268"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d491886a9d0d428", "name": "FastAPI DELETE `delete_smartthings_credentials` without auth dependency \u2014 src/api/routers/appliances.py:316", "shortDescription": {"text": "FastAPI DELETE `delete_smartthings_credentials` without auth dependency \u2014 src/api/routers/appliances.py:316"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24044"}, "properties": {"repository": "albinati/home-energy-manager", "repoUrl": "https://github.com/albinati/home-energy-manager", "branch": "main"}, "results": [{"ruleId": "scanner-e0e54c5df34703ee", "level": "note", "message": {"text": "Possibly dead Python function: recover_on_boot"}, "properties": {"repobilityId": "12a4e3d761a64a19", "scanner": "scanner-primary", "fingerprint": "e0e54c5df34703ee", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/state_machine.py:935"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e7ea7a2f5d7bd7a0", "level": "note", "message": {"text": "Possibly dead Python function: set_device_setting"}, "properties": {"repobilityId": "279c5e5de27ef324", "scanner": "scanner-primary", "fingerprint": "e7ea7a2f5d7bd7a0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/foxess/client.py:411"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6df602ca380d7489", "level": "note", "message": {"text": "Possibly dead Python function: set_peak_shaving"}, "properties": {"repobilityId": "ffc0c63e1b15e121", "scanner": "scanner-primary", "fingerprint": "6df602ca380d7489", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/foxess/client.py:832"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d03b8ab85d174633", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "d03b8ab85d174633", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/smartthings/auth.py:328"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8f31c1121a0dc452", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "8f31c1121a0dc452", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/smartthings/auth.py:383"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c7c198fddd1b7596", "level": "note", "message": {"text": "Possibly dead Python function: stop_cycle"}, "properties": {"repobilityId": "9226abd6f753c1c6", "scanner": "scanner-primary", "fingerprint": "c7c198fddd1b7596", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/smartthings/client.py:194"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-16cbaa3513f46ce7", "level": "note", "message": {"text": "Possibly dead Python function: do_HEAD"}, "properties": {"repobilityId": "105ffef0dec52931", "scanner": "scanner-primary", "fingerprint": "16cbaa3513f46ce7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/daikin/auth.py:137"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-faddc97692b08d95", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "faddc97692b08d95", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/daikin/auth.py:141"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30e263de696ac5bc", "level": "note", "message": {"text": "Possibly dead Python function: do_POST"}, "properties": {"repobilityId": "53357410ca9379a9", "scanner": "scanner-primary", "fingerprint": "30e263de696ac5bc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/daikin/auth.py:206"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-854cd87c2436845f", "level": "note", "message": {"text": "Possibly dead Python function: do_OPTIONS"}, "properties": {"repobilityId": "36491d1f4fa41aef", "scanner": "scanner-primary", "fingerprint": "854cd87c2436845f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/daikin/auth.py:235"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a14bcd461073e04", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "1a14bcd461073e04", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/daikin/auth.py:242"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-31e6aaf113f0390a", "level": "note", "message": {"text": "Possibly dead Python function: set_fixed_setpoint_mode"}, "properties": {"repobilityId": "32fc0a89247c55ef", "scanner": "scanner-primary", "fingerprint": "31e6aaf113f0390a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/daikin/client.py:297"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71ff4412e1ebcb3e", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_daikin_consumption_rollup_job"}, "properties": {"repobilityId": "73c9f2f72596ad61", "scanner": "scanner-primary", "fingerprint": "71ff4412e1ebcb3e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:528"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18702e4a9046f126", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_fox_energy_rollup_job"}, "properties": {"repobilityId": "36178c1f14f79238", "scanner": "scanner-primary", "fingerprint": "18702e4a9046f126", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:610"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-373e111e20df2837", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_octopus_retry_job"}, "properties": {"repobilityId": "d3d7319ef56347bb", "scanner": "scanner-primary", "fingerprint": "373e111e20df2837", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:646"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-85905d0a37bc2ca3", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_morning_brief_job"}, "properties": {"repobilityId": "fa67dd9039587db6", "scanner": "scanner-primary", "fingerprint": "85905d0a37bc2ca3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:658"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-89574850384dbdf4", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_consumption_backfill_job"}, "properties": {"repobilityId": "7690e2525cd01dda", "scanner": "scanner-primary", "fingerprint": "89574850384dbdf4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:668"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5df728fa3bc39ce", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_forecast_skill_log_job"}, "properties": {"repobilityId": "f2781b37151700ce", "scanner": "scanner-primary", "fingerprint": "b5df728fa3bc39ce", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:698"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-47bc4e5f552da63d", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_pv_error_log_job"}, "properties": {"repobilityId": "0da81e3002df7fbd", "scanner": "scanner-primary", "fingerprint": "47bc4e5f552da63d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:717"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-26be0bbdf8c0cdf6", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_export_opportunity_job"}, "properties": {"repobilityId": "1555e438d6dfdb43", "scanner": "scanner-primary", "fingerprint": "26be0bbdf8c0cdf6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:738"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fdfd4917ed984d7f", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_night_brief_job"}, "properties": {"repobilityId": "236b3732a9befe5c", "scanner": "scanner-primary", "fingerprint": "fdfd4917ed984d7f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:809"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9776a073b2347b6e", "level": "note", "message": {"text": "Possibly dead Python function: bulletproof_plan_push_job"}, "properties": {"repobilityId": "e2426a4f6c5c77e2", "scanner": "scanner-primary", "fingerprint": "9776a073b2347b6e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scheduler/runner.py:1352"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d75aa2e653decbe", "level": "warning", "message": {"text": "Privileged port 1001 in use"}, "properties": {"repobilityId": "eb126d41479634e4", "scanner": "scanner-primary", "fingerprint": "8d75aa2e653decbe", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "quartz/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-99f99900a41f0daf", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:${PYTHON_VERSION}"}, "properties": {"repobilityId": "ce1015fa01049466", "scanner": "scanner-primary", "fingerprint": "99f99900a41f0daf", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-99f99900a41f0daf", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:${PYTHON_VERSION}"}, "properties": {"repobilityId": "dd139ecae142f8fc", "scanner": "scanner-primary", "fingerprint": "99f99900a41f0daf", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-a3d6571dae270b93", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "d68a57babb5951f3", "scanner": "scanner-primary", "fingerprint": "a3d6571dae270b93", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "quartz/Dockerfile"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-a3d6571dae270b93", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "a5b3f94672d14266", "scanner": "scanner-primary", "fingerprint": "a3d6571dae270b93", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "quartz/Dockerfile"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-b90e649010ca4ebe", "level": "warning", "message": {"text": "Dockerfile runs as root: ui/Dockerfile"}, "properties": {"repobilityId": "aabef16bb15c3af5", "scanner": "scanner-primary", "fingerprint": "b90e649010ca4ebe", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-bf2bb77f0962b04d", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "94a9bd754f6c3386", "scanner": "scanner-primary", "fingerprint": "bf2bb77f0962b04d", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui/Dockerfile"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-55e02aadb3daadda", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:1.27-alpine"}, "properties": {"repobilityId": "6446b7bcc7d7364a", "scanner": "scanner-primary", "fingerprint": "55e02aadb3daadda", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui/Dockerfile"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-36beb05ae983aea8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/daikin/auth.py:226"}, "properties": {"repobilityId": "4cd940954404882c", "scanner": "scanner-primary", "fingerprint": "36beb05ae983aea8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/daikin/auth.py"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-8f4c232b4aa78fc9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "979e3b58c19faf5e", "scanner": "scanner-primary", "fingerprint": "8f4c232b4aa78fc9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-8f4c232b4aa78fc9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7572d8d133564421", "scanner": "scanner-primary", "fingerprint": "8f4c232b4aa78fc9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-77166cbd46fcd8e4", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "50f3b563ffac10e9", "scanner": "scanner-primary", "fingerprint": "77166cbd46fcd8e4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "31563e99cfb42423", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97bc0c0574f7b461", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4fb72da33f9def3e", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cd6d9375d293facd", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1b903f620f035394", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-076b03a16e76601d", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a42462ccbe3d06f2", "scanner": "scanner-primary", "fingerprint": "076b03a16e76601d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a50467f36b413ec", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0012dcb61ebb9413", "scanner": "scanner-primary", "fingerprint": "1a50467f36b413ec", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tests.yml"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-1a50467f36b413ec", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8be1c656ca78b295", "scanner": "scanner-primary", "fingerprint": "1a50467f36b413ec", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tests.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-1a50467f36b413ec", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0012dcb61ebb9413", "scanner": "scanner-primary", "fingerprint": "1a50467f36b413ec", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tests.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-1a50467f36b413ec", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8be1c656ca78b295", "scanner": "scanner-primary", "fingerprint": "1a50467f36b413ec", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/tests.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-452bef14e53d7233", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3b5a10647f078ef1", "scanner": "scanner-primary", "fingerprint": "452bef14e53d7233", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/quartz-publish.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-452bef14e53d7233", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e149f0dd0169ab3", "scanner": "scanner-primary", "fingerprint": "452bef14e53d7233", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/quartz-publish.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-452bef14e53d7233", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3b5a10647f078ef1", "scanner": "scanner-primary", "fingerprint": "452bef14e53d7233", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/quartz-publish.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-452bef14e53d7233", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e7413b4c1865eb53", "scanner": "scanner-primary", "fingerprint": "452bef14e53d7233", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/quartz-publish.yml"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-452bef14e53d7233", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ecf96d2ca804f7d8", "scanner": "scanner-primary", "fingerprint": "452bef14e53d7233", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/quartz-publish.yml"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-452bef14e53d7233", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a6ccff9fe493d991", "scanner": "scanner-primary", "fingerprint": "452bef14e53d7233", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/quartz-publish.yml"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-452bef14e53d7233", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "13f0fd73ddf69b30", "scanner": "scanner-primary", "fingerprint": "452bef14e53d7233", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/quartz-publish.yml"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-41953b31b531f331", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "7ed0a30133ea9e96", "scanner": "scanner-primary", "fingerprint": "41953b31b531f331", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/quartz-publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02600186fc092bd4", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8ead6a2c2bfe167b", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-37716d9c0a33ad5c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "abfb5752158cf655", "scanner": "scanner-primary", "fingerprint": "37716d9c0a33ad5c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-598dbf359ab4bce2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "80d9490705a02837", "scanner": "scanner-primary", "fingerprint": "598dbf359ab4bce2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-598dbf359ab4bce2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c1b16bfcbc63c7e8", "scanner": "scanner-primary", "fingerprint": "598dbf359ab4bce2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-598dbf359ab4bce2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "80d9490705a02837", "scanner": "scanner-primary", "fingerprint": "598dbf359ab4bce2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-598dbf359ab4bce2", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fc516fd19eeb2cf1", "scanner": "scanner-primary", "fingerprint": "598dbf359ab4bce2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-598dbf359ab4bce2", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6470265afac0ff15", "scanner": "scanner-primary", "fingerprint": "598dbf359ab4bce2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-598dbf359ab4bce2", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "732fbf58da2ba7f1", "scanner": "scanner-primary", "fingerprint": "598dbf359ab4bce2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-598dbf359ab4bce2", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c9e645193ce3f9b5", "scanner": "scanner-primary", "fingerprint": "598dbf359ab4bce2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-598dbf359ab4bce2", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e686bcfc0aed9c99", "scanner": "scanner-primary", "fingerprint": "598dbf359ab4bce2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-ae2d94f5d4d8e61a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "bb340b7d9a0366e1", "scanner": "scanner-primary", "fingerprint": "ae2d94f5d4d8e61a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ui-publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71cc53f61e29f180", "level": "note", "message": {"text": "Very large file: tests/test_lp_pv_abundance.py (1187 lines)"}, "properties": {"repobilityId": "23feb1effd922577", "scanner": "scanner-primary", "fingerprint": "71cc53f61e29f180", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-44f5665bcb0beeff", "level": "note", "message": {"text": "Very large file: src/config.py (1968 lines)"}, "properties": {"repobilityId": "c390ca781c28683a", "scanner": "scanner-primary", "fingerprint": "44f5665bcb0beeff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ef41f2ff4efd0fa3", "level": "note", "message": {"text": "Very large file: src/weather.py (2581 lines)"}, "properties": {"repobilityId": "6f09dbcffc431ba1", "scanner": "scanner-primary", "fingerprint": "ef41f2ff4efd0fa3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2a8b06d4cf65f78e", "level": "note", "message": {"text": "Very large file: src/mcp_server.py (3676 lines)"}, "properties": {"repobilityId": "ca64e968431e7b04", "scanner": "scanner-primary", "fingerprint": "2a8b06d4cf65f78e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-77f0eb79e25f83a0", "level": "note", "message": {"text": "Very large file: src/db.py (6912 lines)"}, "properties": {"repobilityId": "8f51152b6b7d3140", "scanner": "scanner-primary", "fingerprint": "77f0eb79e25f83a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1ca2cc9a85f29b59", "level": "note", "message": {"text": "Very large file: src/api/main.py (5066 lines)"}, "properties": {"repobilityId": "0aa47e7bde209cf8", "scanner": "scanner-primary", "fingerprint": "1ca2cc9a85f29b59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fb18876b87865614", "level": "note", "message": {"text": "Very large file: src/analytics/daily_brief.py (1497 lines)"}, "properties": {"repobilityId": "ae0dc43f5e9a04a7", "scanner": "scanner-primary", "fingerprint": "fb18876b87865614", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6b08bc066f952e9c", "level": "note", "message": {"text": "Very large file: src/scheduler/appliance_dispatch.py (1927 lines)"}, "properties": {"repobilityId": "2b1fde5294285807", "scanner": "scanner-primary", "fingerprint": "6b08bc066f952e9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-26a693733062bd45", "level": "note", "message": {"text": "Very large file: src/scheduler/lp_dispatch.py (1716 lines)"}, "properties": {"repobilityId": "bec5f9e5934ac914", "scanner": "scanner-primary", "fingerprint": "26a693733062bd45", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-510cb64ec5bfe92d", "level": "note", "message": {"text": "Very large file: src/scheduler/optimizer.py (2255 lines)"}, "properties": {"repobilityId": "9431bb8e49436106", "scanner": "scanner-primary", "fingerprint": "510cb64ec5bfe92d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2cf3e3494e76c259", "level": "note", "message": {"text": "Very large file: src/scheduler/runner.py (2206 lines)"}, "properties": {"repobilityId": "d1b6583fe81858bb", "scanner": "scanner-primary", "fingerprint": "2cf3e3494e76c259", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9b6f3378aadc9c0b", "level": "note", "message": {"text": "Very large file: src/scheduler/lp_optimizer.py (1359 lines)"}, "properties": {"repobilityId": "968440e0cba0524e", "scanner": "scanner-primary", "fingerprint": "9b6f3378aadc9c0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b55fc8cf83a43a35", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "b1ac060bd33dcd1f", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "a43ec5bea0fc842f", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-17d866d91a7c451e", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "properties": {"repobilityId": "ccce5984e58a48f0", "scanner": "scanner-primary", "fingerprint": "17d866d91a7c451e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 215}}}]}, {"ruleId": "scanner-3322c83144ae611e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_daikin_lwt_prefilter.py:27"}, "properties": {"repobilityId": "f9bee3b4f85a5cdf", "scanner": "scanner-primary", "fingerprint": "3322c83144ae611e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2accd5ad1e0698ec", "level": "note", "message": {"text": "Legacy-named symbol `out_legacy` in tests/test_today_factor_scope.py:129"}, "properties": {"repobilityId": "ac51fadb162b9e2b", "scanner": "scanner-primary", "fingerprint": "2accd5ad1e0698ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f40c37ee8b54c772", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_daikin_passive_mode.py:155"}, "properties": {"repobilityId": "ccd1b3179aa9df28", "scanner": "scanner-primary", "fingerprint": "f40c37ee8b54c772", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0020ddfe38640171", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_brief_expanded.py:139"}, "properties": {"repobilityId": "957095ad7890de09", "scanner": "scanner-primary", "fingerprint": "0020ddfe38640171", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c5b5d3b4ac27612", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_fox_groups_overflow.py:141"}, "properties": {"repobilityId": "58c1b1d5d223c0d1", "scanner": "scanner-primary", "fingerprint": "7c5b5d3b4ac27612", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74406cce410256b5", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in tests/test_db_residual_profile_v2.py:1"}, "properties": {"repobilityId": "d12890542d9f11f6", "scanner": "scanner-primary", "fingerprint": "74406cce410256b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-733ecc94a933c38e", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_telegram_transport.py:481"}, "properties": {"repobilityId": "332919998839fac9", "scanner": "scanner-primary", "fingerprint": "733ecc94a933c38e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-016eab675bed30f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_lp_dhw_draw_model.py:114"}, "properties": {"repobilityId": "d02013296d728b17", "scanner": "scanner-primary", "fingerprint": "016eab675bed30f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb6096b7892b01de", "level": "note", "message": {"text": "Legacy-named symbol `test_perturb_base_load_factor_one_returns_copy` in tests/test_scenarios.py:52"}, "properties": {"repobilityId": "369206b4124373fe", "scanner": "scanner-primary", "fingerprint": "cb6096b7892b01de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5ebe96e4bd629147", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_lp_optimizer.py:631"}, "properties": {"repobilityId": "ce539373a6305ced", "scanner": "scanner-primary", "fingerprint": "5ebe96e4bd629147", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a46dca6d8e878020", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_heuristic_fallback.py:146"}, "properties": {"repobilityId": "c323fe765fd7c1af", "scanner": "scanner-primary", "fingerprint": "a46dca6d8e878020", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ea35305949cf612", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_brief_mtd_and_forgone_lines.py:102"}, "properties": {"repobilityId": "e3c235a9a9e2e74e", "scanner": "scanner-primary", "fingerprint": "4ea35305949cf612", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdf0ece57beb3e95", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/test_lp_shower_floor_soft.py:54"}, "properties": {"repobilityId": "392d599515b741a3", "scanner": "scanner-primary", "fingerprint": "cdf0ece57beb3e95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f9a827787934bfa", "level": "note", "message": {"text": "Legacy-named symbol `_flat_v2` in tests/test_lp_load_scale.py:54"}, "properties": {"repobilityId": "16f28449126cc819", "scanner": "scanner-primary", "fingerprint": "3f9a827787934bfa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4dafdc05748527c7", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_pv_calibration_3d.py:127"}, "properties": {"repobilityId": "3f53087562e5ad9d", "scanner": "scanner-primary", "fingerprint": "4dafdc05748527c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5551fdb33fde06d4", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/test_dhw_prefire_real_scenarios.py:79"}, "properties": {"repobilityId": "68eb55016962b827", "scanner": "scanner-primary", "fingerprint": "5551fdb33fde06d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e31058324d4593dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_mpc_event_triggers.py:242"}, "properties": {"repobilityId": "fd1b97fa3fba98ea", "scanner": "scanner-primary", "fingerprint": "e31058324d4593dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0284adb479d8993", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_user_override.py:277"}, "properties": {"repobilityId": "ae5abb9af550dee0", "scanner": "scanner-primary", "fingerprint": "d0284adb479d8993", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c88b5ca9452fa87b", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_lp_tank_idle_resolve_during_window.py:148"}, "properties": {"repobilityId": "da1f192e42220e38", "scanner": "scanner-primary", "fingerprint": "c88b5ca9452fa87b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-604b46d01e92c552", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_tariff_aware_load_profile.py:89"}, "properties": {"repobilityId": "58166c34f08e6963", "scanner": "scanner-primary", "fingerprint": "604b46d01e92c552", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-024fdbdc338f538f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_db_residual_profile.py:87"}, "properties": {"repobilityId": "ddae3d7cc79b8206", "scanner": "scanner-primary", "fingerprint": "024fdbdc338f538f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acdf389968b8bdcf", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_lp_hp_min_on.py:43"}, "properties": {"repobilityId": "7878f4d467411c92", "scanner": "scanner-primary", "fingerprint": "acdf389968b8bdcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d827098d607823e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_lp_appliance_real_solver.py:170"}, "properties": {"repobilityId": "122dde4616a2d5ad", "scanner": "scanner-primary", "fingerprint": "d827098d607823e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a15d2833fd4164d", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_dispatch_decisions_api.py:248"}, "properties": {"repobilityId": "2ee4dbfe8327cf78", "scanner": "scanner-primary", "fingerprint": "1a15d2833fd4164d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb4c428eb5ffb0e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_lp_dhw_pinning.py:355"}, "properties": {"repobilityId": "6d50e111f69a3e42", "scanner": "scanner-primary", "fingerprint": "bb4c428eb5ffb0e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95841e4b32390ff2", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_lp_legionella_cycle.py:101"}, "properties": {"repobilityId": "7ab2c26afd51f554", "scanner": "scanner-primary", "fingerprint": "95841e4b32390ff2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b82548bd828a685", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_lp_pv_abundance.py:222"}, "properties": {"repobilityId": "2bc1136dff876b4a", "scanner": "scanner-primary", "fingerprint": "0b82548bd828a685", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b717aa1f6a87313", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/scheduler/test_appliance_battery_aware.py:456"}, "properties": {"repobilityId": "02cf836e93cfeaac", "scanner": "scanner-primary", "fingerprint": "6b717aa1f6a87313", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-643db670a0c167cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/scheduler/test_solve_lp_boundary_matrix.py:88"}, "properties": {"repobilityId": "e885be87ac13d059", "scanner": "scanner-primary", "fingerprint": "643db670a0c167cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9b737b39b0e07c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/check_lp_regression.py:284"}, "properties": {"repobilityId": "6bfd39af6bbf0a6c", "scanner": "scanner-primary", "fingerprint": "f9b737b39b0e07c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-caacd322eface844", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/check_lp_regression.py:290"}, "properties": {"repobilityId": "412be16cf171f302", "scanner": "scanner-primary", "fingerprint": "caacd322eface844", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-80aade04ef69d6dc", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/daikin_bulletproof.py:188"}, "properties": {"repobilityId": "d2c3b72f5d521a59", "scanner": "scanner-primary", "fingerprint": "80aade04ef69d6dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1153ffe6ce24570", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/config.py:780"}, "properties": {"repobilityId": "812e9631fb303ad4", "scanner": "scanner-primary", "fingerprint": "c1153ffe6ce24570", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-442f8604decc782a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/config.py:136"}, "properties": {"repobilityId": "c322330ded30e7ea", "scanner": "scanner-primary", "fingerprint": "442f8604decc782a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ee407ff601654b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/notifier.py:301"}, "properties": {"repobilityId": "27b93ec8471a0978", "scanner": "scanner-primary", "fingerprint": "2ee407ff601654b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-766b17e92e656936", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/weather.py:253"}, "properties": {"repobilityId": "7b661d463f2952bb", "scanner": "scanner-primary", "fingerprint": "766b17e92e656936", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84aa4df09d5f9216", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/dhw_policy.py:201"}, "properties": {"repobilityId": "efae77db613b2a35", "scanner": "scanner-primary", "fingerprint": "84aa4df09d5f9216", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8dd7951413f4d861", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/physics.py:12"}, "properties": {"repobilityId": "276fa12201061f34", "scanner": "scanner-primary", "fingerprint": "8dd7951413f4d861", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-022c3860c181d024", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dhw_demand.py:156"}, "properties": {"repobilityId": "520e90d56b7c9a03", "scanner": "scanner-primary", "fingerprint": "022c3860c181d024", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8238df81fd87988b", "level": "note", "message": {"text": "Legacy-named symbol `pvnet_v2` in src/runtime_settings.py:328"}, "properties": {"repobilityId": "e4218df163754a24", "scanner": "scanner-primary", "fingerprint": "8238df81fd87988b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-69c42e411c249727", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/runtime_settings.py:43"}, "properties": {"repobilityId": "e41b62e3fd3806c6", "scanner": "scanner-primary", "fingerprint": "69c42e411c249727", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4dc2d6dbfc313ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/mcp_server.py:593"}, "properties": {"repobilityId": "c2efd5ed391703bd", "scanner": "scanner-primary", "fingerprint": "f4dc2d6dbfc313ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b085487c0bc97f2b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/state_machine.py:26"}, "properties": {"repobilityId": "906ee7b85a45f50c", "scanner": "scanner-primary", "fingerprint": "b085487c0bc97f2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80d5445017a6edff", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/db.py:1931"}, "properties": {"repobilityId": "dfd3d1720074c1cb", "scanner": "scanner-primary", "fingerprint": "80d5445017a6edff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bf389e691541b60a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/db.py:401"}, "properties": {"repobilityId": "3dd7eab4343c6b35", "scanner": "scanner-primary", "fingerprint": "bf389e691541b60a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8c57d9419032dd5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/foxess/client.py:80"}, "properties": {"repobilityId": "a638c2a85fa84f85", "scanner": "scanner-primary", "fingerprint": "e8c57d9419032dd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7925768bd98464c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/api/models.py:271"}, "properties": {"repobilityId": "473675628e449e7c", "scanner": "scanner-primary", "fingerprint": "a7925768bd98464c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c7da7ae6c89a1c8", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/api/main.py:1299"}, "properties": {"repobilityId": "0cdca128c95cef9f", "scanner": "scanner-primary", "fingerprint": "1c7da7ae6c89a1c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c2a07b8c133a2f69", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/api/main.py:183"}, "properties": {"repobilityId": "77934142568bc756", "scanner": "scanner-primary", "fingerprint": "c2a07b8c133a2f69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a65eddb1ec3bdc1c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/api/routers/dispatch.py:276"}, "properties": {"repobilityId": "811481656b68b115", "scanner": "scanner-primary", "fingerprint": "a65eddb1ec3bdc1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f96f603ef3b2dac7", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/api/routers/pv.py:123"}, "properties": {"repobilityId": "d6b26221ec53d8b8", "scanner": "scanner-primary", "fingerprint": "f96f603ef3b2dac7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dff521e086f19bd1", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/api/routers/pv.py:152"}, "properties": {"repobilityId": "005d987b4edc15d3", "scanner": "scanner-primary", "fingerprint": "dff521e086f19bd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e54134b744d1b7d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/smartthings/auth.py:178"}, "properties": {"repobilityId": "a24960ea49c2a2bd", "scanner": "scanner-primary", "fingerprint": "1e54134b744d1b7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c877a3cba35b658c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/analytics/pnl.py:203"}, "properties": {"repobilityId": "9469cc1a15f7a0a4", "scanner": "scanner-primary", "fingerprint": "c877a3cba35b658c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4635cc891ccd830b", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/analytics/daily_brief.py:537"}, "properties": {"repobilityId": "35345736685d028e", "scanner": "scanner-primary", "fingerprint": "4635cc891ccd830b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a43aa8c745d3c8e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/google_calendar/tiers.py:32"}, "properties": {"repobilityId": "473c7bdaa44819fe", "scanner": "scanner-primary", "fingerprint": "2a43aa8c745d3c8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fac55b47017368a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/cli/__main__.py:38"}, "properties": {"repobilityId": "af3d7f6e24f736d1", "scanner": "scanner-primary", "fingerprint": "7fac55b47017368a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffd01c45dc2ef477", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/cli/__main__.py:445"}, "properties": {"repobilityId": "8fbc7c31eb808bd1", "scanner": "scanner-primary", "fingerprint": "ffd01c45dc2ef477", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8baaebf2b433d5f7", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/daikin/auth.py:39"}, "properties": {"repobilityId": "9b1428f6f694fde3", "scanner": "scanner-primary", "fingerprint": "8baaebf2b433d5f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ea535d54cb4d252", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/daikin/client.py:59"}, "properties": {"repobilityId": "e80df0355decd4d6", "scanner": "scanner-primary", "fingerprint": "6ea535d54cb4d252", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf7b310ba2277165", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/daikin/service.py:55"}, "properties": {"repobilityId": "4e06b3c93eb7341e", "scanner": "scanner-primary", "fingerprint": "cf7b310ba2277165", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c18d3672f7bea6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/energy/tariff_engine.py:166"}, "properties": {"repobilityId": "22c71bbd754a09b3", "scanner": "scanner-primary", "fingerprint": "1c18d3672f7bea6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10007b7219b9429f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/energy/monthly.py:810"}, "properties": {"repobilityId": "93624d4c608f0511", "scanner": "scanner-primary", "fingerprint": "10007b7219b9429f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab212b70ffdcebdb", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/appliance_dispatch.py:205"}, "properties": {"repobilityId": "3e6da1449d8b721f", "scanner": "scanner-primary", "fingerprint": "ab212b70ffdcebdb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0b6ab843289f827e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/scheduler/appliance_dispatch.py:318"}, "properties": {"repobilityId": "2f3e926c14245c14", "scanner": "scanner-primary", "fingerprint": "0b6ab843289f827e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8717458763586c20", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/scheduler/consumption_backfill.py:166"}, "properties": {"repobilityId": "e602c4dd7cc5406d", "scanner": "scanner-primary", "fingerprint": "8717458763586c20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b07515c1a4a7faed", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scheduler/lp_dispatch.py:97"}, "properties": {"repobilityId": "76b36952cfcb3baf", "scanner": "scanner-primary", "fingerprint": "b07515c1a4a7faed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-deee53f6b8d11ed2", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/lp_simulation.py:51"}, "properties": {"repobilityId": "cebb0553a55ff16c", "scanner": "scanner-primary", "fingerprint": "deee53f6b8d11ed2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-785fef7ae0804893", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scheduler/lp_replay.py:255"}, "properties": {"repobilityId": "123b829ed315000d", "scanner": "scanner-primary", "fingerprint": "785fef7ae0804893", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3927e22b247ed053", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/optimizer.py:1364"}, "properties": {"repobilityId": "232c4cef9ecea866", "scanner": "scanner-primary", "fingerprint": "3927e22b247ed053", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7ac1d795b3259d3e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scheduler/optimizer.py:129"}, "properties": {"repobilityId": "1a21f0264bfe679d", "scanner": "scanner-primary", "fingerprint": "7ac1d795b3259d3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35f8455f9c0b815d", "level": "note", "message": {"text": "Legacy-named symbol `residual_load_profile_v2` in src/scheduler/scenarios.py:119"}, "properties": {"repobilityId": "3589fa0a332fbbba", "scanner": "scanner-primary", "fingerprint": "35f8455f9c0b815d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4426b0f7b3843a58", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scheduler/runner.py:36"}, "properties": {"repobilityId": "c765dcf122f15e6d", "scanner": "scanner-primary", "fingerprint": "4426b0f7b3843a58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0de22a1eb2831494", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scheduler/lp_optimizer.py:54"}, "properties": {"repobilityId": "453f82caeb4fb69f", "scanner": "scanner-primary", "fingerprint": "0de22a1eb2831494", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41a7ee37a813aa0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scheduler/octopus_fetch.py:55"}, "properties": {"repobilityId": "01809f997097fd2b", "scanner": "scanner-primary", "fingerprint": "41a7ee37a813aa0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c37533e4d931b798", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/vite.config.ts:6"}, "properties": {"repobilityId": "86d265fedb322304", "scanner": "scanner-primary", "fingerprint": "c37533e4d931b798", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c8d2ccecc24f293", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/components/insights/SystemHealthCard.tsx:5"}, "properties": {"repobilityId": "1d001e87345a11a1", "scanner": "scanner-primary", "fingerprint": "9c8d2ccecc24f293", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5dfecfd415d620e3", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/home/FeedbackPanel.tsx:11"}, "properties": {"repobilityId": "f30117d64f3815af", "scanner": "scanner-primary", "fingerprint": "5dfecfd415d620e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e4bc3a823e0dec0", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/home/CostBreakdownChart.tsx:28"}, "properties": {"repobilityId": "f04041a648f42aa3", "scanner": "scanner-primary", "fingerprint": "7e4bc3a823e0dec0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9433ce60c07f73ac", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/components/home/LifetimeStrip.tsx:8"}, "properties": {"repobilityId": "423b355df68a883f", "scanner": "scanner-primary", "fingerprint": "9433ce60c07f73ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48f75a2d9c5079d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/components/home/TodayPlanWidget.tsx:27"}, "properties": {"repobilityId": "3fbec1a9ca525dfb", "scanner": "scanner-primary", "fingerprint": "48f75a2d9c5079d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e180dc056af735c", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/home/Hero.tsx:25"}, "properties": {"repobilityId": "8a327fe10a3c95a3", "scanner": "scanner-primary", "fingerprint": "0e180dc056af735c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bdea93fa0e93fa0", "level": "none", "message": {"text": "Commented-code block (9 lines) in ui/src/components/home/EnergyChartWidget.tsx:35"}, "properties": {"repobilityId": "2b931057d1f4e478", "scanner": "scanner-primary", "fingerprint": "1bdea93fa0e93fa0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-015cb5d7919faeee", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/home/HeatingControls.tsx:25"}, "properties": {"repobilityId": "f8d7397c342c0ea4", "scanner": "scanner-primary", "fingerprint": "015cb5d7919faeee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1730e350a469d44e", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/components/home/MetricTimeline.tsx:11"}, "properties": {"repobilityId": "6a49b5d85ef6b6a7", "scanner": "scanner-primary", "fingerprint": "1730e350a469d44e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bc12a3e090b52ab", "level": "none", "message": {"text": "Commented-code block (11 lines) in ui/src/components/home/OperateCard.tsx:30"}, "properties": {"repobilityId": "3432762eb7a435c9", "scanner": "scanner-primary", "fingerprint": "8bc12a3e090b52ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b778b014b5f8814", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/home/TriggersFeed.tsx:6"}, "properties": {"repobilityId": "57274518a02c2225", "scanner": "scanner-primary", "fingerprint": "9b778b014b5f8814", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aa7ba3601c75b7f", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/home/ApplianceWidget.tsx:20"}, "properties": {"repobilityId": "8886af8c90e35663", "scanner": "scanner-primary", "fingerprint": "6aa7ba3601c75b7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ee27ccdde963f18", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/components/home/HeatingPlanWidget.tsx:17"}, "properties": {"repobilityId": "e1d2541b53f7b4af", "scanner": "scanner-primary", "fingerprint": "5ee27ccdde963f18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1e0fd21ac4c4367", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/settings/BatchBar.tsx:14"}, "properties": {"repobilityId": "1ea96c721d71e717", "scanner": "scanner-primary", "fingerprint": "b1e0fd21ac4c4367", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e02056264ee9ac2", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/cockpit/LivePowerWidget.tsx:19"}, "properties": {"repobilityId": "dad9fe85f549598c", "scanner": "scanner-primary", "fingerprint": "7e02056264ee9ac2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c99b35c8c5effab", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/cockpit/PowerFlow.tsx:11"}, "properties": {"repobilityId": "4629b4af5621bf80", "scanner": "scanner-primary", "fingerprint": "1c99b35c8c5effab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-591911318a7abc8c", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/components/shell/PeriodNavigator.tsx:17"}, "properties": {"repobilityId": "ce29bf77d7bbdd33", "scanner": "scanner-primary", "fingerprint": "591911318a7abc8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68a59fc08ad6d0ad", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/components/shell/AlertStrip.tsx:8"}, "properties": {"repobilityId": "cb36a6007d9bf389", "scanner": "scanner-primary", "fingerprint": "68a59fc08ad6d0ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cee3162ea6ec7c2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/components/common/RefreshAction.tsx:15"}, "properties": {"repobilityId": "a23430f7ff6346d6", "scanner": "scanner-primary", "fingerprint": "4cee3162ea6ec7c2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3d8fea3ba7e5623", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/common/TankScheduleBadges.tsx:5"}, "properties": {"repobilityId": "1a94053179625646", "scanner": "scanner-primary", "fingerprint": "d3d8fea3ba7e5623", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51b11b4edf1fe913", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/common/Icon.tsx:3"}, "properties": {"repobilityId": "e71eecde4232a349", "scanner": "scanner-primary", "fingerprint": "51b11b4edf1fe913", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aabdefa19ce2963", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/components/common/RadialGauge.tsx:17"}, "properties": {"repobilityId": "f88e6a815cdc967c", "scanner": "scanner-primary", "fingerprint": "6aabdefa19ce2963", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1481e5232647f39b", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/lib/motion.ts:1"}, "properties": {"repobilityId": "b69328f990e5b8c3", "scanner": "scanner-primary", "fingerprint": "1481e5232647f39b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cbaafe697a83882", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/lib/useAnimatedNumber.ts:9"}, "properties": {"repobilityId": "23c959efa60a082c", "scanner": "scanner-primary", "fingerprint": "7cbaafe697a83882", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5d665739c69acc3", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/lib/freshness.ts:3"}, "properties": {"repobilityId": "fd9a685a866401e9", "scanner": "scanner-primary", "fingerprint": "a5d665739c69acc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c9acdb5d83c2be1", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/lib/charts.ts:174"}, "properties": {"repobilityId": "f5f57c0c02bb29ee", "scanner": "scanner-primary", "fingerprint": "9c9acdb5d83c2be1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0248e1296d4edde", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/lib/api.ts:1"}, "properties": {"repobilityId": "0ffe202933b523ae", "scanner": "scanner-primary", "fingerprint": "a0248e1296d4edde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-106f49d3abdd1bba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/lib/api.ts:1"}, "properties": {"repobilityId": "d89d12de719b7c6c", "scanner": "scanner-primary", "fingerprint": "106f49d3abdd1bba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e33394e9aa02874f", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui/src/lib/auth.ts:3"}, "properties": {"repobilityId": "8d159b167026243e", "scanner": "scanner-primary", "fingerprint": "e33394e9aa02874f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b50dc993f06242e", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/lib/types.ts:25"}, "properties": {"repobilityId": "4961b60d8a2a578f", "scanner": "scanner-primary", "fingerprint": "5b50dc993f06242e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b87058ce1b7b928b", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui/src/lib/poll.ts:130"}, "properties": {"repobilityId": "486e9f794b917fe6", "scanner": "scanner-primary", "fingerprint": "b87058ce1b7b928b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91476fa5353cdbd7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui/src/lib/poll.ts:12"}, "properties": {"repobilityId": "39010d186f429808", "scanner": "scanner-primary", "fingerprint": "91476fa5353cdbd7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f0897a2f0de04292", "level": "none", "message": {"text": "Commented-code block (10 lines) in ui/src/routes/landing.tsx:41"}, "properties": {"repobilityId": "cd4622d1dc2a69a0", "scanner": "scanner-primary", "fingerprint": "f0897a2f0de04292", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9232646d783c64c7", "level": "note", "message": {"text": "327 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "e8543bd1c10887d7", "scanner": "scanner-primary", "fingerprint": "9232646d783c64c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0cb6295672cde7e0", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "59db60af85c738b2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8ff0f2085a80d915", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "dc0863f748809afe", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6bdd80dfc1df5f81", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f62febb4a0e741a8", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "afa487e809bc1928", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0c0feb523d3e9c8d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c518457400ce525a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b248b04f2759b3a6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f2da36b8f9c083a6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "aad54fd80c5ba290", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "4d68c0f51945e4b7", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "29c6553cfad3717c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1d14a59c96a8a77d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5478c32c1cf3c77c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "eb0241a6d9d23f2f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b7afb6de176b7a35", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "39176193ecb3c26c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0e9805b3bbffc905", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-f4cfdc77060cdbd4", "level": "error", "message": {"text": "FastAPI POST `forecast` without auth dependency \u2014 quartz/app.py:88"}, "properties": {"repobilityId": "50e7da364ff0adc4", "scanner": "scanner-primary", "fingerprint": "f4cfdc77060cdbd4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "quartz/app.py"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-4f7b800e9dbe8db9", "level": "error", "message": {"text": "FastAPI POST `workbench_simulate` without auth dependency \u2014 src/api/routers/workbench.py:71"}, "properties": {"repobilityId": "71a71762562611c7", "scanner": "scanner-primary", "fingerprint": "4f7b800e9dbe8db9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/workbench.py"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-f9bd78129c122d6c", "level": "error", "message": {"text": "FastAPI POST `workbench_promote_simulate` without auth dependency \u2014 src/api/routers/workbench.py:129"}, "properties": {"repobilityId": "443853504d00862c", "scanner": "scanner-primary", "fingerprint": "f9bd78129c122d6c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/workbench.py"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-5d82291ac31cf8f5", "level": "error", "message": {"text": "FastAPI POST `workbench_promote` without auth dependency \u2014 src/api/routers/workbench.py:164"}, "properties": {"repobilityId": "e3dbc0c6fd3c9a97", "scanner": "scanner-primary", "fingerprint": "5d82291ac31cf8f5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/workbench.py"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-f0294b33d1eee1a4", "level": "error", "message": {"text": "FastAPI POST `save_profile` without auth dependency \u2014 src/api/routers/workbench.py:269"}, "properties": {"repobilityId": "65ea1209c24ce228", "scanner": "scanner-primary", "fingerprint": "f0294b33d1eee1a4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/workbench.py"}, "region": {"startLine": 269}}}]}, {"ruleId": "scanner-3286f5a055799359", "level": "error", "message": {"text": "FastAPI DELETE `delete_profile` without auth dependency \u2014 src/api/routers/workbench.py:291"}, "properties": {"repobilityId": "bc3f876d002a7fe4", "scanner": "scanner-primary", "fingerprint": "3286f5a055799359", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/workbench.py"}, "region": {"startLine": 291}}}]}, {"ruleId": "scanner-de3fb79b24f790a6", "level": "error", "message": {"text": "FastAPI POST `discover_appliances` without auth dependency \u2014 src/api/routers/appliances.py:128"}, "properties": {"repobilityId": "ebc6c0ae3d08b44a", "scanner": "scanner-primary", "fingerprint": "de3fb79b24f790a6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/appliances.py"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-a6ff9183c4d748e3", "level": "error", "message": {"text": "FastAPI PATCH `update_appliance` without auth dependency \u2014 src/api/routers/appliances.py:169"}, "properties": {"repobilityId": "f5a8c8b67493b8f9", "scanner": "scanner-primary", "fingerprint": "a6ff9183c4d748e3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/appliances.py"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-efe922fb3c74e032", "level": "error", "message": {"text": "FastAPI DELETE `delete_appliance` without auth dependency \u2014 src/api/routers/appliances.py:185"}, "properties": {"repobilityId": "006812b9cff6118d", "scanner": "scanner-primary", "fingerprint": "efe922fb3c74e032", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/appliances.py"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-9855159371fca8ca", "level": "error", "message": {"text": "FastAPI POST `cancel_job` without auth dependency \u2014 src/api/routers/appliances.py:268"}, "properties": {"repobilityId": "1bbd452a7796af5b", "scanner": "scanner-primary", "fingerprint": "9855159371fca8ca", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/appliances.py"}, "region": {"startLine": 268}}}]}, {"ruleId": "scanner-0d491886a9d0d428", "level": "error", "message": {"text": "FastAPI DELETE `delete_smartthings_credentials` without auth dependency \u2014 src/api/routers/appliances.py:316"}, "properties": {"repobilityId": "5bba617c816a1a26", "scanner": "scanner-primary", "fingerprint": "0d491886a9d0d428", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/api/routers/appliances.py"}, "region": {"startLine": 316}}}]}]}]}