{"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-13d8925afdbb07c2", "name": "Possibly dead Python function: enqueue", "shortDescription": {"text": "Possibly dead Python function: enqueue"}, "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-28dfbda29bdec08a", "name": "Possibly dead Python function: enqueue_batch", "shortDescription": {"text": "Possibly dead Python function: enqueue_batch"}, "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-d48c83341b596326", "name": "Possibly dead Python function: why", "shortDescription": {"text": "Possibly dead Python function: why"}, "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-6f0e78a4e0722839", "name": "Possibly dead Python function: slot_manage_callback", "shortDescription": {"text": "Possibly dead Python function: slot_manage_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-eae1bb0abb12c8ff", "name": "Possibly dead Python function: slot_triage_callback", "shortDescription": {"text": "Possibly dead Python function: slot_triage_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-c949bd7b3b56fbd8", "name": "Possibly dead Python function: admin_extraction_stats", "shortDescription": {"text": "Possibly dead Python function: admin_extraction_stats"}, "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-b23fba8f544b2a1c", "name": "Possibly dead Python function: admin_extraction_test", "shortDescription": {"text": "Possibly dead Python function: admin_extraction_test"}, "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-d7443a4acf450526", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.9-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.9-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18a0f05586df00c8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb7562fcd003a857", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7cf3748fa8a7606a", "name": "Very large file: bot/admin_commands.py (3949 lines)", "shortDescription": {"text": "Very large file: bot/admin_commands.py (3949 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-708913af1eae379d", "name": "Very large file: bot/ollama_client.py (1935 lines)", "shortDescription": {"text": "Very large file: bot/ollama_client.py (1935 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-95790de48acfed33", "name": "Very large file: bot/creative_features.py (1571 lines)", "shortDescription": {"text": "Very large file: bot/creative_features.py (1571 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-7e1830b1b41f97ca", "name": "Very large file: bot/passive_listener.py (2293 lines)", "shortDescription": {"text": "Very large file: bot/passive_listener.py (2293 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-0093dc3d1f7a7aa3", "name": "Very large file: bot/claude_helper.py (5563 lines)", "shortDescription": {"text": "Very large file: bot/claude_helper.py (5563 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-267af9b866eabebb", "name": "Very large file: bot/telegram_bot.py (7555 lines)", "shortDescription": {"text": "Very large file: bot/telegram_bot.py (7555 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-4b4bfa420478bca6", "name": "Very large file: bot/achievements.py (1385 lines)", "shortDescription": {"text": "Very large file: bot/achievements.py (1385 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-ba71a43ef035e42d", "name": "Very large file: bot/memory_store.py (6745 lines)", "shortDescription": {"text": "Very large file: bot/memory_store.py (6745 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-99b231fa7284c982", "name": "Very large file: bot/plugins/image_generation.py (1684 lines)", "shortDescription": {"text": "Very large file: bot/plugins/image_generation.py (1684 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 134 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 133 placeholder/mock markers across 15 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-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-73de08219ae996e7", "name": "Agent authority lacks a verifier contract: .claude/projects/-root-chatgpt-telegram-bot/memory/feedback_superpowers_workf", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/projects/-root-chatgpt-telegram-bot/memory/feedback_superpowers_workflow.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dde6c1f0de44a9ea", "name": "Agent instruction/config may expose a secret: .claude/projects/-root-chatgpt-telegram-bot/memory/project_environment.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/projects/-root-chatgpt-telegram-bot/memory/project_environment.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38696e449a01689e", "name": "Agent authority lacks a verifier contract: .claude/projects/-root-chatgpt-telegram-bot/memory/feedback_import_convention", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/projects/-root-chatgpt-telegram-bot/memory/feedback_import_convention.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5bc98930afd93863", "name": "Commented-code block (7 lines) in bot/utils.py:119", "shortDescription": {"text": "Commented-code block (7 lines) in bot/utils.py:119"}, "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-268c9245ecc86d7f", "name": "Commented-code block (7 lines) in bot/llm_request_log.py:10", "shortDescription": {"text": "Commented-code block (7 lines) in bot/llm_request_log.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-4307e240ea38356d", "name": "Commented-code block (8 lines) in bot/status_tracker.py:21", "shortDescription": {"text": "Commented-code block (8 lines) in bot/status_tracker.py:21"}, "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-b2c6816f0a9a5557", "name": "Commented-code block (7 lines) in bot/flight_tracker.py:47", "shortDescription": {"text": "Commented-code block (7 lines) in bot/flight_tracker.py:47"}, "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-15809a5b49304031", "name": "Commented-code block (7 lines) in bot/group_participation.py:38", "shortDescription": {"text": "Commented-code block (7 lines) in bot/group_participation.py:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3794d8da5202ae07", "name": "Commented-code block (6 lines) in bot/ollama_client.py:78", "shortDescription": {"text": "Commented-code block (6 lines) in bot/ollama_client.py:78"}, "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-110cfd53662bbfda", "name": "Commented-code block (6 lines) in bot/prompts.py:3", "shortDescription": {"text": "Commented-code block (6 lines) in bot/prompts.py:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51c13d79cfc9e517", "name": "Commented-code block (5 lines) in bot/reingest.py:38", "shortDescription": {"text": "Commented-code block (5 lines) in bot/reingest.py:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b64b0abb9e530088", "name": "Commented-code block (13 lines) in bot/creative_features.py:1077", "shortDescription": {"text": "Commented-code block (13 lines) in bot/creative_features.py:1077"}, "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-32b4fe8e0049551c", "name": "Commented-code block (5 lines) in bot/personality_drift.py:18", "shortDescription": {"text": "Commented-code block (5 lines) in bot/personality_drift.py:18"}, "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-900b2a3cf41d4999", "name": "Commented-code block (5 lines) in bot/passive_listener.py:424", "shortDescription": {"text": "Commented-code block (5 lines) in bot/passive_listener.py:424"}, "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-a7a8d645c59dc1e1", "name": "Blocking `requests.get(...)` inside `async def _handle_passive_url` \u2014 bot/passive_listener.py:704", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _handle_passive_url` \u2014 bot/passive_listener.py:704"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-92e2213cdb88bf07", "name": "Commented-code block (5 lines) in bot/voice_drift.py:196", "shortDescription": {"text": "Commented-code block (5 lines) in bot/voice_drift.py:196"}, "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-02e1e679e832de0a", "name": "Commented-code block (5 lines) in bot/main.py:105", "shortDescription": {"text": "Commented-code block (5 lines) in bot/main.py:105"}, "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-e81062e12ded4f43", "name": "Commented-code block (5 lines) in bot/constants.py:13", "shortDescription": {"text": "Commented-code block (5 lines) in bot/constants.py:13"}, "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-b0f35e99a65dce93", "name": "Commented-code block (11 lines) in bot/claude_helper.py:26", "shortDescription": {"text": "Commented-code block (11 lines) in bot/claude_helper.py:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d27b715b731c6189", "name": "Commented-code block (7 lines) in bot/opinions.py:131", "shortDescription": {"text": "Commented-code block (7 lines) in bot/opinions.py:131"}, "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-474f9853d28f7f8d", "name": "Commented-code block (5 lines) in bot/whisper_client.py:30", "shortDescription": {"text": "Commented-code block (5 lines) in bot/whisper_client.py:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32b656ac90615376", "name": "Commented-code block (7 lines) in bot/telegram_bot.py:216", "shortDescription": {"text": "Commented-code block (7 lines) in bot/telegram_bot.py:216"}, "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-b1513cb843f8d68c", "name": "Commented-code block (6 lines) in bot/model_router.py:15", "shortDescription": {"text": "Commented-code block (6 lines) in bot/model_router.py:15"}, "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-2825a2812db93aec", "name": "Commented-code block (7 lines) in bot/reaction_handler.py:271", "shortDescription": {"text": "Commented-code block (7 lines) in bot/reaction_handler.py:271"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b785b74fe4d7b021", "name": "Legacy-named symbol `_too_old` in bot/memory_store.py:2909", "shortDescription": {"text": "Legacy-named symbol `_too_old` in bot/memory_store.py:2909"}, "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-a01aa1312825b9c7", "name": "Commented-code block (6 lines) in bot/memory_store.py:146", "shortDescription": {"text": "Commented-code block (6 lines) in bot/memory_store.py:146"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e218ed0f88ef0ded", "name": "Commented-code block (6 lines) in bot/nudge.py:42", "shortDescription": {"text": "Commented-code block (6 lines) in bot/nudge.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-24edbc7a3f894557", "name": "Commented-code block (5 lines) in bot/plugin_manager.py:63", "shortDescription": {"text": "Commented-code block (5 lines) in bot/plugin_manager.py:63"}, "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-129a9aded3b5a8e1", "name": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/iplocation.py:33", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/iplocation.py:33"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-a7aa4f2da59b4c40", "name": "Blocking `requests.post(...)` inside `async def execute` \u2014 bot/plugins/deepl.py:53", "shortDescription": {"text": "Blocking `requests.post(...)` inside `async def execute` \u2014 bot/plugins/deepl.py:53"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.post(...)` 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-604e99f7d2ae931b", "name": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/worldtimeapi.py:44", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/worldtimeapi.py:44"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-c6e326bb9b7ab2af", "name": "Commented-code block (6 lines) in bot/plugins/flight_tracking.py:102", "shortDescription": {"text": "Commented-code block (6 lines) in bot/plugins/flight_tracking.py:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ced95461602211ff", "name": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/webshot.py:35", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/webshot.py:35"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-f081c309825dbe6a", "name": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/webshot.py:38", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/webshot.py:38"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-0abcf4245bd3eb7a", "name": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/crypto.py:44", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/crypto.py:44"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-809ace67ee84909e", "name": "Commented-code block (7 lines) in bot/plugins/ddg_image_search.py:7", "shortDescription": {"text": "Commented-code block (7 lines) in bot/plugins/ddg_image_search.py:7"}, "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-ff867ca16035454e", "name": "Commented-code block (6 lines) in bot/plugins/slot_correction.py:210", "shortDescription": {"text": "Commented-code block (6 lines) in bot/plugins/slot_correction.py:210"}, "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-3201f1b09d5f3fd7", "name": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/weather.py:68", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/weather.py:68"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-6a14d0211962e102", "name": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/weather.py:74", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/weather.py:74"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-34881924fed0d368", "name": "Commented-code block (6 lines) in bot/plugins/url_content.py:97", "shortDescription": {"text": "Commented-code block (6 lines) in bot/plugins/url_content.py:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8175d484de976605", "name": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/url_content.py:145", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/url_content.py:145"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `requests.get(...)` 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-86d3711bb29bca96", "name": "Commented-code block (5 lines) in bot/plugins/recall_media.py:231", "shortDescription": {"text": "Commented-code block (5 lines) in bot/plugins/recall_media.py:231"}, "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-dce7f46938c532a8", "name": "Commented-code block (8 lines) in bot/plugins/image_generation.py:13", "shortDescription": {"text": "Commented-code block (8 lines) in bot/plugins/image_generation.py:13"}, "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-aceec000ea5116cc", "name": "Legacy-named symbol `rest_v1` in bot/plugins/wikipedia_search.py:16", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in bot/plugins/wikipedia_search.py:16"}, "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-eb4dc9c23e9a305a", "name": "Commented-code block (5 lines) in bot/quiz/negotiator.py:132", "shortDescription": {"text": "Commented-code block (5 lines) in bot/quiz/negotiator.py:132"}, "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-8f67068a9942c839", "name": "Legacy-named symbol `rest_v1` in bot/quiz/formats.py:17", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in bot/quiz/formats.py:17"}, "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-dbe0b9a6c4960012", "name": "Legacy-named symbol `win_old` in tools/test_chunk_windows.py:295", "shortDescription": {"text": "Legacy-named symbol `win_old` in tools/test_chunk_windows.py:295"}, "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-266ac008350d437f", "name": "Commented-code block (5 lines) in tools/test_chunk_windows.py:496", "shortDescription": {"text": "Commented-code block (5 lines) in tools/test_chunk_windows.py:496"}, "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-aaebadfbb2df1bb1", "name": "Commented-code block (5 lines) in tools/test_plans_wiring.py:63", "shortDescription": {"text": "Commented-code block (5 lines) in tools/test_plans_wiring.py:63"}, "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-7205ea3903f3d0ec", "name": "165 env vars used in code but missing from .env.example", "shortDescription": {"text": "165 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_CONNECT_TIMEOUT`, `API_NONSTREAM_READ_TIMEOUT`, `API_READ_TIMEOUT`, `ASSISTANT_PROMPT`, `AUTONOMOUS_COOLDOWN_SECONDS`, `BOT_LANGUAGE`, `BOT_USER_ID`, `BUDGET_PERIOD` + 157 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbot/admin_commands.py:admin_slot_candidates, bot/admin_commands.py:admin_slot\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-b0aa1e26f181f99d", "name": "FastAPI POST `transcribe` without auth dependency \u2014 deploy/whisper-service/whisper_server.py:51", "shortDescription": {"text": "FastAPI POST `transcribe` without auth dependency \u2014 deploy/whisper-service/whisper_server.py:51"}, "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}}]}}, "automationDetails": {"id": "repobility/24117"}, "properties": {"repository": "Alpha162/chatgpt-telegram-bot", "repoUrl": "https://github.com/Alpha162/chatgpt-telegram-bot", "branch": "main"}, "results": [{"ruleId": "scanner-13d8925afdbb07c2", "level": "note", "message": {"text": "Possibly dead Python function: enqueue"}, "properties": {"repobilityId": "53fcaa68966bb018", "scanner": "scanner-primary", "fingerprint": "13d8925afdbb07c2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/memory_worker.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28dfbda29bdec08a", "level": "note", "message": {"text": "Possibly dead Python function: enqueue_batch"}, "properties": {"repobilityId": "e13e26e9996d8a47", "scanner": "scanner-primary", "fingerprint": "28dfbda29bdec08a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/memory_worker.py:60"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d48c83341b596326", "level": "note", "message": {"text": "Possibly dead Python function: why"}, "properties": {"repobilityId": "d58a668df7be250b", "scanner": "scanner-primary", "fingerprint": "d48c83341b596326", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/admin_commands.py:679"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f0e78a4e0722839", "level": "note", "message": {"text": "Possibly dead Python function: slot_manage_callback"}, "properties": {"repobilityId": "3803d2e79d7aa69c", "scanner": "scanner-primary", "fingerprint": "6f0e78a4e0722839", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/admin_commands.py:1662"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eae1bb0abb12c8ff", "level": "note", "message": {"text": "Possibly dead Python function: slot_triage_callback"}, "properties": {"repobilityId": "28d93de82724f846", "scanner": "scanner-primary", "fingerprint": "eae1bb0abb12c8ff", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/admin_commands.py:1974"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c949bd7b3b56fbd8", "level": "note", "message": {"text": "Possibly dead Python function: admin_extraction_stats"}, "properties": {"repobilityId": "71afe2b0b1bc45a5", "scanner": "scanner-primary", "fingerprint": "c949bd7b3b56fbd8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/admin_commands.py:2251"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b23fba8f544b2a1c", "level": "note", "message": {"text": "Possibly dead Python function: admin_extraction_test"}, "properties": {"repobilityId": "eb7ec2f0031cbf55", "scanner": "scanner-primary", "fingerprint": "b23fba8f544b2a1c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/admin_commands.py:2263"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d7443a4acf450526", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.9-alpine"}, "properties": {"repobilityId": "b1123c9f5e81b840", "scanner": "scanner-primary", "fingerprint": "d7443a4acf450526", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18a0f05586df00c8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8bbe6a493d2de389", "scanner": "scanner-primary", "fingerprint": "18a0f05586df00c8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yaml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-18a0f05586df00c8", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6e8a77c71cada5f9", "scanner": "scanner-primary", "fingerprint": "18a0f05586df00c8", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yaml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-18a0f05586df00c8", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "494fc49ca96255b6", "scanner": "scanner-primary", "fingerprint": "18a0f05586df00c8", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yaml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-fb7562fcd003a857", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "4c66e97c2f7c50b9", "scanner": "scanner-primary", "fingerprint": "fb7562fcd003a857", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7cf3748fa8a7606a", "level": "note", "message": {"text": "Very large file: bot/admin_commands.py (3949 lines)"}, "properties": {"repobilityId": "900f5a408fcb88c4", "scanner": "scanner-primary", "fingerprint": "7cf3748fa8a7606a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-708913af1eae379d", "level": "note", "message": {"text": "Very large file: bot/ollama_client.py (1935 lines)"}, "properties": {"repobilityId": "6f17caac9f7122fd", "scanner": "scanner-primary", "fingerprint": "708913af1eae379d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-95790de48acfed33", "level": "note", "message": {"text": "Very large file: bot/creative_features.py (1571 lines)"}, "properties": {"repobilityId": "140ac415600f0e3a", "scanner": "scanner-primary", "fingerprint": "95790de48acfed33", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7e1830b1b41f97ca", "level": "note", "message": {"text": "Very large file: bot/passive_listener.py (2293 lines)"}, "properties": {"repobilityId": "30f26c55ea12e85c", "scanner": "scanner-primary", "fingerprint": "7e1830b1b41f97ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0093dc3d1f7a7aa3", "level": "note", "message": {"text": "Very large file: bot/claude_helper.py (5563 lines)"}, "properties": {"repobilityId": "ab68e7cd8fab44da", "scanner": "scanner-primary", "fingerprint": "0093dc3d1f7a7aa3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-267af9b866eabebb", "level": "note", "message": {"text": "Very large file: bot/telegram_bot.py (7555 lines)"}, "properties": {"repobilityId": "a7f91dfd6f28ef23", "scanner": "scanner-primary", "fingerprint": "267af9b866eabebb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4b4bfa420478bca6", "level": "note", "message": {"text": "Very large file: bot/achievements.py (1385 lines)"}, "properties": {"repobilityId": "65c4fb0a6b24aa73", "scanner": "scanner-primary", "fingerprint": "4b4bfa420478bca6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ba71a43ef035e42d", "level": "note", "message": {"text": "Very large file: bot/memory_store.py (6745 lines)"}, "properties": {"repobilityId": "3d5da52a011ce95a", "scanner": "scanner-primary", "fingerprint": "ba71a43ef035e42d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-99b231fa7284c982", "level": "note", "message": {"text": "Very large file: bot/plugins/image_generation.py (1684 lines)"}, "properties": {"repobilityId": "2474bba724cb2e40", "scanner": "scanner-primary", "fingerprint": "99b231fa7284c982", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "608958a6e21cb83c", "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": "a443cb88a26860e1", "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": "66105e91bac14e7e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-73de08219ae996e7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/projects/-root-chatgpt-telegram-bot/memory/feedback_superpowers_workflow.md"}, "properties": {"repobilityId": "755bb8b345daae66", "scanner": "scanner-primary", "fingerprint": "73de08219ae996e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/projects/-root-chatgpt-telegram-bot/memory/feedback_superpowers_workflow.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dde6c1f0de44a9ea", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/projects/-root-chatgpt-telegram-bot/memory/project_environment.md"}, "properties": {"repobilityId": "0bf44f3f8d32c20f", "scanner": "scanner-primary", "fingerprint": "dde6c1f0de44a9ea", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/projects/-root-chatgpt-telegram-bot/memory/project_environment.md"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-38696e449a01689e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/projects/-root-chatgpt-telegram-bot/memory/feedback_import_convention.md"}, "properties": {"repobilityId": "5774034cdf92f841", "scanner": "scanner-primary", "fingerprint": "38696e449a01689e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/projects/-root-chatgpt-telegram-bot/memory/feedback_import_convention.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5bc98930afd93863", "level": "none", "message": {"text": "Commented-code block (7 lines) in bot/utils.py:119"}, "properties": {"repobilityId": "744081cfa78e825a", "scanner": "scanner-primary", "fingerprint": "5bc98930afd93863", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-268c9245ecc86d7f", "level": "none", "message": {"text": "Commented-code block (7 lines) in bot/llm_request_log.py:10"}, "properties": {"repobilityId": "cce76424fdec95f3", "scanner": "scanner-primary", "fingerprint": "268c9245ecc86d7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4307e240ea38356d", "level": "none", "message": {"text": "Commented-code block (8 lines) in bot/status_tracker.py:21"}, "properties": {"repobilityId": "ba7576fa55ec31a7", "scanner": "scanner-primary", "fingerprint": "4307e240ea38356d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2c6816f0a9a5557", "level": "none", "message": {"text": "Commented-code block (7 lines) in bot/flight_tracker.py:47"}, "properties": {"repobilityId": "542b7c8961291df9", "scanner": "scanner-primary", "fingerprint": "b2c6816f0a9a5557", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15809a5b49304031", "level": "none", "message": {"text": "Commented-code block (7 lines) in bot/group_participation.py:38"}, "properties": {"repobilityId": "b069011483850e83", "scanner": "scanner-primary", "fingerprint": "15809a5b49304031", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3794d8da5202ae07", "level": "none", "message": {"text": "Commented-code block (6 lines) in bot/ollama_client.py:78"}, "properties": {"repobilityId": "8dfdb1556e4cd88e", "scanner": "scanner-primary", "fingerprint": "3794d8da5202ae07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-110cfd53662bbfda", "level": "none", "message": {"text": "Commented-code block (6 lines) in bot/prompts.py:3"}, "properties": {"repobilityId": "c7a0152b2d5022ab", "scanner": "scanner-primary", "fingerprint": "110cfd53662bbfda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51c13d79cfc9e517", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/reingest.py:38"}, "properties": {"repobilityId": "8017f477168f99a1", "scanner": "scanner-primary", "fingerprint": "51c13d79cfc9e517", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b64b0abb9e530088", "level": "none", "message": {"text": "Commented-code block (13 lines) in bot/creative_features.py:1077"}, "properties": {"repobilityId": "a25a133d75bdf316", "scanner": "scanner-primary", "fingerprint": "b64b0abb9e530088", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32b4fe8e0049551c", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/personality_drift.py:18"}, "properties": {"repobilityId": "b53d1a8b298443ae", "scanner": "scanner-primary", "fingerprint": "32b4fe8e0049551c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-900b2a3cf41d4999", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/passive_listener.py:424"}, "properties": {"repobilityId": "ccbe23133ef0bd44", "scanner": "scanner-primary", "fingerprint": "900b2a3cf41d4999", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7a8d645c59dc1e1", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _handle_passive_url` \u2014 bot/passive_listener.py:704"}, "properties": {"repobilityId": "c03076c16a7c75a7", "scanner": "scanner-primary", "fingerprint": "a7a8d645c59dc1e1", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/passive_listener.py"}, "region": {"startLine": 704}}}]}, {"ruleId": "scanner-92e2213cdb88bf07", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/voice_drift.py:196"}, "properties": {"repobilityId": "09aa4d717f0851d6", "scanner": "scanner-primary", "fingerprint": "92e2213cdb88bf07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02e1e679e832de0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/main.py:105"}, "properties": {"repobilityId": "1e95896153ec4852", "scanner": "scanner-primary", "fingerprint": "02e1e679e832de0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e81062e12ded4f43", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/constants.py:13"}, "properties": {"repobilityId": "7e353310e901854f", "scanner": "scanner-primary", "fingerprint": "e81062e12ded4f43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0f35e99a65dce93", "level": "none", "message": {"text": "Commented-code block (11 lines) in bot/claude_helper.py:26"}, "properties": {"repobilityId": "2ea5851a8a9f86c9", "scanner": "scanner-primary", "fingerprint": "b0f35e99a65dce93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d27b715b731c6189", "level": "none", "message": {"text": "Commented-code block (7 lines) in bot/opinions.py:131"}, "properties": {"repobilityId": "76d18cb67e4ddad7", "scanner": "scanner-primary", "fingerprint": "d27b715b731c6189", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-474f9853d28f7f8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/whisper_client.py:30"}, "properties": {"repobilityId": "6ca1b749c05b304f", "scanner": "scanner-primary", "fingerprint": "474f9853d28f7f8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32b656ac90615376", "level": "none", "message": {"text": "Commented-code block (7 lines) in bot/telegram_bot.py:216"}, "properties": {"repobilityId": "66176688ece7934b", "scanner": "scanner-primary", "fingerprint": "32b656ac90615376", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1513cb843f8d68c", "level": "none", "message": {"text": "Commented-code block (6 lines) in bot/model_router.py:15"}, "properties": {"repobilityId": "4b04f2abbc3c82a8", "scanner": "scanner-primary", "fingerprint": "b1513cb843f8d68c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2825a2812db93aec", "level": "none", "message": {"text": "Commented-code block (7 lines) in bot/reaction_handler.py:271"}, "properties": {"repobilityId": "6c427347a09d87f3", "scanner": "scanner-primary", "fingerprint": "2825a2812db93aec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b785b74fe4d7b021", "level": "note", "message": {"text": "Legacy-named symbol `_too_old` in bot/memory_store.py:2909"}, "properties": {"repobilityId": "1145e1310925f5de", "scanner": "scanner-primary", "fingerprint": "b785b74fe4d7b021", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a01aa1312825b9c7", "level": "none", "message": {"text": "Commented-code block (6 lines) in bot/memory_store.py:146"}, "properties": {"repobilityId": "6cc1844f39823693", "scanner": "scanner-primary", "fingerprint": "a01aa1312825b9c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e218ed0f88ef0ded", "level": "none", "message": {"text": "Commented-code block (6 lines) in bot/nudge.py:42"}, "properties": {"repobilityId": "2065f586a55115f0", "scanner": "scanner-primary", "fingerprint": "e218ed0f88ef0ded", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24edbc7a3f894557", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/plugin_manager.py:63"}, "properties": {"repobilityId": "a8047422e7d233f3", "scanner": "scanner-primary", "fingerprint": "24edbc7a3f894557", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-129a9aded3b5a8e1", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/iplocation.py:33"}, "properties": {"repobilityId": "e4f4d252d2b44b8d", "scanner": "scanner-primary", "fingerprint": "129a9aded3b5a8e1", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/iplocation.py"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-a7aa4f2da59b4c40", "level": "error", "message": {"text": "Blocking `requests.post(...)` inside `async def execute` \u2014 bot/plugins/deepl.py:53"}, "properties": {"repobilityId": "cc440cac523e49db", "scanner": "scanner-primary", "fingerprint": "a7aa4f2da59b4c40", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/deepl.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-604e99f7d2ae931b", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/worldtimeapi.py:44"}, "properties": {"repobilityId": "12495042f4e25ddf", "scanner": "scanner-primary", "fingerprint": "604e99f7d2ae931b", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/worldtimeapi.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-c6e326bb9b7ab2af", "level": "none", "message": {"text": "Commented-code block (6 lines) in bot/plugins/flight_tracking.py:102"}, "properties": {"repobilityId": "d393dc31c0ed4f4c", "scanner": "scanner-primary", "fingerprint": "c6e326bb9b7ab2af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ced95461602211ff", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/webshot.py:35"}, "properties": {"repobilityId": "d0ad31c17f3fec90", "scanner": "scanner-primary", "fingerprint": "ced95461602211ff", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/webshot.py"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-f081c309825dbe6a", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/webshot.py:38"}, "properties": {"repobilityId": "dc61ee8867b78f05", "scanner": "scanner-primary", "fingerprint": "f081c309825dbe6a", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/webshot.py"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-0abcf4245bd3eb7a", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/crypto.py:44"}, "properties": {"repobilityId": "4fa96b9b0d0f4a44", "scanner": "scanner-primary", "fingerprint": "0abcf4245bd3eb7a", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/crypto.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-809ace67ee84909e", "level": "none", "message": {"text": "Commented-code block (7 lines) in bot/plugins/ddg_image_search.py:7"}, "properties": {"repobilityId": "7fbd26faf7ccd219", "scanner": "scanner-primary", "fingerprint": "809ace67ee84909e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff867ca16035454e", "level": "none", "message": {"text": "Commented-code block (6 lines) in bot/plugins/slot_correction.py:210"}, "properties": {"repobilityId": "d0e16c02b83cebf4", "scanner": "scanner-primary", "fingerprint": "ff867ca16035454e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3201f1b09d5f3fd7", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/weather.py:68"}, "properties": {"repobilityId": "7719ad6096c470f2", "scanner": "scanner-primary", "fingerprint": "3201f1b09d5f3fd7", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/weather.py"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-6a14d0211962e102", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/weather.py:74"}, "properties": {"repobilityId": "25e378bba72db99e", "scanner": "scanner-primary", "fingerprint": "6a14d0211962e102", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/weather.py"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-34881924fed0d368", "level": "none", "message": {"text": "Commented-code block (6 lines) in bot/plugins/url_content.py:97"}, "properties": {"repobilityId": "5052ba9eafc30cb8", "scanner": "scanner-primary", "fingerprint": "34881924fed0d368", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8175d484de976605", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def execute` \u2014 bot/plugins/url_content.py:145"}, "properties": {"repobilityId": "7cf8749ac105124c", "scanner": "scanner-primary", "fingerprint": "8175d484de976605", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bot/plugins/url_content.py"}, "region": {"startLine": 145}}}]}, {"ruleId": "scanner-86d3711bb29bca96", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/plugins/recall_media.py:231"}, "properties": {"repobilityId": "7ea522c2f725edd6", "scanner": "scanner-primary", "fingerprint": "86d3711bb29bca96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dce7f46938c532a8", "level": "none", "message": {"text": "Commented-code block (8 lines) in bot/plugins/image_generation.py:13"}, "properties": {"repobilityId": "b181e2584aa3a27e", "scanner": "scanner-primary", "fingerprint": "dce7f46938c532a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aceec000ea5116cc", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in bot/plugins/wikipedia_search.py:16"}, "properties": {"repobilityId": "ffd99bb7728f5cba", "scanner": "scanner-primary", "fingerprint": "aceec000ea5116cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb4dc9c23e9a305a", "level": "none", "message": {"text": "Commented-code block (5 lines) in bot/quiz/negotiator.py:132"}, "properties": {"repobilityId": "c4a126162ae7e008", "scanner": "scanner-primary", "fingerprint": "eb4dc9c23e9a305a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f67068a9942c839", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in bot/quiz/formats.py:17"}, "properties": {"repobilityId": "c559631300ef32fc", "scanner": "scanner-primary", "fingerprint": "8f67068a9942c839", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dbe0b9a6c4960012", "level": "note", "message": {"text": "Legacy-named symbol `win_old` in tools/test_chunk_windows.py:295"}, "properties": {"repobilityId": "21f47cde5018add3", "scanner": "scanner-primary", "fingerprint": "dbe0b9a6c4960012", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-266ac008350d437f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/test_chunk_windows.py:496"}, "properties": {"repobilityId": "108846b152cb42ef", "scanner": "scanner-primary", "fingerprint": "266ac008350d437f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aaebadfbb2df1bb1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/test_plans_wiring.py:63"}, "properties": {"repobilityId": "e4e9934f222b722c", "scanner": "scanner-primary", "fingerprint": "aaebadfbb2df1bb1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7205ea3903f3d0ec", "level": "note", "message": {"text": "165 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "b6878f08f477b4c3", "scanner": "scanner-primary", "fingerprint": "7205ea3903f3d0ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "4d29032ac36acecf", "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": "883b9a9669bc5923", "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": "39f4c73c36e1b3c7", "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": "29590915f7b6113e", "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": "2d82836af9092979", "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": "62efde16e8422317", "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": "034db3814636d8e4", "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": "f53ce9e37a7b749c", "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": "4fbaaa5e9432ba2b", "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": "d61382a0e2ebd013", "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": "1857b841c7744b9c", "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": "778902d1e36a7ea7", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-b0aa1e26f181f99d", "level": "error", "message": {"text": "FastAPI POST `transcribe` without auth dependency \u2014 deploy/whisper-service/whisper_server.py:51"}, "properties": {"repobilityId": "f49bd4333b35ecea", "scanner": "scanner-primary", "fingerprint": "b0aa1e26f181f99d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/whisper-service/whisper_server.py"}, "region": {"startLine": 51}}}]}]}]}