{"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-9f459ed139d6cdbd", "name": "Possibly dead Python function: health_monitor_loop", "shortDescription": {"text": "Possibly dead Python function: health_monitor_loop"}, "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-2da2f242c7fedefa", "name": "Possibly dead Python function: as_dict", "shortDescription": {"text": "Possibly dead Python function: as_dict"}, "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-9546925aa41cbcb3", "name": "Possibly dead Python function: validated_time_limit_hours", "shortDescription": {"text": "Possibly dead Python function: validated_time_limit_hours"}, "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-d28b9c572062068f", "name": "Possibly dead Python function: validated_scan_interval_sec", "shortDescription": {"text": "Possibly dead Python function: validated_scan_interval_sec"}, "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-46e80fcb9b06e1c9", "name": "Possibly dead Python function: generate_token", "shortDescription": {"text": "Possibly dead Python function: generate_token"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d2780b173ba70ef", "name": "Possibly dead Python function: reset_for_tests", "shortDescription": {"text": "Possibly dead Python function: reset_for_tests"}, "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-667d4350e54f51e3", "name": "Possibly dead Python function: verify_api_key", "shortDescription": {"text": "Possibly dead Python function: verify_api_key"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-388187a5ac9afb9c", "name": "Possibly dead Python function: deepseek_extract", "shortDescription": {"text": "Possibly dead Python function: deepseek_extract"}, "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-15a90a6ffc0305af", "name": "Possibly dead Python function: scanner_loop", "shortDescription": {"text": "Possibly dead Python function: scanner_loop"}, "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-43d71b33a13c6d12", "name": "Icon-only button without accessible name \u2014 frontend/src/components/AgentDock.tsx:190", "shortDescription": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/AgentDock.tsx:190"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-86d3a8f2c08cab36", "name": "Icon-only button without accessible name \u2014 frontend/src/components/SymbolDetail.tsx:583", "shortDescription": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/SymbolDetail.tsx:583"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f84b18b2debd5a9b", "name": "Icon-only button without accessible name \u2014 frontend/src/components/OpenPositionModal.tsx:103", "shortDescription": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/OpenPositionModal.tsx:103"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1890b47da4f1ffed", "name": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/PositionsView.tsx:66", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/PositionsView.tsx:66"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e066691601852931", "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-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-faa134129e5545ff", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-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-b048d166901fd868", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx: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-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-e56919d634fc9e09", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/agent/useAgentStream.test.tsx:61", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/agent/useAgentStream.test.tsx:61"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dcaf3c01a2e254bc", "name": "Insecure pattern 'direct_innerhtml_assignment' in Dashboard/index.html:906", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in Dashboard/index.html:906"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d20a065ceeef188", "name": "Very large file: health.py (1271 lines)", "shortDescription": {"text": "Very large file: health.py (1271 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-929fcb0980306b93", "name": "Very large file: backtest.py (2060 lines)", "shortDescription": {"text": "Very large file: backtest.py (2060 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-58fb6bb1cee2d503", "name": "Very large file: walk_forward.py (1819 lines)", "shortDescription": {"text": "Very large file: walk_forward.py (1819 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-3b69013e4e4ede2e", "name": "Very large file: tests/test_celda4_stat_arb.py (1279 lines)", "shortDescription": {"text": "Very large file: tests/test_celda4_stat_arb.py (1279 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-1d343feb120995df", "name": "Very large file: tests/test_funding_carry.py (1088 lines)", "shortDescription": {"text": "Very large file: tests/test_funding_carry.py (1088 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-fc0111f79dbd1383", "name": "Very large file: tests/test_regime_allocation_sweep.py (1207 lines)", "shortDescription": {"text": "Very large file: tests/test_regime_allocation_sweep.py (1207 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-4af469e09ca80a32", "name": "Very large file: tests/test_scanner.py (1551 lines)", "shortDescription": {"text": "Very large file: tests/test_scanner.py (1551 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-ef3260dc2a05911d", "name": "Very large file: tests/test_api.py (2228 lines)", "shortDescription": {"text": "Very large file: tests/test_api.py (2228 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-f112048be384145c", "name": "Very large file: tests/test_strategy_kill_switch_v2_calibrator.py (2462 lines)", "shortDescription": {"text": "Very large file: tests/test_strategy_kill_switch_v2_calibrator.py (2462 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-4cce81c97e870c80", "name": "Very large file: tests/test_strategy_kill_switch_v2.py (2850 lines)", "shortDescription": {"text": "Very large file: tests/test_strategy_kill_switch_v2.py (2850 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-6aba1087baeb8eca", "name": "Very large file: tools/regime_allocation_sweep.py (1576 lines)", "shortDescription": {"text": "Very large file: tools/regime_allocation_sweep.py (1576 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-25ad8313fe61add3", "name": "Very large file: db/schema.py (1941 lines)", "shortDescription": {"text": "Very large file: db/schema.py (1941 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-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "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 519 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 43 placeholder/mock markers across 24 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-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 license. 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-05dc6135c9f1a9b4", "name": "Legacy-named symbol `size_factor_v2` in backtest_costs.py:49", "shortDescription": {"text": "Legacy-named symbol `size_factor_v2` in backtest_costs.py:49"}, "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-002a90476e9939cd", "name": "Commented-code block (6 lines) in backtest_costs.py:65", "shortDescription": {"text": "Commented-code block (6 lines) in backtest_costs.py:65"}, "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-cc0e6e1090600d7a", "name": "Legacy-named symbol `kill_switch_v2` in health.py:407", "shortDescription": {"text": "Legacy-named symbol `kill_switch_v2` in health.py:407"}, "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-1bc14b6132d02c98", "name": "Commented-code block (7 lines) in health.py:1146", "shortDescription": {"text": "Commented-code block (7 lines) in health.py:1146"}, "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-f8efcdd59c3604a8", "name": "Commented-code block (5 lines) in btc_scanner.py:44", "shortDescription": {"text": "Commented-code block (5 lines) in btc_scanner.py:44"}, "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-0ef0f04c4eb3b34b", "name": "Commented-code block (5 lines) in btc_api.py:51", "shortDescription": {"text": "Commented-code block (5 lines) in btc_api.py:51"}, "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-5af7d54d9875ab14", "name": "Commented-code block (6 lines) in backtest.py:83", "shortDescription": {"text": "Commented-code block (6 lines) in backtest.py:83"}, "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-42ebc118e9950da2", "name": "Network/subprocess call without timeout or try/except \u2014 watchdog.py:201", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 watchdog.py:201"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1ee54399e9a8e43a", "name": "Commented-code block (5 lines) in binance_costbasis.py:33", "shortDescription": {"text": "Commented-code block (5 lines) in binance_costbasis.py:33"}, "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-6e64ba0adca25f5b", "name": "Commented-code block (7 lines) in walk_forward.py:49", "shortDescription": {"text": "Commented-code block (7 lines) in walk_forward.py:49"}, "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-265344768f7c55e7", "name": "Commented-code block (7 lines) in auto_tune.py:727", "shortDescription": {"text": "Commented-code block (7 lines) in auto_tune.py:727"}, "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-d4bfc3df65f5744d", "name": "Legacy-named symbol `run_optimization_v2` in strategy/kill_switch_v2_simulator.py:4", "shortDescription": {"text": "Legacy-named symbol `run_optimization_v2` in strategy/kill_switch_v2_simulator.py:4"}, "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-22d2908d17388399", "name": "Legacy-named symbol `kill_switch_v2` in strategy/kill_switch_v2.py:17", "shortDescription": {"text": "Legacy-named symbol `kill_switch_v2` in strategy/kill_switch_v2.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-74b8dd19038049ce", "name": "Legacy-named symbol `kill_switch_v2` in strategy/kill_switch_v2_shadow.py:4", "shortDescription": {"text": "Legacy-named symbol `kill_switch_v2` in strategy/kill_switch_v2_shadow.py:4"}, "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-052ce4d3434abcca", "name": "Commented-code block (5 lines) in strategy/core.py:301", "shortDescription": {"text": "Commented-code block (5 lines) in strategy/core.py:301"}, "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-0da91835b2bb661d", "name": "Legacy-named symbol `cfg_copy` in strategy/kill_switch_v2_optimizer.py:52", "shortDescription": {"text": "Legacy-named symbol `cfg_copy` in strategy/kill_switch_v2_optimizer.py:52"}, "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-9f2f48e5d5cee734", "name": "Legacy-named symbol `run_optimization_v2` in strategy/kill_switch_v2_calibrator.py:175", "shortDescription": {"text": "Legacy-named symbol `run_optimization_v2` in strategy/kill_switch_v2_calibrator.py:175"}, "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-a2d6a05e582376e0", "name": "Commented-code block (5 lines) in strategy/kill_switch_v2_calibrator.py:440", "shortDescription": {"text": "Commented-code block (5 lines) in strategy/kill_switch_v2_calibrator.py:440"}, "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-762e01bfbc68c031", "name": "Commented-code block (6 lines) in frontend/src/api.ts:243", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/api.ts:243"}, "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-98511327fdb84bfe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:81"}, "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-889a83b5c6fb21fc", "name": "Commented-code block (5 lines) in frontend/src/api.test.ts:84", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/api.test.ts:84"}, "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-2b3746fae5ed1713", "name": "Commented-code block (10 lines) in frontend/src/App.tsx:4", "shortDescription": {"text": "Commented-code block (10 lines) in frontend/src/App.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07c271cd38032136", "name": "Commented-code block (8 lines) in frontend/src/auth/AuthContext.tsx:25", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/auth/AuthContext.tsx:25"}, "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-7400fa721ae52049", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/auth/SetupPage.tsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/auth/SetupPage.tsx:62"}, "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-1bee93423b86a122", "name": "Commented-code block (5 lines) in frontend/src/constants/score-factors.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/constants/score-factors.ts:5"}, "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-8ee1685e6ba00572", "name": "Commented-code block (6 lines) in frontend/src/agent/useAgentStream.test.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/agent/useAgentStream.test.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a90977a61be8b3ab", "name": "Commented-code block (5 lines) in frontend/src/agent/client.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/agent/client.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfdfceedd59273d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/agent/client.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/agent/client.ts:6"}, "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-881f68504b7ab193", "name": "Commented-code block (7 lines) in frontend/src/agent/useAgentStream.ts:324", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/agent/useAgentStream.ts:324"}, "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-3560efc4681d3663", "name": "Commented-code block (8 lines) in frontend/src/agent/surfaces.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/agent/surfaces.ts:5"}, "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-3ffb6a0453218307", "name": "Commented-code block (5 lines) in frontend/src/components/AgentBrief.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/AgentBrief.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c07e87f6785f651", "name": "Commented-code block (5 lines) in frontend/src/components/ConnectionsPanel.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/ConnectionsPanel.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da6e375c1e064c89", "name": "Commented-code block (7 lines) in frontend/src/components/AgentDock.tsx:7", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/AgentDock.tsx: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-7bb2eb7687b11345", "name": "Commented-code block (5 lines) in frontend/src/components/FreshnessTag.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/FreshnessTag.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c3e135d948916ac", "name": "Commented-code block (6 lines) in frontend/src/components/KillSwitchView.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/KillSwitchView.tsx: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-3cf150ebc83bf72f", "name": "Commented-code block (13 lines) in frontend/src/components/SymbolDetail.tsx:9", "shortDescription": {"text": "Commented-code block (13 lines) in frontend/src/components/SymbolDetail.tsx:9"}, "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-c72b3ff99129e8f8", "name": "Commented-code block (5 lines) in frontend/src/components/SymbolCard.test.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/SymbolCard.test.tsx:6"}, "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-033a45dc2ac75e4a", "name": "Commented-code block (6 lines) in frontend/src/components/AgentHistorySidebar.tsx:78", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/AgentHistorySidebar.tsx: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-7c88ecd77229a0b5", "name": "Commented-code block (5 lines) in frontend/src/components/UserMenu.tsx:41", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/UserMenu.tsx:41"}, "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-3407be8af21449d0", "name": "Commented-code block (5 lines) in frontend/src/components/AutoTuneView.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/AutoTuneView.tsx:11"}, "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-3cf63b7c2298f432", "name": "Commented-code block (5 lines) in frontend/src/components/SymbolsGrid.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/SymbolsGrid.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7c3d08a2b3f29dc", "name": "Commented-code block (6 lines) in frontend/src/components/ConfigPanel.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/ConfigPanel.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43fdabc4faccf3b0", "name": "Commented-code block (7 lines) in frontend/src/components/PositionsView.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/PositionsView.tsx:5"}, "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-6051aea71d9a75d7", "name": "Commented-code block (5 lines) in frontend/src/components/LeftRail.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/LeftRail.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-decaaad8c57dea21", "name": "Commented-code block (5 lines) in frontend/src/components/atoms/ScanProgressBar.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/atoms/ScanProgressBar.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6777e66aa2c68e5", "name": "Commented-code block (5 lines) in frontend/src/components/atoms/StatusPill.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/atoms/StatusPill.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1bff2776dbec0f99", "name": "Commented-code block (5 lines) in frontend/src/components/valles/Copilot.test.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/valles/Copilot.test.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-709e3c50638868ec", "name": "Commented-code block (5 lines) in frontend/src/components/valles/Copilot.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/valles/Copilot.tsx: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-e04a06554fa37f94", "name": "Commented-code block (6 lines) in frontend/src/helpers/auto-tune-copilot.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/helpers/auto-tune-copilot.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-328fa1cc09d0f118", "name": "Commented-code block (5 lines) in frontend/src/helpers/kill-switch-copilot.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/helpers/kill-switch-copilot.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc8b98dd63e5bfd3", "name": "Commented-code block (5 lines) in frontend/src/helpers/historial-copilot.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/helpers/historial-copilot.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd702d01351cb263", "name": "Commented-code block (6 lines) in frontend/src/helpers/historial.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/helpers/historial.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd54e948d234b581", "name": "Commented-code block (7 lines) in frontend/src/helpers/hierarchy.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/helpers/hierarchy.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2be91efe7658692", "name": "Commented-code block (5 lines) in frontend/src/helpers/position-insight.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/helpers/position-insight.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-528ab5e4a7fcbb55", "name": "Commented-code block (5 lines) in frontend/src/helpers/brief.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/helpers/brief.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82d54adfe5337c51", "name": "Commented-code block (5 lines) in frontend/src/hooks/useScanCountdown.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/hooks/useScanCountdown.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bd5b5299adc99ed", "name": "Commented-code block (5 lines) in frontend/src/hooks/useLiveTicker.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/hooks/useLiveTicker.ts:9"}, "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-0002030273e13e3d", "name": "Commented-code block (5 lines) in frontend/src/hooks/useAgentEnabled.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/hooks/useAgentEnabled.ts: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-2cb33efe8cd6b7c2", "name": "Commented-code block (6 lines) in tests/conftest.py:22", "shortDescription": {"text": "Commented-code block (6 lines) in tests/conftest.py:22"}, "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-e4d0c4ecadb49f42", "name": "Commented-code block (5 lines) in tests/test_backtest_smoke_cooldown.py:27", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_backtest_smoke_cooldown.py:27"}, "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-2987380912e79422", "name": "Commented-code block (5 lines) in tests/test_celda4_stat_arb.py:645", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_celda4_stat_arb.py:645"}, "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-65b483bdfcd81de9", "name": "Commented-code block (7 lines) in tests/test_agent_models.py:121", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_agent_models.py:121"}, "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-1435ff37d39cd552", "name": "Commented-code block (5 lines) in tests/test_check_position_stops_time_limit.py:296", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_check_position_stops_time_limit.py:296"}, "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-217d6e8472685d62", "name": "Legacy-named symbol `test_default_model_is_still_v2` in tests/test_backtest_costs_v3.py:202", "shortDescription": {"text": "Legacy-named symbol `test_default_model_is_still_v2` in tests/test_backtest_costs_v3.py:202"}, "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-cfa98e925939d321", "name": "Commented-code block (5 lines) in tests/test_agent_loop.py:138", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_agent_loop.py:138"}, "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-668a8e9016c25cad", "name": "Commented-code block (6 lines) in tests/test_plan_api.py:68", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_plan_api.py:68"}, "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-81ae56dc7b685761", "name": "Commented-code block (7 lines) in tests/test_regime_retune_pre_holdout.py:580", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_regime_retune_pre_holdout.py:580"}, "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-405cb808575ac7f2", "name": "Legacy-named symbol `last_legacy` in tests/test_multi_tenant_b5_enforcement.py:367", "shortDescription": {"text": "Legacy-named symbol `last_legacy` in tests/test_multi_tenant_b5_enforcement.py:367"}, "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-aba33615d5481ec2", "name": "Commented-code block (9 lines) in tests/test_multi_tenant_b2_capital_tracker.py:197", "shortDescription": {"text": "Commented-code block (9 lines) in tests/test_multi_tenant_b2_capital_tracker.py:197"}, "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-f1e34e4083637d3e", "name": "Legacy-named symbol `kill_switch_v2` in tests/test_strategy_kill_switch_v2_simulator.py:280", "shortDescription": {"text": "Legacy-named symbol `kill_switch_v2` in tests/test_strategy_kill_switch_v2_simulator.py:280"}, "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-3aed9bd00289febf", "name": "Commented-code block (8 lines) in tests/test_backtest_smoke_time_limit.py:124", "shortDescription": {"text": "Commented-code block (8 lines) in tests/test_backtest_smoke_time_limit.py:124"}, "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-425322d4b81ea1f0", "name": "Legacy-named symbol `test_migration_adds_columns_and_backfills_v2` in tests/test_trials_registry.py:283", "shortDescription": {"text": "Legacy-named symbol `test_migration_adds_columns_and_backfills_v2` in tests/test_trials_registry.py:283"}, "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-f3ff9967863da3d0", "name": "Legacy-named symbol `test_global_mode_delegates_to_legacy` in tests/test_regime_per_symbol.py:204", "shortDescription": {"text": "Legacy-named symbol `test_global_mode_delegates_to_legacy` in tests/test_regime_per_symbol.py:204"}, "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-60c4e2795dd1bed6", "name": "Legacy-named symbol `test_no_time_limit_in_config_byte_identical_to_legacy` in tests/test_backtest_time_limit.py:374", "shortDescription": {"text": "Legacy-named symbol `test_no_time_limit_in_config_byte_identical_to_legacy` in tests/test_backtest_time_limit.py:374"}, "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-2bf2d2e7abef2787", "name": "Commented-code block (5 lines) in tests/test_backtest_time_limit.py:204", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_backtest_time_limit.py:204"}, "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-821bf538fe0db8ff", "name": "Commented-code block (5 lines) in tests/test_deploy_decouple.py:293", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_deploy_decouple.py:293"}, "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-821db376c1d2a15e", "name": "Commented-code block (5 lines) in tests/test_scanner_sizing_cap.py:219", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_scanner_sizing_cap.py:219"}, "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-06208c2f60c3151a", "name": "Commented-code block (6 lines) in tests/test_live_edge_analysis.py:215", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_live_edge_analysis.py:215"}, "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-40f4de240f38257f", "name": "Legacy-named symbol `kill_switch_v2` in tests/test_health_dashboard.py:393", "shortDescription": {"text": "Legacy-named symbol `kill_switch_v2` in tests/test_health_dashboard.py:393"}, "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-883d09faa62cd6e3", "name": "Commented-code block (5 lines) in tests/test_health_dashboard.py:260", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_health_dashboard.py:260"}, "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-b9ddc1a46b2725e4", "name": "Commented-code block (6 lines) in tests/test_scanner.py:1301", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_scanner.py:1301"}, "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-ef112f8e927873c3", "name": "Legacy-named symbol `size_factor_v1` in tests/test_backtest_costs_v2.py:36", "shortDescription": {"text": "Legacy-named symbol `size_factor_v1` in tests/test_backtest_costs_v2.py:36"}, "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-3af94c8d111857d5", "name": "Commented-code block (5 lines) in tests/test_backtest_costs_v2.py:501", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_backtest_costs_v2.py:501"}, "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-2592caf01edcc607", "name": "Commented-code block (5 lines) in tests/_fakes.py:68", "shortDescription": {"text": "Commented-code block (5 lines) in tests/_fakes.py:68"}, "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-043ebcbb85a36111", "name": "Legacy-named symbol `payload_v2` in tests/test_agent_proposals.py:151", "shortDescription": {"text": "Legacy-named symbol `payload_v2` in tests/test_agent_proposals.py:151"}, "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-4360fbd1e7d39cac", "name": "Commented-code block (5 lines) in tests/test_agent_proposals.py:240", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_agent_proposals.py:240"}, "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-60180e8d71717904", "name": "Commented-code block (5 lines) in tests/test_canonical_positions_schema.py:249", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_canonical_positions_schema.py:249"}, "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-9fd962903151ebc0", "name": "Legacy-named symbol `test_refresh_with_valid_token_rotates_and_revokes_old` in tests/test_auth.py:200", "shortDescription": {"text": "Legacy-named symbol `test_refresh_with_valid_token_rotates_and_revokes_old` in tests/test_auth.py:200"}, "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-6dffbbb116d9e974", "name": "Commented-code block (5 lines) in tests/test_provider_deepseek.py:256", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_provider_deepseek.py:256"}, "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-0a41466f41e0101e", "name": "Legacy-named symbol `test_apply_creates_backup` in tests/test_auto_tune.py:123", "shortDescription": {"text": "Legacy-named symbol `test_apply_creates_backup` in tests/test_auto_tune.py:123"}, "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-03509869789e120f", "name": "Commented-code block (5 lines) in tests/test_api_kill_switch_parity.py:82", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_api_kill_switch_parity.py:82"}, "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-72b13327aee7428a", "name": "Legacy-named symbol `run_optimization_v2` in tests/test_strategy_kill_switch_v2_optimizer.py:1", "shortDescription": {"text": "Legacy-named symbol `run_optimization_v2` in tests/test_strategy_kill_switch_v2_optimizer.py:1"}, "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-f4becf559709ab5d", "name": "Legacy-named symbol `test_regime_default_mode_matches_legacy` in tests/test_snapshot_regression.py:30", "shortDescription": {"text": "Legacy-named symbol `test_regime_default_mode_matches_legacy` in tests/test_snapshot_regression.py:30"}, "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-0124bbc30e717b0e", "name": "Legacy-named symbol `test_backtest_costs_v2` in tests/test_backtest_costs.py:48", "shortDescription": {"text": "Legacy-named symbol `test_backtest_costs_v2` in tests/test_backtest_costs.py:48"}, "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-92b20917558064d3", "name": "Commented-code block (7 lines) in tests/test_agent_health_check.py:114", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_agent_health_check.py:114"}, "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-6512f7807ecc0d69", "name": "Commented-code block (6 lines) in tests/test_falsify_cost_bound.py:36", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_falsify_cost_bound.py:36"}, "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-54313fa3ad4200e6", "name": "Legacy-named symbol `state_v1` in tests/test_observability.py:180", "shortDescription": {"text": "Legacy-named symbol `state_v1` in tests/test_observability.py:180"}, "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-c32ff2878e75a3c6", "name": "Legacy-named symbol `run_optimization_v2` in tests/test_strategy_kill_switch_v2_calibrator.py:686", "shortDescription": {"text": "Legacy-named symbol `run_optimization_v2` in tests/test_strategy_kill_switch_v2_calibrator.py:686"}, "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-78e5f92e880ebf1a", "name": "Commented-code block (9 lines) in tests/test_holdout_isolation.py:71", "shortDescription": {"text": "Commented-code block (9 lines) in tests/test_holdout_isolation.py:71"}, "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-039b5a1a5ab4d843", "name": "Legacy-named symbol `kill_switch_v2` in tests/test_strategy_kill_switch_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `kill_switch_v2` in tests/test_strategy_kill_switch_v2.py:1"}, "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-1cbddf172e2cda75", "name": "Commented-code block (5 lines) in tests/test_cost_diagnosis_recompute.py:6", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_cost_diagnosis_recompute.py:6"}, "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-26a0934aceb4c81e", "name": "Commented-code block (7 lines) in tests/test_levels_api.py:71", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_levels_api.py:71"}, "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-e8102276d21b78dd", "name": "Commented-code block (10 lines) in tests/api/test_check_position_stops_atomicity.py:24", "shortDescription": {"text": "Commented-code block (10 lines) in tests/api/test_check_position_stops_atomicity.py:24"}, "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-b5414ad4298361d1", "name": "Commented-code block (5 lines) in tests/_fixtures/scanner_frozen.py:98", "shortDescription": {"text": "Commented-code block (5 lines) in tests/_fixtures/scanner_frozen.py:98"}, "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-529d3503cacbfad7", "name": "Commented-code block (7 lines) in tests/db/test_d_cluster_grouped_transaction.py:89", "shortDescription": {"text": "Commented-code block (7 lines) in tests/db/test_d_cluster_grouped_transaction.py:89"}, "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-00301621137ed0e6", "name": "Commented-code block (6 lines) in auth/middleware.py:62", "shortDescription": {"text": "Commented-code block (6 lines) in auth/middleware.py:62"}, "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-ae2b51e0200d1e51", "name": "Commented-code block (11 lines) in operators/precheck.py:123", "shortDescription": {"text": "Commented-code block (11 lines) in operators/precheck.py:123"}, "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-a6dd402a678ded6c", "name": "Commented-code block (10 lines) in operators/position_closure.py:97", "shortDescription": {"text": "Commented-code block (10 lines) in operators/position_closure.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-5ab23deb892306c7", "name": "Legacy-named symbol `run_optimization_v2` in api/kill_switch.py:37", "shortDescription": {"text": "Legacy-named symbol `run_optimization_v2` in api/kill_switch.py:37"}, "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-0ed7a082e1d1ee3e", "name": "Commented-code block (6 lines) in api/kill_switch.py:184", "shortDescription": {"text": "Commented-code block (6 lines) in api/kill_switch.py:184"}, "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-0ded3550a22094d1", "name": "Commented-code block (5 lines) in api/positions_birth.py:43", "shortDescription": {"text": "Commented-code block (5 lines) in api/positions_birth.py:43"}, "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-790c0bd637d8e4df", "name": "Commented-code block (7 lines) in api/auth.py:91", "shortDescription": {"text": "Commented-code block (7 lines) in api/auth.py:91"}, "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-80dfc9992224036a", "name": "Commented-code block (5 lines) in api/user_preferences.py:29", "shortDescription": {"text": "Commented-code block (5 lines) in api/user_preferences.py:29"}, "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-148433914448fb80", "name": "Commented-code block (6 lines) in api/telegram.py:103", "shortDescription": {"text": "Commented-code block (6 lines) in api/telegram.py:103"}, "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-2f1dc1d63027b5ea", "name": "Commented-code block (5 lines) in api/positions.py:157", "shortDescription": {"text": "Commented-code block (5 lines) in api/positions.py:157"}, "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-2632991ea80e3fce", "name": "Commented-code block (5 lines) in api/security/url_validation.py:80", "shortDescription": {"text": "Commented-code block (5 lines) in api/security/url_validation.py:80"}, "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-82cf163667100391", "name": "Commented-code block (7 lines) in api/agent/quotas.py:158", "shortDescription": {"text": "Commented-code block (7 lines) in api/agent/quotas.py:158"}, "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-3d659d3704436fa1", "name": "Commented-code block (5 lines) in api/agent/history.py:204", "shortDescription": {"text": "Commented-code block (5 lines) in api/agent/history.py:204"}, "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-71d51d1cb3dc7c3a", "name": "Commented-code block (6 lines) in api/agent/router.py:63", "shortDescription": {"text": "Commented-code block (6 lines) in api/agent/router.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-e8e2ce91b420e8b0", "name": "Commented-code block (6 lines) in api/agent/proposals.py:87", "shortDescription": {"text": "Commented-code block (6 lines) in api/agent/proposals.py:87"}, "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-0c1d385bdf515b5d", "name": "Commented-code block (8 lines) in api/agent/streaming.py:40", "shortDescription": {"text": "Commented-code block (8 lines) in api/agent/streaming.py:40"}, "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-00276814504329d1", "name": "Commented-code block (13 lines) in api/agent/models.py:37", "shortDescription": {"text": "Commented-code block (13 lines) in api/agent/models.py:37"}, "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-fb36ad6ccf8d8638", "name": "Commented-code block (6 lines) in api/agent/loop.py:260", "shortDescription": {"text": "Commented-code block (6 lines) in api/agent/loop.py:260"}, "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-721fd20304e82cb2", "name": "Commented-code block (9 lines) in api/agent/audit.py:195", "shortDescription": {"text": "Commented-code block (9 lines) in api/agent/audit.py:195"}, "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-90450f5df7463d6d", "name": "Commented-code block (6 lines) in api/agent/safety.py:268", "shortDescription": {"text": "Commented-code block (6 lines) in api/agent/safety.py:268"}, "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-50b1eb810d86deb1", "name": "Commented-code block (6 lines) in api/agent/providers/deepseek_adapter.py:61", "shortDescription": {"text": "Commented-code block (6 lines) in api/agent/providers/deepseek_adapter.py:61"}, "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-f8efc214c60c4852", "name": "Commented-code block (5 lines) in api/agent/providers/registry.py:83", "shortDescription": {"text": "Commented-code block (5 lines) in api/agent/providers/registry.py:83"}, "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-6c924ccd3628aafc", "name": "Commented-code block (8 lines) in api/agent/providers/base.py:30", "shortDescription": {"text": "Commented-code block (8 lines) in api/agent/providers/base.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-800d73ab086c37cb", "name": "Commented-code block (5 lines) in api/agent/tools/handlers.py:107", "shortDescription": {"text": "Commented-code block (5 lines) in api/agent/tools/handlers.py:107"}, "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-8973a0cd302b0fdc", "name": "Commented-code block (6 lines) in scripts/agent_health_check.py:388", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/agent_health_check.py:388"}, "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-37633674cfbd90ce", "name": "Commented-code block (8 lines) in scripts/issue_checkbox_check.py:45", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/issue_checkbox_check.py:45"}, "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-636c802232dc3c5a", "name": "Commented-code block (5 lines) in scripts/a02_honesty_diff.py:105", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/a02_honesty_diff.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-bf18f40c718f550c", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/lock_holdout.py:57", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/lock_holdout.py:57"}, "fullDescription": {"text": "`subprocess.check_output(...)` 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-14e9571709b457f0", "name": "Commented-code block (7 lines) in scripts/gate_regime_modes.py:77", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/gate_regime_modes.py:77"}, "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-e7a205525e607c49", "name": "Commented-code block (5 lines) in notifier/events.py:44", "shortDescription": {"text": "Commented-code block (5 lines) in notifier/events.py:44"}, "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-479cce1023bc42ea", "name": "Commented-code block (7 lines) in scanner/runtime.py:72", "shortDescription": {"text": "Commented-code block (7 lines) in scanner/runtime.py:72"}, "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-7e98027f84acc6f3", "name": "Commented-code block (10 lines) in tools/retune_pre_holdout.py:76", "shortDescription": {"text": "Commented-code block (10 lines) in tools/retune_pre_holdout.py:76"}, "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-1d0e86d0d1d2de73", "name": "Commented-code block (6 lines) in tools/regime_allocation_sweep.py:114", "shortDescription": {"text": "Commented-code block (6 lines) in tools/regime_allocation_sweep.py:114"}, "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-b23a34a2304c6484", "name": "Commented-code block (5 lines) in tools/r1_signal_exit_sweep.py:314", "shortDescription": {"text": "Commented-code block (5 lines) in tools/r1_signal_exit_sweep.py:314"}, "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-ef479fcb76097f85", "name": "Commented-code block (5 lines) in tools/r3_trend_pullback_sweep.py:406", "shortDescription": {"text": "Commented-code block (5 lines) in tools/r3_trend_pullback_sweep.py:406"}, "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-06ba4cfca270fd2a", "name": "Commented-code block (5 lines) in tools/sync_binance_spot.py:94", "shortDescription": {"text": "Commented-code block (5 lines) in tools/sync_binance_spot.py:94"}, "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-694dc88cdc333715", "name": "Commented-code block (7 lines) in tools/regime_retune_pre_holdout.py:660", "shortDescription": {"text": "Commented-code block (7 lines) in tools/regime_retune_pre_holdout.py:660"}, "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-7b4b8bd0eb4743e5", "name": "Commented-code block (6 lines) in tools/regime_allocation_verdict.py:109", "shortDescription": {"text": "Commented-code block (6 lines) in tools/regime_allocation_verdict.py:109"}, "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-36a0c2908f0725d7", "name": "Stub function `record_close` (body is just `pass`/`return`) \u2014 tools/ks_stress_replay/overlays.py:23", "shortDescription": {"text": "Stub function `record_close` (body is just `pass`/`return`) \u2014 tools/ks_stress_replay/overlays.py:23"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f1fb7c827c4ed16", "name": "Commented-code block (6 lines) in tools/tenant_realization/report.py:34", "shortDescription": {"text": "Commented-code block (6 lines) in tools/tenant_realization/report.py:34"}, "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-23c6df61e78fd29f", "name": "Commented-code block (6 lines) in db/hypotheses.py:343", "shortDescription": {"text": "Commented-code block (6 lines) in db/hypotheses.py:343"}, "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-c2375156548224f2", "name": "Commented-code block (6 lines) in db/schema.py:143", "shortDescription": {"text": "Commented-code block (6 lines) in db/schema.py:143"}, "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-f4dad6f3106cc83a", "name": "Commented-code block (5 lines) in db/positions_schema.py:119", "shortDescription": {"text": "Commented-code block (5 lines) in db/positions_schema.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-7514059a072523c1", "name": "Commented-code block (6 lines) in db/signals.py:19", "shortDescription": {"text": "Commented-code block (6 lines) in db/signals.py:19"}, "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-f9dfa2e980bff9ec", "name": "Commented-code block (5 lines) in db/auth_schema.py:103", "shortDescription": {"text": "Commented-code block (5 lines) in db/auth_schema.py:103"}, "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-3c3467241e5ad84c", "name": "Commented-code block (8 lines) in db/connection.py:88", "shortDescription": {"text": "Commented-code block (8 lines) in db/connection.py:88"}, "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-5fa5af25316da646", "name": "16 env vars used in code but missing from .env.example", "shortDescription": {"text": "16 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AGENT_PROPOSAL_SECRET`, `API_PORT`, `AUTH_TEST_BYPASS_ALLOWED`, `AUTH_TEST_BYPASS_CSRF`, `AUTH_TEST_BYPASS_ROLE`, `BTC_REPORT_DIR`, `EXA_API_KEY`, `HTTPS_PROXY` + 8 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:\nhealth.py:compute_rolling_metrics_from_trades, health.py:compute_rolling_metrics\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napi/agent/history.py:get_messages, api/agent/history.py:delete_conversation, api/agent/history.py:toggle_pin\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-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nnotifier/events.py:dedupe_key, notifier/events.py:dedupe_key, notifier/events.py:dedupe_key, notifier/events.py:dedupe_key\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-8b55acb113306b18", "name": "Frontend route `/setup` has no Link/navigate to it \u2014 frontend/src/main.tsx", "shortDescription": {"text": "Frontend route `/setup` has no Link/navigate to it \u2014 frontend/src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-505f2d783a177827", "name": "Frontend route `/*` has no Link/navigate to it \u2014 frontend/src/main.tsx", "shortDescription": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 frontend/src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1f2421ff555cb954", "name": "FastAPI POST `refresh` without auth dependency \u2014 api/auth.py:420", "shortDescription": {"text": "FastAPI POST `refresh` without auth dependency \u2014 api/auth.py:420"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7bb1f62a1bfb831c", "name": "FastAPI POST `setup_post` without auth dependency \u2014 api/setup.py:111", "shortDescription": {"text": "FastAPI POST `setup_post` without auth dependency \u2014 api/setup.py:111"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe44465a67fb04fc", "name": "FastAPI DELETE `delete_conversation` without auth dependency \u2014 api/agent/history.py:397", "shortDescription": {"text": "FastAPI DELETE `delete_conversation` without auth dependency \u2014 api/agent/history.py:397"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ebb0b490b924abc0", "name": "FastAPI POST `toggle_pin` without auth dependency \u2014 api/agent/history.py:444", "shortDescription": {"text": "FastAPI POST `toggle_pin` without auth dependency \u2014 api/agent/history.py:444"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9802769697923f85", "name": "FastAPI POST `post_agent_turn` without auth dependency \u2014 api/agent/router.py:124", "shortDescription": {"text": "FastAPI POST `post_agent_turn` without auth dependency \u2014 api/agent/router.py:124"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6709af28f4565a59", "name": "Dangling fetch: POST /scan${query} (frontend/src/api.ts:175)", "shortDescription": {"text": "Dangling fetch: POST /scan${query} (frontend/src/api.ts:175)"}, "fullDescription": {"text": "`frontend/src/api.ts:175` calls `POST /scan${query}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/scan/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a828e51db39dfdbc", "name": "Dangling fetch: GET /positions?status=${status} (frontend/src/api.ts:216)", "shortDescription": {"text": "Dangling fetch: GET /positions?status=${status} (frontend/src/api.ts:216)"}, "fullDescription": {"text": "`frontend/src/api.ts:216` calls `GET /positions?status=${status}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/positions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f3ff68afefb0d98", "name": "Dangling fetch: POST /positions (frontend/src/api.ts:221)", "shortDescription": {"text": "Dangling fetch: POST /positions (frontend/src/api.ts:221)"}, "fullDescription": {"text": "`frontend/src/api.ts:221` calls `POST /positions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/positions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9dfd455ffb6ab90", "name": "Dangling fetch: PUT /positions/${id} (frontend/src/api.ts:229)", "shortDescription": {"text": "Dangling fetch: PUT /positions/${id} (frontend/src/api.ts:229)"}, "fullDescription": {"text": "`frontend/src/api.ts:229` calls `PUT /positions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/positions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b276d10f91a08dce", "name": "Dangling fetch: POST /positions/${id}/close (frontend/src/api.ts:237)", "shortDescription": {"text": "Dangling fetch: POST /positions/${id}/close (frontend/src/api.ts:237)"}, "fullDescription": {"text": "`frontend/src/api.ts:237` calls `POST /positions/${id}/close` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/positions/<p>/close`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b62ba8ed67d342b5", "name": "Dangling fetch: GET /tune/latest (frontend/src/api.ts:266)", "shortDescription": {"text": "Dangling fetch: GET /tune/latest (frontend/src/api.ts:266)"}, "fullDescription": {"text": "`frontend/src/api.ts:266` calls `GET /tune/latest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tune/latest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16aa206fbbe66eb3", "name": "Dangling fetch: POST /tune/apply (frontend/src/api.ts:271)", "shortDescription": {"text": "Dangling fetch: POST /tune/apply (frontend/src/api.ts:271)"}, "fullDescription": {"text": "`frontend/src/api.ts:271` calls `POST /tune/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tune/apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-570a68c23baa5410", "name": "Dangling fetch: POST /tune/reject (frontend/src/api.ts:278)", "shortDescription": {"text": "Dangling fetch: POST /tune/reject (frontend/src/api.ts:278)"}, "fullDescription": {"text": "`frontend/src/api.ts:278` calls `POST /tune/reject` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tune/reject`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8ae740c1334d16a", "name": "Dangling fetch: POST /notifications/${id}/read (frontend/src/api.ts:304)", "shortDescription": {"text": "Dangling fetch: POST /notifications/${id}/read (frontend/src/api.ts:304)"}, "fullDescription": {"text": "`frontend/src/api.ts:304` calls `POST /notifications/${id}/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notifications/<p>/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4c56f6b61ccd826", "name": "Dangling fetch: POST /notifications/read-all (frontend/src/api.ts:311)", "shortDescription": {"text": "Dangling fetch: POST /notifications/read-all (frontend/src/api.ts:311)"}, "fullDescription": {"text": "`frontend/src/api.ts:311` calls `POST /notifications/read-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notifications/read-all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a268bd46a5485e27", "name": "Dangling fetch: GET /capital (frontend/src/api.ts:385)", "shortDescription": {"text": "Dangling fetch: GET /capital (frontend/src/api.ts:385)"}, "fullDescription": {"text": "`frontend/src/api.ts:385` calls `GET /capital` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/capital`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f23e902d5748cc6a", "name": "Dangling fetch: PUT /capital (frontend/src/api.ts:389)", "shortDescription": {"text": "Dangling fetch: PUT /capital (frontend/src/api.ts:389)"}, "fullDescription": {"text": "`frontend/src/api.ts:389` calls `PUT /capital` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/capital`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a54862412f874dd3", "name": "Dangling fetch: GET /preferences (frontend/src/api.ts:396)", "shortDescription": {"text": "Dangling fetch: GET /preferences (frontend/src/api.ts:396)"}, "fullDescription": {"text": "`frontend/src/api.ts:396` calls `GET /preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6fbdd7406a3da958", "name": "Dangling fetch: PUT /preferences (frontend/src/api.ts:402)", "shortDescription": {"text": "Dangling fetch: PUT /preferences (frontend/src/api.ts:402)"}, "fullDescription": {"text": "`frontend/src/api.ts:402` calls `PUT /preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4d28cf2e0a2dad6", "name": "Dangling fetch: POST /preferences/test (frontend/src/api.ts:409)", "shortDescription": {"text": "Dangling fetch: POST /preferences/test (frontend/src/api.ts:409)"}, "fullDescription": {"text": "`frontend/src/api.ts:409` calls `POST /preferences/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/preferences/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a17f0ec46f9863a7", "name": "Dangling fetch: GET /dossier/${symbol}${q} (frontend/src/api.ts:422)", "shortDescription": {"text": "Dangling fetch: GET /dossier/${symbol}${q} (frontend/src/api.ts:422)"}, "fullDescription": {"text": "`frontend/src/api.ts:422` calls `GET /dossier/${symbol}${q}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/dossier/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`btc_api.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-195fb029bb695346", "name": "Unused endpoint: POST /scan", "shortDescription": {"text": "Unused endpoint: POST /scan"}, "fullDescription": {"text": "`btc_api.py` declares `POST /scan` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-989172f6655e6486", "name": "Unused endpoint: POST /{notif_id}/read", "shortDescription": {"text": "Unused endpoint: POST /{notif_id}/read"}, "fullDescription": {"text": "`api/notifications.py` declares `POST /{notif_id}/read` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8d576f6bf0f5660", "name": "Unused endpoint: POST /read-all", "shortDescription": {"text": "Unused endpoint: POST /read-all"}, "fullDescription": {"text": "`api/notifications.py` declares `POST /read-all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-703613f6734c9c76", "name": "Unused endpoint: POST /kill_switch/recalibrate", "shortDescription": {"text": "Unused endpoint: POST /kill_switch/recalibrate"}, "fullDescription": {"text": "`api/kill_switch.py` declares `POST /kill_switch/recalibrate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd5998a422f7f77a", "name": "Unused endpoint: GET /kill_switch/recommendations", "shortDescription": {"text": "Unused endpoint: GET /kill_switch/recommendations"}, "fullDescription": {"text": "`api/kill_switch.py` declares `GET /kill_switch/recommendations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-64072010a7be8023", "name": "Unused endpoint: POST /kill_switch/recommendations/{rec_id}/apply", "shortDescription": {"text": "Unused endpoint: POST /kill_switch/recommendations/{rec_id}/apply"}, "fullDescription": {"text": "`api/kill_switch.py` declares `POST /kill_switch/recommendations/{rec_id}/apply` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44c7999bdc65b48d", "name": "Unused endpoint: POST /kill_switch/recommendations/{rec_id}/ignore", "shortDescription": {"text": "Unused endpoint: POST /kill_switch/recommendations/{rec_id}/ignore"}, "fullDescription": {"text": "`api/kill_switch.py` declares `POST /kill_switch/recommendations/{rec_id}/ignore` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c17ff0be3c7cc101", "name": "Unused endpoint: GET /kill_switch/decisions", "shortDescription": {"text": "Unused endpoint: GET /kill_switch/decisions"}, "fullDescription": {"text": "`api/kill_switch.py` declares `GET /kill_switch/decisions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9a477f980e11d06", "name": "Unused endpoint: GET /kill_switch/current_state", "shortDescription": {"text": "Unused endpoint: GET /kill_switch/current_state"}, "fullDescription": {"text": "`api/kill_switch.py` declares `GET /kill_switch/current_state` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37157900d71c21d3", "name": "Unused endpoint: GET /latest", "shortDescription": {"text": "Unused endpoint: GET /latest"}, "fullDescription": {"text": "`api/tune.py` declares `GET /latest` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a88e32ba95dda7c", "name": "Unused endpoint: POST /apply", "shortDescription": {"text": "Unused endpoint: POST /apply"}, "fullDescription": {"text": "`api/tune.py` declares `POST /apply` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c1da96ca439fd61", "name": "Unused endpoint: POST /reject", "shortDescription": {"text": "Unused endpoint: POST /reject"}, "fullDescription": {"text": "`api/tune.py` declares `POST /reject` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`api/auth.py` declares `POST /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ce17d6b092a81ca", "name": "Unused endpoint: POST /refresh", "shortDescription": {"text": "Unused endpoint: POST /refresh"}, "fullDescription": {"text": "`api/auth.py` declares `POST /refresh` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99fc36db98c134ce", "name": "Unused endpoint: POST /logout", "shortDescription": {"text": "Unused endpoint: POST /logout"}, "fullDescription": {"text": "`api/auth.py` declares `POST /logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`api/auth.py` declares `GET /me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fe9bb486644f008", "name": "Unused endpoint: POST /change-password", "shortDescription": {"text": "Unused endpoint: POST /change-password"}, "fullDescription": {"text": "`api/auth.py` declares `POST /change-password` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-67d28fa8cd6bb12f", "name": "Unused endpoint: PUT /", "shortDescription": {"text": "Unused endpoint: PUT /"}, "fullDescription": {"text": "`api/user_preferences.py` declares `PUT /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-731c57f59aaca553", "name": "Unused endpoint: POST /test", "shortDescription": {"text": "Unused endpoint: POST /test"}, "fullDescription": {"text": "`api/user_preferences.py` declares `POST /test` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d53616261c5524c", "name": "Unused endpoint: GET /dossier/{symbol}", "shortDescription": {"text": "Unused endpoint: GET /dossier/{symbol}"}, "fullDescription": {"text": "`api/dossier.py` declares `GET /dossier/{symbol}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b57042c928cb086", "name": "Unused endpoint: GET /plan/derive/{symbol}", "shortDescription": {"text": "Unused endpoint: GET /plan/derive/{symbol}"}, "fullDescription": {"text": "`api/plan.py` declares `GET /plan/derive/{symbol}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6cdcfeaf65c0bca4", "name": "Unused endpoint: POST /plan/confirm", "shortDescription": {"text": "Unused endpoint: POST /plan/confirm"}, "fullDescription": {"text": "`api/plan.py` declares `POST /plan/confirm` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2351f862d79ab5eb", "name": "Unused endpoint: GET /plan/{symbol}", "shortDescription": {"text": "Unused endpoint: GET /plan/{symbol}"}, "fullDescription": {"text": "`api/plan.py` declares `GET /plan/{symbol}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d86afd7dd2beb431", "name": "Unused endpoint: GET /setup", "shortDescription": {"text": "Unused endpoint: GET /setup"}, "fullDescription": {"text": "`api/setup.py` declares `GET /setup` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb757797f6bd3444", "name": "Unused endpoint: POST /setup", "shortDescription": {"text": "Unused endpoint: POST /setup"}, "fullDescription": {"text": "`api/setup.py` declares `POST /setup` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c4d06b87ea984dc", "name": "Unused endpoint: GET /performance", "shortDescription": {"text": "Unused endpoint: GET /performance"}, "fullDescription": {"text": "`api/signals.py` declares `GET /performance` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc9387087d9c906e", "name": "Unused endpoint: GET /latest/message", "shortDescription": {"text": "Unused endpoint: GET /latest/message"}, "fullDescription": {"text": "`api/signals.py` declares `GET /latest/message` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-acfc279b767e6f3c", "name": "Unused endpoint: GET /{scan_id}", "shortDescription": {"text": "Unused endpoint: GET /{scan_id}"}, "fullDescription": {"text": "`api/signals.py` declares `GET /{scan_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`api/positions.py` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a2565bb90c85ae6", "name": "Unused endpoint: PUT /{pos_id}", "shortDescription": {"text": "Unused endpoint: PUT /{pos_id}"}, "fullDescription": {"text": "`api/positions.py` declares `PUT /{pos_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e0d47e620eaac64", "name": "Unused endpoint: POST /{pos_id}/close", "shortDescription": {"text": "Unused endpoint: POST /{pos_id}/close"}, "fullDescription": {"text": "`api/positions.py` declares `POST /{pos_id}/close` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e33151bdd9d61ad8", "name": "Unused endpoint: DELETE /{pos_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{pos_id}"}, "fullDescription": {"text": "`api/positions.py` declares `DELETE /{pos_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba04011505f6fb06", "name": "Unused endpoint: GET /agent/conversations", "shortDescription": {"text": "Unused endpoint: GET /agent/conversations"}, "fullDescription": {"text": "`api/agent/history.py` declares `GET /agent/conversations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da463250e77def36", "name": "Unused endpoint: GET /agent/conversations/{conversation_id}/messages", "shortDescription": {"text": "Unused endpoint: GET /agent/conversations/{conversation_id}/messages"}, "fullDescription": {"text": "`api/agent/history.py` declares `GET /agent/conversations/{conversation_id}/messages` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8e90a51e5a396f0", "name": "Unused endpoint: DELETE /agent/conversations/{conversation_id}", "shortDescription": {"text": "Unused endpoint: DELETE /agent/conversations/{conversation_id}"}, "fullDescription": {"text": "`api/agent/history.py` declares `DELETE /agent/conversations/{conversation_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8440bd2291a531dd", "name": "Unused endpoint: POST /agent/conversations/{conversation_id}/pin", "shortDescription": {"text": "Unused endpoint: POST /agent/conversations/{conversation_id}/pin"}, "fullDescription": {"text": "`api/agent/history.py` declares `POST /agent/conversations/{conversation_id}/pin` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e163b09052598fab", "name": "Unused endpoint: POST /agent/conversations/{conversation_id}/turn", "shortDescription": {"text": "Unused endpoint: POST /agent/conversations/{conversation_id}/turn"}, "fullDescription": {"text": "`api/agent/router.py` declares `POST /agent/conversations/{conversation_id}/turn` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79db3dd5cde7113b", "name": "Unused endpoint: POST /agent/proposals/{proposal_id}/confirm", "shortDescription": {"text": "Unused endpoint: POST /agent/proposals/{proposal_id}/confirm"}, "fullDescription": {"text": "`api/agent/router.py` declares `POST /agent/proposals/{proposal_id}/confirm` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8dc4bac26611a44c", "name": "Unused endpoint: GET /agent/metrics", "shortDescription": {"text": "Unused endpoint: GET /agent/metrics"}, "fullDescription": {"text": "`api/agent/router.py` declares `GET /agent/metrics` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20220"}, "properties": {"repository": "sssimon/trading-spacial", "repoUrl": "https://github.com/sssimon/trading-spacial", "branch": "main"}, "results": [{"ruleId": "scanner-9f459ed139d6cdbd", "level": "note", "message": {"text": "Possibly dead Python function: health_monitor_loop"}, "properties": {"repobilityId": "079216a690ec57c9", "scanner": "scanner-primary", "fingerprint": "9f459ed139d6cdbd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "health.py:959"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2da2f242c7fedefa", "level": "note", "message": {"text": "Possibly dead Python function: as_dict"}, "properties": {"repobilityId": "69f3c90a88921b5d", "scanner": "scanner-primary", "fingerprint": "2da2f242c7fedefa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "walk_forward.py:161"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9546925aa41cbcb3", "level": "note", "message": {"text": "Possibly dead Python function: validated_time_limit_hours"}, "properties": {"repobilityId": "e3864001e0239fbe", "scanner": "scanner-primary", "fingerprint": "9546925aa41cbcb3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "strategy/_validators.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d28b9c572062068f", "level": "note", "message": {"text": "Possibly dead Python function: validated_scan_interval_sec"}, "properties": {"repobilityId": "9ec0006c5e2d8f31", "scanner": "scanner-primary", "fingerprint": "d28b9c572062068f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "strategy/_validators.py:169"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-46e80fcb9b06e1c9", "level": "note", "message": {"text": "Possibly dead Python function: generate_token"}, "properties": {"repobilityId": "54db44cbe62ef449", "scanner": "scanner-primary", "fingerprint": "46e80fcb9b06e1c9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auth/setup.py:25"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9d2780b173ba70ef", "level": "note", "message": {"text": "Possibly dead Python function: reset_for_tests"}, "properties": {"repobilityId": "05b9751b6986f14c", "scanner": "scanner-primary", "fingerprint": "9d2780b173ba70ef", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "auth/setup.py:53"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-667d4350e54f51e3", "level": "note", "message": {"text": "Possibly dead Python function: verify_api_key"}, "properties": {"repobilityId": "7e20521df243db65", "scanner": "scanner-primary", "fingerprint": "667d4350e54f51e3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/deps.py:23"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-388187a5ac9afb9c", "level": "note", "message": {"text": "Possibly dead Python function: deepseek_extract"}, "properties": {"repobilityId": "7f7039970368ed84", "scanner": "scanner-primary", "fingerprint": "388187a5ac9afb9c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "research/dossier.py:63"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-15a90a6ffc0305af", "level": "note", "message": {"text": "Possibly dead Python function: scanner_loop"}, "properties": {"repobilityId": "11b4483f1fa5d19f", "scanner": "scanner-primary", "fingerprint": "15a90a6ffc0305af", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scanner/runtime.py:318"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-43d71b33a13c6d12", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/AgentDock.tsx:190"}, "properties": {"repobilityId": "2d2a49578da94911", "scanner": "scanner-primary", "fingerprint": "43d71b33a13c6d12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-86d3a8f2c08cab36", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/SymbolDetail.tsx:583"}, "properties": {"repobilityId": "f7dbbb1714c0b41e", "scanner": "scanner-primary", "fingerprint": "86d3a8f2c08cab36", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f84b18b2debd5a9b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/OpenPositionModal.tsx:103"}, "properties": {"repobilityId": "264146f6d978e563", "scanner": "scanner-primary", "fingerprint": "f84b18b2debd5a9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-1890b47da4f1ffed", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 frontend/src/components/PositionsView.tsx:66"}, "properties": {"repobilityId": "63e0af4b6cde9d4b", "scanner": "scanner-primary", "fingerprint": "1890b47da4f1ffed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e066691601852931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "d9c0fb9b42368832", "scanner": "scanner-primary", "fingerprint": "e066691601852931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-e066691601852931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "86c769efe3ca1900", "scanner": "scanner-primary", "fingerprint": "e066691601852931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 36}}}]}, {"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-faa134129e5545ff", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "c49a6c291fc47898", "scanner": "scanner-primary", "fingerprint": "faa134129e5545ff", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b048d166901fd868", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "properties": {"repobilityId": "ce87267376e34744", "scanner": "scanner-primary", "fingerprint": "b048d166901fd868", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 15}}}]}, {"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-e56919d634fc9e09", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/agent/useAgentStream.test.tsx:61"}, "properties": {"repobilityId": "45840b7f7daae156", "scanner": "scanner-primary", "fingerprint": "e56919d634fc9e09", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/agent/useAgentStream.test.tsx"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-dcaf3c01a2e254bc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in Dashboard/index.html:906"}, "properties": {"repobilityId": "259b56a0aa3755b9", "scanner": "scanner-primary", "fingerprint": "dcaf3c01a2e254bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dashboard/index.html"}, "region": {"startLine": 906}}}]}, {"ruleId": "scanner-8d20a065ceeef188", "level": "note", "message": {"text": "Very large file: health.py (1271 lines)"}, "properties": {"repobilityId": "b1af614f16aa7fe3", "scanner": "scanner-primary", "fingerprint": "8d20a065ceeef188", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-929fcb0980306b93", "level": "note", "message": {"text": "Very large file: backtest.py (2060 lines)"}, "properties": {"repobilityId": "1720118a92d0a378", "scanner": "scanner-primary", "fingerprint": "929fcb0980306b93", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-58fb6bb1cee2d503", "level": "note", "message": {"text": "Very large file: walk_forward.py (1819 lines)"}, "properties": {"repobilityId": "2dcf8afbe8588730", "scanner": "scanner-primary", "fingerprint": "58fb6bb1cee2d503", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b69013e4e4ede2e", "level": "note", "message": {"text": "Very large file: tests/test_celda4_stat_arb.py (1279 lines)"}, "properties": {"repobilityId": "08de3e44dea9fa27", "scanner": "scanner-primary", "fingerprint": "3b69013e4e4ede2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1d343feb120995df", "level": "note", "message": {"text": "Very large file: tests/test_funding_carry.py (1088 lines)"}, "properties": {"repobilityId": "3f0e863a2b7c16e7", "scanner": "scanner-primary", "fingerprint": "1d343feb120995df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fc0111f79dbd1383", "level": "note", "message": {"text": "Very large file: tests/test_regime_allocation_sweep.py (1207 lines)"}, "properties": {"repobilityId": "e36c7c0991727404", "scanner": "scanner-primary", "fingerprint": "fc0111f79dbd1383", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4af469e09ca80a32", "level": "note", "message": {"text": "Very large file: tests/test_scanner.py (1551 lines)"}, "properties": {"repobilityId": "0956608bf848295c", "scanner": "scanner-primary", "fingerprint": "4af469e09ca80a32", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ef3260dc2a05911d", "level": "note", "message": {"text": "Very large file: tests/test_api.py (2228 lines)"}, "properties": {"repobilityId": "7a0c2cfd494d55be", "scanner": "scanner-primary", "fingerprint": "ef3260dc2a05911d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f112048be384145c", "level": "note", "message": {"text": "Very large file: tests/test_strategy_kill_switch_v2_calibrator.py (2462 lines)"}, "properties": {"repobilityId": "8657a36d0a5c5a61", "scanner": "scanner-primary", "fingerprint": "f112048be384145c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4cce81c97e870c80", "level": "note", "message": {"text": "Very large file: tests/test_strategy_kill_switch_v2.py (2850 lines)"}, "properties": {"repobilityId": "8f115999db7dafb2", "scanner": "scanner-primary", "fingerprint": "4cce81c97e870c80", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6aba1087baeb8eca", "level": "note", "message": {"text": "Very large file: tools/regime_allocation_sweep.py (1576 lines)"}, "properties": {"repobilityId": "df3d6bd412f2ee5f", "scanner": "scanner-primary", "fingerprint": "6aba1087baeb8eca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-25ad8313fe61add3", "level": "note", "message": {"text": "Very large file: db/schema.py (1941 lines)"}, "properties": {"repobilityId": "63386c1a76e66fcf", "scanner": "scanner-primary", "fingerprint": "25ad8313fe61add3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "baa4b9d751781cac", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "1dd8316e40484030", "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": "46f2f00727219472", "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": "90e0191990ec5d2e", "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": "4f62b9e2479349f8", "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": "d6b712918dcf9cbe", "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": "cf842d63689362e5", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-05dc6135c9f1a9b4", "level": "note", "message": {"text": "Legacy-named symbol `size_factor_v2` in backtest_costs.py:49"}, "properties": {"repobilityId": "583382ebfc321272", "scanner": "scanner-primary", "fingerprint": "05dc6135c9f1a9b4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-002a90476e9939cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in backtest_costs.py:65"}, "properties": {"repobilityId": "b0f710c58389ef8c", "scanner": "scanner-primary", "fingerprint": "002a90476e9939cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0e6e1090600d7a", "level": "note", "message": {"text": "Legacy-named symbol `kill_switch_v2` in health.py:407"}, "properties": {"repobilityId": "6375cb36f8fe5ff2", "scanner": "scanner-primary", "fingerprint": "cc0e6e1090600d7a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1bc14b6132d02c98", "level": "none", "message": {"text": "Commented-code block (7 lines) in health.py:1146"}, "properties": {"repobilityId": "53920abe911d5ada", "scanner": "scanner-primary", "fingerprint": "1bc14b6132d02c98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8efcdd59c3604a8", "level": "none", "message": {"text": "Commented-code block (5 lines) in btc_scanner.py:44"}, "properties": {"repobilityId": "4664bbe047491b19", "scanner": "scanner-primary", "fingerprint": "f8efcdd59c3604a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ef0f04c4eb3b34b", "level": "none", "message": {"text": "Commented-code block (5 lines) in btc_api.py:51"}, "properties": {"repobilityId": "b26107d676640026", "scanner": "scanner-primary", "fingerprint": "0ef0f04c4eb3b34b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5af7d54d9875ab14", "level": "none", "message": {"text": "Commented-code block (6 lines) in backtest.py:83"}, "properties": {"repobilityId": "b18a680e23d78f09", "scanner": "scanner-primary", "fingerprint": "5af7d54d9875ab14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42ebc118e9950da2", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 watchdog.py:201"}, "properties": {"repobilityId": "0fa663c1ccf58919", "scanner": "scanner-primary", "fingerprint": "42ebc118e9950da2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ee54399e9a8e43a", "level": "none", "message": {"text": "Commented-code block (5 lines) in binance_costbasis.py:33"}, "properties": {"repobilityId": "fbbbc0466531ad5b", "scanner": "scanner-primary", "fingerprint": "1ee54399e9a8e43a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e64ba0adca25f5b", "level": "none", "message": {"text": "Commented-code block (7 lines) in walk_forward.py:49"}, "properties": {"repobilityId": "751f0d8b14ca62d2", "scanner": "scanner-primary", "fingerprint": "6e64ba0adca25f5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-265344768f7c55e7", "level": "none", "message": {"text": "Commented-code block (7 lines) in auto_tune.py:727"}, "properties": {"repobilityId": "1f75729b2c4f0946", "scanner": "scanner-primary", "fingerprint": "265344768f7c55e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4bfc3df65f5744d", "level": "note", "message": {"text": "Legacy-named symbol `run_optimization_v2` in strategy/kill_switch_v2_simulator.py:4"}, "properties": {"repobilityId": "a4c7b8867271fb58", "scanner": "scanner-primary", "fingerprint": "d4bfc3df65f5744d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-22d2908d17388399", "level": "note", "message": {"text": "Legacy-named symbol `kill_switch_v2` in strategy/kill_switch_v2.py:17"}, "properties": {"repobilityId": "df6194fb129c02f0", "scanner": "scanner-primary", "fingerprint": "22d2908d17388399", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-74b8dd19038049ce", "level": "note", "message": {"text": "Legacy-named symbol `kill_switch_v2` in strategy/kill_switch_v2_shadow.py:4"}, "properties": {"repobilityId": "118c72e3ddfd46ee", "scanner": "scanner-primary", "fingerprint": "74b8dd19038049ce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-052ce4d3434abcca", "level": "none", "message": {"text": "Commented-code block (5 lines) in strategy/core.py:301"}, "properties": {"repobilityId": "0a25da72e1e64598", "scanner": "scanner-primary", "fingerprint": "052ce4d3434abcca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0da91835b2bb661d", "level": "note", "message": {"text": "Legacy-named symbol `cfg_copy` in strategy/kill_switch_v2_optimizer.py:52"}, "properties": {"repobilityId": "6804034d939b01b0", "scanner": "scanner-primary", "fingerprint": "0da91835b2bb661d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9f2f48e5d5cee734", "level": "note", "message": {"text": "Legacy-named symbol `run_optimization_v2` in strategy/kill_switch_v2_calibrator.py:175"}, "properties": {"repobilityId": "afa90b98ee5ac358", "scanner": "scanner-primary", "fingerprint": "9f2f48e5d5cee734", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a2d6a05e582376e0", "level": "none", "message": {"text": "Commented-code block (5 lines) in strategy/kill_switch_v2_calibrator.py:440"}, "properties": {"repobilityId": "7d0fee9b15310d36", "scanner": "scanner-primary", "fingerprint": "a2d6a05e582376e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-762e01bfbc68c031", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/api.ts:243"}, "properties": {"repobilityId": "c19d7b76c89a7e7b", "scanner": "scanner-primary", "fingerprint": "762e01bfbc68c031", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98511327fdb84bfe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:81"}, "properties": {"repobilityId": "6dd57b697437c67e", "scanner": "scanner-primary", "fingerprint": "98511327fdb84bfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-889a83b5c6fb21fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/api.test.ts:84"}, "properties": {"repobilityId": "901344920e7881a3", "scanner": "scanner-primary", "fingerprint": "889a83b5c6fb21fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b3746fae5ed1713", "level": "none", "message": {"text": "Commented-code block (10 lines) in frontend/src/App.tsx:4"}, "properties": {"repobilityId": "88b073f087cb1076", "scanner": "scanner-primary", "fingerprint": "2b3746fae5ed1713", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07c271cd38032136", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/auth/AuthContext.tsx:25"}, "properties": {"repobilityId": "2b369bfda76f7acc", "scanner": "scanner-primary", "fingerprint": "07c271cd38032136", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7400fa721ae52049", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/auth/SetupPage.tsx:62"}, "properties": {"repobilityId": "f10b01283a6c77dd", "scanner": "scanner-primary", "fingerprint": "7400fa721ae52049", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1bee93423b86a122", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/constants/score-factors.ts:5"}, "properties": {"repobilityId": "016ce21b08caafb4", "scanner": "scanner-primary", "fingerprint": "1bee93423b86a122", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ee1685e6ba00572", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/agent/useAgentStream.test.tsx:4"}, "properties": {"repobilityId": "341f8d45690c7a9a", "scanner": "scanner-primary", "fingerprint": "8ee1685e6ba00572", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a90977a61be8b3ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/agent/client.ts:4"}, "properties": {"repobilityId": "5a525489ed483c3d", "scanner": "scanner-primary", "fingerprint": "a90977a61be8b3ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfdfceedd59273d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/agent/client.ts:6"}, "properties": {"repobilityId": "e425c2760963c898", "scanner": "scanner-primary", "fingerprint": "bfdfceedd59273d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-881f68504b7ab193", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/agent/useAgentStream.ts:324"}, "properties": {"repobilityId": "1e21286b75c6cde2", "scanner": "scanner-primary", "fingerprint": "881f68504b7ab193", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3560efc4681d3663", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/agent/surfaces.ts:5"}, "properties": {"repobilityId": "dd7c016c9ed87b8a", "scanner": "scanner-primary", "fingerprint": "3560efc4681d3663", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ffb6a0453218307", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/AgentBrief.tsx:4"}, "properties": {"repobilityId": "e7ee2cd211ba19b2", "scanner": "scanner-primary", "fingerprint": "3ffb6a0453218307", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c07e87f6785f651", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/ConnectionsPanel.tsx:1"}, "properties": {"repobilityId": "940ab619cc39536d", "scanner": "scanner-primary", "fingerprint": "7c07e87f6785f651", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da6e375c1e064c89", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/AgentDock.tsx:7"}, "properties": {"repobilityId": "45eb83744d661281", "scanner": "scanner-primary", "fingerprint": "da6e375c1e064c89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bb2eb7687b11345", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/FreshnessTag.tsx:1"}, "properties": {"repobilityId": "722852dcfb34cb34", "scanner": "scanner-primary", "fingerprint": "7bb2eb7687b11345", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c3e135d948916ac", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/KillSwitchView.tsx:10"}, "properties": {"repobilityId": "067206a51b56483b", "scanner": "scanner-primary", "fingerprint": "9c3e135d948916ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cf150ebc83bf72f", "level": "none", "message": {"text": "Commented-code block (13 lines) in frontend/src/components/SymbolDetail.tsx:9"}, "properties": {"repobilityId": "6b5707e1b4cd525f", "scanner": "scanner-primary", "fingerprint": "3cf150ebc83bf72f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c72b3ff99129e8f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/SymbolCard.test.tsx:6"}, "properties": {"repobilityId": "2b1c00e7d1b348e1", "scanner": "scanner-primary", "fingerprint": "c72b3ff99129e8f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-033a45dc2ac75e4a", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/AgentHistorySidebar.tsx:78"}, "properties": {"repobilityId": "0006f26e6efe7ce9", "scanner": "scanner-primary", "fingerprint": "033a45dc2ac75e4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c88ecd77229a0b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/UserMenu.tsx:41"}, "properties": {"repobilityId": "f1e98610fde37954", "scanner": "scanner-primary", "fingerprint": "7c88ecd77229a0b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3407be8af21449d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/AutoTuneView.tsx:11"}, "properties": {"repobilityId": "ea1e30d7a0f63d40", "scanner": "scanner-primary", "fingerprint": "3407be8af21449d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cf63b7c2298f432", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/SymbolsGrid.tsx:4"}, "properties": {"repobilityId": "d2105b9374672129", "scanner": "scanner-primary", "fingerprint": "3cf63b7c2298f432", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7c3d08a2b3f29dc", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/ConfigPanel.tsx:1"}, "properties": {"repobilityId": "5168e298442d765a", "scanner": "scanner-primary", "fingerprint": "b7c3d08a2b3f29dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43fdabc4faccf3b0", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/PositionsView.tsx:5"}, "properties": {"repobilityId": "e24c55864f4c9aba", "scanner": "scanner-primary", "fingerprint": "43fdabc4faccf3b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6051aea71d9a75d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/LeftRail.tsx:1"}, "properties": {"repobilityId": "4fc3826db5263d54", "scanner": "scanner-primary", "fingerprint": "6051aea71d9a75d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-decaaad8c57dea21", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/atoms/ScanProgressBar.tsx:1"}, "properties": {"repobilityId": "37f9ef66718e105f", "scanner": "scanner-primary", "fingerprint": "decaaad8c57dea21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6777e66aa2c68e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/atoms/StatusPill.tsx:4"}, "properties": {"repobilityId": "b78087c555d1a086", "scanner": "scanner-primary", "fingerprint": "a6777e66aa2c68e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bff2776dbec0f99", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/valles/Copilot.test.tsx:1"}, "properties": {"repobilityId": "9a4bfcc01e540a44", "scanner": "scanner-primary", "fingerprint": "1bff2776dbec0f99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-709e3c50638868ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/valles/Copilot.tsx:3"}, "properties": {"repobilityId": "5615b534dbf15ca5", "scanner": "scanner-primary", "fingerprint": "709e3c50638868ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e04a06554fa37f94", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/helpers/auto-tune-copilot.ts:1"}, "properties": {"repobilityId": "2c4bff4a89057197", "scanner": "scanner-primary", "fingerprint": "e04a06554fa37f94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-328fa1cc09d0f118", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/helpers/kill-switch-copilot.ts:1"}, "properties": {"repobilityId": "331503db83231d9a", "scanner": "scanner-primary", "fingerprint": "328fa1cc09d0f118", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc8b98dd63e5bfd3", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/helpers/historial-copilot.ts:1"}, "properties": {"repobilityId": "a9881d418b2691fe", "scanner": "scanner-primary", "fingerprint": "fc8b98dd63e5bfd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd702d01351cb263", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/helpers/historial.ts:1"}, "properties": {"repobilityId": "a48cd50456d54ac3", "scanner": "scanner-primary", "fingerprint": "dd702d01351cb263", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd54e948d234b581", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/helpers/hierarchy.ts:1"}, "properties": {"repobilityId": "0376ad7c0a58bc57", "scanner": "scanner-primary", "fingerprint": "fd54e948d234b581", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2be91efe7658692", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/helpers/position-insight.ts:1"}, "properties": {"repobilityId": "51285213f622271d", "scanner": "scanner-primary", "fingerprint": "c2be91efe7658692", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-528ab5e4a7fcbb55", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/helpers/brief.ts:4"}, "properties": {"repobilityId": "91115fab94dd45e0", "scanner": "scanner-primary", "fingerprint": "528ab5e4a7fcbb55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82d54adfe5337c51", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/hooks/useScanCountdown.ts:1"}, "properties": {"repobilityId": "6570be94f997c37c", "scanner": "scanner-primary", "fingerprint": "82d54adfe5337c51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bd5b5299adc99ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/hooks/useLiveTicker.ts:9"}, "properties": {"repobilityId": "b3c49d2abc1e6765", "scanner": "scanner-primary", "fingerprint": "7bd5b5299adc99ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0002030273e13e3d", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/hooks/useAgentEnabled.ts:18"}, "properties": {"repobilityId": "3aceccf717252a34", "scanner": "scanner-primary", "fingerprint": "0002030273e13e3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cb33efe8cd6b7c2", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/conftest.py:22"}, "properties": {"repobilityId": "815a72cd3cc79077", "scanner": "scanner-primary", "fingerprint": "2cb33efe8cd6b7c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4d0c4ecadb49f42", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_backtest_smoke_cooldown.py:27"}, "properties": {"repobilityId": "2c15d95ec8bf1f51", "scanner": "scanner-primary", "fingerprint": "e4d0c4ecadb49f42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2987380912e79422", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_celda4_stat_arb.py:645"}, "properties": {"repobilityId": "80626fca24da967f", "scanner": "scanner-primary", "fingerprint": "2987380912e79422", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65b483bdfcd81de9", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_agent_models.py:121"}, "properties": {"repobilityId": "7f309e07d3fd5b05", "scanner": "scanner-primary", "fingerprint": "65b483bdfcd81de9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1435ff37d39cd552", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_check_position_stops_time_limit.py:296"}, "properties": {"repobilityId": "626f2f9ccfe98735", "scanner": "scanner-primary", "fingerprint": "1435ff37d39cd552", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-217d6e8472685d62", "level": "note", "message": {"text": "Legacy-named symbol `test_default_model_is_still_v2` in tests/test_backtest_costs_v3.py:202"}, "properties": {"repobilityId": "f95334060ba33bc5", "scanner": "scanner-primary", "fingerprint": "217d6e8472685d62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cfa98e925939d321", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_agent_loop.py:138"}, "properties": {"repobilityId": "640ddc0aeecd8125", "scanner": "scanner-primary", "fingerprint": "cfa98e925939d321", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-668a8e9016c25cad", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_plan_api.py:68"}, "properties": {"repobilityId": "a564d12cca3f71e6", "scanner": "scanner-primary", "fingerprint": "668a8e9016c25cad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81ae56dc7b685761", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_regime_retune_pre_holdout.py:580"}, "properties": {"repobilityId": "f75e49d71325a03e", "scanner": "scanner-primary", "fingerprint": "81ae56dc7b685761", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-405cb808575ac7f2", "level": "note", "message": {"text": "Legacy-named symbol `last_legacy` in tests/test_multi_tenant_b5_enforcement.py:367"}, "properties": {"repobilityId": "4c01279ba0e9ba6f", "scanner": "scanner-primary", "fingerprint": "405cb808575ac7f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aba33615d5481ec2", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/test_multi_tenant_b2_capital_tracker.py:197"}, "properties": {"repobilityId": "edb83e05b23a935c", "scanner": "scanner-primary", "fingerprint": "aba33615d5481ec2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1e34e4083637d3e", "level": "note", "message": {"text": "Legacy-named symbol `kill_switch_v2` in tests/test_strategy_kill_switch_v2_simulator.py:280"}, "properties": {"repobilityId": "9e8e956702e916c6", "scanner": "scanner-primary", "fingerprint": "f1e34e4083637d3e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3aed9bd00289febf", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/test_backtest_smoke_time_limit.py:124"}, "properties": {"repobilityId": "e1803ef4583a28d3", "scanner": "scanner-primary", "fingerprint": "3aed9bd00289febf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-425322d4b81ea1f0", "level": "note", "message": {"text": "Legacy-named symbol `test_migration_adds_columns_and_backfills_v2` in tests/test_trials_registry.py:283"}, "properties": {"repobilityId": "a1ef2f1cb5827940", "scanner": "scanner-primary", "fingerprint": "425322d4b81ea1f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f3ff9967863da3d0", "level": "note", "message": {"text": "Legacy-named symbol `test_global_mode_delegates_to_legacy` in tests/test_regime_per_symbol.py:204"}, "properties": {"repobilityId": "8a9aab8e5c6b3538", "scanner": "scanner-primary", "fingerprint": "f3ff9967863da3d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-60c4e2795dd1bed6", "level": "note", "message": {"text": "Legacy-named symbol `test_no_time_limit_in_config_byte_identical_to_legacy` in tests/test_backtest_time_limit.py:374"}, "properties": {"repobilityId": "0763524e6900862e", "scanner": "scanner-primary", "fingerprint": "60c4e2795dd1bed6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2bf2d2e7abef2787", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_backtest_time_limit.py:204"}, "properties": {"repobilityId": "8b44dbea86b57672", "scanner": "scanner-primary", "fingerprint": "2bf2d2e7abef2787", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-821bf538fe0db8ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_deploy_decouple.py:293"}, "properties": {"repobilityId": "3d3da038527cef30", "scanner": "scanner-primary", "fingerprint": "821bf538fe0db8ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-821db376c1d2a15e", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_scanner_sizing_cap.py:219"}, "properties": {"repobilityId": "7993335b8ac4c9f6", "scanner": "scanner-primary", "fingerprint": "821db376c1d2a15e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06208c2f60c3151a", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_live_edge_analysis.py:215"}, "properties": {"repobilityId": "caf1b66fc8d49749", "scanner": "scanner-primary", "fingerprint": "06208c2f60c3151a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40f4de240f38257f", "level": "note", "message": {"text": "Legacy-named symbol `kill_switch_v2` in tests/test_health_dashboard.py:393"}, "properties": {"repobilityId": "221e02711880b43a", "scanner": "scanner-primary", "fingerprint": "40f4de240f38257f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-883d09faa62cd6e3", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_health_dashboard.py:260"}, "properties": {"repobilityId": "a8086b35dbb7edcb", "scanner": "scanner-primary", "fingerprint": "883d09faa62cd6e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9ddc1a46b2725e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_scanner.py:1301"}, "properties": {"repobilityId": "bd5261259c582070", "scanner": "scanner-primary", "fingerprint": "b9ddc1a46b2725e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef112f8e927873c3", "level": "note", "message": {"text": "Legacy-named symbol `size_factor_v1` in tests/test_backtest_costs_v2.py:36"}, "properties": {"repobilityId": "9413c6fa7c5e39cf", "scanner": "scanner-primary", "fingerprint": "ef112f8e927873c3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3af94c8d111857d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_backtest_costs_v2.py:501"}, "properties": {"repobilityId": "3b13ee44bc152aed", "scanner": "scanner-primary", "fingerprint": "3af94c8d111857d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2592caf01edcc607", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/_fakes.py:68"}, "properties": {"repobilityId": "67caffdc18d34b7e", "scanner": "scanner-primary", "fingerprint": "2592caf01edcc607", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-043ebcbb85a36111", "level": "note", "message": {"text": "Legacy-named symbol `payload_v2` in tests/test_agent_proposals.py:151"}, "properties": {"repobilityId": "2f1732c438b057ff", "scanner": "scanner-primary", "fingerprint": "043ebcbb85a36111", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4360fbd1e7d39cac", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_agent_proposals.py:240"}, "properties": {"repobilityId": "d25e35356081edfb", "scanner": "scanner-primary", "fingerprint": "4360fbd1e7d39cac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60180e8d71717904", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_canonical_positions_schema.py:249"}, "properties": {"repobilityId": "cee9500fe5063019", "scanner": "scanner-primary", "fingerprint": "60180e8d71717904", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fd962903151ebc0", "level": "note", "message": {"text": "Legacy-named symbol `test_refresh_with_valid_token_rotates_and_revokes_old` in tests/test_auth.py:200"}, "properties": {"repobilityId": "8c2ca69bb349142e", "scanner": "scanner-primary", "fingerprint": "9fd962903151ebc0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6dffbbb116d9e974", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_provider_deepseek.py:256"}, "properties": {"repobilityId": "a26093d0e6f020f1", "scanner": "scanner-primary", "fingerprint": "6dffbbb116d9e974", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a41466f41e0101e", "level": "note", "message": {"text": "Legacy-named symbol `test_apply_creates_backup` in tests/test_auto_tune.py:123"}, "properties": {"repobilityId": "8914ebccbf90a26c", "scanner": "scanner-primary", "fingerprint": "0a41466f41e0101e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-03509869789e120f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_api_kill_switch_parity.py:82"}, "properties": {"repobilityId": "76cca50a80589a06", "scanner": "scanner-primary", "fingerprint": "03509869789e120f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72b13327aee7428a", "level": "note", "message": {"text": "Legacy-named symbol `run_optimization_v2` in tests/test_strategy_kill_switch_v2_optimizer.py:1"}, "properties": {"repobilityId": "c98921ad5bfc8340", "scanner": "scanner-primary", "fingerprint": "72b13327aee7428a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f4becf559709ab5d", "level": "note", "message": {"text": "Legacy-named symbol `test_regime_default_mode_matches_legacy` in tests/test_snapshot_regression.py:30"}, "properties": {"repobilityId": "f8038551608bd802", "scanner": "scanner-primary", "fingerprint": "f4becf559709ab5d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0124bbc30e717b0e", "level": "note", "message": {"text": "Legacy-named symbol `test_backtest_costs_v2` in tests/test_backtest_costs.py:48"}, "properties": {"repobilityId": "2388e7555e720f1d", "scanner": "scanner-primary", "fingerprint": "0124bbc30e717b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-92b20917558064d3", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_agent_health_check.py:114"}, "properties": {"repobilityId": "248834df779423dd", "scanner": "scanner-primary", "fingerprint": "92b20917558064d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6512f7807ecc0d69", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_falsify_cost_bound.py:36"}, "properties": {"repobilityId": "ec3f3adfe389926d", "scanner": "scanner-primary", "fingerprint": "6512f7807ecc0d69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54313fa3ad4200e6", "level": "note", "message": {"text": "Legacy-named symbol `state_v1` in tests/test_observability.py:180"}, "properties": {"repobilityId": "343a1ee126d0f056", "scanner": "scanner-primary", "fingerprint": "54313fa3ad4200e6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c32ff2878e75a3c6", "level": "note", "message": {"text": "Legacy-named symbol `run_optimization_v2` in tests/test_strategy_kill_switch_v2_calibrator.py:686"}, "properties": {"repobilityId": "2c3943c2c3ab0db6", "scanner": "scanner-primary", "fingerprint": "c32ff2878e75a3c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-78e5f92e880ebf1a", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/test_holdout_isolation.py:71"}, "properties": {"repobilityId": "bd8b4f36d539b139", "scanner": "scanner-primary", "fingerprint": "78e5f92e880ebf1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-039b5a1a5ab4d843", "level": "note", "message": {"text": "Legacy-named symbol `kill_switch_v2` in tests/test_strategy_kill_switch_v2.py:1"}, "properties": {"repobilityId": "6af43cf355e8dc72", "scanner": "scanner-primary", "fingerprint": "039b5a1a5ab4d843", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1cbddf172e2cda75", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_cost_diagnosis_recompute.py:6"}, "properties": {"repobilityId": "80c1139e2a3f795c", "scanner": "scanner-primary", "fingerprint": "1cbddf172e2cda75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26a0934aceb4c81e", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_levels_api.py:71"}, "properties": {"repobilityId": "3b625b7d8e8a1733", "scanner": "scanner-primary", "fingerprint": "26a0934aceb4c81e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8102276d21b78dd", "level": "none", "message": {"text": "Commented-code block (10 lines) in tests/api/test_check_position_stops_atomicity.py:24"}, "properties": {"repobilityId": "cbff4116301afc42", "scanner": "scanner-primary", "fingerprint": "e8102276d21b78dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5414ad4298361d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/_fixtures/scanner_frozen.py:98"}, "properties": {"repobilityId": "ace78565617351b7", "scanner": "scanner-primary", "fingerprint": "b5414ad4298361d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-529d3503cacbfad7", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/db/test_d_cluster_grouped_transaction.py:89"}, "properties": {"repobilityId": "834945b733f1e199", "scanner": "scanner-primary", "fingerprint": "529d3503cacbfad7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00301621137ed0e6", "level": "none", "message": {"text": "Commented-code block (6 lines) in auth/middleware.py:62"}, "properties": {"repobilityId": "9133a48338dc2ccb", "scanner": "scanner-primary", "fingerprint": "00301621137ed0e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae2b51e0200d1e51", "level": "none", "message": {"text": "Commented-code block (11 lines) in operators/precheck.py:123"}, "properties": {"repobilityId": "254ea5ddf59b8e42", "scanner": "scanner-primary", "fingerprint": "ae2b51e0200d1e51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6dd402a678ded6c", "level": "none", "message": {"text": "Commented-code block (10 lines) in operators/position_closure.py:97"}, "properties": {"repobilityId": "d55032a8127ce3a7", "scanner": "scanner-primary", "fingerprint": "a6dd402a678ded6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ab23deb892306c7", "level": "note", "message": {"text": "Legacy-named symbol `run_optimization_v2` in api/kill_switch.py:37"}, "properties": {"repobilityId": "7ef920bcfa7423a3", "scanner": "scanner-primary", "fingerprint": "5ab23deb892306c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0ed7a082e1d1ee3e", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/kill_switch.py:184"}, "properties": {"repobilityId": "6213e32b1bc81f83", "scanner": "scanner-primary", "fingerprint": "0ed7a082e1d1ee3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ded3550a22094d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/positions_birth.py:43"}, "properties": {"repobilityId": "63d268641d87e38f", "scanner": "scanner-primary", "fingerprint": "0ded3550a22094d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-790c0bd637d8e4df", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/auth.py:91"}, "properties": {"repobilityId": "1efa322e32f74084", "scanner": "scanner-primary", "fingerprint": "790c0bd637d8e4df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80dfc9992224036a", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/user_preferences.py:29"}, "properties": {"repobilityId": "fc884e88f4bce87d", "scanner": "scanner-primary", "fingerprint": "80dfc9992224036a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-148433914448fb80", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/telegram.py:103"}, "properties": {"repobilityId": "1bb7a1841b4110a6", "scanner": "scanner-primary", "fingerprint": "148433914448fb80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f1dc1d63027b5ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/positions.py:157"}, "properties": {"repobilityId": "5d2e0221247b994c", "scanner": "scanner-primary", "fingerprint": "2f1dc1d63027b5ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2632991ea80e3fce", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/security/url_validation.py:80"}, "properties": {"repobilityId": "aab0e5777f5371fa", "scanner": "scanner-primary", "fingerprint": "2632991ea80e3fce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82cf163667100391", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/agent/quotas.py:158"}, "properties": {"repobilityId": "114ddd5ce02d55bf", "scanner": "scanner-primary", "fingerprint": "82cf163667100391", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d659d3704436fa1", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/agent/history.py:204"}, "properties": {"repobilityId": "483d630ec0279939", "scanner": "scanner-primary", "fingerprint": "3d659d3704436fa1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71d51d1cb3dc7c3a", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/agent/router.py:63"}, "properties": {"repobilityId": "980e9ffa21a4b1d5", "scanner": "scanner-primary", "fingerprint": "71d51d1cb3dc7c3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8e2ce91b420e8b0", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/agent/proposals.py:87"}, "properties": {"repobilityId": "ff8cda39b6c7c82e", "scanner": "scanner-primary", "fingerprint": "e8e2ce91b420e8b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c1d385bdf515b5d", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/agent/streaming.py:40"}, "properties": {"repobilityId": "00ec3a39c2e8e279", "scanner": "scanner-primary", "fingerprint": "0c1d385bdf515b5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00276814504329d1", "level": "none", "message": {"text": "Commented-code block (13 lines) in api/agent/models.py:37"}, "properties": {"repobilityId": "83d2734fb0b3b1b1", "scanner": "scanner-primary", "fingerprint": "00276814504329d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb36ad6ccf8d8638", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/agent/loop.py:260"}, "properties": {"repobilityId": "44cd7bf94d264ea4", "scanner": "scanner-primary", "fingerprint": "fb36ad6ccf8d8638", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-721fd20304e82cb2", "level": "none", "message": {"text": "Commented-code block (9 lines) in api/agent/audit.py:195"}, "properties": {"repobilityId": "72fa244716fd165d", "scanner": "scanner-primary", "fingerprint": "721fd20304e82cb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90450f5df7463d6d", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/agent/safety.py:268"}, "properties": {"repobilityId": "c51120bc1f23082b", "scanner": "scanner-primary", "fingerprint": "90450f5df7463d6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50b1eb810d86deb1", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/agent/providers/deepseek_adapter.py:61"}, "properties": {"repobilityId": "a3362b65508b9e70", "scanner": "scanner-primary", "fingerprint": "50b1eb810d86deb1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8efc214c60c4852", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/agent/providers/registry.py:83"}, "properties": {"repobilityId": "c21658de559f7545", "scanner": "scanner-primary", "fingerprint": "f8efc214c60c4852", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c924ccd3628aafc", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/agent/providers/base.py:30"}, "properties": {"repobilityId": "8fb486b6fe2d578d", "scanner": "scanner-primary", "fingerprint": "6c924ccd3628aafc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-800d73ab086c37cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/agent/tools/handlers.py:107"}, "properties": {"repobilityId": "3863b0271c38cc9b", "scanner": "scanner-primary", "fingerprint": "800d73ab086c37cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8973a0cd302b0fdc", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/agent_health_check.py:388"}, "properties": {"repobilityId": "175e4e89f8086a87", "scanner": "scanner-primary", "fingerprint": "8973a0cd302b0fdc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37633674cfbd90ce", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/issue_checkbox_check.py:45"}, "properties": {"repobilityId": "385f7cc85e141d0d", "scanner": "scanner-primary", "fingerprint": "37633674cfbd90ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-636c802232dc3c5a", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/a02_honesty_diff.py:105"}, "properties": {"repobilityId": "fcd63ef0347b74ae", "scanner": "scanner-primary", "fingerprint": "636c802232dc3c5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf18f40c718f550c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/lock_holdout.py:57"}, "properties": {"repobilityId": "ff47af52385f2227", "scanner": "scanner-primary", "fingerprint": "bf18f40c718f550c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14e9571709b457f0", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/gate_regime_modes.py:77"}, "properties": {"repobilityId": "51a7751309b06da3", "scanner": "scanner-primary", "fingerprint": "14e9571709b457f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7a205525e607c49", "level": "none", "message": {"text": "Commented-code block (5 lines) in notifier/events.py:44"}, "properties": {"repobilityId": "a57b13a46dc6869d", "scanner": "scanner-primary", "fingerprint": "e7a205525e607c49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-479cce1023bc42ea", "level": "none", "message": {"text": "Commented-code block (7 lines) in scanner/runtime.py:72"}, "properties": {"repobilityId": "9db3891403e92d38", "scanner": "scanner-primary", "fingerprint": "479cce1023bc42ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e98027f84acc6f3", "level": "none", "message": {"text": "Commented-code block (10 lines) in tools/retune_pre_holdout.py:76"}, "properties": {"repobilityId": "0ad7f228dde2f90f", "scanner": "scanner-primary", "fingerprint": "7e98027f84acc6f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d0e86d0d1d2de73", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/regime_allocation_sweep.py:114"}, "properties": {"repobilityId": "d82b0d3e666bfd86", "scanner": "scanner-primary", "fingerprint": "1d0e86d0d1d2de73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b23a34a2304c6484", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/r1_signal_exit_sweep.py:314"}, "properties": {"repobilityId": "0a0991da7c8e544c", "scanner": "scanner-primary", "fingerprint": "b23a34a2304c6484", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef479fcb76097f85", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/r3_trend_pullback_sweep.py:406"}, "properties": {"repobilityId": "7cc49a201af019e8", "scanner": "scanner-primary", "fingerprint": "ef479fcb76097f85", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06ba4cfca270fd2a", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/sync_binance_spot.py:94"}, "properties": {"repobilityId": "efc80409d8913431", "scanner": "scanner-primary", "fingerprint": "06ba4cfca270fd2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-694dc88cdc333715", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/regime_retune_pre_holdout.py:660"}, "properties": {"repobilityId": "252ab45ceb7c0fff", "scanner": "scanner-primary", "fingerprint": "694dc88cdc333715", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b4b8bd0eb4743e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/regime_allocation_verdict.py:109"}, "properties": {"repobilityId": "133556a89e2f5017", "scanner": "scanner-primary", "fingerprint": "7b4b8bd0eb4743e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36a0c2908f0725d7", "level": "note", "message": {"text": "Stub function `record_close` (body is just `pass`/`return`) \u2014 tools/ks_stress_replay/overlays.py:23"}, "properties": {"repobilityId": "b78f6c6f1f9e5817", "scanner": "scanner-primary", "fingerprint": "36a0c2908f0725d7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-5f1fb7c827c4ed16", "level": "none", "message": {"text": "Commented-code block (6 lines) in tools/tenant_realization/report.py:34"}, "properties": {"repobilityId": "82863b01cbcf81d2", "scanner": "scanner-primary", "fingerprint": "5f1fb7c827c4ed16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23c6df61e78fd29f", "level": "none", "message": {"text": "Commented-code block (6 lines) in db/hypotheses.py:343"}, "properties": {"repobilityId": "df6d7fce29b2ca1e", "scanner": "scanner-primary", "fingerprint": "23c6df61e78fd29f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2375156548224f2", "level": "none", "message": {"text": "Commented-code block (6 lines) in db/schema.py:143"}, "properties": {"repobilityId": "fcbf0b1e208c89ce", "scanner": "scanner-primary", "fingerprint": "c2375156548224f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4dad6f3106cc83a", "level": "none", "message": {"text": "Commented-code block (5 lines) in db/positions_schema.py:119"}, "properties": {"repobilityId": "68c6c933ee769d36", "scanner": "scanner-primary", "fingerprint": "f4dad6f3106cc83a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7514059a072523c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in db/signals.py:19"}, "properties": {"repobilityId": "15d79f5ffe6639cf", "scanner": "scanner-primary", "fingerprint": "7514059a072523c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9dfa2e980bff9ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in db/auth_schema.py:103"}, "properties": {"repobilityId": "488c43ca1429094d", "scanner": "scanner-primary", "fingerprint": "f9dfa2e980bff9ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c3467241e5ad84c", "level": "none", "message": {"text": "Commented-code block (8 lines) in db/connection.py:88"}, "properties": {"repobilityId": "77124bac13fa1f69", "scanner": "scanner-primary", "fingerprint": "3c3467241e5ad84c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fa5af25316da646", "level": "note", "message": {"text": "16 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "e0919a3f6a45e8c2", "scanner": "scanner-primary", "fingerprint": "5fa5af25316da646", "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": "d275dca5e597d039", "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": "e1e299443e7c0d32", "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": "3c88e2c033594e07", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "7551fdcdce1e0385", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "952434f13a8c3848", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ace672f95ade2b13", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "a557128d0487c9e9", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "2e4e9aeb675bef8f", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "556341348c3f4425", "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": "08cc75aea2938496", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "84985f416ca790ee", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "494cb2425ff253c5", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "73c38b2f040aefbe", "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": "3f568dd92dcb23cc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-8b55acb113306b18", "level": "warning", "message": {"text": "Frontend route `/setup` has no Link/navigate to it \u2014 frontend/src/main.tsx"}, "properties": {"repobilityId": "df03476554190be7", "scanner": "scanner-primary", "fingerprint": "8b55acb113306b18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-505f2d783a177827", "level": "warning", "message": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 frontend/src/main.tsx"}, "properties": {"repobilityId": "d43b7e0b45ccb7a3", "scanner": "scanner-primary", "fingerprint": "505f2d783a177827", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1f2421ff555cb954", "level": "error", "message": {"text": "FastAPI POST `refresh` without auth dependency \u2014 api/auth.py:420"}, "properties": {"repobilityId": "71b61e115ceb60de", "scanner": "scanner-primary", "fingerprint": "1f2421ff555cb954", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth.py"}, "region": {"startLine": 420}}}]}, {"ruleId": "scanner-7bb1f62a1bfb831c", "level": "error", "message": {"text": "FastAPI POST `setup_post` without auth dependency \u2014 api/setup.py:111"}, "properties": {"repobilityId": "07a6b67b75391f0a", "scanner": "scanner-primary", "fingerprint": "7bb1f62a1bfb831c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/setup.py"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-fe44465a67fb04fc", "level": "error", "message": {"text": "FastAPI DELETE `delete_conversation` without auth dependency \u2014 api/agent/history.py:397"}, "properties": {"repobilityId": "c80f6ce364fae1b8", "scanner": "scanner-primary", "fingerprint": "fe44465a67fb04fc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/agent/history.py"}, "region": {"startLine": 397}}}]}, {"ruleId": "scanner-ebb0b490b924abc0", "level": "error", "message": {"text": "FastAPI POST `toggle_pin` without auth dependency \u2014 api/agent/history.py:444"}, "properties": {"repobilityId": "6ac2d6ab44a5b356", "scanner": "scanner-primary", "fingerprint": "ebb0b490b924abc0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/agent/history.py"}, "region": {"startLine": 444}}}]}, {"ruleId": "scanner-9802769697923f85", "level": "error", "message": {"text": "FastAPI POST `post_agent_turn` without auth dependency \u2014 api/agent/router.py:124"}, "properties": {"repobilityId": "36d902ee8d86266f", "scanner": "scanner-primary", "fingerprint": "9802769697923f85", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/agent/router.py"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-6709af28f4565a59", "level": "error", "message": {"text": "Dangling fetch: POST /scan${query} (frontend/src/api.ts:175)"}, "properties": {"repobilityId": "3d0461f881345f4d", "scanner": "scanner-primary", "fingerprint": "6709af28f4565a59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a828e51db39dfdbc", "level": "error", "message": {"text": "Dangling fetch: GET /positions?status=${status} (frontend/src/api.ts:216)"}, "properties": {"repobilityId": "455651068ee4b060", "scanner": "scanner-primary", "fingerprint": "a828e51db39dfdbc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2f3ff68afefb0d98", "level": "error", "message": {"text": "Dangling fetch: POST /positions (frontend/src/api.ts:221)"}, "properties": {"repobilityId": "58f07b86413c143f", "scanner": "scanner-primary", "fingerprint": "2f3ff68afefb0d98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e9dfd455ffb6ab90", "level": "error", "message": {"text": "Dangling fetch: PUT /positions/${id} (frontend/src/api.ts:229)"}, "properties": {"repobilityId": "7fed77fe78e95b87", "scanner": "scanner-primary", "fingerprint": "e9dfd455ffb6ab90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b276d10f91a08dce", "level": "error", "message": {"text": "Dangling fetch: POST /positions/${id}/close (frontend/src/api.ts:237)"}, "properties": {"repobilityId": "d0be1cbac4ae517b", "scanner": "scanner-primary", "fingerprint": "b276d10f91a08dce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b62ba8ed67d342b5", "level": "error", "message": {"text": "Dangling fetch: GET /tune/latest (frontend/src/api.ts:266)"}, "properties": {"repobilityId": "752b945df2c56097", "scanner": "scanner-primary", "fingerprint": "b62ba8ed67d342b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-16aa206fbbe66eb3", "level": "error", "message": {"text": "Dangling fetch: POST /tune/apply (frontend/src/api.ts:271)"}, "properties": {"repobilityId": "ebec560ee558394a", "scanner": "scanner-primary", "fingerprint": "16aa206fbbe66eb3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-570a68c23baa5410", "level": "error", "message": {"text": "Dangling fetch: POST /tune/reject (frontend/src/api.ts:278)"}, "properties": {"repobilityId": "c18d242513fd66ba", "scanner": "scanner-primary", "fingerprint": "570a68c23baa5410", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d8ae740c1334d16a", "level": "error", "message": {"text": "Dangling fetch: POST /notifications/${id}/read (frontend/src/api.ts:304)"}, "properties": {"repobilityId": "41437bc0c74be336", "scanner": "scanner-primary", "fingerprint": "d8ae740c1334d16a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f4c56f6b61ccd826", "level": "error", "message": {"text": "Dangling fetch: POST /notifications/read-all (frontend/src/api.ts:311)"}, "properties": {"repobilityId": "e75518a8a8059603", "scanner": "scanner-primary", "fingerprint": "f4c56f6b61ccd826", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a268bd46a5485e27", "level": "error", "message": {"text": "Dangling fetch: GET /capital (frontend/src/api.ts:385)"}, "properties": {"repobilityId": "1ab9606d072ca728", "scanner": "scanner-primary", "fingerprint": "a268bd46a5485e27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f23e902d5748cc6a", "level": "error", "message": {"text": "Dangling fetch: PUT /capital (frontend/src/api.ts:389)"}, "properties": {"repobilityId": "edfdc13225b78be4", "scanner": "scanner-primary", "fingerprint": "f23e902d5748cc6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a54862412f874dd3", "level": "error", "message": {"text": "Dangling fetch: GET /preferences (frontend/src/api.ts:396)"}, "properties": {"repobilityId": "b727c7e5b374d6ad", "scanner": "scanner-primary", "fingerprint": "a54862412f874dd3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6fbdd7406a3da958", "level": "error", "message": {"text": "Dangling fetch: PUT /preferences (frontend/src/api.ts:402)"}, "properties": {"repobilityId": "e8348c97d86d5dcb", "scanner": "scanner-primary", "fingerprint": "6fbdd7406a3da958", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e4d28cf2e0a2dad6", "level": "error", "message": {"text": "Dangling fetch: POST /preferences/test (frontend/src/api.ts:409)"}, "properties": {"repobilityId": "3c066443fdb451d8", "scanner": "scanner-primary", "fingerprint": "e4d28cf2e0a2dad6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a17f0ec46f9863a7", "level": "error", "message": {"text": "Dangling fetch: GET /dossier/${symbol}${q} (frontend/src/api.ts:422)"}, "properties": {"repobilityId": "7293969b9a513eb1", "scanner": "scanner-primary", "fingerprint": "a17f0ec46f9863a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "933601da4ac33b8a", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-195fb029bb695346", "level": "note", "message": {"text": "Unused endpoint: POST /scan"}, "properties": {"repobilityId": "fed3f829d1a64a1f", "scanner": "scanner-primary", "fingerprint": "195fb029bb695346", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-989172f6655e6486", "level": "note", "message": {"text": "Unused endpoint: POST /{notif_id}/read"}, "properties": {"repobilityId": "e72080f789adf31a", "scanner": "scanner-primary", "fingerprint": "989172f6655e6486", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f8d576f6bf0f5660", "level": "note", "message": {"text": "Unused endpoint: POST /read-all"}, "properties": {"repobilityId": "2ab3091a86c1a500", "scanner": "scanner-primary", "fingerprint": "f8d576f6bf0f5660", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-703613f6734c9c76", "level": "note", "message": {"text": "Unused endpoint: POST /kill_switch/recalibrate"}, "properties": {"repobilityId": "2ff074644b865918", "scanner": "scanner-primary", "fingerprint": "703613f6734c9c76", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd5998a422f7f77a", "level": "note", "message": {"text": "Unused endpoint: GET /kill_switch/recommendations"}, "properties": {"repobilityId": "85f8f8a3737d4147", "scanner": "scanner-primary", "fingerprint": "dd5998a422f7f77a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64072010a7be8023", "level": "note", "message": {"text": "Unused endpoint: POST /kill_switch/recommendations/{rec_id}/apply"}, "properties": {"repobilityId": "2fe9511e375da1f1", "scanner": "scanner-primary", "fingerprint": "64072010a7be8023", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-44c7999bdc65b48d", "level": "note", "message": {"text": "Unused endpoint: POST /kill_switch/recommendations/{rec_id}/ignore"}, "properties": {"repobilityId": "46dfe54dd6a7d82f", "scanner": "scanner-primary", "fingerprint": "44c7999bdc65b48d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c17ff0be3c7cc101", "level": "note", "message": {"text": "Unused endpoint: GET /kill_switch/decisions"}, "properties": {"repobilityId": "7217ddf468f7224a", "scanner": "scanner-primary", "fingerprint": "c17ff0be3c7cc101", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9a477f980e11d06", "level": "note", "message": {"text": "Unused endpoint: GET /kill_switch/current_state"}, "properties": {"repobilityId": "07c20265f432bd7f", "scanner": "scanner-primary", "fingerprint": "c9a477f980e11d06", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-37157900d71c21d3", "level": "note", "message": {"text": "Unused endpoint: GET /latest"}, "properties": {"repobilityId": "9afc91a6103bc14f", "scanner": "scanner-primary", "fingerprint": "37157900d71c21d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a88e32ba95dda7c", "level": "note", "message": {"text": "Unused endpoint: POST /apply"}, "properties": {"repobilityId": "1269c96c8ae3bb49", "scanner": "scanner-primary", "fingerprint": "9a88e32ba95dda7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1c1da96ca439fd61", "level": "note", "message": {"text": "Unused endpoint: POST /reject"}, "properties": {"repobilityId": "f9a38c6f4c959077", "scanner": "scanner-primary", "fingerprint": "1c1da96ca439fd61", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "d6cf27488f0d2b43", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ce17d6b092a81ca", "level": "note", "message": {"text": "Unused endpoint: POST /refresh"}, "properties": {"repobilityId": "3a47c4f0a5a10c72", "scanner": "scanner-primary", "fingerprint": "7ce17d6b092a81ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99fc36db98c134ce", "level": "note", "message": {"text": "Unused endpoint: POST /logout"}, "properties": {"repobilityId": "62fdec1e8daa8b84", "scanner": "scanner-primary", "fingerprint": "99fc36db98c134ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "c83416f1f703ecde", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4fe9bb486644f008", "level": "note", "message": {"text": "Unused endpoint: POST /change-password"}, "properties": {"repobilityId": "f8984a120f36f085", "scanner": "scanner-primary", "fingerprint": "4fe9bb486644f008", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67d28fa8cd6bb12f", "level": "note", "message": {"text": "Unused endpoint: PUT /"}, "properties": {"repobilityId": "38b256b33172fbdc", "scanner": "scanner-primary", "fingerprint": "67d28fa8cd6bb12f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-731c57f59aaca553", "level": "note", "message": {"text": "Unused endpoint: POST /test"}, "properties": {"repobilityId": "a96e6b62fa12a72e", "scanner": "scanner-primary", "fingerprint": "731c57f59aaca553", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d53616261c5524c", "level": "note", "message": {"text": "Unused endpoint: GET /dossier/{symbol}"}, "properties": {"repobilityId": "aff1c2b172133ba5", "scanner": "scanner-primary", "fingerprint": "9d53616261c5524c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b57042c928cb086", "level": "note", "message": {"text": "Unused endpoint: GET /plan/derive/{symbol}"}, "properties": {"repobilityId": "59743d5882317a9a", "scanner": "scanner-primary", "fingerprint": "9b57042c928cb086", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6cdcfeaf65c0bca4", "level": "note", "message": {"text": "Unused endpoint: POST /plan/confirm"}, "properties": {"repobilityId": "4197bb94e539263e", "scanner": "scanner-primary", "fingerprint": "6cdcfeaf65c0bca4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2351f862d79ab5eb", "level": "note", "message": {"text": "Unused endpoint: GET /plan/{symbol}"}, "properties": {"repobilityId": "1946c373cf1f5000", "scanner": "scanner-primary", "fingerprint": "2351f862d79ab5eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d86afd7dd2beb431", "level": "note", "message": {"text": "Unused endpoint: GET /setup"}, "properties": {"repobilityId": "2c2626ee71e7fbcd", "scanner": "scanner-primary", "fingerprint": "d86afd7dd2beb431", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb757797f6bd3444", "level": "note", "message": {"text": "Unused endpoint: POST /setup"}, "properties": {"repobilityId": "a7798b110fb8d3fe", "scanner": "scanner-primary", "fingerprint": "eb757797f6bd3444", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c4d06b87ea984dc", "level": "note", "message": {"text": "Unused endpoint: GET /performance"}, "properties": {"repobilityId": "9e368fb3edfce5ef", "scanner": "scanner-primary", "fingerprint": "4c4d06b87ea984dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc9387087d9c906e", "level": "note", "message": {"text": "Unused endpoint: GET /latest/message"}, "properties": {"repobilityId": "2b952e3bb19255f9", "scanner": "scanner-primary", "fingerprint": "dc9387087d9c906e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-acfc279b767e6f3c", "level": "note", "message": {"text": "Unused endpoint: GET /{scan_id}"}, "properties": {"repobilityId": "41802fba8d748f40", "scanner": "scanner-primary", "fingerprint": "acfc279b767e6f3c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "5347236283d8b2ca", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a2565bb90c85ae6", "level": "note", "message": {"text": "Unused endpoint: PUT /{pos_id}"}, "properties": {"repobilityId": "0b49e70ddc19b595", "scanner": "scanner-primary", "fingerprint": "3a2565bb90c85ae6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7e0d47e620eaac64", "level": "note", "message": {"text": "Unused endpoint: POST /{pos_id}/close"}, "properties": {"repobilityId": "311d7fc7fda939e1", "scanner": "scanner-primary", "fingerprint": "7e0d47e620eaac64", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e33151bdd9d61ad8", "level": "note", "message": {"text": "Unused endpoint: DELETE /{pos_id}"}, "properties": {"repobilityId": "dfe8b19c3184bd8e", "scanner": "scanner-primary", "fingerprint": "e33151bdd9d61ad8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ba04011505f6fb06", "level": "note", "message": {"text": "Unused endpoint: GET /agent/conversations"}, "properties": {"repobilityId": "15bcb457f9d5f6d8", "scanner": "scanner-primary", "fingerprint": "ba04011505f6fb06", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-da463250e77def36", "level": "note", "message": {"text": "Unused endpoint: GET /agent/conversations/{conversation_id}/messages"}, "properties": {"repobilityId": "0f7e1628c114d2a6", "scanner": "scanner-primary", "fingerprint": "da463250e77def36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f8e90a51e5a396f0", "level": "note", "message": {"text": "Unused endpoint: DELETE /agent/conversations/{conversation_id}"}, "properties": {"repobilityId": "68f49158c7f9c768", "scanner": "scanner-primary", "fingerprint": "f8e90a51e5a396f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8440bd2291a531dd", "level": "note", "message": {"text": "Unused endpoint: POST /agent/conversations/{conversation_id}/pin"}, "properties": {"repobilityId": "e2f9818905620e97", "scanner": "scanner-primary", "fingerprint": "8440bd2291a531dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e163b09052598fab", "level": "note", "message": {"text": "Unused endpoint: POST /agent/conversations/{conversation_id}/turn"}, "properties": {"repobilityId": "8b418d4d1385468a", "scanner": "scanner-primary", "fingerprint": "e163b09052598fab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-79db3dd5cde7113b", "level": "note", "message": {"text": "Unused endpoint: POST /agent/proposals/{proposal_id}/confirm"}, "properties": {"repobilityId": "e0d9773ffd9b9f98", "scanner": "scanner-primary", "fingerprint": "79db3dd5cde7113b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8dc4bac26611a44c", "level": "note", "message": {"text": "Unused endpoint: GET /agent/metrics"}, "properties": {"repobilityId": "840b4989366c4511", "scanner": "scanner-primary", "fingerprint": "8dc4bac26611a44c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}