{"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-474eaa728e13baa3", "name": "Possibly dead Python function: vision_from_file", "shortDescription": {"text": "Possibly dead Python function: vision_from_file"}, "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-e1e1cee24655907b", "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-fcbae5d9e8cf25d1", "name": "Possibly dead Python function: runner", "shortDescription": {"text": "Possibly dead Python function: runner"}, "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-310dcb3b8c4d548e", "name": "Possibly dead Python function: paintEvent", "shortDescription": {"text": "Possibly dead Python function: paintEvent"}, "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-abf22de59df0df53", "name": "Possibly dead Python function: dragEnterEvent", "shortDescription": {"text": "Possibly dead Python function: dragEnterEvent"}, "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-fe801e6d101c52ad", "name": "Possibly dead Python function: dragLeaveEvent", "shortDescription": {"text": "Possibly dead Python function: dragLeaveEvent"}, "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-baf6880527cdac10", "name": "Possibly dead Python function: dropEvent", "shortDescription": {"text": "Possibly dead Python function: dropEvent"}, "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-a1006b1ee97df1fd", "name": "Possibly dead Python function: enterEvent", "shortDescription": {"text": "Possibly dead Python function: enterEvent"}, "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-1aea29e2ae99ddeb", "name": "Possibly dead Python function: leaveEvent", "shortDescription": {"text": "Possibly dead Python function: leaveEvent"}, "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-3fecb7e839c91696", "name": "Possibly dead Python function: protocol", "shortDescription": {"text": "Possibly dead Python function: protocol"}, "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-9a394a1793d61191", "name": "Possibly dead Python function: start_speaking", "shortDescription": {"text": "Possibly dead Python function: start_speaking"}, "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-8788ffa7db14ae00", "name": "Possibly dead Python function: stop_speaking", "shortDescription": {"text": "Possibly dead Python function: stop_speaking"}, "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-9953caad4c97a0a6", "name": "Possibly dead Python function: cancel", "shortDescription": {"text": "Possibly dead Python function: cancel"}, "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-71be839918be4ebe", "name": "Possibly dead Python function: pending_count", "shortDescription": {"text": "Possibly dead Python function: pending_count"}, "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-07f5a742f498c90a", "name": "Possibly dead Python function: end_session", "shortDescription": {"text": "Possibly dead Python function: end_session"}, "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-df220b90c81a7ea0", "name": "Possibly dead Python function: search_memories", "shortDescription": {"text": "Possibly dead Python function: search_memories"}, "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-d4541fdc3bb88ef1", "name": "Possibly dead Python function: search_memories_relevant", "shortDescription": {"text": "Possibly dead Python function: search_memories_relevant"}, "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-4a5864526fa1a8ba", "name": "Possibly dead Python function: log_tool_call", "shortDescription": {"text": "Possibly dead Python function: log_tool_call"}, "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-6521010aa44b00de", "name": "Possibly dead Python function: format_reflexions_for_prompt", "shortDescription": {"text": "Possibly dead Python function: format_reflexions_for_prompt"}, "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-63ea0c3f08d6f797", "name": "Possibly dead Python function: consolidate_memories", "shortDescription": {"text": "Possibly dead Python function: consolidate_memories"}, "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-551b2ba68e28ac14", "name": "Possibly dead Python function: prune_old_reflexions", "shortDescription": {"text": "Possibly dead Python function: prune_old_reflexions"}, "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-211cd051aa6f646a", "name": "Possibly dead Python function: async_start_session", "shortDescription": {"text": "Possibly dead Python function: async_start_session"}, "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-4deb093821b3afb2", "name": "Stray `console.log` in TS/JS \u2014 webui/src/stage/RobotStage.tsx:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 webui/src/stage/RobotStage.tsx:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d76fcffe759b795e", "name": "Insecure pattern 'local_storage_auth_token' in webui/src/lib/ws.ts:14", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in webui/src/lib/ws.ts:14"}, "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-ee6c8f5b3f694e8f", "name": "Insecure pattern 'subprocess_shell_true' in actions/computer_settings.py:122", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in actions/computer_settings.py:122"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-15b0f09ddbcbdefb", "name": "Insecure pattern 'subprocess_shell_true' in actions/reminder.py:130", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in actions/reminder.py:130"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a26370cfb0174e0", "name": "Insecure pattern 'subprocess_shell_true' in actions/dev_agent.py:279", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in actions/dev_agent.py:279"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-42098269baa82912", "name": "Insecure pattern 'exec_used' in actions/desktop.py:92", "shortDescription": {"text": "Insecure pattern 'exec_used' in actions/desktop.py:92"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d70af354be6b9a84", "name": "Very large file: main.py (1215 lines)", "shortDescription": {"text": "Very large file: main.py (1215 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-df8d6a71d0d81d35", "name": "Very large file: ui.py (2075 lines)", "shortDescription": {"text": "Very large file: ui.py (2075 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "11 tests / 69 src (ratio 0.16)."}, "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 237 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-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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87e6dd588763f5e6", "name": "Network/subprocess call without timeout or try/except \u2014 setup.py:5", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 setup.py:5"}, "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-d94164ed54ff0b8a", "name": "Blocking `time.sleep(...)` inside `async def _execute_tool` \u2014 main.py:885", "shortDescription": {"text": "Blocking `time.sleep(...)` inside `async def _execute_tool` \u2014 main.py:885"}, "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-f009387933fc2dec", "name": "Stub function `protocol` (body is just `pass`/`return`) \u2014 ui.py:2028", "shortDescription": {"text": "Stub function `protocol` (body is just `pass`/`return`) \u2014 ui.py:2028"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ca0eead50d8679e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 webui/src/settings/SetupGate.tsx:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 webui/src/settings/SetupGate.tsx:20"}, "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-72863dc930addd7e", "name": "Commented-code block (5 lines) in webui/src/stage/RobotStage.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in webui/src/stage/RobotStage.tsx: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-694afbdef0f41c8f", "name": "Commented-code block (5 lines) in webui/src/stage/brain3d/Brain3D.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in webui/src/stage/brain3d/Brain3D.tsx: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-ab185e5ce995b71e", "name": "Network/subprocess call without timeout or try/except \u2014 actions/computer_settings.py:52", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/computer_settings.py:52"}, "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-0e99403a1e50d2cb", "name": "Network/subprocess call without timeout or try/except \u2014 actions/youtube_video.py:58", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/youtube_video.py:58"}, "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-131c9416ffce6a4e", "name": "Commented-code block (9 lines) in actions/code_helper.py:4", "shortDescription": {"text": "Commented-code block (9 lines) in actions/code_helper.py:4"}, "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-b12344fc217028c0", "name": "Network/subprocess call without timeout or try/except \u2014 actions/dev_agent.py:241", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/dev_agent.py:241"}, "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-b8f39d3000897ac8", "name": "Network/subprocess call without timeout or try/except \u2014 actions/desktop.py:157", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/desktop.py:157"}, "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-c34da48427c7576c", "name": "Network/subprocess call without timeout or try/except \u2014 actions/game_updater.py:240", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/game_updater.py:240"}, "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-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nui.py:paintEvent, ui.py:paintEvent, ui.py:paintEvent, ui.py:paintEvent\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:\nui.py:mousePressEvent, ui.py:mousePressEvent\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-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmemory/procedural_memory.py:end_session, memory/procedural_memory.py:save_conversation, memory/procedural_memory.py:log_tool_call\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-efdcf1fd740786a2", "name": "FastAPI POST `post_message` without auth dependency \u2014 server/app.py:106", "shortDescription": {"text": "FastAPI POST `post_message` without auth dependency \u2014 server/app.py:106"}, "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-fb63baf838bbdfdd", "name": "FastAPI POST `post_config` without auth dependency \u2014 server/app.py:129", "shortDescription": {"text": "FastAPI POST `post_config` without auth dependency \u2014 server/app.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-3488180dd60aac33", "name": "FastAPI POST `upload` without auth dependency \u2014 server/app.py:142", "shortDescription": {"text": "FastAPI POST `upload` without auth dependency \u2014 server/app.py:142"}, "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-33c52c6577edf724", "name": "Unused endpoint: POST /api/message", "shortDescription": {"text": "Unused endpoint: POST /api/message"}, "fullDescription": {"text": "`server/app.py` declares `POST /api/message` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7aa4b2518cbbbfa2", "name": "Unused endpoint: GET /api/config", "shortDescription": {"text": "Unused endpoint: GET /api/config"}, "fullDescription": {"text": "`server/app.py` declares `GET /api/config` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`server/app.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/17602"}, "properties": {"repository": "quadradois/genesis", "repoUrl": "https://github.com/quadradois/genesis", "branch": "main"}, "results": [{"ruleId": "scanner-474eaa728e13baa3", "level": "note", "message": {"text": "Possibly dead Python function: vision_from_file"}, "properties": {"repobilityId": "56aadc9a85b908fe", "scanner": "scanner-primary", "fingerprint": "474eaa728e13baa3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "or_client.py:325"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e1e1cee24655907b", "level": "note", "message": {"text": "Possibly dead Python function: callback"}, "properties": {"repobilityId": "d86912f8937c65c2", "scanner": "scanner-primary", "fingerprint": "e1e1cee24655907b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py:944"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fcbae5d9e8cf25d1", "level": "note", "message": {"text": "Possibly dead Python function: runner"}, "properties": {"repobilityId": "b45a8bd7c8362977", "scanner": "scanner-primary", "fingerprint": "fcbae5d9e8cf25d1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py:1191"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-310dcb3b8c4d548e", "level": "note", "message": {"text": "Possibly dead Python function: paintEvent"}, "properties": {"repobilityId": "1222c83b9204300b", "scanner": "scanner-primary", "fingerprint": "310dcb3b8c4d548e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:1423"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-abf22de59df0df53", "level": "note", "message": {"text": "Possibly dead Python function: dragEnterEvent"}, "properties": {"repobilityId": "b697340237933307", "scanner": "scanner-primary", "fingerprint": "abf22de59df0df53", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:1108"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe801e6d101c52ad", "level": "note", "message": {"text": "Possibly dead Python function: dragLeaveEvent"}, "properties": {"repobilityId": "5c53818180ec60b6", "scanner": "scanner-primary", "fingerprint": "fe801e6d101c52ad", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:1113"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-baf6880527cdac10", "level": "note", "message": {"text": "Possibly dead Python function: dropEvent"}, "properties": {"repobilityId": "357965e641e9f054", "scanner": "scanner-primary", "fingerprint": "baf6880527cdac10", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:1116"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a1006b1ee97df1fd", "level": "note", "message": {"text": "Possibly dead Python function: enterEvent"}, "properties": {"repobilityId": "e00fe2ec40e4074f", "scanner": "scanner-primary", "fingerprint": "a1006b1ee97df1fd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:1129"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1aea29e2ae99ddeb", "level": "note", "message": {"text": "Possibly dead Python function: leaveEvent"}, "properties": {"repobilityId": "55c8ba09973a5020", "scanner": "scanner-primary", "fingerprint": "1aea29e2ae99ddeb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:1132"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3fecb7e839c91696", "level": "note", "message": {"text": "Possibly dead Python function: protocol"}, "properties": {"repobilityId": "944858a8b54ddf14", "scanner": "scanner-primary", "fingerprint": "3fecb7e839c91696", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:2028"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a394a1793d61191", "level": "note", "message": {"text": "Possibly dead Python function: start_speaking"}, "properties": {"repobilityId": "84f396374d9be903", "scanner": "scanner-primary", "fingerprint": "9a394a1793d61191", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:2071"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8788ffa7db14ae00", "level": "note", "message": {"text": "Possibly dead Python function: stop_speaking"}, "properties": {"repobilityId": "9a56cfdea04e8768", "scanner": "scanner-primary", "fingerprint": "8788ffa7db14ae00", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui.py:2074"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9953caad4c97a0a6", "level": "note", "message": {"text": "Possibly dead Python function: cancel"}, "properties": {"repobilityId": "dd964844068540fe", "scanner": "scanner-primary", "fingerprint": "9953caad4c97a0a6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/task_queue.py:100"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71be839918be4ebe", "level": "note", "message": {"text": "Possibly dead Python function: pending_count"}, "properties": {"repobilityId": "41d47659cc20c073", "scanner": "scanner-primary", "fingerprint": "71be839918be4ebe", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/task_queue.py:138"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-07f5a742f498c90a", "level": "note", "message": {"text": "Possibly dead Python function: end_session"}, "properties": {"repobilityId": "be09f9ffdfe67a69", "scanner": "scanner-primary", "fingerprint": "07f5a742f498c90a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/procedural_memory.py:189"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-df220b90c81a7ea0", "level": "note", "message": {"text": "Possibly dead Python function: search_memories"}, "properties": {"repobilityId": "9c546701ef600245", "scanner": "scanner-primary", "fingerprint": "df220b90c81a7ea0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/procedural_memory.py:235"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d4541fdc3bb88ef1", "level": "note", "message": {"text": "Possibly dead Python function: search_memories_relevant"}, "properties": {"repobilityId": "66b836a1007dbc69", "scanner": "scanner-primary", "fingerprint": "d4541fdc3bb88ef1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/procedural_memory.py:255"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a5864526fa1a8ba", "level": "note", "message": {"text": "Possibly dead Python function: log_tool_call"}, "properties": {"repobilityId": "fcf64b570be09de4", "scanner": "scanner-primary", "fingerprint": "4a5864526fa1a8ba", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/procedural_memory.py:322"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6521010aa44b00de", "level": "note", "message": {"text": "Possibly dead Python function: format_reflexions_for_prompt"}, "properties": {"repobilityId": "5d3b3704575eb512", "scanner": "scanner-primary", "fingerprint": "6521010aa44b00de", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/procedural_memory.py:454"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-63ea0c3f08d6f797", "level": "note", "message": {"text": "Possibly dead Python function: consolidate_memories"}, "properties": {"repobilityId": "249e7243ce25da23", "scanner": "scanner-primary", "fingerprint": "63ea0c3f08d6f797", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/procedural_memory.py:463"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-551b2ba68e28ac14", "level": "note", "message": {"text": "Possibly dead Python function: prune_old_reflexions"}, "properties": {"repobilityId": "3a5ad65362462849", "scanner": "scanner-primary", "fingerprint": "551b2ba68e28ac14", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/procedural_memory.py:506"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-211cd051aa6f646a", "level": "note", "message": {"text": "Possibly dead Python function: async_start_session"}, "properties": {"repobilityId": "c918c3305b02a8c2", "scanner": "scanner-primary", "fingerprint": "211cd051aa6f646a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "memory/procedural_memory.py:517"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4deb093821b3afb2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 webui/src/stage/RobotStage.tsx:46"}, "properties": {"repobilityId": "e339e31768487534", "scanner": "scanner-primary", "fingerprint": "4deb093821b3afb2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d76fcffe759b795e", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in webui/src/lib/ws.ts:14"}, "properties": {"repobilityId": "25dfbf05d8e62b54", "scanner": "scanner-primary", "fingerprint": "d76fcffe759b795e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webui/src/lib/ws.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-ee6c8f5b3f694e8f", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in actions/computer_settings.py:122"}, "properties": {"repobilityId": "4f43511772bfe344", "scanner": "scanner-primary", "fingerprint": "ee6c8f5b3f694e8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "actions/computer_settings.py"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-15b0f09ddbcbdefb", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in actions/reminder.py:130"}, "properties": {"repobilityId": "7ec3f5026bad2f0a", "scanner": "scanner-primary", "fingerprint": "15b0f09ddbcbdefb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "actions/reminder.py"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-1a26370cfb0174e0", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in actions/dev_agent.py:279"}, "properties": {"repobilityId": "788e175dc0368b47", "scanner": "scanner-primary", "fingerprint": "1a26370cfb0174e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "actions/dev_agent.py"}, "region": {"startLine": 279}}}]}, {"ruleId": "scanner-42098269baa82912", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in actions/desktop.py:92"}, "properties": {"repobilityId": "c3c9de22676fd7bf", "scanner": "scanner-primary", "fingerprint": "42098269baa82912", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "actions/desktop.py"}, "region": {"startLine": 92}}}]}, {"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-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d70af354be6b9a84", "level": "note", "message": {"text": "Very large file: main.py (1215 lines)"}, "properties": {"repobilityId": "d28330f452f23706", "scanner": "scanner-primary", "fingerprint": "d70af354be6b9a84", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-df8d6a71d0d81d35", "level": "note", "message": {"text": "Very large file: ui.py (2075 lines)"}, "properties": {"repobilityId": "39d5d70d210319d9", "scanner": "scanner-primary", "fingerprint": "df8d6a71d0d81d35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "5729e88a3a72db44", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "2ece796b2074a9c5", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "4c2cc463ab583da9", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "8678ac6733fa045b", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-87e6dd588763f5e6", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 setup.py:5"}, "properties": {"repobilityId": "30580c2a250ef919", "scanner": "scanner-primary", "fingerprint": "87e6dd588763f5e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d94164ed54ff0b8a", "level": "error", "message": {"text": "Blocking `time.sleep(...)` inside `async def _execute_tool` \u2014 main.py:885"}, "properties": {"repobilityId": "6636efaedaf34603", "scanner": "scanner-primary", "fingerprint": "d94164ed54ff0b8a", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 885}}}]}, {"ruleId": "scanner-f009387933fc2dec", "level": "note", "message": {"text": "Stub function `protocol` (body is just `pass`/`return`) \u2014 ui.py:2028"}, "properties": {"repobilityId": "05d83306186e1c5b", "scanner": "scanner-primary", "fingerprint": "f009387933fc2dec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-3ca0eead50d8679e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 webui/src/settings/SetupGate.tsx:20"}, "properties": {"repobilityId": "0fa82883bce3f5e7", "scanner": "scanner-primary", "fingerprint": "3ca0eead50d8679e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-72863dc930addd7e", "level": "none", "message": {"text": "Commented-code block (5 lines) in webui/src/stage/RobotStage.tsx:1"}, "properties": {"repobilityId": "a4c5591644af4651", "scanner": "scanner-primary", "fingerprint": "72863dc930addd7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-694afbdef0f41c8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in webui/src/stage/brain3d/Brain3D.tsx:1"}, "properties": {"repobilityId": "34555bf15f55d224", "scanner": "scanner-primary", "fingerprint": "694afbdef0f41c8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab185e5ce995b71e", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/computer_settings.py:52"}, "properties": {"repobilityId": "7ac235f46bdededf", "scanner": "scanner-primary", "fingerprint": "ab185e5ce995b71e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0e99403a1e50d2cb", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/youtube_video.py:58"}, "properties": {"repobilityId": "bf4aa709febaeafc", "scanner": "scanner-primary", "fingerprint": "0e99403a1e50d2cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-131c9416ffce6a4e", "level": "none", "message": {"text": "Commented-code block (9 lines) in actions/code_helper.py:4"}, "properties": {"repobilityId": "6593c521cde00b04", "scanner": "scanner-primary", "fingerprint": "131c9416ffce6a4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b12344fc217028c0", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/dev_agent.py:241"}, "properties": {"repobilityId": "f79fb91b8b99de5f", "scanner": "scanner-primary", "fingerprint": "b12344fc217028c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8f39d3000897ac8", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/desktop.py:157"}, "properties": {"repobilityId": "2d6f999c0e483fea", "scanner": "scanner-primary", "fingerprint": "b8f39d3000897ac8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c34da48427c7576c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 actions/game_updater.py:240"}, "properties": {"repobilityId": "bc9e0a6b4d2daff0", "scanner": "scanner-primary", "fingerprint": "c34da48427c7576c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "616a21a8bdc6b355", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "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": "d95c61d1b2ac21e7", "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": "331b591d31cb4e5c", "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": "e7d54fb38a9b9850", "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": "8a0fb1bd99a3d3bf", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "851ddfa64fe82665", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "79a1e02028a2d024", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "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": "5c18b3778f271742", "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": "992c629acff31e5f", "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": "d954f2ca9c7b4b36", "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": "8c0fedf3d9f41701", "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": "c246da0f40752c31", "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": "81e6397ee1a5152b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-efdcf1fd740786a2", "level": "error", "message": {"text": "FastAPI POST `post_message` without auth dependency \u2014 server/app.py:106"}, "properties": {"repobilityId": "69f4a16ae3e1b005", "scanner": "scanner-primary", "fingerprint": "efdcf1fd740786a2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/app.py"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-fb63baf838bbdfdd", "level": "error", "message": {"text": "FastAPI POST `post_config` without auth dependency \u2014 server/app.py:129"}, "properties": {"repobilityId": "5ab91aa80a93f3e2", "scanner": "scanner-primary", "fingerprint": "fb63baf838bbdfdd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/app.py"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-3488180dd60aac33", "level": "error", "message": {"text": "FastAPI POST `upload` without auth dependency \u2014 server/app.py:142"}, "properties": {"repobilityId": "8e76f19f7894fdc5", "scanner": "scanner-primary", "fingerprint": "3488180dd60aac33", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/app.py"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-33c52c6577edf724", "level": "note", "message": {"text": "Unused endpoint: POST /api/message"}, "properties": {"repobilityId": "4c135be07f2af5cb", "scanner": "scanner-primary", "fingerprint": "33c52c6577edf724", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7aa4b2518cbbbfa2", "level": "note", "message": {"text": "Unused endpoint: GET /api/config"}, "properties": {"repobilityId": "44ff7e3f3b7d7970", "scanner": "scanner-primary", "fingerprint": "7aa4b2518cbbbfa2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "dca41606b49890ea", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}