{"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": "COMP001", "name": "[COMP001] High cognitive complexity: Function `parse_status` has cognitive complexity 21 (SonarSource scale). Cognitive ", "shortDescription": {"text": "[COMP001] High cognitive complexity: Function `parse_status` has cognitive complexity 21 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand \u2014 nested branches, boolean chains, and recursion "}, "fullDescription": {"text": "Extract nested branches into named helper functions; flatten early-return / guard clauses; replace long if/elif chains with dispatch dicts or polymorphism. SonarQube's threshold for 'should refactor' is 15 \u2014 yours is 21."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "medium", "confidence": 0.95, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_CI", "name": "No CI/CD configuration found", "shortDescription": {"text": "No CI/CD configuration found"}, "fullDescription": {"text": "Add a CI/CD pipeline: create .github/workflows/ci.yml for GitHub Actions with steps to lint, test, and build on every push and pull request."}, "properties": {"scanner": "repobility-core", "category": "practices", "severity": "medium", "confidence": null, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_LICENSE", "name": "No LICENSE file", "shortDescription": {"text": "No LICENSE file"}, "fullDescription": {"text": "Add a LICENSE file to your repository. Use choosealicense.com to pick the right license (MIT for permissive, Apache 2.0 for patent protection, GPL for copyleft)."}, "properties": {"scanner": "repobility-core", "category": "documentation", "severity": "low", "confidence": null, "cwe": "", "owasp": ""}}, {"id": "MINED050", "name": "[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO ", "shortDescription": {"text": "[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment."}, "fullDescription": {"text": "Review and fix per the pattern semantics. See CWE-1188 /  for context."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "info", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "SEC128", "name": "[SEC128] Async function without await \u2014 fire-and-forget Promise (AI mistake): Async call invoked without `await` returns", "shortDescription": {"text": "[SEC128] Async function without await \u2014 fire-and-forget Promise (AI mistake): Async call invoked without `await` returns an unhandled Promise. The outer function resolves before the inner work completes \u2014 DB writes lost, emails not sent, ra"}, "fullDescription": {"text": "Add `await` before each async call, or chain with `.then`. If you intentionally want fire-and-forget, prefix with `void` (TS) or assign to `_` (Python with `asyncio.create_task`) to make the intent explicit and survive lint."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "high", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "MINED001", "name": "[MINED001] Bare Except Pass: except: pass or except Exception: pass \u2014 silently swallows everything including KeyboardInt", "shortDescription": {"text": "[MINED001] Bare Except Pass: except: pass or except Exception: pass \u2014 silently swallows everything including KeyboardInterrupt and bugs."}, "fullDescription": {"text": "Review and fix per the pattern semantics. See CWE-755 /  for context."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "high", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "MINED108", "name": "`self.coordinator` used but never assigned in __init__", "shortDescription": {"text": "`self.coordinator` used but never assigned in __init__"}, "fullDescription": {"text": "Method `_toggle` of class `IdealAirProChildLock` reads `self.coordinator`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance."}, "properties": {"scanner": "repobility-ast-engine", "category": "quality", "severity": "high", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_TESTS", "name": "No test files found", "shortDescription": {"text": "No test files found"}, "fullDescription": {"text": "Add a test directory (tests/ or __tests__/) with unit tests for core functionality. Use pytest (Python), Jest (JS/TS), or go test (Go). Start with tests for critical business logic and security-sensitive functions."}, "properties": {"scanner": "repobility-core", "category": "testing", "severity": "high", "confidence": null, "cwe": "", "owasp": ""}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23769"}, "properties": {"repository": "0xE0-rng/air-companion", "repoUrl": "https://github.com/0xE0-rng/air-companion", "branch": "main"}, "results": [{"ruleId": "COMP001", "level": "warning", "message": {"text": "[COMP001] High cognitive complexity: Function `parse_status` has cognitive complexity 21 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand \u2014 nested branches, boolean chains, and recursion all weigh in. Breakdown: elif=2, except=1, if=15, nested_bonus=2, ternary=1."}, "properties": {"repobilityId": 223630, "scanner": "repobility-threat-engine", "fingerprint": "9895fa1a09f05caab1248bccfe7af37577e610ea8bf05c852d29b3440a8f2fd0", "category": "quality", "severity": "medium", "confidence": 0.95, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "AST-derived cognitive complexity score = 21 (severity threshold for medium: 15+).", "evidence": {"scanner": "repobility-threat-engine", "function": "parse_status", "breakdown": {"if": 15, "elif": 2, "except": 1, "ternary": 1, "nested_bonus": 2}, "complexity": 21, "correlation_key": "fp|9895fa1a09f05caab1248bccfe7af37577e610ea8bf05c852d29b3440a8f2fd0"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/device.py"}, "region": {"startLine": 107}}}]}, {"ruleId": "CORE_NO_CI", "level": "warning", "message": {"text": "No CI/CD configuration found"}, "properties": {"repobilityId": 223597, "scanner": "repobility-core", "fingerprint": "ca5da3551af97272c4f099fc472740148135a15816b81b90bd862e8f91ec66ce", "category": "practices", "severity": "medium", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_CI", "scanner": "repobility-core", "correlation_key": "repo|practices|core_no_ci"}}}, {"ruleId": "COMP001", "level": "note", "message": {"text": "[COMP001] High cognitive complexity: Function `async_step_user` has cognitive complexity 8 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand \u2014 nested branches, boolean chains, and recursion all weigh in. Breakdown: else=1, except=2, if=3, nested_bonus=2."}, "properties": {"repobilityId": 223629, "scanner": "repobility-threat-engine", "fingerprint": "5178e0844a5e7e13ae243999ed69360618ab27ceca50afe565658ab0f5c931de", "category": "quality", "severity": "low", "confidence": 0.95, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "AST-derived cognitive complexity score = 8 (severity threshold for low: 8+).", "evidence": {"scanner": "repobility-threat-engine", "function": "async_step_user", "breakdown": {"if": 3, "else": 1, "except": 2, "nested_bonus": 2}, "complexity": 8, "correlation_key": "fp|5178e0844a5e7e13ae243999ed69360618ab27ceca50afe565658ab0f5c931de"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/config_flow.py"}, "region": {"startLine": 17}}}]}, {"ruleId": "CORE_NO_LICENSE", "level": "note", "message": {"text": "No LICENSE file"}, "properties": {"repobilityId": 223595, "scanner": "repobility-core", "fingerprint": "9314e9238cd99885865b92490d1aaa96ca62b1390c9377878d5f3d99227e1c3c", "category": "documentation", "severity": "low", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_LICENSE", "scanner": "repobility-core", "correlation_key": "repo|documentation|core_no_license"}}}, {"ruleId": "MINED050", "level": "none", "message": {"text": "[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment."}, "properties": {"repobilityId": 223628, "scanner": "repobility-threat-engine", "fingerprint": "2810b4f5f565ee7b9873aee17a3f73024ecef43b44f87aaec33accc95843bf0b", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "stub-only-function", "owasp": null, "cwe_ids": ["CWE-1188"], "languages": ["python"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348017+00:00", "triaged_in_corpus": 12, "observations_count": 633513, "ai_coder_pattern_id": 2}, "scanner": "repobility-threat-engine", "correlation_key": "fp|2810b4f5f565ee7b9873aee17a3f73024ecef43b44f87aaec33accc95843bf0b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/device.py"}, "region": {"startLine": 126}}}]}, {"ruleId": "MINED050", "level": "none", "message": {"text": "[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment."}, "properties": {"repobilityId": 223627, "scanner": "repobility-threat-engine", "fingerprint": "ae91faa045e25bd2af262bf82765f4ece32dfd83bb5b86a15e332bb6912b844c", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "stub-only-function", "owasp": null, "cwe_ids": ["CWE-1188"], "languages": ["python"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348017+00:00", "triaged_in_corpus": 12, "observations_count": 633513, "ai_coder_pattern_id": 2}, "scanner": "repobility-threat-engine", "correlation_key": "fp|ae91faa045e25bd2af262bf82765f4ece32dfd83bb5b86a15e332bb6912b844c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/coordinator.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "MINED050", "level": "none", "message": {"text": "[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment."}, "properties": {"repobilityId": 223626, "scanner": "repobility-threat-engine", "fingerprint": "03b45773ded089a152e6bdcc865a89be21ed57fe12a36b1c5b0ed0039c85762f", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "stub-only-function", "owasp": null, "cwe_ids": ["CWE-1188"], "languages": ["python"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348017+00:00", "triaged_in_corpus": 12, "observations_count": 633513, "ai_coder_pattern_id": 2}, "scanner": "repobility-threat-engine", "correlation_key": "fp|03b45773ded089a152e6bdcc865a89be21ed57fe12a36b1c5b0ed0039c85762f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/config_flow.py"}, "region": {"startLine": 43}}}]}, {"ruleId": "SEC128", "level": "error", "message": {"text": "[SEC128] Async function without await \u2014 fire-and-forget Promise (AI mistake): Async call invoked without `await` returns an unhandled Promise. The outer function resolves before the inner work completes \u2014 DB writes lost, emails not sent, race conditions. This is one of the top-3 errors AI coders make: they understand async-shape but drop the await keyword when chaining multiple ops. Surfaces as flaky tests or silently dropped data in production."}, "properties": {"repobilityId": 223631, "scanner": "repobility-threat-engine", "fingerprint": "71b469ef264d318d5e5e7e6a12206db216f97857b0823a2c3a39aea6f2e47d61", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"match": "status.update(self._signal)", "reason": "Pattern matched with no mitigating context found", "rule_id": "SEC128", "scanner": "repobility-threat-engine", "confidence": 1.0, "correlation_key": "fp|71b469ef264d318d5e5e7e6a12206db216f97857b0823a2c3a39aea6f2e47d61"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/coordinator.py"}, "region": {"startLine": 58}}}]}, {"ruleId": "MINED001", "level": "error", "message": {"text": "[MINED001] Bare Except Pass: except: pass or except Exception: pass \u2014 silently swallows everything including KeyboardInterrupt and bugs."}, "properties": {"repobilityId": 223625, "scanner": "repobility-threat-engine", "fingerprint": "3e5141f8c78390ad4cdbe945123363c3d597f25bc66dc198f4f6278a97023249", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "bare-except-pass", "owasp": null, "cwe_ids": ["CWE-755"], "languages": ["python"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.347744+00:00", "triaged_in_corpus": 15, "observations_count": 1550824, "ai_coder_pattern_id": 6}, "scanner": "repobility-threat-engine", "correlation_key": "fp|3e5141f8c78390ad4cdbe945123363c3d597f25bc66dc198f4f6278a97023249"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/device.py"}, "region": {"startLine": 125}}}]}, {"ruleId": "MINED001", "level": "error", "message": {"text": "[MINED001] Bare Except Pass: except: pass or except Exception: pass \u2014 silently swallows everything including KeyboardInterrupt and bugs."}, "properties": {"repobilityId": 223624, "scanner": "repobility-threat-engine", "fingerprint": "bcc135f33cb5cc34da68a766b35aa652f425e4286155cada6526c8802edebf50", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "bare-except-pass", "owasp": null, "cwe_ids": ["CWE-755"], "languages": ["python"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.347744+00:00", "triaged_in_corpus": 15, "observations_count": 1550824, "ai_coder_pattern_id": 6}, "scanner": "repobility-threat-engine", "correlation_key": "fp|bcc135f33cb5cc34da68a766b35aa652f425e4286155cada6526c8802edebf50"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/coordinator.py"}, "region": {"startLine": 55}}}]}, {"ruleId": "MINED001", "level": "error", "message": {"text": "[MINED001] Bare Except Pass: except: pass or except Exception: pass \u2014 silently swallows everything including KeyboardInterrupt and bugs."}, "properties": {"repobilityId": 223623, "scanner": "repobility-threat-engine", "fingerprint": "897b1b1157bb8788b0e00b4d53d2651862af87f761fb9c56b04f3b2bcc7e12c3", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "bare-except-pass", "owasp": null, "cwe_ids": ["CWE-755"], "languages": ["python"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.347744+00:00", "triaged_in_corpus": 15, "observations_count": 1550824, "ai_coder_pattern_id": 6}, "scanner": "repobility-threat-engine", "correlation_key": "fp|897b1b1157bb8788b0e00b4d53d2651862af87f761fb9c56b04f3b2bcc7e12c3"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/config_flow.py"}, "region": {"startLine": 42}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223622, "scanner": "repobility-ast-engine", "fingerprint": "2e4ca040996bf452840f6fada88997aef0c0c2125599a0810af43cb2a3fbe2c6", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|2e4ca040996bf452840f6fada88997aef0c0c2125599a0810af43cb2a3fbe2c6"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/switch.py"}, "region": {"startLine": 31}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223621, "scanner": "repobility-ast-engine", "fingerprint": "f3387937826ec72f27cb406472c0298b959dc4cd8ea985074458c0f68a0bce22", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|f3387937826ec72f27cb406472c0298b959dc4cd8ea985074458c0f68a0bce22"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/switch.py"}, "region": {"startLine": 28}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223620, "scanner": "repobility-ast-engine", "fingerprint": "aa91c4cfef0e57d7919d73224e9c7ef1176c83736f4b9110cb89244fa8c9203b", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|aa91c4cfef0e57d7919d73224e9c7ef1176c83736f4b9110cb89244fa8c9203b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/select.py"}, "region": {"startLine": 35}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223619, "scanner": "repobility-ast-engine", "fingerprint": "554422cfa5d6154eeacb7af2e69bdfa0b382c42fb11a6ee9ec4f53688669427e", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|554422cfa5d6154eeacb7af2e69bdfa0b382c42fb11a6ee9ec4f53688669427e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/select.py"}, "region": {"startLine": 30}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.hass` used but never assigned in __init__"}, "properties": {"repobilityId": 223618, "scanner": "repobility-ast-engine", "fingerprint": "1a03d9996127d856dc678c1bff1c0bec77ef662c0f9b11eec5e3168257a4d1e2", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|1a03d9996127d856dc678c1bff1c0bec77ef662c0f9b11eec5e3168257a4d1e2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/coordinator.py"}, "region": {"startLine": 69}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.hass` used but never assigned in __init__"}, "properties": {"repobilityId": 223617, "scanner": "repobility-ast-engine", "fingerprint": "38a1e3ad987d357baceed5b9dae48ffa417d3d6e86a1b7c7cebf5045804169cf", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|38a1e3ad987d357baceed5b9dae48ffa417d3d6e86a1b7c7cebf5045804169cf"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/coordinator.py"}, "region": {"startLine": 65}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.hass` used but never assigned in __init__"}, "properties": {"repobilityId": 223616, "scanner": "repobility-ast-engine", "fingerprint": "9a83b6fa9c434edfb56adb61f82437109ba76d35b70c63e259ad086c9721772a", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|9a83b6fa9c434edfb56adb61f82437109ba76d35b70c63e259ad086c9721772a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/coordinator.py"}, "region": {"startLine": 50}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.hass` used but never assigned in __init__"}, "properties": {"repobilityId": 223615, "scanner": "repobility-ast-engine", "fingerprint": "e828c575997e8b73bfdae77416ca95367516705fadb60f2945d99405b5a00cca", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|e828c575997e8b73bfdae77416ca95367516705fadb60f2945d99405b5a00cca"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/coordinator.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223614, "scanner": "repobility-ast-engine", "fingerprint": "d92a9b755f0d5a1abc0a2c4480b3700c5cd5eaedf04cb7496675ac79d26dfbea", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|d92a9b755f0d5a1abc0a2c4480b3700c5cd5eaedf04cb7496675ac79d26dfbea"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/fan.py"}, "region": {"startLine": 58}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223613, "scanner": "repobility-ast-engine", "fingerprint": "eb7f4187fa8e26787d07a5ba3ed240c9f4c20c93766d4edd917c185a0537ed89", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|eb7f4187fa8e26787d07a5ba3ed240c9f4c20c93766d4edd917c185a0537ed89"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/fan.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223612, "scanner": "repobility-ast-engine", "fingerprint": "1744482d0f2ab146b4348dbba59a455e3d723e82e9fa105d8238191ce560d8a3", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|1744482d0f2ab146b4348dbba59a455e3d723e82e9fa105d8238191ce560d8a3"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/fan.py"}, "region": {"startLine": 43}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223611, "scanner": "repobility-ast-engine", "fingerprint": "4935aa9842c273834081357f7c3bdeda39590e53d6570d6bd7e9052150769881", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|4935aa9842c273834081357f7c3bdeda39590e53d6570d6bd7e9052150769881"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/fan.py"}, "region": {"startLine": 39}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223610, "scanner": "repobility-ast-engine", "fingerprint": "9b9530f0cb9b05369a6f7f1655ea9a78bae5a63096c3b11a451f5cf3e6eb4b12", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|9b9530f0cb9b05369a6f7f1655ea9a78bae5a63096c3b11a451f5cf3e6eb4b12"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/fan.py"}, "region": {"startLine": 35}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223609, "scanner": "repobility-ast-engine", "fingerprint": "5c988b42baf3c4419e37c78d66f17819d631996b7a2d5f9fb5b7426452c8e6bc", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|5c988b42baf3c4419e37c78d66f17819d631996b7a2d5f9fb5b7426452c8e6bc"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 199}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223608, "scanner": "repobility-ast-engine", "fingerprint": "853b3c7bf07fe95fd353b1787ed43ba9ee79ebc06efdc1b2a8d91ced31e4794e", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|853b3c7bf07fe95fd353b1787ed43ba9ee79ebc06efdc1b2a8d91ced31e4794e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 169}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223607, "scanner": "repobility-ast-engine", "fingerprint": "e03e0bf9ed691545e0ec2892fb584313724a16e8b9455d235d6b598a2941a698", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|e03e0bf9ed691545e0ec2892fb584313724a16e8b9455d235d6b598a2941a698"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 165}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223606, "scanner": "repobility-ast-engine", "fingerprint": "ff6fa7badf608f7e2cc2592c45da128492fd2f2cf29879866d7c671b1dd39157", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|ff6fa7badf608f7e2cc2592c45da128492fd2f2cf29879866d7c671b1dd39157"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 147}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223605, "scanner": "repobility-ast-engine", "fingerprint": "64499b42c4686de91976981efd2c434c61640502c61aef01231e219a3072145e", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|64499b42c4686de91976981efd2c434c61640502c61aef01231e219a3072145e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 132}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223604, "scanner": "repobility-ast-engine", "fingerprint": "11ef92c77b269de23b1ded1d78e2a67322bc77ea4c5b0fb5eb8134a8273eb33f", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|11ef92c77b269de23b1ded1d78e2a67322bc77ea4c5b0fb5eb8134a8273eb33f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223603, "scanner": "repobility-ast-engine", "fingerprint": "0fa6db1d82eec6357bd0b8cc864ba5c52ff6f5aef85584cdb2f93e0d54bdf41e", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|0fa6db1d82eec6357bd0b8cc864ba5c52ff6f5aef85584cdb2f93e0d54bdf41e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 107}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223602, "scanner": "repobility-ast-engine", "fingerprint": "8dee3466bb511a140790febce375e95c2d5bcb05235bcf4455383b7489b8d280", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|8dee3466bb511a140790febce375e95c2d5bcb05235bcf4455383b7489b8d280"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 92}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223601, "scanner": "repobility-ast-engine", "fingerprint": "46ec7deb188fb672daa22c3e3aa4795b1e8fc325c0adb9e2dc7c9d824c28e1b9", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|46ec7deb188fb672daa22c3e3aa4795b1e8fc325c0adb9e2dc7c9d824c28e1b9"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 74}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.coordinator` used but never assigned in __init__"}, "properties": {"repobilityId": 223600, "scanner": "repobility-ast-engine", "fingerprint": "aa487329f00eecf45388a9a902cd7f555575836482323d4dac59c3efc65431be", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|aa487329f00eecf45388a9a902cd7f555575836482323d4dac59c3efc65431be"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/sensor.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.hass` used but never assigned in __init__"}, "properties": {"repobilityId": 223599, "scanner": "repobility-ast-engine", "fingerprint": "5054a4ebf45ce5d19b42ea7ea24cda18acbd5f5f6b2751d512be4d63502df4c3", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|5054a4ebf45ce5d19b42ea7ea24cda18acbd5f5f6b2751d512be4d63502df4c3"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/config_flow.py"}, "region": {"startLine": 26}}}]}, {"ruleId": "MINED108", "level": "error", "message": {"text": "`self.hass` used but never assigned in __init__"}, "properties": {"repobilityId": 223598, "scanner": "repobility-ast-engine", "fingerprint": "d2e4b5133fcba97bcd2d7d240ab9786a9b2f74f8663f3b84c473335a4c9f791a", "category": "quality", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "self-attr-never-set", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["python"], "observations_count": 25998}, "scanner": "repobility-ast-engine", "correlation_key": "fp|d2e4b5133fcba97bcd2d7d240ab9786a9b2f74f8663f3b84c473335a4c9f791a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "custom_components/ideal_airpro/config_flow.py"}, "region": {"startLine": 39}}}]}, {"ruleId": "CORE_NO_TESTS", "level": "error", "message": {"text": "No test files found"}, "properties": {"repobilityId": 223594, "scanner": "repobility-core", "fingerprint": "0200e9918bc2a7bf9c116d0907e50ac3df640c758b93852cf1890ec6e14d870d", "category": "testing", "severity": "high", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_TESTS", "scanner": "repobility-core", "correlation_key": "repo|testing|core_no_tests"}}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}]}]}