{"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-01f10cdf92ef8eeb", "name": "Possibly dead Python function: ed25519_publickey", "shortDescription": {"text": "Possibly dead Python function: ed25519_publickey"}, "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-6f4f3f78a90d7880", "name": "Possibly dead Python function: ed25519_sign", "shortDescription": {"text": "Possibly dead Python function: ed25519_sign"}, "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-e250afc515e31b73", "name": "Possibly dead Python function: build_manifest", "shortDescription": {"text": "Possibly dead Python function: build_manifest"}, "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-810695c84694aaa4", "name": "Possibly dead Python function: manifest_to_bytes", "shortDescription": {"text": "Possibly dead Python function: manifest_to_bytes"}, "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-cea2eff428a68726", "name": "Possibly dead Python function: require_gui_token", "shortDescription": {"text": "Possibly dead Python function: require_gui_token"}, "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-69a4d0d1e7302177", "name": "Possibly dead Python function: run_bootstrap", "shortDescription": {"text": "Possibly dead Python function: run_bootstrap"}, "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-f2a60cfbfdec29e3", "name": "Possibly dead Python function: rank_key", "shortDescription": {"text": "Possibly dead Python function: rank_key"}, "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-333d9f74f8fecf9b", "name": "Possibly dead Python function: run_install", "shortDescription": {"text": "Possibly dead Python function: run_install"}, "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-3afd8683df9d75e7", "name": "Possibly dead Python function: require_gui_token", "shortDescription": {"text": "Possibly dead Python function: require_gui_token"}, "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-2e874bb09131e12b", "name": "Possibly dead Python function: set_description", "shortDescription": {"text": "Possibly dead Python function: set_description"}, "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-4d91e220f24ccef1", "name": "Possibly dead Python function: set_postfix", "shortDescription": {"text": "Possibly dead Python function: set_postfix"}, "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-fd141f036c2a606d", "name": "Possibly dead Python function: set_postfix_str", "shortDescription": {"text": "Possibly dead Python function: set_postfix_str"}, "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-630b9a8bcfad6a11", "name": "Possibly dead Python function: refresh", "shortDescription": {"text": "Possibly dead Python function: refresh"}, "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-7bd90255b5a806c4", "name": "Insecure pattern 'node_child_process' in smoke_test.mjs:44", "shortDescription": {"text": "Insecure pattern 'node_child_process' in smoke_test.mjs:44"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). 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-3dcc9fc4b3c257e3", "name": "Very large file: gui_endpoints.py (7111 lines)", "shortDescription": {"text": "Very large file: gui_endpoints.py (7111 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-264b6a396dc3f112", "name": "Very large file: smoke_test.mjs (2431 lines)", "shortDescription": {"text": "Very large file: smoke_test.mjs (2431 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-0763621bcc6d1839", "name": "Very large file: local_ai_server.py (6334 lines)", "shortDescription": {"text": "Very large file: local_ai_server.py (6334 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": "1 tests / 6 src (ratio 0.17)."}, "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 243 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 24 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing ci, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f46469d705fcc897", "name": "Legacy-named symbol `fix_copy` in gui_endpoints.py:2343", "shortDescription": {"text": "Legacy-named symbol `fix_copy` in gui_endpoints.py:2343"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cad76dd6b1450e7c", "name": "Commented-code block (5 lines) in gui_endpoints.py:371", "shortDescription": {"text": "Commented-code block (5 lines) in gui_endpoints.py:371"}, "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-18d496f20dfdaeb7", "name": "Network/subprocess call without timeout or try/except \u2014 gui_endpoints.py:2550", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 gui_endpoints.py:2550"}, "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-060ad5ca20478e4e", "name": "Blocking `time.sleep(...)` inside `async def post_launcher` \u2014 gui_endpoints.py:1909", "shortDescription": {"text": "Blocking `time.sleep(...)` inside `async def post_launcher` \u2014 gui_endpoints.py:1909"}, "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-1eca2e6effc7949a", "name": "Legacy-named symbol `show_unused` in warmup_local_cache.py:260", "shortDescription": {"text": "Legacy-named symbol `show_unused` in warmup_local_cache.py:260"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3bf82f10361ecfd", "name": "Commented-code block (6 lines) in smoke_test.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in smoke_test.mjs: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-5fbf6871304f3a80", "name": "`fetch()` without try/.catch or AbortSignal \u2014 smoke_test.mjs:2212", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 smoke_test.mjs:2212"}, "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-ebb040c8686086ab", "name": "Commented-code block (5 lines) in local_ai_server.py:153", "shortDescription": {"text": "Commented-code block (5 lines) in local_ai_server.py:153"}, "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-2c0b6dc94ad9bf58", "name": "Commented-code block (7 lines) in playwright.config.mjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in playwright.config.mjs: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-500e3b7d9fe8faf0", "name": "76 env vars used in code but missing from .env.example", "shortDescription": {"text": "76 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_API_BASE_URL`, `ANTHROPIC_API_KEY`, `ANTHROPIC_PROBE_TIMEOUT_SECS`, `ANTHROPIC_TIMEOUT_SECS`, `ANTHROPIC_VERSION`, `CHAT_FREQUENCY_PENALTY`, `CHAT_TOP_P`, `CI` + 68 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:\ngui_endpoints.py:run, gui_endpoints.py:run, gui_endpoints.py:run, gui_endpoints.py:run\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:\ngui_endpoints.py:post_launcher_bot_kill_all, gui_endpoints.py:post_launcher\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/28159"}, "properties": {"repository": "NathanNeurotic/SeekDeep-DiscordBot", "repoUrl": "https://github.com/NathanNeurotic/SeekDeep-DiscordBot", "branch": "main"}, "results": [{"ruleId": "scanner-01f10cdf92ef8eeb", "level": "note", "message": {"text": "Possibly dead Python function: ed25519_publickey"}, "properties": {"repobilityId": "f3ac8c9dd4bc9f70", "scanner": "scanner-primary", "fingerprint": "01f10cdf92ef8eeb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "release_signing.py:163"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f4f3f78a90d7880", "level": "note", "message": {"text": "Possibly dead Python function: ed25519_sign"}, "properties": {"repobilityId": "15ed8475a7361571", "scanner": "scanner-primary", "fingerprint": "6f4f3f78a90d7880", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "release_signing.py:170"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e250afc515e31b73", "level": "note", "message": {"text": "Possibly dead Python function: build_manifest"}, "properties": {"repobilityId": "82db347a85fac271", "scanner": "scanner-primary", "fingerprint": "e250afc515e31b73", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "release_signing.py:226"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-810695c84694aaa4", "level": "note", "message": {"text": "Possibly dead Python function: manifest_to_bytes"}, "properties": {"repobilityId": "60c6088024aecfc9", "scanner": "scanner-primary", "fingerprint": "810695c84694aaa4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "release_signing.py:240"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cea2eff428a68726", "level": "note", "message": {"text": "Possibly dead Python function: require_gui_token"}, "properties": {"repobilityId": "b54348dbefd5283e", "scanner": "scanner-primary", "fingerprint": "cea2eff428a68726", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gui_endpoints.py:434"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-69a4d0d1e7302177", "level": "note", "message": {"text": "Possibly dead Python function: run_bootstrap"}, "properties": {"repobilityId": "7062336296681a25", "scanner": "scanner-primary", "fingerprint": "69a4d0d1e7302177", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gui_endpoints.py:3462"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f2a60cfbfdec29e3", "level": "note", "message": {"text": "Possibly dead Python function: rank_key"}, "properties": {"repobilityId": "13e600bdd22374b8", "scanner": "scanner-primary", "fingerprint": "f2a60cfbfdec29e3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gui_endpoints.py:3658"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-333d9f74f8fecf9b", "level": "note", "message": {"text": "Possibly dead Python function: run_install"}, "properties": {"repobilityId": "425a5155f63005c3", "scanner": "scanner-primary", "fingerprint": "333d9f74f8fecf9b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gui_endpoints.py:5507"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3afd8683df9d75e7", "level": "note", "message": {"text": "Possibly dead Python function: require_gui_token"}, "properties": {"repobilityId": "b54348dbefd5283e", "scanner": "scanner-primary", "fingerprint": "3afd8683df9d75e7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "local_ai_server.py:1072"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2e874bb09131e12b", "level": "note", "message": {"text": "Possibly dead Python function: set_description"}, "properties": {"repobilityId": "4d8e45b086defd4c", "scanner": "scanner-primary", "fingerprint": "2e874bb09131e12b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "local_ai_server.py:3251"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4d91e220f24ccef1", "level": "note", "message": {"text": "Possibly dead Python function: set_postfix"}, "properties": {"repobilityId": "3fbaa7a42ab18e67", "scanner": "scanner-primary", "fingerprint": "4d91e220f24ccef1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "local_ai_server.py:3257"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fd141f036c2a606d", "level": "note", "message": {"text": "Possibly dead Python function: set_postfix_str"}, "properties": {"repobilityId": "71e2f084479033f3", "scanner": "scanner-primary", "fingerprint": "fd141f036c2a606d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "local_ai_server.py:3258"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-630b9a8bcfad6a11", "level": "note", "message": {"text": "Possibly dead Python function: refresh"}, "properties": {"repobilityId": "299aa73a0ba0c175", "scanner": "scanner-primary", "fingerprint": "630b9a8bcfad6a11", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "local_ai_server.py:3260"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7bd90255b5a806c4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in smoke_test.mjs:44"}, "properties": {"repobilityId": "77e0349d5e6cf4e5", "scanner": "scanner-primary", "fingerprint": "7bd90255b5a806c4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "smoke_test.mjs"}, "region": {"startLine": 44}}}]}, {"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-3dcc9fc4b3c257e3", "level": "note", "message": {"text": "Very large file: gui_endpoints.py (7111 lines)"}, "properties": {"repobilityId": "5519d9036115b8ee", "scanner": "scanner-primary", "fingerprint": "3dcc9fc4b3c257e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-264b6a396dc3f112", "level": "note", "message": {"text": "Very large file: smoke_test.mjs (2431 lines)"}, "properties": {"repobilityId": "73ef770bc7b443ed", "scanner": "scanner-primary", "fingerprint": "264b6a396dc3f112", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0763621bcc6d1839", "level": "note", "message": {"text": "Very large file: local_ai_server.py (6334 lines)"}, "properties": {"repobilityId": "154f141dacd911ca", "scanner": "scanner-primary", "fingerprint": "0763621bcc6d1839", "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": "29de8151238cebb8", "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": "291075634945ffa0", "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": "ab56b8d557089574", "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": "f75b3e31cab21dac", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "d8942584193871df", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-f46469d705fcc897", "level": "note", "message": {"text": "Legacy-named symbol `fix_copy` in gui_endpoints.py:2343"}, "properties": {"repobilityId": "3106592741f36e6a", "scanner": "scanner-primary", "fingerprint": "f46469d705fcc897", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cad76dd6b1450e7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in gui_endpoints.py:371"}, "properties": {"repobilityId": "baf86c34a270bd43", "scanner": "scanner-primary", "fingerprint": "cad76dd6b1450e7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18d496f20dfdaeb7", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 gui_endpoints.py:2550"}, "properties": {"repobilityId": "1dd523c06c58a42e", "scanner": "scanner-primary", "fingerprint": "18d496f20dfdaeb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-060ad5ca20478e4e", "level": "error", "message": {"text": "Blocking `time.sleep(...)` inside `async def post_launcher` \u2014 gui_endpoints.py:1909"}, "properties": {"repobilityId": "74a558deff1e4018", "scanner": "scanner-primary", "fingerprint": "060ad5ca20478e4e", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gui_endpoints.py"}, "region": {"startLine": 1909}}}]}, {"ruleId": "scanner-1eca2e6effc7949a", "level": "note", "message": {"text": "Legacy-named symbol `show_unused` in warmup_local_cache.py:260"}, "properties": {"repobilityId": "f5d705d886f2ce6f", "scanner": "scanner-primary", "fingerprint": "1eca2e6effc7949a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d3bf82f10361ecfd", "level": "none", "message": {"text": "Commented-code block (6 lines) in smoke_test.mjs:1"}, "properties": {"repobilityId": "6b8bfa9c99042288", "scanner": "scanner-primary", "fingerprint": "d3bf82f10361ecfd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fbf6871304f3a80", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 smoke_test.mjs:2212"}, "properties": {"repobilityId": "f8a5f3eb69ad746b", "scanner": "scanner-primary", "fingerprint": "5fbf6871304f3a80", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ebb040c8686086ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in local_ai_server.py:153"}, "properties": {"repobilityId": "c5cb71c012b1fe30", "scanner": "scanner-primary", "fingerprint": "ebb040c8686086ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c0b6dc94ad9bf58", "level": "none", "message": {"text": "Commented-code block (7 lines) in playwright.config.mjs:1"}, "properties": {"repobilityId": "11119584e577817e", "scanner": "scanner-primary", "fingerprint": "2c0b6dc94ad9bf58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-500e3b7d9fe8faf0", "level": "note", "message": {"text": "76 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "12aca37ef2a6fb6e", "scanner": "scanner-primary", "fingerprint": "500e3b7d9fe8faf0", "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": "ae8502ec6b337cc6", "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": "b09b0e28f0708740", "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": "16490abe238f3586", "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": "7fcc55413f6ca50b", "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": "9c3d7b42595823ee", "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": "abc7bf12677918ed", "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": "4e9dd20a79decb89", "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": "8301201f02413fd4", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}