{"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-08eb0e4901f10e5a", "name": "Possibly dead Python function: wikilink_name", "shortDescription": {"text": "Possibly dead Python function: wikilink_name"}, "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-c8a0ad763ab35b7c", "name": "Possibly dead Python function: available", "shortDescription": {"text": "Possibly dead Python function: available"}, "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-dd0d861129f4452c", "name": "Possibly dead Python function: handle_starttag", "shortDescription": {"text": "Possibly dead Python function: handle_starttag"}, "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-25f3cbd2729b165e", "name": "Possibly dead Python function: handle_endtag", "shortDescription": {"text": "Possibly dead Python function: handle_endtag"}, "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-1a9a190cd7ce201f", "name": "Possibly dead Python function: handle_data", "shortDescription": {"text": "Possibly dead Python function: handle_data"}, "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-8e99bef4ec288d1c", "name": "Possibly dead Python function: fetch_text", "shortDescription": {"text": "Possibly dead Python function: fetch_text"}, "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-1f6b55b7d381d322", "name": "Possibly dead Python function: is_ready", "shortDescription": {"text": "Possibly dead Python function: is_ready"}, "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-972964ba22a30814", "name": "Possibly dead Python function: callback", "shortDescription": {"text": "Possibly dead Python function: callback"}, "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-34fa4c2e29ae5f37", "name": "Possibly dead Python function: complete_auth", "shortDescription": {"text": "Possibly dead Python function: complete_auth"}, "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-921c6d533dd8f85b", "name": "Possibly dead Python function: open_folder", "shortDescription": {"text": "Possibly dead Python function: open_folder"}, "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-8060aa2396dae26f", "name": "Possibly dead Python function: repl", "shortDescription": {"text": "Possibly dead Python function: repl"}, "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-bbf5d3bfc09955d4", "name": "Possibly dead Python function: clear_history", "shortDescription": {"text": "Possibly dead Python function: clear_history"}, "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-9f57e88b40d14884", "name": "Possibly dead Python function: strip_wake_word", "shortDescription": {"text": "Possibly dead Python function: strip_wake_word"}, "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-a8ba0bb31e530df5", "name": "Insecure pattern 'subprocess_shell_true' in modules/os_control.py:713", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in modules/os_control.py:713"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a3a4b9e691dd60a", "name": "Insecure pattern 'document_write' in webui/chat.html:3675", "shortDescription": {"text": "Insecure pattern 'document_write' in webui/chat.html:3675"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ddd93a1da64bdb99", "name": "Insecure pattern 'direct_innerhtml_assignment' in webui/chat.html:1432", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webui/chat.html:1432"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e5a9e58b3237e83", "name": "Insecure pattern 'local_storage_auth_token' in webui/chat.html:1358", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in webui/chat.html:1358"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"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}}, {"id": "scanner-2dee29506e35c00e", "name": "Very large file: chat_backend.py (1338 lines)", "shortDescription": {"text": "Very large file: chat_backend.py (1338 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-829590969a404f3c", "name": "Very large file: modules/os_control.py (1291 lines)", "shortDescription": {"text": "Very large file: modules/os_control.py (1291 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 48 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 56 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 3 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b809bd6b633aac1c", "name": "Commented-code block (5 lines) in agent_skills.py:282", "shortDescription": {"text": "Commented-code block (5 lines) in agent_skills.py:282"}, "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-34c0e520c07c9e3a", "name": "Commented-code block (6 lines) in start_tools_server.py:53", "shortDescription": {"text": "Commented-code block (6 lines) in start_tools_server.py:53"}, "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-70322de85c0e85b5", "name": "Commented-code block (5 lines) in deep_research.py:57", "shortDescription": {"text": "Commented-code block (5 lines) in deep_research.py:57"}, "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-fb24b12744a0a926", "name": "Commented-code block (5 lines) in file_browser.py:309", "shortDescription": {"text": "Commented-code block (5 lines) in file_browser.py:309"}, "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-c33367eb1d2ee89b", "name": "Network/subprocess call without timeout or try/except \u2014 modules/discord_rpc.py:105", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 modules/discord_rpc.py:105"}, "fullDescription": {"text": "`requests.post(...)` 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-040e8438252e07b9", "name": "Commented-code block (5 lines) in modules/agent_jobs.py:42", "shortDescription": {"text": "Commented-code block (5 lines) in modules/agent_jobs.py:42"}, "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-bad7742a1c4f80ff", "name": "Network/subprocess call without timeout or try/except \u2014 modules/claude_code.py:164", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 modules/claude_code.py:164"}, "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-aa1d0e57ccfe446b", "name": "Commented-code block (6 lines) in core/wake_word.py:10", "shortDescription": {"text": "Commented-code block (6 lines) in core/wake_word.py:10"}, "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-923e0716cad3b36b", "name": "Blocking `time.sleep(...)` inside `async def run` \u2014 core/audio_handler.py:536", "shortDescription": {"text": "Blocking `time.sleep(...)` inside `async def run` \u2014 core/audio_handler.py:536"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `time.sleep(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65df07ab4020db79", "name": "18 env vars used in code but missing from .env.example", "shortDescription": {"text": "18 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `APPDATA`, `DISCORD_OWNER`, `FFMPEG_PATH`, `HOME_COORDS`, `ICLOUD_CALENDAR_NAME`, `MIKO_FFMPEG`, `MIKO_JINA_INTERVAL`, `MIKO_MEMORY_MODEL` + 10 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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ntool_server.py:factory, tool_server.py:factory, tool_server.py:factory, tool_server.py:factory\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-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:\ntool_server.py:chat_code_sessions, tool_server.py:chat_code_session\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-0027e313ade46c8f", "name": "Near-duplicate function bodies in 7 places", "shortDescription": {"text": "Near-duplicate function bodies in 7 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ntool_server.py:workspace_set, tool_server.py:files_pick, tool_server.py:files_write, tool_server.py:files_create\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}}]}}, "automationDetails": {"id": "repobility/25205"}, "properties": {"repository": "dan-calin/miko", "repoUrl": "https://github.com/dan-calin/miko", "branch": "main"}, "results": [{"ruleId": "scanner-08eb0e4901f10e5a", "level": "note", "message": {"text": "Possibly dead Python function: wikilink_name"}, "properties": {"repobilityId": "c6167620bde03a99", "scanner": "scanner-primary", "fingerprint": "08eb0e4901f10e5a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vault.py:76"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c8a0ad763ab35b7c", "level": "note", "message": {"text": "Possibly dead Python function: available"}, "properties": {"repobilityId": "111dd2aeb423dc80", "scanner": "scanner-primary", "fingerprint": "c8a0ad763ab35b7c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/embeddings.py:136"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd0d861129f4452c", "level": "note", "message": {"text": "Possibly dead Python function: handle_starttag"}, "properties": {"repobilityId": "3bf216d149959ebf", "scanner": "scanner-primary", "fingerprint": "dd0d861129f4452c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/research.py:366"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25f3cbd2729b165e", "level": "note", "message": {"text": "Possibly dead Python function: handle_endtag"}, "properties": {"repobilityId": "7eb6f3decafc1766", "scanner": "scanner-primary", "fingerprint": "25f3cbd2729b165e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/research.py:370"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a9a190cd7ce201f", "level": "note", "message": {"text": "Possibly dead Python function: handle_data"}, "properties": {"repobilityId": "3a673a278f4fc1e6", "scanner": "scanner-primary", "fingerprint": "1a9a190cd7ce201f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/research.py:374"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8e99bef4ec288d1c", "level": "note", "message": {"text": "Possibly dead Python function: fetch_text"}, "properties": {"repobilityId": "8733bfccb5097c29", "scanner": "scanner-primary", "fingerprint": "8e99bef4ec288d1c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/research.py:510"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f6b55b7d381d322", "level": "note", "message": {"text": "Possibly dead Python function: is_ready"}, "properties": {"repobilityId": "0d4dfe8e7a4b7858", "scanner": "scanner-primary", "fingerprint": "1f6b55b7d381d322", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/discord_bot.py:369"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-972964ba22a30814", "level": "note", "message": {"text": "Possibly dead Python function: callback"}, "properties": {"repobilityId": "d86912f8937c65c2", "scanner": "scanner-primary", "fingerprint": "972964ba22a30814", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/discord_bot.py:916"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-34fa4c2e29ae5f37", "level": "note", "message": {"text": "Possibly dead Python function: complete_auth"}, "properties": {"repobilityId": "3067a110cf19fdfc", "scanner": "scanner-primary", "fingerprint": "34fa4c2e29ae5f37", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/calendar.py:288"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-921c6d533dd8f85b", "level": "note", "message": {"text": "Possibly dead Python function: open_folder"}, "properties": {"repobilityId": "1f1cb9405afdf968", "scanner": "scanner-primary", "fingerprint": "921c6d533dd8f85b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/notes.py:244"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8060aa2396dae26f", "level": "note", "message": {"text": "Possibly dead Python function: repl"}, "properties": {"repobilityId": "6f5d3779bbb8be8b", "scanner": "scanner-primary", "fingerprint": "8060aa2396dae26f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/email_box.py:414"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bbf5d3bfc09955d4", "level": "note", "message": {"text": "Possibly dead Python function: clear_history"}, "properties": {"repobilityId": "ce5a2cd1428c9a38", "scanner": "scanner-primary", "fingerprint": "bbf5d3bfc09955d4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/phone_commander.py:96"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9f57e88b40d14884", "level": "note", "message": {"text": "Possibly dead Python function: strip_wake_word"}, "properties": {"repobilityId": "f771aa91c89bdf3d", "scanner": "scanner-primary", "fingerprint": "9f57e88b40d14884", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/wake_word.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a8ba0bb31e530df5", "level": "error", "message": {"text": "Insecure pattern 'subprocess_shell_true' in modules/os_control.py:713"}, "properties": {"repobilityId": "f9b86663edbd1594", "scanner": "scanner-primary", "fingerprint": "a8ba0bb31e530df5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/os_control.py"}, "region": {"startLine": 713}}}]}, {"ruleId": "scanner-9a3a4b9e691dd60a", "level": "note", "message": {"text": "Insecure pattern 'document_write' in webui/chat.html:3675"}, "properties": {"repobilityId": "ce45017063825624", "scanner": "scanner-primary", "fingerprint": "9a3a4b9e691dd60a", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webui/chat.html"}, "region": {"startLine": 3675}}}]}, {"ruleId": "scanner-ddd93a1da64bdb99", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in webui/chat.html:1432"}, "properties": {"repobilityId": "8c9881e55a019f52", "scanner": "scanner-primary", "fingerprint": "ddd93a1da64bdb99", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webui/chat.html"}, "region": {"startLine": 1432}}}]}, {"ruleId": "scanner-5e5a9e58b3237e83", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in webui/chat.html:1358"}, "properties": {"repobilityId": "f7432b64f3c62ba3", "scanner": "scanner-primary", "fingerprint": "5e5a9e58b3237e83", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webui/chat.html"}, "region": {"startLine": 1358}}}]}, {"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"]}}, {"ruleId": "scanner-2dee29506e35c00e", "level": "note", "message": {"text": "Very large file: chat_backend.py (1338 lines)"}, "properties": {"repobilityId": "fc39ce038693a3d9", "scanner": "scanner-primary", "fingerprint": "2dee29506e35c00e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-829590969a404f3c", "level": "note", "message": {"text": "Very large file: modules/os_control.py (1291 lines)"}, "properties": {"repobilityId": "1e612f3322b5fc53", "scanner": "scanner-primary", "fingerprint": "829590969a404f3c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "aafd3f33bf471f09", "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": "f8e0299bdfb759d9", "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": "aa601390ddc3456d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "533343944eb2d7c8", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b809bd6b633aac1c", "level": "none", "message": {"text": "Commented-code block (5 lines) in agent_skills.py:282"}, "properties": {"repobilityId": "72644f26c9575dac", "scanner": "scanner-primary", "fingerprint": "b809bd6b633aac1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34c0e520c07c9e3a", "level": "none", "message": {"text": "Commented-code block (6 lines) in start_tools_server.py:53"}, "properties": {"repobilityId": "750710ec912be8d6", "scanner": "scanner-primary", "fingerprint": "34c0e520c07c9e3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70322de85c0e85b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in deep_research.py:57"}, "properties": {"repobilityId": "8795f701dd1adaf6", "scanner": "scanner-primary", "fingerprint": "70322de85c0e85b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb24b12744a0a926", "level": "none", "message": {"text": "Commented-code block (5 lines) in file_browser.py:309"}, "properties": {"repobilityId": "cabe1d25e14b3d17", "scanner": "scanner-primary", "fingerprint": "fb24b12744a0a926", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c33367eb1d2ee89b", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 modules/discord_rpc.py:105"}, "properties": {"repobilityId": "c2d3ea95aca099f8", "scanner": "scanner-primary", "fingerprint": "c33367eb1d2ee89b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-040e8438252e07b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in modules/agent_jobs.py:42"}, "properties": {"repobilityId": "c2c425748d774dee", "scanner": "scanner-primary", "fingerprint": "040e8438252e07b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bad7742a1c4f80ff", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 modules/claude_code.py:164"}, "properties": {"repobilityId": "d0ad6d118df6d18e", "scanner": "scanner-primary", "fingerprint": "bad7742a1c4f80ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa1d0e57ccfe446b", "level": "none", "message": {"text": "Commented-code block (6 lines) in core/wake_word.py:10"}, "properties": {"repobilityId": "7626ffd9551205e2", "scanner": "scanner-primary", "fingerprint": "aa1d0e57ccfe446b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-923e0716cad3b36b", "level": "error", "message": {"text": "Blocking `time.sleep(...)` inside `async def run` \u2014 core/audio_handler.py:536"}, "properties": {"repobilityId": "409d50f46f74bbb8", "scanner": "scanner-primary", "fingerprint": "923e0716cad3b36b", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "core/audio_handler.py"}, "region": {"startLine": 536}}}]}, {"ruleId": "scanner-65df07ab4020db79", "level": "note", "message": {"text": "18 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5e334d56f52c02e1", "scanner": "scanner-primary", "fingerprint": "65df07ab4020db79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "1f171b600b38dfc0", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "a3624eddc9e3c017", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "33378125cf9687a7", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "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": "d121ed1297cec6dc", "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": "e2fa8297a2fa620b", "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": "48f8a3f7971dcea1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "42046698abbbb29c", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "e0721c8aadce0770", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "986ee78e5b45e60b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}