{"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-faa752ea4ca7fa07", "name": "Possibly dead Python function: log_message", "shortDescription": {"text": "Possibly dead Python function: log_message"}, "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-cf1ea3544fcf7f9f", "name": "Possibly dead Python function: do_GET", "shortDescription": {"text": "Possibly dead Python function: do_GET"}, "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-109152f8927c05db", "name": "Possibly dead Python function: do_POST", "shortDescription": {"text": "Possibly dead Python function: do_POST"}, "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-8a590ccb77ddd050", "name": "Possibly dead Python function: run_http_server", "shortDescription": {"text": "Possibly dead Python function: run_http_server"}, "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-1eb75d6bee8d838b", "name": "Possibly dead Python function: run_core", "shortDescription": {"text": "Possibly dead Python function: run_core"}, "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-10b9bd4698d71080", "name": "Possibly dead Python function: log_stderr", "shortDescription": {"text": "Possibly dead Python function: log_stderr"}, "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-da5703f058a31f83", "name": "Possibly dead Python function: handle_pause", "shortDescription": {"text": "Possibly dead Python function: handle_pause"}, "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-cede11889877a2aa", "name": "Possibly dead Python function: handle_resume", "shortDescription": {"text": "Possibly dead Python function: handle_resume"}, "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-458b7deaf2316566", "name": "Possibly dead Python function: handle_status", "shortDescription": {"text": "Possibly dead Python function: handle_status"}, "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-4222b693f6bf5d6b", "name": "Possibly dead Python function: handle_reset_kill", "shortDescription": {"text": "Possibly dead Python function: handle_reset_kill"}, "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-747e09ad527885fb", "name": "Possibly dead Python function: handle_stop", "shortDescription": {"text": "Possibly dead Python function: handle_stop"}, "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-1822f9c9cdbabb22", "name": "Possibly dead Python function: send_daily_halt_alert", "shortDescription": {"text": "Possibly dead Python function: send_daily_halt_alert"}, "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-f1eadba2d6bd38ec", "name": "Possibly dead Python function: push_risk_alert", "shortDescription": {"text": "Possibly dead Python function: push_risk_alert"}, "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-76c411b25bc1922e", "name": "Possibly dead Python function: sync_memory", "shortDescription": {"text": "Possibly dead Python function: sync_memory"}, "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-ce36d9ba1d4af5ac", "name": "Possibly dead Python function: read_memory", "shortDescription": {"text": "Possibly dead Python function: read_memory"}, "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-33faeb3220a06e6e", "name": "Possibly dead Python function: decorator", "shortDescription": {"text": "Possibly dead Python function: decorator"}, "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-68985fc412382613", "name": "Possibly dead Python function: set_daily_starting_balance", "shortDescription": {"text": "Possibly dead Python function: set_daily_starting_balance"}, "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-5b6f52493336c783", "name": "Possibly dead Python function: has_sufficient_liquidity", "shortDescription": {"text": "Possibly dead Python function: has_sufficient_liquidity"}, "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-0fd35384f53b4774", "name": "Possibly dead Python function: cancel_order", "shortDescription": {"text": "Possibly dead Python function: cancel_order"}, "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-d267c27be17df649", "name": "Possibly dead Python function: fetch_balances", "shortDescription": {"text": "Possibly dead Python function: fetch_balances"}, "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-fcc3fe1e0ee1c9ca", "name": "Possibly dead Python function: unsubscribe", "shortDescription": {"text": "Possibly dead Python function: unsubscribe"}, "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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20a1636a15e0f672", "name": "Stray `console.log` in TS/JS \u2014 frontend/prisma/seed.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/prisma/seed.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-991b49dc67c19fcb", "name": "\"active\" state uses light bg in a dark theme \u2014 frontend/src/components/dashboard/TradingPanels.tsx:88", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 frontend/src/components/dashboard/TradingPanels.tsx:88"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b038de271479bd50", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/app/api/live/route.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/app/api/live/route.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3844f035dc2fb6e", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/email.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/email.ts:6"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce1fec675e91d850", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bookworm"}, "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-60427b03771411b6", "name": "Dockerfile runs as root: frontend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-042b3183f25da3f0", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "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-8e72050931108ae1", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "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-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b914f0c9db5f94c9", "name": "Very large file: reference_python_project/main.py (1823 lines)", "shortDescription": {"text": "Very large file: reference_python_project/main.py (1823 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-8f17823a95490e5e", "name": "Very large file: reference_python_project/core/polymarket_client.py (1484 lines)", "shortDescription": {"text": "Very large file: reference_python_project/core/polymarket_client.py (1484 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "5 test file(s) for 86 source file(s) (ratio 0.06). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 161 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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. 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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffb1015430983cf1", "name": "Legacy-named symbol `py_clob_client_v2` in fetch_balance.py:64", "shortDescription": {"text": "Legacy-named symbol `py_clob_client_v2` in fetch_balance.py:64"}, "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-c3af3bec41f27a31", "name": "Legacy-named symbol `exchange_v2` in live_preflight.py:29", "shortDescription": {"text": "Legacy-named symbol `exchange_v2` in live_preflight.py:29"}, "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-0ecf4bf109516b9a", "name": "Legacy-named symbol `py_clob_client_v2` in test_sandbox.py:5", "shortDescription": {"text": "Legacy-named symbol `py_clob_client_v2` in test_sandbox.py:5"}, "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-15ea31b113cc3a09", "name": "Legacy-named symbol `py_clob_client_v2` in derive_and_update_keys.py:39", "shortDescription": {"text": "Legacy-named symbol `py_clob_client_v2` in derive_and_update_keys.py:39"}, "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-486aea0906aa9e78", "name": "Legacy-named symbol `py_clob_client_v2` in test_auth.py:28", "shortDescription": {"text": "Legacy-named symbol `py_clob_client_v2` in test_auth.py:28"}, "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-64ab0c71f5d3cec6", "name": "Network/subprocess call without timeout or try/except \u2014 derive_keys.py:81", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 derive_keys.py:81"}, "fullDescription": {"text": "`requests.get(...)` 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-8c778e40ba0e3a97", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/risk/page.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/risk/page.tsx:58"}, "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-ada90eeccc3d7601", "name": "Commented-code block (6 lines) in reference_python_project/config.py:96", "shortDescription": {"text": "Commented-code block (6 lines) in reference_python_project/config.py:96"}, "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-d1a089dd29f1d3c8", "name": "Commented-code block (6 lines) in reference_python_project/main.py:1016", "shortDescription": {"text": "Commented-code block (6 lines) in reference_python_project/main.py:1016"}, "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-120e942c0ad12c0a", "name": "Commented-code block (7 lines) in reference_python_project/core/polymarket_client.py:450", "shortDescription": {"text": "Commented-code block (7 lines) in reference_python_project/core/polymarket_client.py:450"}, "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-78c5e5858f2374a1", "name": "Blocking `requests.get(...)` inside `async def _bootstrap_price_from_rest` \u2014 reference_python_project/core/binance_ws.py", "shortDescription": {"text": "Blocking `requests.get(...)` inside `async def _bootstrap_price_from_rest` \u2014 reference_python_project/core/binance_ws.py:319"}, "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-64bc033a45ab26f1", "name": "34 env vars used in code but missing from .env.example", "shortDescription": {"text": "34 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AUDIT_PATH`, `AUTH_PASSWORD`, `AUTH_USERNAME`, `BINANCE_RECONNECT_DELAY`, `BOT_API_URL`, `BOT_WS_URL`, `DH_TIMEOUT_SECONDS`, `EDGE_MIN_PRICE_MOVE` + 26 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:\ntest_sandbox.py:test_sandbox, test_auth.py:test_auth\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/21626"}, "properties": {"repository": "TrendHunter/saibo-trader", "repoUrl": "https://github.com/TrendHunter/saibo-trader", "branch": "main"}, "results": [{"ruleId": "scanner-faa752ea4ca7fa07", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "faa752ea4ca7fa07", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard_bridge.py:137"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cf1ea3544fcf7f9f", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "cf1ea3544fcf7f9f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard_bridge.py:140"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-109152f8927c05db", "level": "note", "message": {"text": "Possibly dead Python function: do_POST"}, "properties": {"repobilityId": "53357410ca9379a9", "scanner": "scanner-primary", "fingerprint": "109152f8927c05db", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard_bridge.py:160"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8a590ccb77ddd050", "level": "note", "message": {"text": "Possibly dead Python function: run_http_server"}, "properties": {"repobilityId": "8ea66a2725f8eb23", "scanner": "scanner-primary", "fingerprint": "8a590ccb77ddd050", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard_bridge.py:194"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1eb75d6bee8d838b", "level": "note", "message": {"text": "Possibly dead Python function: run_core"}, "properties": {"repobilityId": "3c8c1ad51ea87c79", "scanner": "scanner-primary", "fingerprint": "1eb75d6bee8d838b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard_bridge.py:216"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-10b9bd4698d71080", "level": "note", "message": {"text": "Possibly dead Python function: log_stderr"}, "properties": {"repobilityId": "ef56c9072964e922", "scanner": "scanner-primary", "fingerprint": "10b9bd4698d71080", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard_bridge.py:227"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-da5703f058a31f83", "level": "note", "message": {"text": "Possibly dead Python function: handle_pause"}, "properties": {"repobilityId": "6286b7d89ad3cd95", "scanner": "scanner-primary", "fingerprint": "da5703f058a31f83", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/main.py:1525"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cede11889877a2aa", "level": "note", "message": {"text": "Possibly dead Python function: handle_resume"}, "properties": {"repobilityId": "742c2d50f4343e73", "scanner": "scanner-primary", "fingerprint": "cede11889877a2aa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/main.py:1530"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-458b7deaf2316566", "level": "note", "message": {"text": "Possibly dead Python function: handle_status"}, "properties": {"repobilityId": "c03a3864aee0ff0e", "scanner": "scanner-primary", "fingerprint": "458b7deaf2316566", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/main.py:1535"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4222b693f6bf5d6b", "level": "note", "message": {"text": "Possibly dead Python function: handle_reset_kill"}, "properties": {"repobilityId": "945f36e1054233d8", "scanner": "scanner-primary", "fingerprint": "4222b693f6bf5d6b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/main.py:1548"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-747e09ad527885fb", "level": "note", "message": {"text": "Possibly dead Python function: handle_stop"}, "properties": {"repobilityId": "295adf93fa9fda66", "scanner": "scanner-primary", "fingerprint": "747e09ad527885fb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/main.py:1552"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1822f9c9cdbabb22", "level": "note", "message": {"text": "Possibly dead Python function: send_daily_halt_alert"}, "properties": {"repobilityId": "38fb2476a0369367", "scanner": "scanner-primary", "fingerprint": "1822f9c9cdbabb22", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/integration/telegram.py:260"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f1eadba2d6bd38ec", "level": "note", "message": {"text": "Possibly dead Python function: push_risk_alert"}, "properties": {"repobilityId": "c54fea49a9da4933", "scanner": "scanner-primary", "fingerprint": "f1eadba2d6bd38ec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/integration/openclaw.py:202"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76c411b25bc1922e", "level": "note", "message": {"text": "Possibly dead Python function: sync_memory"}, "properties": {"repobilityId": "f5fff78e48e1abbf", "scanner": "scanner-primary", "fingerprint": "76c411b25bc1922e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/integration/openclaw.py:418"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce36d9ba1d4af5ac", "level": "note", "message": {"text": "Possibly dead Python function: read_memory"}, "properties": {"repobilityId": "6fd225032e7007db", "scanner": "scanner-primary", "fingerprint": "ce36d9ba1d4af5ac", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/integration/openclaw.py:435"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-33faeb3220a06e6e", "level": "note", "message": {"text": "Possibly dead Python function: decorator"}, "properties": {"repobilityId": "ffbcbc9bc189af1c", "scanner": "scanner-primary", "fingerprint": "33faeb3220a06e6e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/utils/retry.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-68985fc412382613", "level": "note", "message": {"text": "Possibly dead Python function: set_daily_starting_balance"}, "properties": {"repobilityId": "158ff0e9912940d4", "scanner": "scanner-primary", "fingerprint": "68985fc412382613", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/risk/risk_manager.py:480"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5b6f52493336c783", "level": "note", "message": {"text": "Possibly dead Python function: has_sufficient_liquidity"}, "properties": {"repobilityId": "81338d5f260d5318", "scanner": "scanner-primary", "fingerprint": "5b6f52493336c783", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/core/polymarket_client.py:987"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0fd35384f53b4774", "level": "note", "message": {"text": "Possibly dead Python function: cancel_order"}, "properties": {"repobilityId": "466246ae9a8d1252", "scanner": "scanner-primary", "fingerprint": "0fd35384f53b4774", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/core/polymarket_client.py:1417"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d267c27be17df649", "level": "note", "message": {"text": "Possibly dead Python function: fetch_balances"}, "properties": {"repobilityId": "ca95383561d4c0e6", "scanner": "scanner-primary", "fingerprint": "d267c27be17df649", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/core/polymarket_client.py:1474"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fcc3fe1e0ee1c9ca", "level": "note", "message": {"text": "Possibly dead Python function: unsubscribe"}, "properties": {"repobilityId": "c67fee6b30e76d20", "scanner": "scanner-primary", "fingerprint": "fcc3fe1e0ee1c9ca", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/core/polymarket_ws.py:171"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-20a1636a15e0f672", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/prisma/seed.ts:17"}, "properties": {"repobilityId": "c8fc66e70f59f5fd", "scanner": "scanner-primary", "fingerprint": "20a1636a15e0f672", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-991b49dc67c19fcb", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 frontend/src/components/dashboard/TradingPanels.tsx:88"}, "properties": {"repobilityId": "c837a907fc6008c0", "scanner": "scanner-primary", "fingerprint": "991b49dc67c19fcb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-b038de271479bd50", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/app/api/live/route.ts:28"}, "properties": {"repobilityId": "7d02c895a2c68839", "scanner": "scanner-primary", "fingerprint": "b038de271479bd50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3844f035dc2fb6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/lib/email.ts:6"}, "properties": {"repobilityId": "71bf34cdeafbaa81", "scanner": "scanner-primary", "fingerprint": "c3844f035dc2fb6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-ce1fec675e91d850", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bookworm"}, "properties": {"repobilityId": "8bfc298d80d38593", "scanner": "scanner-primary", "fingerprint": "ce1fec675e91d850", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-ce1fec675e91d850", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bookworm"}, "properties": {"repobilityId": "82a0c7019e14eb89", "scanner": "scanner-primary", "fingerprint": "ce1fec675e91d850", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-60427b03771411b6", "level": "warning", "message": {"text": "Dockerfile runs as root: frontend/Dockerfile"}, "properties": {"repobilityId": "735c01d8531dfd2c", "scanner": "scanner-primary", "fingerprint": "60427b03771411b6", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-042b3183f25da3f0", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "56926f1ec1316d52", "scanner": "scanner-primary", "fingerprint": "042b3183f25da3f0", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-042b3183f25da3f0", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-bookworm-slim"}, "properties": {"repobilityId": "b86a05a40a34cf51", "scanner": "scanner-primary", "fingerprint": "042b3183f25da3f0", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-8e72050931108ae1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "65d24d816c02367c", "scanner": "scanner-primary", "fingerprint": "8e72050931108ae1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-8e72050931108ae1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "3fc3ac158a176982", "scanner": "scanner-primary", "fingerprint": "8e72050931108ae1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/Dockerfile"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-b914f0c9db5f94c9", "level": "note", "message": {"text": "Very large file: reference_python_project/main.py (1823 lines)"}, "properties": {"repobilityId": "09df4ad71ccff271", "scanner": "scanner-primary", "fingerprint": "b914f0c9db5f94c9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8f17823a95490e5e", "level": "note", "message": {"text": "Very large file: reference_python_project/core/polymarket_client.py (1484 lines)"}, "properties": {"repobilityId": "0802196cedd374c5", "scanner": "scanner-primary", "fingerprint": "8f17823a95490e5e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "16723f66803cf4d4", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "c957f69a532d138e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "476d8151f82f8c74", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "a6b5ff314ba23486", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "c45c87053f85a06b", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-ffb1015430983cf1", "level": "note", "message": {"text": "Legacy-named symbol `py_clob_client_v2` in fetch_balance.py:64"}, "properties": {"repobilityId": "a23f5ff8822c7f7e", "scanner": "scanner-primary", "fingerprint": "ffb1015430983cf1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c3af3bec41f27a31", "level": "note", "message": {"text": "Legacy-named symbol `exchange_v2` in live_preflight.py:29"}, "properties": {"repobilityId": "63d3834b6d7bae7b", "scanner": "scanner-primary", "fingerprint": "c3af3bec41f27a31", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0ecf4bf109516b9a", "level": "note", "message": {"text": "Legacy-named symbol `py_clob_client_v2` in test_sandbox.py:5"}, "properties": {"repobilityId": "71401df8f9c9de47", "scanner": "scanner-primary", "fingerprint": "0ecf4bf109516b9a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-15ea31b113cc3a09", "level": "note", "message": {"text": "Legacy-named symbol `py_clob_client_v2` in derive_and_update_keys.py:39"}, "properties": {"repobilityId": "0637acbc74ba4400", "scanner": "scanner-primary", "fingerprint": "15ea31b113cc3a09", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-486aea0906aa9e78", "level": "note", "message": {"text": "Legacy-named symbol `py_clob_client_v2` in test_auth.py:28"}, "properties": {"repobilityId": "544f9594dd08c4da", "scanner": "scanner-primary", "fingerprint": "486aea0906aa9e78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-64ab0c71f5d3cec6", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 derive_keys.py:81"}, "properties": {"repobilityId": "29ba4cfc32963599", "scanner": "scanner-primary", "fingerprint": "64ab0c71f5d3cec6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c778e40ba0e3a97", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/risk/page.tsx:58"}, "properties": {"repobilityId": "27f458e0672f57a1", "scanner": "scanner-primary", "fingerprint": "8c778e40ba0e3a97", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ada90eeccc3d7601", "level": "none", "message": {"text": "Commented-code block (6 lines) in reference_python_project/config.py:96"}, "properties": {"repobilityId": "17bf3b396b988b2d", "scanner": "scanner-primary", "fingerprint": "ada90eeccc3d7601", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1a089dd29f1d3c8", "level": "none", "message": {"text": "Commented-code block (6 lines) in reference_python_project/main.py:1016"}, "properties": {"repobilityId": "0d2c0e4bcd5ee178", "scanner": "scanner-primary", "fingerprint": "d1a089dd29f1d3c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-120e942c0ad12c0a", "level": "none", "message": {"text": "Commented-code block (7 lines) in reference_python_project/core/polymarket_client.py:450"}, "properties": {"repobilityId": "d472ec01c10fc7ee", "scanner": "scanner-primary", "fingerprint": "120e942c0ad12c0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78c5e5858f2374a1", "level": "error", "message": {"text": "Blocking `requests.get(...)` inside `async def _bootstrap_price_from_rest` \u2014 reference_python_project/core/binance_ws.py:319"}, "properties": {"repobilityId": "5dd0928c02bad1bf", "scanner": "scanner-primary", "fingerprint": "78c5e5858f2374a1", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "reference_python_project/core/binance_ws.py"}, "region": {"startLine": 319}}}]}, {"ruleId": "scanner-64bc033a45ab26f1", "level": "note", "message": {"text": "34 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "dab9f6f977f9c414", "scanner": "scanner-primary", "fingerprint": "64bc033a45ab26f1", "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": "87471b4d5ee7ec0a", "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": "4f9fd5a7db3095bc", "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": "c46fe0ea0fc35b5b", "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": "b8c0b879e44928b6", "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": "587725ed2d0b0cf9", "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": "9d2511f403af511b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}