{"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-e5dd4b91d1e67df4", "name": "Possibly dead Python function: decorator", "shortDescription": {"text": "Possibly dead Python function: decorator"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7cc64bcafafc5ce", "name": "Possibly dead Python function: tail_errors", "shortDescription": {"text": "Possibly dead Python function: tail_errors"}, "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-18de0a65611165b4", "name": "Possibly dead Python function: increment_holding_days", "shortDescription": {"text": "Possibly dead Python function: increment_holding_days"}, "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-f1a68ea9d0d35d20", "name": "Possibly dead Python function: close_position_qty", "shortDescription": {"text": "Possibly dead Python function: close_position_qty"}, "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-c9a67454d6dd8bb3", "name": "Possibly dead Python function: force_close_all", "shortDescription": {"text": "Possibly dead Python function: force_close_all"}, "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-16fc6765d0bffea0", "name": "Possibly dead Python function: run_kr_wait60_recheck", "shortDescription": {"text": "Possibly dead Python function: run_kr_wait60_recheck"}, "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-0cffac63bf11e45b", "name": "Possibly dead Python function: run_housekeeping", "shortDescription": {"text": "Possibly dead Python function: run_housekeeping"}, "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-671eff9f6672520d", "name": "Possibly dead Python function: scenario_1_holiday", "shortDescription": {"text": "Possibly dead Python function: scenario_1_holiday"}, "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-d6e70367dc7e6334", "name": "Possibly dead Python function: scenario_2_reuse", "shortDescription": {"text": "Possibly dead Python function: scenario_2_reuse"}, "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-9749d6a241ded82f", "name": "Possibly dead Python function: scenario_3_yf_fallback", "shortDescription": {"text": "Possibly dead Python function: scenario_3_yf_fallback"}, "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-9db0e3464995cc9d", "name": "Possibly dead Python function: scenario_4_risk", "shortDescription": {"text": "Possibly dead Python function: scenario_4_risk"}, "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-20ef80f1d3afec55", "name": "Possibly dead Python function: scenario_5_consensus", "shortDescription": {"text": "Possibly dead Python function: scenario_5_consensus"}, "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-0197178b58c9064a", "name": "Possibly dead Python function: scenario_6_dashboard", "shortDescription": {"text": "Possibly dead Python function: scenario_6_dashboard"}, "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-c044063e645f1be1", "name": "Possibly dead Python function: scenario_7_biz_days", "shortDescription": {"text": "Possibly dead Python function: scenario_7_biz_days"}, "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-7a88b8e1a25883e2", "name": "Possibly dead Python function: scenario_8_strategy", "shortDescription": {"text": "Possibly dead Python function: scenario_8_strategy"}, "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-8d4bd5913c3b4000", "name": "Possibly dead Python function: scenario_9_credits", "shortDescription": {"text": "Possibly dead Python function: scenario_9_credits"}, "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-90095adeefe48a24", "name": "Possibly dead Python function: emergency_alert", "shortDescription": {"text": "Possibly dead Python function: emergency_alert"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abc7089c28299bbb", "name": "Possibly dead Python function: signal_alert", "shortDescription": {"text": "Possibly dead Python function: signal_alert"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-369f57b84c7d2ed1", "name": "Possibly dead Python function: calc_budget_A", "shortDescription": {"text": "Possibly dead Python function: calc_budget_A"}, "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-fd3273192bc0737a", "name": "Possibly dead Python function: calc_budget_B", "shortDescription": {"text": "Possibly dead Python function: calc_budget_B"}, "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-be11ab1cf7d93e36", "name": "Possibly dead Python function: calc_budget_C", "shortDescription": {"text": "Possibly dead Python function: calc_budget_C"}, "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-f082be098157fdca", "name": "Possibly dead Python function: make_params_C", "shortDescription": {"text": "Possibly dead Python function: make_params_C"}, "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-6f032ab18cf91a74", "name": "Possibly dead Python function: make_params_D", "shortDescription": {"text": "Possibly dead Python function: make_params_D"}, "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-8b0bf91fdfbce20c", "name": "Possibly dead Python function: mr_signal_flex", "shortDescription": {"text": "Possibly dead Python function: mr_signal_flex"}, "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-7d15488506d48b75", "name": "Possibly dead Python function: compute", "shortDescription": {"text": "Possibly dead Python function: compute"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-34a78542d1209d6a", "name": "Very large file: risk_manager.py (1409 lines)", "shortDescription": {"text": "Very large file: risk_manager.py (1409 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-860fce510e315199", "name": "Very large file: test_trading_improvements.py (3834 lines)", "shortDescription": {"text": "Very large file: test_trading_improvements.py (3834 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-ad4739776a7c2e3f", "name": "Very large file: telegram_commander.py (2296 lines)", "shortDescription": {"text": "Very large file: telegram_commander.py (2296 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-381ed724668d5d7c", "name": "Very large file: kis_api.py (5981 lines)", "shortDescription": {"text": "Very large file: kis_api.py (5981 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-6c923947e18ec812", "name": "Very large file: preopen/continuation_shadow.py (2942 lines)", "shortDescription": {"text": "Very large file: preopen/continuation_shadow.py (2942 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-5c1cce742ae6bb52", "name": "Very large file: preopen/storage.py (1385 lines)", "shortDescription": {"text": "Very large file: preopen/storage.py (1385 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b65ad617becc587a", "name": "Very large file: interface/v2_ops_summary.py (3182 lines)", "shortDescription": {"text": "Very large file: interface/v2_ops_summary.py (3182 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-77812539fe0978c5", "name": "Very large file: tests/test_dashboard_pathb.py (1573 lines)", "shortDescription": {"text": "Very large file: tests/test_dashboard_pathb.py (1573 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-0e3fc79f6d979a6c", "name": "Very large file: tests/test_auto_sell_claude_gate.py (1625 lines)", "shortDescription": {"text": "Very large file: tests/test_auto_sell_claude_gate.py (1625 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-7552261d90a7152b", "name": "Very large file: tests/test_v2_learning_performance_sync.py (2095 lines)", "shortDescription": {"text": "Very large file: tests/test_v2_learning_performance_sync.py (2095 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-fafedcec602aa1e7", "name": "Very large file: tests/test_candidate_quality_trainer.py (1137 lines)", "shortDescription": {"text": "Very large file: tests/test_candidate_quality_trainer.py (1137 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-06b37a2053664541", "name": "Very large file: tests/test_dashboard_refresh_performance.py (1154 lines)", "shortDescription": {"text": "Very large file: tests/test_dashboard_refresh_performance.py (1154 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-8b184ce900d07d24", "name": "Very large file: tests/test_trading_decision_contract_improvements.py (1803 lines)", "shortDescription": {"text": "Very large file: tests/test_trading_decision_contract_improvements.py (1803 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-0329e77b7adb9557", "name": "Very large file: tests/test_preopen_opening_role_separation.py (1274 lines)", "shortDescription": {"text": "Very large file: tests/test_preopen_opening_role_separation.py (1274 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-7622961638ea030d", "name": "Very large file: tests/test_candidate_audit.py (2487 lines)", "shortDescription": {"text": "Very large file: tests/test_candidate_audit.py (2487 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-46678054495a33e7", "name": "Very large file: tests/test_candidate_action_live_mapping.py (4317 lines)", "shortDescription": {"text": "Very large file: tests/test_candidate_action_live_mapping.py (4317 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-aad6ece28fcaa31f", "name": "Very large file: tests/test_pathb_runtime.py (5740 lines)", "shortDescription": {"text": "Very large file: tests/test_pathb_runtime.py (5740 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-4dd2372e6c904690", "name": "Very large file: tests/test_v2_phase6.py (1394 lines)", "shortDescription": {"text": "Very large file: tests/test_v2_phase6.py (1394 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-a7d2a7f642d96260", "name": "Very large file: phase1_trainer/digest_builder.py (1974 lines)", "shortDescription": {"text": "Very large file: phase1_trainer/digest_builder.py (1974 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-d2fbafc3560664a5", "name": "Very large file: phase1_trainer/price_collector.py (1156 lines)", "shortDescription": {"text": "Very large file: phase1_trainer/price_collector.py (1156 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-ca2cce94e3a02de9", "name": "Very large file: dashboard/dashboard_server.py (17110 lines)", "shortDescription": {"text": "Very large file: dashboard/dashboard_server.py (17110 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-5a44ad6e00b0de3a", "name": "Very large file: audit/candidate_audit_store.py (1249 lines)", "shortDescription": {"text": "Very large file: audit/candidate_audit_store.py (1249 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-e0dc95800fd2017b", "name": "Very large file: runtime/pathb_runtime.py (12068 lines)", "shortDescription": {"text": "Very large file: runtime/pathb_runtime.py (12068 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-f228529d16967628", "name": "Very large file: minority_report/hold_advisor.py (2187 lines)", "shortDescription": {"text": "Very large file: minority_report/hold_advisor.py (2187 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-0f39319a13c7524f", "name": "Very large file: minority_report/analysts.py (3595 lines)", "shortDescription": {"text": "Very large file: minority_report/analysts.py (3595 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-0feb58a505a88f4b", "name": "Very large file: tools/monitoring_ops_report.py (1817 lines)", "shortDescription": {"text": "Very large file: tools/monitoring_ops_report.py (1817 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-8955aa0ea1336dea", "name": "Very large file: tools/overnight_us_monitor.py (1404 lines)", "shortDescription": {"text": "Very large file: tools/overnight_us_monitor.py (1404 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-ead8e4a72440e729", "name": "Very large file: tools/build_claude_decision_facts.py (1283 lines)", "shortDescription": {"text": "Very large file: tools/build_claude_decision_facts.py (1283 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-54a36beb17b10b14", "name": "Very large file: tools/analyze_candidate_audit.py (1895 lines)", "shortDescription": {"text": "Very large file: tools/analyze_candidate_audit.py (1895 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-919878bf494fc275", "name": "Very large file: tools/sync_v2_learning_performance.py (1606 lines)", "shortDescription": {"text": "Very large file: tools/sync_v2_learning_performance.py (1606 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-4ffe7c7d2b6bd26c", "name": "Very large file: tools/live_preflight.py (4671 lines)", "shortDescription": {"text": "Very large file: tools/live_preflight.py (4671 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 740 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0281dee1326fa1e1", "name": "Legacy-named symbol `ok_old` in test_kr_trade.py:185", "shortDescription": {"text": "Legacy-named symbol `ok_old` in test_kr_trade.py:185"}, "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-cadda64ecd62d4c6", "name": "Stub function `raise_for_status` (body is just `pass`/`return`) \u2014 test_trading_improvements.py:254", "shortDescription": {"text": "Stub function `raise_for_status` (body is just `pass`/`return`) \u2014 test_trading_improvements.py:254"}, "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-20b6a076824a2496", "name": "Stub function `raise_for_status` (body is just `pass`/`return`) \u2014 test_broker_sync_cash.py:265", "shortDescription": {"text": "Stub function `raise_for_status` (body is just `pass`/`return`) \u2014 test_broker_sync_cash.py:265"}, "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-d86a80a7239b8489", "name": "Commented-code block (5 lines) in kis_api.py:5918", "shortDescription": {"text": "Commented-code block (5 lines) in kis_api.py:5918"}, "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-21ef81e0a4614b56", "name": "Network/subprocess call without timeout or try/except \u2014 kis_api.py:1304", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 kis_api.py:1304"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a6c9806b138ce21", "name": "Legacy-named symbol `strict_loss_filter_v1` in preopen/storage.py:310", "shortDescription": {"text": "Legacy-named symbol `strict_loss_filter_v1` in preopen/storage.py:310"}, "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-59f0d13dbb569207", "name": "Legacy-named symbol `strict_loss_filter_v1` in preopen/news_enrichment.py:115", "shortDescription": {"text": "Legacy-named symbol `strict_loss_filter_v1` in preopen/news_enrichment.py:115"}, "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-e59e47537ae8bb39", "name": "Legacy-named symbol `candidate_actions_v1` in bot/candidate_policy.py:362", "shortDescription": {"text": "Legacy-named symbol `candidate_actions_v1` in bot/candidate_policy.py:362"}, "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-e0621f49d8fb5195", "name": "Legacy-named symbol `env_only_v1` in config/runtime_config.py:63", "shortDescription": {"text": "Legacy-named symbol `env_only_v1` in config/runtime_config.py:63"}, "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-4fb53a3d43539acc", "name": "Legacy-named symbol `test_audit_classifies_backfill_watch_split_ambiguous_and_legacy` in tests/test_audit_ticker_selecti", "shortDescription": {"text": "Legacy-named symbol `test_audit_classifies_backfill_watch_split_ambiguous_and_legacy` in tests/test_audit_ticker_selection_attribution.py:243"}, "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-4325e53c6e528b18", "name": "Legacy-named symbol `candidate_post_rank_v1` in tests/test_candidate_post_rank_and_us_quality.py:23", "shortDescription": {"text": "Legacy-named symbol `candidate_post_rank_v1` in tests/test_candidate_post_rank_and_us_quality.py:23"}, "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-b788fbba0d833cf5", "name": "Legacy-named symbol `execution_advisor_v1` in tests/test_execution_advisor_runtime.py:96", "shortDescription": {"text": "Legacy-named symbol `execution_advisor_v1` in tests/test_execution_advisor_runtime.py:96"}, "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-66ca87e2e85997a3", "name": "Legacy-named symbol `legacy_v1` in tests/test_v2_phase5.py:56", "shortDescription": {"text": "Legacy-named symbol `legacy_v1` in tests/test_v2_phase5.py:56"}, "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-b45a22b5473e933f", "name": "Legacy-named symbol `test_apply_without_output_path_replaces_current_and_preserves_contaminated_copy` in tests/test_reco", "shortDescription": {"text": "Legacy-named symbol `test_apply_without_output_path_replaces_current_and_preserves_contaminated_copy` in tests/test_recover_decisions_db.py:186"}, "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-299267c754adde5e", "name": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_preopen_pin_universe.py:178", "shortDescription": {"text": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_preopen_pin_universe.py:178"}, "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-54746440c4895255", "name": "Legacy-named symbol `create_live_backup` in tests/test_live_maintenance.py:158", "shortDescription": {"text": "Legacy-named symbol `create_live_backup` in tests/test_live_maintenance.py:158"}, "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-82d24acb4a51309d", "name": "Legacy-named symbol `env_only_v1` in tests/test_effective_runtime_config.py:51", "shortDescription": {"text": "Legacy-named symbol `env_only_v1` in tests/test_effective_runtime_config.py:51"}, "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-8ad0f7b048866b50", "name": "Legacy-named symbol `naver_legacy` in tests/test_kr_news_collector_kis.py:179", "shortDescription": {"text": "Legacy-named symbol `naver_legacy` in tests/test_kr_news_collector_kis.py:179"}, "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-ad94b11af627c1e8", "name": "Legacy-named symbol `actual_prompt_v1` in tests/test_screener_quality.py:80", "shortDescription": {"text": "Legacy-named symbol `actual_prompt_v1` in tests/test_screener_quality.py:80"}, "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-98283d4cdcef38e0", "name": "Legacy-named symbol `test_last_good_recomputes_stale_and_fails_closed_when_old` in tests/test_broker_truth_snapshot.py:4", "shortDescription": {"text": "Legacy-named symbol `test_last_good_recomputes_stale_and_fails_closed_when_old` in tests/test_broker_truth_snapshot.py:492"}, "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-f9026c66c3dd0e3d", "name": "Legacy-named symbol `path_old` in tests/test_v2_learning_performance_sync.py:556", "shortDescription": {"text": "Legacy-named symbol `path_old` in tests/test_v2_learning_performance_sync.py:556"}, "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-5840893e8224acdc", "name": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_preopen_news_enrichment.py:79", "shortDescription": {"text": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_preopen_news_enrichment.py:79"}, "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-25188895a809b865", "name": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_candidate_quality_trainer.py:323", "shortDescription": {"text": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_candidate_quality_trainer.py:323"}, "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-66e28384281f9bcd", "name": "Legacy-named symbol `cap2_mfe_v1` in tests/test_loss_cap_profit_floor.py:226", "shortDescription": {"text": "Legacy-named symbol `cap2_mfe_v1` in tests/test_loss_cap_profit_floor.py:226"}, "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-62dc852cd527cc75", "name": "Legacy-named symbol `advisor_context_v2` in tests/test_price_unit_normalization.py:122", "shortDescription": {"text": "Legacy-named symbol `advisor_context_v2` in tests/test_price_unit_normalization.py:122"}, "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-132c8a45c18c73d0", "name": "Legacy-named symbol `test_empty_selection_meta_fallback_is_watch_only_in_v2` in tests/test_claude_trade_quality_rework.p", "shortDescription": {"text": "Legacy-named symbol `test_empty_selection_meta_fallback_is_watch_only_in_v2` in tests/test_claude_trade_quality_rework.py:391"}, "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-14fb3d9589ab9cbf", "name": "Legacy-named symbol `_environ_backup` in tests/test_live_guardian.py:29", "shortDescription": {"text": "Legacy-named symbol `_environ_backup` in tests/test_live_guardian.py:29"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b28e1ebd977539f6", "name": "Legacy-named symbol `pos_KR_067170_legacy` in tests/test_v2_phase1.py:215", "shortDescription": {"text": "Legacy-named symbol `pos_KR_067170_legacy` in tests/test_v2_phase1.py:215"}, "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-ba141223a60fda0e", "name": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_dashboard_candidate_audit_api.py:219", "shortDescription": {"text": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_dashboard_candidate_audit_api.py:219"}, "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-2fc6fa63e5200270", "name": "Legacy-named symbol `test_dry_run_does_not_modify_file_and_write_creates_backup` in tests/test_lesson_quality_backfill.p", "shortDescription": {"text": "Legacy-named symbol `test_dry_run_does_not_modify_file_and_write_creates_backup` in tests/test_lesson_quality_backfill.py:21"}, "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-134014fef163fd4e", "name": "Legacy-named symbol `test_triage_stage_allowlist_keeps_non_auto_sell_review_legacy` in tests/test_trading_decision_contr", "shortDescription": {"text": "Legacy-named symbol `test_triage_stage_allowlist_keeps_non_auto_sell_review_legacy` in tests/test_trading_decision_contract_improvements.py:258"}, "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-83c2328fb1df5ec8", "name": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_candidate_discovery_overlay.py:33", "shortDescription": {"text": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_candidate_discovery_overlay.py:33"}, "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-02cfb667e89d998a", "name": "Legacy-named symbol `patha_or_legacy` in tests/test_v2_quality_audit.py:89", "shortDescription": {"text": "Legacy-named symbol `patha_or_legacy` in tests/test_v2_quality_audit.py:89"}, "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-03bb2070c57d7f48", "name": "Legacy-named symbol `actual_prompt_v1` in tests/test_candidate_audit.py:89", "shortDescription": {"text": "Legacy-named symbol `actual_prompt_v1` in tests/test_candidate_audit.py:89"}, "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-9fbbb59a4139f2e3", "name": "Legacy-named symbol `selection_preopen_watch_v1` in tests/test_preopen_shadow.py:302", "shortDescription": {"text": "Legacy-named symbol `selection_preopen_watch_v1` in tests/test_preopen_shadow.py:302"}, "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-ee2a4f4d47133011", "name": "Legacy-named symbol `trainer_quality_v1` in tests/test_candidate_action_live_mapping.py:3365", "shortDescription": {"text": "Legacy-named symbol `trainer_quality_v1` in tests/test_candidate_action_live_mapping.py:3365"}, "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-f491078a2f086da7", "name": "Legacy-named symbol `test_write_normalizes_us_supplement_and_creates_backup` in tests/test_p0_data_quality_backfill.py:5", "shortDescription": {"text": "Legacy-named symbol `test_write_normalizes_us_supplement_and_creates_backup` in tests/test_p0_data_quality_backfill.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-b414ad9ef4ac31ba", "name": "Legacy-named symbol `test_panic_without_positions_still_confirms_and_runs_v2` in tests/test_telegram_danger_confirm.py:8", "shortDescription": {"text": "Legacy-named symbol `test_panic_without_positions_still_confirms_and_runs_v2` in tests/test_telegram_danger_confirm.py:85"}, "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-ca18ccf3dc56e699", "name": "Legacy-named symbol `pathb_price_v1` in tests/test_pathb_runtime.py:269", "shortDescription": {"text": "Legacy-named symbol `pathb_price_v1` in tests/test_pathb_runtime.py:269"}, "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-a34c22ec22762bfd", "name": "Legacy-named symbol `test_runs_refresh_when_judgment_is_old` in tests/test_opening_judgment_refresh_dedup.py:38", "shortDescription": {"text": "Legacy-named symbol `test_runs_refresh_when_judgment_is_old` in tests/test_opening_judgment_refresh_dedup.py:38"}, "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-0c9a6cd99b61554e", "name": "Legacy-named symbol `advisor_context_v2` in tests/test_kr_intraday_recheck_live.py:93", "shortDescription": {"text": "Legacy-named symbol `advisor_context_v2` in tests/test_kr_intraday_recheck_live.py:93"}, "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-299c2192c79b7be1", "name": "Legacy-named symbol `fresh_v2_reference_v1` in tests/test_v2_daily_loop.py:92", "shortDescription": {"text": "Legacy-named symbol `fresh_v2_reference_v1` in tests/test_v2_daily_loop.py:92"}, "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-b3132af50bccd6cf", "name": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_prompt_overlay.py:148", "shortDescription": {"text": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_prompt_overlay.py:148"}, "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-4e025a69f5dc8efa", "name": "Legacy-named symbol `same_ticker_old` in tests/test_ops_kr_wait_re_evaluation_queue.py:203", "shortDescription": {"text": "Legacy-named symbol `same_ticker_old` in tests/test_ops_kr_wait_re_evaluation_queue.py:203"}, "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-da1452ab66fcd59f", "name": "Legacy-named symbol `cand_old` in tests/test_claude_decision_facts.py:285", "shortDescription": {"text": "Legacy-named symbol `cand_old` in tests/test_claude_decision_facts.py:285"}, "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-d185b242d05c28b3", "name": "Legacy-named symbol `compact_candidate_actions_v1` in tests/test_v2_phase6.py:491", "shortDescription": {"text": "Legacy-named symbol `compact_candidate_actions_v1` in tests/test_v2_phase6.py:491"}, "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-0bac829ce603b0cd", "name": "Legacy-named symbol `advisor_context_v2` in tests/test_preopen_auto_sell_recheck.py:331", "shortDescription": {"text": "Legacy-named symbol `advisor_context_v2` in tests/test_preopen_auto_sell_recheck.py:331"}, "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-db7efc8b6e30b295", "name": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/kr_news_collector.py:552", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/kr_news_collector.py:552"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9f1f51ad1d73fdf", "name": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/supplement_collector.py:95", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/supplement_collector.py:95"}, "fullDescription": {"text": "`requests.post(...)` 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-331654936d3f371a", "name": "Legacy-named symbol `_save_legacy` in phase1_trainer/price_collector.py:845", "shortDescription": {"text": "Legacy-named symbol `_save_legacy` in phase1_trainer/price_collector.py:845"}, "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-53f32ca8a94b6b45", "name": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/price_collector.py:316", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/price_collector.py:316"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da114ce0f51a3bbd", "name": "Legacy-named symbol `profit_guard_v1` in test/test_audit_lab.py:602", "shortDescription": {"text": "Legacy-named symbol `profit_guard_v1` in test/test_audit_lab.py:602"}, "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-7643c26e6d890d1a", "name": "Legacy-named symbol `audit_lab_event_loop_v1` in test/audit_lab/db.py:417", "shortDescription": {"text": "Legacy-named symbol `audit_lab_event_loop_v1` in test/audit_lab/db.py:417"}, "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-06bff1e46d1c3d76", "name": "Legacy-named symbol `profit_guard_v2` in test/audit_lab/intraday_targets.py:54", "shortDescription": {"text": "Legacy-named symbol `profit_guard_v2` in test/audit_lab/intraday_targets.py:54"}, "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-77f80f8f1153348b", "name": "Legacy-named symbol `profit_guard_v1` in test/audit_lab/strategy_policy.py:24", "shortDescription": {"text": "Legacy-named symbol `profit_guard_v1` in test/audit_lab/strategy_policy.py:24"}, "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-07a4f076a28dde0b", "name": "Legacy-named symbol `_restart_bot_process_legacy` in dashboard/dashboard_server.py:1107", "shortDescription": {"text": "Legacy-named symbol `_restart_bot_process_legacy` in dashboard/dashboard_server.py:1107"}, "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-f7ff3a7fdafb1a25", "name": "Network/subprocess call without timeout or try/except \u2014 dashboard/dashboard_server.py:1075", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 dashboard/dashboard_server.py:1075"}, "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-9f7d9195fc0ae331", "name": "Legacy-named symbol `pathb_price_v1` in decision/claude_price_plan.py:105", "shortDescription": {"text": "Legacy-named symbol `pathb_price_v1` in decision/claude_price_plan.py:105"}, "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-4bb7d386ed4f63dc", "name": "Legacy-named symbol `legacy_v1` in lifecycle/validation.py:691", "shortDescription": {"text": "Legacy-named symbol `legacy_v1` in lifecycle/validation.py:691"}, "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-e39d2cc2c37309e9", "name": "Legacy-named symbol `single_symbol_judge_v1` in execution/single_symbol_judge.py:423", "shortDescription": {"text": "Legacy-named symbol `single_symbol_judge_v1` in execution/single_symbol_judge.py:423"}, "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-3aad1f967fbc6084", "name": "Legacy-named symbol `pathb_price_v1` in execution/claude_price_adapter.py:416", "shortDescription": {"text": "Legacy-named symbol `pathb_price_v1` in execution/claude_price_adapter.py:416"}, "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-d326f836d9fa6ff2", "name": "Legacy-named symbol `buy_time_confirm_judge_v1` in execution/buy_time_confirm_judge.py:232", "shortDescription": {"text": "Legacy-named symbol `buy_time_confirm_judge_v1` in execution/buy_time_confirm_judge.py:232"}, "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-15d48a76bb4302f2", "name": "Legacy-named symbol `compact_candidate_actions_v1` in runtime/selection_compact_schema.py:500", "shortDescription": {"text": "Legacy-named symbol `compact_candidate_actions_v1` in runtime/selection_compact_schema.py:500"}, "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-3b289eb7a1af5f32", "name": "Legacy-named symbol `is_v2` in runtime/candidate_actions.py:232", "shortDescription": {"text": "Legacy-named symbol `is_v2` in runtime/candidate_actions.py:232"}, "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-2a08f7ddca036f59", "name": "Legacy-named symbol `penalty_old` in runtime/candidate_freshness.py:184", "shortDescription": {"text": "Legacy-named symbol `penalty_old` in runtime/candidate_freshness.py:184"}, "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-c506bb0019ec86fd", "name": "Legacy-named symbol `trainer_prompt_pool_v1` in runtime/candidate_prompt_pool.py:13", "shortDescription": {"text": "Legacy-named symbol `trainer_prompt_pool_v1` in runtime/candidate_prompt_pool.py:13"}, "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-6796ade7cf42f2ca", "name": "Legacy-named symbol `candidate_post_rank_v1` in runtime/candidate_post_rank.py:6", "shortDescription": {"text": "Legacy-named symbol `candidate_post_rank_v1` in runtime/candidate_post_rank.py:6"}, "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-1023fd9734bdd064", "name": "Legacy-named symbol `trainer_quality_v1` in runtime/candidate_quality_trainer.py:10", "shortDescription": {"text": "Legacy-named symbol `trainer_quality_v1` in runtime/candidate_quality_trainer.py:10"}, "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-d34e79d10b1b3130", "name": "Legacy-named symbol `execution_advisor_v1` in runtime/execution_advisor_runtime.py:289", "shortDescription": {"text": "Legacy-named symbol `execution_advisor_v1` in runtime/execution_advisor_runtime.py:289"}, "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-c5e2b449be2a291a", "name": "Legacy-named symbol `fresh_v2` in runtime/v2_lifecycle_runtime.py:63", "shortDescription": {"text": "Legacy-named symbol `fresh_v2` in runtime/v2_lifecycle_runtime.py:63"}, "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-e6ed94e0d1f7ec14", "name": "Legacy-named symbol `us_quality_shadow_v1` in runtime/us_candidate_quality.py:8", "shortDescription": {"text": "Legacy-named symbol `us_quality_shadow_v1` in runtime/us_candidate_quality.py:8"}, "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-af2cd18e925e7b36", "name": "Legacy-named symbol `discovery_overlay_v1` in runtime/candidate_discovery_overlay.py:10", "shortDescription": {"text": "Legacy-named symbol `discovery_overlay_v1` in runtime/candidate_discovery_overlay.py:10"}, "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-ad37dee56fe48c8a", "name": "Legacy-named symbol `pathb_price_v1` in runtime/pathb_runtime.py:1790", "shortDescription": {"text": "Legacy-named symbol `pathb_price_v1` in runtime/pathb_runtime.py:1790"}, "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-d3bd84714c3db542", "name": "Stub function `startup_health_check` (body is just `pass`/`return`) \u2014 runtime/rehearsal/backends.py:249", "shortDescription": {"text": "Stub function `startup_health_check` (body is just `pass`/`return`) \u2014 runtime/rehearsal/backends.py:249"}, "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-b721fcc8f2db5541", "name": "Legacy-named symbol `quick_exit_v2` in minority_report/quick_exit_check.py:137", "shortDescription": {"text": "Legacy-named symbol `quick_exit_v2` in minority_report/quick_exit_check.py:137"}, "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-6f05f0ff59bfb396", "name": "Legacy-named symbol `advisor_context_v2` in minority_report/hold_advisor.py:52", "shortDescription": {"text": "Legacy-named symbol `advisor_context_v2` in minority_report/hold_advisor.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-d060c92c0ff18142", "name": "Legacy-named symbol `execution_plan_v1` in minority_report/prompt_contracts.py:29", "shortDescription": {"text": "Legacy-named symbol `execution_plan_v1` in minority_report/prompt_contracts.py:29"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21b1a6502c9055a5", "name": "Legacy-named symbol `selection_preopen_watch_v1` in minority_report/analysts.py:2951", "shortDescription": {"text": "Legacy-named symbol `selection_preopen_watch_v1` in minority_report/analysts.py:2951"}, "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-4bd2241b21b6f091", "name": "Legacy-named symbol `_days_old` in minority_report/active_lessons.py:136", "shortDescription": {"text": "Legacy-named symbol `_days_old` in minority_report/active_lessons.py:136"}, "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-ea974a84902d2834", "name": "Legacy-named symbol `advisor_context_v2` in tools/simulate_hold_advisor_decision_modes.py:254", "shortDescription": {"text": "Legacy-named symbol `advisor_context_v2` in tools/simulate_hold_advisor_decision_modes.py:254"}, "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-da2eef45a2a15fc2", "name": "Legacy-named symbol `create_live_backup` in tools/live_maintenance.py:250", "shortDescription": {"text": "Legacy-named symbol `create_live_backup` in tools/live_maintenance.py:250"}, "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-884a4167dd110de8", "name": "Legacy-named symbol `_sqlite_backup` in tools/promote_external_data.py:47", "shortDescription": {"text": "Legacy-named symbol `_sqlite_backup` in tools/promote_external_data.py:47"}, "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-2973ed27653754a5", "name": "Legacy-named symbol `matched_v2` in tools/audit_ticker_selection_attribution.py:416", "shortDescription": {"text": "Legacy-named symbol `matched_v2` in tools/audit_ticker_selection_attribution.py:416"}, "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-2e211562d2ffeee1", "name": "Legacy-named symbol `p0_data_quality_backfill_v1` in tools/p0_data_quality_backfill.py:30", "shortDescription": {"text": "Legacy-named symbol `p0_data_quality_backfill_v1` in tools/p0_data_quality_backfill.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-abb4e13c44532027", "name": "Network/subprocess call without timeout or try/except \u2014 tools/check_mojibake.py:65", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/check_mojibake.py:65"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89683934b2add3c4", "name": "Legacy-named symbol `actual_prompt_v1` in tools/analyze_candidate_audit.py:806", "shortDescription": {"text": "Legacy-named symbol `actual_prompt_v1` in tools/analyze_candidate_audit.py:806"}, "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-7f69e17f0fbe4fa1", "name": "Legacy-named symbol `strict_loss_filter_v1` in tools/preopen_candidate_replay.py:24", "shortDescription": {"text": "Legacy-named symbol `strict_loss_filter_v1` in tools/preopen_candidate_replay.py:24"}, "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-2cd69bdeed715fc3", "name": "Legacy-named symbol `patha_or_legacy` in tools/v2_quality_audit.py:354", "shortDescription": {"text": "Legacy-named symbol `patha_or_legacy` in tools/v2_quality_audit.py:354"}, "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-54fa44434fa4eed4", "name": "Legacy-named symbol `_sqlite_backup` in tools/clean_agent_call_event_store.py:92", "shortDescription": {"text": "Legacy-named symbol `_sqlite_backup` in tools/clean_agent_call_event_store.py:92"}, "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-47da78732cfbce98", "name": "Stub function `set_enabled` (body is just `pass`/`return`) \u2014 tools/live_preflight.py:3963", "shortDescription": {"text": "Stub function `set_enabled` (body is just `pass`/`return`) \u2014 tools/live_preflight.py:3963"}, "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-0432660e9d0925dc", "name": "Legacy-named symbol `advisor_context_v2` in tools/analyze_hold_advisor_latency.py:134", "shortDescription": {"text": "Legacy-named symbol `advisor_context_v2` in tools/analyze_hold_advisor_latency.py:134"}, "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-9bbaf3ad0917a2e4", "name": "Legacy-named symbol `advisor_context_v2` in tools/monitor_hold_advisor_triage_quality.py:205", "shortDescription": {"text": "Legacy-named symbol `advisor_context_v2` in tools/monitor_hold_advisor_triage_quality.py:205"}, "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-7bdef92e0aa721db", "name": "Legacy-named symbol `fresh_v2_reference_v1` in tools/v2_daily_loop.py:298", "shortDescription": {"text": "Legacy-named symbol `fresh_v2_reference_v1` in tools/v2_daily_loop.py:298"}, "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-9a086e6268b4f7bb", "name": "Legacy-named symbol `sonnet_old` in tools/prompt_eval_improve.py:343", "shortDescription": {"text": "Legacy-named symbol `sonnet_old` in tools/prompt_eval_improve.py:343"}, "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-dc341d87e76ffc39", "name": "Network/subprocess call without timeout or try/except \u2014 tools/live_guardian.py:446", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/live_guardian.py:446"}, "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-f7d4641e9d9c2d4a", "name": "197 env vars used in code but missing from .env.example", "shortDescription": {"text": "197 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AGENT_CALL_EVENT_DB_PATH`, `ANTHROPIC_MODEL`, `AUTO_BREAKEVEN_BUFFER_PCT`, `AUTO_PROFIT_TRAILING_ENABLED`, `AUTO_SELL_REVIEW_FORCE_SELL_LOSS_PCT`, `AUTO_TRAIL_PCT`, `AUTO_TRAIL_PCT_KR`, `AUTO_TRAIL_PCT_US` + 189 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:\nlogger.py:format, logger.py:format\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:\npreopen/continuation_shadow.py:collect_candidates, preopen/continuation_shadow.py:record_feature_snapshot_range, preopen/continuation_shadow.py:backfill_outcomes\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-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbot/entry_timing.py:mark_signal_check, bot/entry_timing.py:mark_signal_fired, bot/entry_timing.py:mark_order_sent, bot/entry_timing.py:mark_filled\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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nphase1_trainer/external_data_store.py:upsert_dart_disclosures, phase1_trainer/external_data_store.py:upsert_public_krx_listed, phase1_trainer/external_data_store.py:upsert_public_stock_quotes, phase1_trainer/external_data_store.py:upsert_public_securities_products\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-e258d1973c46d268", "name": "Unused endpoint: ANY /api/summary", "shortDescription": {"text": "Unused endpoint: ANY /api/summary"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/summary` 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-eb36d5b64103a1c8", "name": "Unused endpoint: ANY /api/v2/ops", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/ops"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/v2/ops` 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-5dff5ff73c63cebe", "name": "Unused endpoint: ANY /api/logs/alerts", "shortDescription": {"text": "Unused endpoint: ANY /api/logs/alerts"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/logs/alerts` 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-3a51aff466d1ef45", "name": "Unused endpoint: ANY /api/position/chart", "shortDescription": {"text": "Unused endpoint: ANY /api/position/chart"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/position/chart` 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-72bb235977c7de9e", "name": "Unused endpoint: ANY /api/preopen", "shortDescription": {"text": "Unused endpoint: ANY /api/preopen"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/preopen` 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-061d5526afce763a", "name": "Unused endpoint: ANY /api/claude/status", "shortDescription": {"text": "Unused endpoint: ANY /api/claude/status"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/claude/status` 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-53d682b70e72dd75", "name": "Unused endpoint: ANY /api/claude/toggle", "shortDescription": {"text": "Unused endpoint: ANY /api/claude/toggle"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/claude/toggle` 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-399cc82f8ef11988", "name": "Unused endpoint: ANY /api/claude/trigger", "shortDescription": {"text": "Unused endpoint: ANY /api/claude/trigger"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/claude/trigger` 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-58cbcec1ddccde5c", "name": "Unused endpoint: ANY /api/judgments", "shortDescription": {"text": "Unused endpoint: ANY /api/judgments"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/judgments` 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-67094ff70034865f", "name": "Unused endpoint: ANY /api/chart/equity", "shortDescription": {"text": "Unused endpoint: ANY /api/chart/equity"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/chart/equity` 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-c68b448d4778ac30", "name": "Unused endpoint: ANY /api/chart/analyst", "shortDescription": {"text": "Unused endpoint: ANY /api/chart/analyst"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/chart/analyst` 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-f09ee4a7f6c91479", "name": "Unused endpoint: ANY /api/chart/market-context", "shortDescription": {"text": "Unused endpoint: ANY /api/chart/market-context"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/chart/market-context` 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-d1605d8ec875d542", "name": "Unused endpoint: ANY /api/patterns", "shortDescription": {"text": "Unused endpoint: ANY /api/patterns"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/patterns` 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-553dbc6dbde36f1f", "name": "Unused endpoint: ANY /api/active-lessons", "shortDescription": {"text": "Unused endpoint: ANY /api/active-lessons"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/active-lessons` 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-67c1591d8224bfcf", "name": "Unused endpoint: ANY /api/hold-advisor/summary", "shortDescription": {"text": "Unused endpoint: ANY /api/hold-advisor/summary"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/hold-advisor/summary` 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-a13f7eb82537a919", "name": "Unused endpoint: ANY /api/credits", "shortDescription": {"text": "Unused endpoint: ANY /api/credits"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/credits` 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-65c105e1a0bc4c76", "name": "Unused endpoint: ANY /api/control/status", "shortDescription": {"text": "Unused endpoint: ANY /api/control/status"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/control/status` 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-5d140147c57cf53a", "name": "Unused endpoint: ANY /api/control/restart-dashboard", "shortDescription": {"text": "Unused endpoint: ANY /api/control/restart-dashboard"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/control/restart-dashboard` 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-a7622acf183f195b", "name": "Unused endpoint: ANY /api/broker/refresh", "shortDescription": {"text": "Unused endpoint: ANY /api/broker/refresh"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/broker/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-ec52efe398b1a5e8", "name": "Unused endpoint: ANY /api/pnl/lifetime-realized", "shortDescription": {"text": "Unused endpoint: ANY /api/pnl/lifetime-realized"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/pnl/lifetime-realized` 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-90300e67bbaec0f2", "name": "Unused endpoint: ANY /api/control/restart-bot", "shortDescription": {"text": "Unused endpoint: ANY /api/control/restart-bot"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/control/restart-bot` 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-dcf4e78d1d3ba1db", "name": "Unused endpoint: ANY /api/control/order-size", "shortDescription": {"text": "Unused endpoint: ANY /api/control/order-size"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/control/order-size` 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-3427a531ba46f035", "name": "Unused endpoint: ANY /api/control/gross-cap", "shortDescription": {"text": "Unused endpoint: ANY /api/control/gross-cap"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/control/gross-cap` 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-4b46263851acc5e5", "name": "Unused endpoint: ANY /api/control/stop-cluster-reset", "shortDescription": {"text": "Unused endpoint: ANY /api/control/stop-cluster-reset"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/control/stop-cluster-reset` 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-c5bead17e826f8a0", "name": "Unused endpoint: ANY /api/brain", "shortDescription": {"text": "Unused endpoint: ANY /api/brain"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/brain` 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-b2e67147ca876a7c", "name": "Unused endpoint: ANY /api/brain/history", "shortDescription": {"text": "Unused endpoint: ANY /api/brain/history"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/brain/history` 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-a8d964c14ce23851", "name": "Unused endpoint: ANY /api/stats/period", "shortDescription": {"text": "Unused endpoint: ANY /api/stats/period"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/stats/period` 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-a3c1186be5c1d386", "name": "Unused endpoint: ANY /api/history/monthly", "shortDescription": {"text": "Unused endpoint: ANY /api/history/monthly"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/history/monthly` 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-bce028bd48f66dad", "name": "Unused endpoint: ANY /api/history/equity", "shortDescription": {"text": "Unused endpoint: ANY /api/history/equity"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/history/equity` 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-f7a239d6166c0ba4", "name": "Unused endpoint: ANY /api/trades/list", "shortDescription": {"text": "Unused endpoint: ANY /api/trades/list"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/trades/list` 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-96146ca451efaeeb", "name": "Unused endpoint: ANY /api/trades/broker", "shortDescription": {"text": "Unused endpoint: ANY /api/trades/broker"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/trades/broker` 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-5667e428945265ff", "name": "Unused endpoint: ANY /api/trades/broker/status", "shortDescription": {"text": "Unused endpoint: ANY /api/trades/broker/status"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/trades/broker/status` 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-f01c74a912aee5cc", "name": "Unused endpoint: ANY /api/signals/recent", "shortDescription": {"text": "Unused endpoint: ANY /api/signals/recent"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/signals/recent` 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-f5b4c4ab68ecfabe", "name": "Unused endpoint: ANY /api/decisions", "shortDescription": {"text": "Unused endpoint: ANY /api/decisions"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/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-b7da5c21eed48935", "name": "Unused endpoint: ANY /api/candidate-audit/summary", "shortDescription": {"text": "Unused endpoint: ANY /api/candidate-audit/summary"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/candidate-audit/summary` 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-0af3cac9f917954f", "name": "Unused endpoint: ANY /api/candidate-audit/rows", "shortDescription": {"text": "Unused endpoint: ANY /api/candidate-audit/rows"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/candidate-audit/rows` 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-e55402a6bba27072", "name": "Unused endpoint: ANY /api/refresh_prices", "shortDescription": {"text": "Unused endpoint: ANY /api/refresh_prices"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/refresh_prices` 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-d3aaaf32f720983f", "name": "Unused endpoint: ANY /api/review_position", "shortDescription": {"text": "Unused endpoint: ANY /api/review_position"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/review_position` 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-c0ea5235ff1b85e5", "name": "Unused endpoint: ANY /api/immediate_sell", "shortDescription": {"text": "Unused endpoint: ANY /api/immediate_sell"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/immediate_sell` 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-d31564b469ce2e1b", "name": "Unused endpoint: ANY /api/tickers/today", "shortDescription": {"text": "Unused endpoint: ANY /api/tickers/today"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /api/tickers/today` 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-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /` 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-f99c35fd76e8c6bc", "name": "Unused endpoint: ANY /history", "shortDescription": {"text": "Unused endpoint: ANY /history"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /history` 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-882db530ae1d6bf0", "name": "Unused endpoint: ANY /trades", "shortDescription": {"text": "Unused endpoint: ANY /trades"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /trades` 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-cdcef65ed12aa823", "name": "Unused endpoint: ANY /broker-trades", "shortDescription": {"text": "Unused endpoint: ANY /broker-trades"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /broker-trades` 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-7e79a7f0b514f901", "name": "Unused endpoint: ANY /pathb", "shortDescription": {"text": "Unused endpoint: ANY /pathb"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /pathb` 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-320972a7cc8ee166", "name": "Unused endpoint: ANY /preopen", "shortDescription": {"text": "Unused endpoint: ANY /preopen"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /preopen` 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-0d41953f8d69a746", "name": "Unused endpoint: ANY /candidate-audit", "shortDescription": {"text": "Unused endpoint: ANY /candidate-audit"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /candidate-audit` 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-7f5b53c03c8b8d42", "name": "Unused endpoint: ANY /analytics", "shortDescription": {"text": "Unused endpoint: ANY /analytics"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /analytics` 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-500d0d39af0df4ad", "name": "Unused endpoint: ANY /logs", "shortDescription": {"text": "Unused endpoint: ANY /logs"}, "fullDescription": {"text": "`dashboard/dashboard_server.py` declares `ANY /logs` 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/19930"}, "properties": {"repository": "smyang03/claudetrade", "repoUrl": "https://github.com/smyang03/claudetrade", "branch": "main"}, "results": [{"ruleId": "scanner-e5dd4b91d1e67df4", "level": "note", "message": {"text": "Possibly dead Python function: decorator"}, "properties": {"repobilityId": "ffbcbc9bc189af1c", "scanner": "scanner-primary", "fingerprint": "e5dd4b91d1e67df4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "logger.py:353"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7cc64bcafafc5ce", "level": "note", "message": {"text": "Possibly dead Python function: tail_errors"}, "properties": {"repobilityId": "8f10c00d351e04b8", "scanner": "scanner-primary", "fingerprint": "a7cc64bcafafc5ce", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "logger.py:422"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18de0a65611165b4", "level": "note", "message": {"text": "Possibly dead Python function: increment_holding_days"}, "properties": {"repobilityId": "3e9d981da6a9f3e8", "scanner": "scanner-primary", "fingerprint": "18de0a65611165b4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "risk_manager.py:673"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f1a68ea9d0d35d20", "level": "note", "message": {"text": "Possibly dead Python function: close_position_qty"}, "properties": {"repobilityId": "cc4d9624d4e9701e", "scanner": "scanner-primary", "fingerprint": "f1a68ea9d0d35d20", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "risk_manager.py:1188"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c9a67454d6dd8bb3", "level": "note", "message": {"text": "Possibly dead Python function: force_close_all"}, "properties": {"repobilityId": "3fafcbf4f0757d53", "scanner": "scanner-primary", "fingerprint": "c9a67454d6dd8bb3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "risk_manager.py:1394"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-16fc6765d0bffea0", "level": "note", "message": {"text": "Possibly dead Python function: run_kr_wait60_recheck"}, "properties": {"repobilityId": "2c789751369f7449", "scanner": "scanner-primary", "fingerprint": "16fc6765d0bffea0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "trading_bot.py:5259"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0cffac63bf11e45b", "level": "note", "message": {"text": "Possibly dead Python function: run_housekeeping"}, "properties": {"repobilityId": "69bf2914a646009b", "scanner": "scanner-primary", "fingerprint": "0cffac63bf11e45b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "trading_bot.py:30417"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-671eff9f6672520d", "level": "note", "message": {"text": "Possibly dead Python function: scenario_1_holiday"}, "properties": {"repobilityId": "12b370e3fd0ace26", "scanner": "scanner-primary", "fingerprint": "671eff9f6672520d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d6e70367dc7e6334", "level": "note", "message": {"text": "Possibly dead Python function: scenario_2_reuse"}, "properties": {"repobilityId": "e9ddc34b7c810655", "scanner": "scanner-primary", "fingerprint": "d6e70367dc7e6334", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:112"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9749d6a241ded82f", "level": "note", "message": {"text": "Possibly dead Python function: scenario_3_yf_fallback"}, "properties": {"repobilityId": "3004f8d0efbd8667", "scanner": "scanner-primary", "fingerprint": "9749d6a241ded82f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:181"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9db0e3464995cc9d", "level": "note", "message": {"text": "Possibly dead Python function: scenario_4_risk"}, "properties": {"repobilityId": "46ec75a39326b43a", "scanner": "scanner-primary", "fingerprint": "9db0e3464995cc9d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:229"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-20ef80f1d3afec55", "level": "note", "message": {"text": "Possibly dead Python function: scenario_5_consensus"}, "properties": {"repobilityId": "006120a750a748d9", "scanner": "scanner-primary", "fingerprint": "20ef80f1d3afec55", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:323"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0197178b58c9064a", "level": "note", "message": {"text": "Possibly dead Python function: scenario_6_dashboard"}, "properties": {"repobilityId": "0016e00543857de8", "scanner": "scanner-primary", "fingerprint": "0197178b58c9064a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:388"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c044063e645f1be1", "level": "note", "message": {"text": "Possibly dead Python function: scenario_7_biz_days"}, "properties": {"repobilityId": "2b4a2cdd62ee97bd", "scanner": "scanner-primary", "fingerprint": "c044063e645f1be1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:441"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7a88b8e1a25883e2", "level": "note", "message": {"text": "Possibly dead Python function: scenario_8_strategy"}, "properties": {"repobilityId": "03d2c2a9d00d04ab", "scanner": "scanner-primary", "fingerprint": "7a88b8e1a25883e2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:482"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d4bd5913c3b4000", "level": "note", "message": {"text": "Possibly dead Python function: scenario_9_credits"}, "properties": {"repobilityId": "708a571c26aff8a6", "scanner": "scanner-primary", "fingerprint": "8d4bd5913c3b4000", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_verify.py:552"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90095adeefe48a24", "level": "note", "message": {"text": "Possibly dead Python function: emergency_alert"}, "properties": {"repobilityId": "bf2420a226580513", "scanner": "scanner-primary", "fingerprint": "90095adeefe48a24", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "telegram_reporter.py:455"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-abc7089c28299bbb", "level": "note", "message": {"text": "Possibly dead Python function: signal_alert"}, "properties": {"repobilityId": "4a8d1a9ac1446d0f", "scanner": "scanner-primary", "fingerprint": "abc7089c28299bbb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "telegram_reporter.py:538"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-369f57b84c7d2ed1", "level": "note", "message": {"text": "Possibly dead Python function: calc_budget_A"}, "properties": {"repobilityId": "90dc5e56a37ee9ab", "scanner": "scanner-primary", "fingerprint": "369f57b84c7d2ed1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "_sim_budget.py:25"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fd3273192bc0737a", "level": "note", "message": {"text": "Possibly dead Python function: calc_budget_B"}, "properties": {"repobilityId": "6941e6fbb151ada3", "scanner": "scanner-primary", "fingerprint": "fd3273192bc0737a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "_sim_budget.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-be11ab1cf7d93e36", "level": "note", "message": {"text": "Possibly dead Python function: calc_budget_C"}, "properties": {"repobilityId": "65eba44b29ae04ce", "scanner": "scanner-primary", "fingerprint": "be11ab1cf7d93e36", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "_sim_budget.py:39"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f082be098157fdca", "level": "note", "message": {"text": "Possibly dead Python function: make_params_C"}, "properties": {"repobilityId": "3e204edc94dddf57", "scanner": "scanner-primary", "fingerprint": "f082be098157fdca", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_realdata.py:62"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f032ab18cf91a74", "level": "note", "message": {"text": "Possibly dead Python function: make_params_D"}, "properties": {"repobilityId": "5e58e1121e7b63c7", "scanner": "scanner-primary", "fingerprint": "6f032ab18cf91a74", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_realdata.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8b0bf91fdfbce20c", "level": "note", "message": {"text": "Possibly dead Python function: mr_signal_flex"}, "properties": {"repobilityId": "ba0b8a88a2211c8d", "scanner": "scanner-primary", "fingerprint": "8b0bf91fdfbce20c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sim_realdata.py:78"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7d15488506d48b75", "level": "note", "message": {"text": "Possibly dead Python function: compute"}, "properties": {"repobilityId": "93f64dd87c93b51c", "scanner": "scanner-primary", "fingerprint": "7d15488506d48b75", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "strategy/entry_priority.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-34a78542d1209d6a", "level": "note", "message": {"text": "Very large file: risk_manager.py (1409 lines)"}, "properties": {"repobilityId": "83a115ac558d83e2", "scanner": "scanner-primary", "fingerprint": "34a78542d1209d6a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-860fce510e315199", "level": "note", "message": {"text": "Very large file: test_trading_improvements.py (3834 lines)"}, "properties": {"repobilityId": "b40dfe637c78ee28", "scanner": "scanner-primary", "fingerprint": "860fce510e315199", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ad4739776a7c2e3f", "level": "note", "message": {"text": "Very large file: telegram_commander.py (2296 lines)"}, "properties": {"repobilityId": "a2f562d1b1f8e7a8", "scanner": "scanner-primary", "fingerprint": "ad4739776a7c2e3f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-381ed724668d5d7c", "level": "note", "message": {"text": "Very large file: kis_api.py (5981 lines)"}, "properties": {"repobilityId": "3bab2bdc479529f6", "scanner": "scanner-primary", "fingerprint": "381ed724668d5d7c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6c923947e18ec812", "level": "note", "message": {"text": "Very large file: preopen/continuation_shadow.py (2942 lines)"}, "properties": {"repobilityId": "e54d61488de88ff1", "scanner": "scanner-primary", "fingerprint": "6c923947e18ec812", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5c1cce742ae6bb52", "level": "note", "message": {"text": "Very large file: preopen/storage.py (1385 lines)"}, "properties": {"repobilityId": "50382e564338caa4", "scanner": "scanner-primary", "fingerprint": "5c1cce742ae6bb52", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b65ad617becc587a", "level": "note", "message": {"text": "Very large file: interface/v2_ops_summary.py (3182 lines)"}, "properties": {"repobilityId": "a9e9f36ad5bc7731", "scanner": "scanner-primary", "fingerprint": "b65ad617becc587a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-77812539fe0978c5", "level": "note", "message": {"text": "Very large file: tests/test_dashboard_pathb.py (1573 lines)"}, "properties": {"repobilityId": "23f546258112ec28", "scanner": "scanner-primary", "fingerprint": "77812539fe0978c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0e3fc79f6d979a6c", "level": "note", "message": {"text": "Very large file: tests/test_auto_sell_claude_gate.py (1625 lines)"}, "properties": {"repobilityId": "f98cacc427071d90", "scanner": "scanner-primary", "fingerprint": "0e3fc79f6d979a6c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7552261d90a7152b", "level": "note", "message": {"text": "Very large file: tests/test_v2_learning_performance_sync.py (2095 lines)"}, "properties": {"repobilityId": "758c5dd4e771dcf2", "scanner": "scanner-primary", "fingerprint": "7552261d90a7152b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fafedcec602aa1e7", "level": "note", "message": {"text": "Very large file: tests/test_candidate_quality_trainer.py (1137 lines)"}, "properties": {"repobilityId": "57f12cefb938f405", "scanner": "scanner-primary", "fingerprint": "fafedcec602aa1e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-06b37a2053664541", "level": "note", "message": {"text": "Very large file: tests/test_dashboard_refresh_performance.py (1154 lines)"}, "properties": {"repobilityId": "b3c7396b6688d59d", "scanner": "scanner-primary", "fingerprint": "06b37a2053664541", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8b184ce900d07d24", "level": "note", "message": {"text": "Very large file: tests/test_trading_decision_contract_improvements.py (1803 lines)"}, "properties": {"repobilityId": "4bf78852cfa21079", "scanner": "scanner-primary", "fingerprint": "8b184ce900d07d24", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0329e77b7adb9557", "level": "note", "message": {"text": "Very large file: tests/test_preopen_opening_role_separation.py (1274 lines)"}, "properties": {"repobilityId": "3dffa218335953f3", "scanner": "scanner-primary", "fingerprint": "0329e77b7adb9557", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7622961638ea030d", "level": "note", "message": {"text": "Very large file: tests/test_candidate_audit.py (2487 lines)"}, "properties": {"repobilityId": "cae36c971c9caad6", "scanner": "scanner-primary", "fingerprint": "7622961638ea030d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-46678054495a33e7", "level": "note", "message": {"text": "Very large file: tests/test_candidate_action_live_mapping.py (4317 lines)"}, "properties": {"repobilityId": "112f099042449dab", "scanner": "scanner-primary", "fingerprint": "46678054495a33e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aad6ece28fcaa31f", "level": "note", "message": {"text": "Very large file: tests/test_pathb_runtime.py (5740 lines)"}, "properties": {"repobilityId": "73ac7e51f68c325e", "scanner": "scanner-primary", "fingerprint": "aad6ece28fcaa31f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4dd2372e6c904690", "level": "note", "message": {"text": "Very large file: tests/test_v2_phase6.py (1394 lines)"}, "properties": {"repobilityId": "2c99bf5eafe60023", "scanner": "scanner-primary", "fingerprint": "4dd2372e6c904690", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a7d2a7f642d96260", "level": "note", "message": {"text": "Very large file: phase1_trainer/digest_builder.py (1974 lines)"}, "properties": {"repobilityId": "ddbcbb99615f7660", "scanner": "scanner-primary", "fingerprint": "a7d2a7f642d96260", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d2fbafc3560664a5", "level": "note", "message": {"text": "Very large file: phase1_trainer/price_collector.py (1156 lines)"}, "properties": {"repobilityId": "a995cf5e684f5f3a", "scanner": "scanner-primary", "fingerprint": "d2fbafc3560664a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ca2cce94e3a02de9", "level": "note", "message": {"text": "Very large file: dashboard/dashboard_server.py (17110 lines)"}, "properties": {"repobilityId": "20304aa43f2e3472", "scanner": "scanner-primary", "fingerprint": "ca2cce94e3a02de9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5a44ad6e00b0de3a", "level": "note", "message": {"text": "Very large file: audit/candidate_audit_store.py (1249 lines)"}, "properties": {"repobilityId": "c82df3d6ce813779", "scanner": "scanner-primary", "fingerprint": "5a44ad6e00b0de3a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e0dc95800fd2017b", "level": "note", "message": {"text": "Very large file: runtime/pathb_runtime.py (12068 lines)"}, "properties": {"repobilityId": "a8d49c7908edef35", "scanner": "scanner-primary", "fingerprint": "e0dc95800fd2017b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f228529d16967628", "level": "note", "message": {"text": "Very large file: minority_report/hold_advisor.py (2187 lines)"}, "properties": {"repobilityId": "bfa62fdde4a83d27", "scanner": "scanner-primary", "fingerprint": "f228529d16967628", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0f39319a13c7524f", "level": "note", "message": {"text": "Very large file: minority_report/analysts.py (3595 lines)"}, "properties": {"repobilityId": "708a55a2171f35d0", "scanner": "scanner-primary", "fingerprint": "0f39319a13c7524f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0feb58a505a88f4b", "level": "note", "message": {"text": "Very large file: tools/monitoring_ops_report.py (1817 lines)"}, "properties": {"repobilityId": "f8d7f695b9dec75f", "scanner": "scanner-primary", "fingerprint": "0feb58a505a88f4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8955aa0ea1336dea", "level": "note", "message": {"text": "Very large file: tools/overnight_us_monitor.py (1404 lines)"}, "properties": {"repobilityId": "7234ff25f6417098", "scanner": "scanner-primary", "fingerprint": "8955aa0ea1336dea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ead8e4a72440e729", "level": "note", "message": {"text": "Very large file: tools/build_claude_decision_facts.py (1283 lines)"}, "properties": {"repobilityId": "1673ec1db4bd7714", "scanner": "scanner-primary", "fingerprint": "ead8e4a72440e729", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-54a36beb17b10b14", "level": "note", "message": {"text": "Very large file: tools/analyze_candidate_audit.py (1895 lines)"}, "properties": {"repobilityId": "1553123c82f326c6", "scanner": "scanner-primary", "fingerprint": "54a36beb17b10b14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-919878bf494fc275", "level": "note", "message": {"text": "Very large file: tools/sync_v2_learning_performance.py (1606 lines)"}, "properties": {"repobilityId": "756c8a788bfac680", "scanner": "scanner-primary", "fingerprint": "919878bf494fc275", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4ffe7c7d2b6bd26c", "level": "note", "message": {"text": "Very large file: tools/live_preflight.py (4671 lines)"}, "properties": {"repobilityId": "54a86422604d9513", "scanner": "scanner-primary", "fingerprint": "4ffe7c7d2b6bd26c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "fe19975a07e179e4", "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": "cfcf5ea1dc074aae", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "9bfd833d0b840cb4", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "74704fea6f3467e8", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "cd387fce5488bd48", "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": "9fa1dcc380f6d51a", "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": "ab8f5d6a87a964ea", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-0281dee1326fa1e1", "level": "note", "message": {"text": "Legacy-named symbol `ok_old` in test_kr_trade.py:185"}, "properties": {"repobilityId": "ad6b0a838d7bff21", "scanner": "scanner-primary", "fingerprint": "0281dee1326fa1e1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cadda64ecd62d4c6", "level": "note", "message": {"text": "Stub function `raise_for_status` (body is just `pass`/`return`) \u2014 test_trading_improvements.py:254"}, "properties": {"repobilityId": "3839bf9652a2336e", "scanner": "scanner-primary", "fingerprint": "cadda64ecd62d4c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-20b6a076824a2496", "level": "note", "message": {"text": "Stub function `raise_for_status` (body is just `pass`/`return`) \u2014 test_broker_sync_cash.py:265"}, "properties": {"repobilityId": "6ab49b9efbe3ea1f", "scanner": "scanner-primary", "fingerprint": "20b6a076824a2496", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-d86a80a7239b8489", "level": "none", "message": {"text": "Commented-code block (5 lines) in kis_api.py:5918"}, "properties": {"repobilityId": "1c56d6beb637c6ea", "scanner": "scanner-primary", "fingerprint": "d86a80a7239b8489", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21ef81e0a4614b56", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 kis_api.py:1304"}, "properties": {"repobilityId": "259be967f78a2e8b", "scanner": "scanner-primary", "fingerprint": "21ef81e0a4614b56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a6c9806b138ce21", "level": "note", "message": {"text": "Legacy-named symbol `strict_loss_filter_v1` in preopen/storage.py:310"}, "properties": {"repobilityId": "6add3816a0247cf0", "scanner": "scanner-primary", "fingerprint": "3a6c9806b138ce21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-59f0d13dbb569207", "level": "note", "message": {"text": "Legacy-named symbol `strict_loss_filter_v1` in preopen/news_enrichment.py:115"}, "properties": {"repobilityId": "26822fac97064d4a", "scanner": "scanner-primary", "fingerprint": "59f0d13dbb569207", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e59e47537ae8bb39", "level": "note", "message": {"text": "Legacy-named symbol `candidate_actions_v1` in bot/candidate_policy.py:362"}, "properties": {"repobilityId": "684b796b74b9c065", "scanner": "scanner-primary", "fingerprint": "e59e47537ae8bb39", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e0621f49d8fb5195", "level": "note", "message": {"text": "Legacy-named symbol `env_only_v1` in config/runtime_config.py:63"}, "properties": {"repobilityId": "f1402d4f8b0aa79e", "scanner": "scanner-primary", "fingerprint": "e0621f49d8fb5195", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4fb53a3d43539acc", "level": "note", "message": {"text": "Legacy-named symbol `test_audit_classifies_backfill_watch_split_ambiguous_and_legacy` in tests/test_audit_ticker_selection_attribution.py:243"}, "properties": {"repobilityId": "d0734b910e5a9c9a", "scanner": "scanner-primary", "fingerprint": "4fb53a3d43539acc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4325e53c6e528b18", "level": "note", "message": {"text": "Legacy-named symbol `candidate_post_rank_v1` in tests/test_candidate_post_rank_and_us_quality.py:23"}, "properties": {"repobilityId": "12baebbeef1bac1b", "scanner": "scanner-primary", "fingerprint": "4325e53c6e528b18", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b788fbba0d833cf5", "level": "note", "message": {"text": "Legacy-named symbol `execution_advisor_v1` in tests/test_execution_advisor_runtime.py:96"}, "properties": {"repobilityId": "56c4df0b5cdd963b", "scanner": "scanner-primary", "fingerprint": "b788fbba0d833cf5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-66ca87e2e85997a3", "level": "note", "message": {"text": "Legacy-named symbol `legacy_v1` in tests/test_v2_phase5.py:56"}, "properties": {"repobilityId": "18b284851da3dbb3", "scanner": "scanner-primary", "fingerprint": "66ca87e2e85997a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b45a22b5473e933f", "level": "note", "message": {"text": "Legacy-named symbol `test_apply_without_output_path_replaces_current_and_preserves_contaminated_copy` in tests/test_recover_decisions_db.py:186"}, "properties": {"repobilityId": "4b064e08f8255477", "scanner": "scanner-primary", "fingerprint": "b45a22b5473e933f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-299267c754adde5e", "level": "note", "message": {"text": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_preopen_pin_universe.py:178"}, "properties": {"repobilityId": "4be17950498a45d2", "scanner": "scanner-primary", "fingerprint": "299267c754adde5e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-54746440c4895255", "level": "note", "message": {"text": "Legacy-named symbol `create_live_backup` in tests/test_live_maintenance.py:158"}, "properties": {"repobilityId": "2f20781abc678b75", "scanner": "scanner-primary", "fingerprint": "54746440c4895255", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-82d24acb4a51309d", "level": "note", "message": {"text": "Legacy-named symbol `env_only_v1` in tests/test_effective_runtime_config.py:51"}, "properties": {"repobilityId": "31a43b182be119c5", "scanner": "scanner-primary", "fingerprint": "82d24acb4a51309d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8ad0f7b048866b50", "level": "note", "message": {"text": "Legacy-named symbol `naver_legacy` in tests/test_kr_news_collector_kis.py:179"}, "properties": {"repobilityId": "1f8e4cb35b18cc42", "scanner": "scanner-primary", "fingerprint": "8ad0f7b048866b50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ad94b11af627c1e8", "level": "note", "message": {"text": "Legacy-named symbol `actual_prompt_v1` in tests/test_screener_quality.py:80"}, "properties": {"repobilityId": "d1205ce278ed3dd6", "scanner": "scanner-primary", "fingerprint": "ad94b11af627c1e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-98283d4cdcef38e0", "level": "note", "message": {"text": "Legacy-named symbol `test_last_good_recomputes_stale_and_fails_closed_when_old` in tests/test_broker_truth_snapshot.py:492"}, "properties": {"repobilityId": "21c3c2fed8e2d58f", "scanner": "scanner-primary", "fingerprint": "98283d4cdcef38e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f9026c66c3dd0e3d", "level": "note", "message": {"text": "Legacy-named symbol `path_old` in tests/test_v2_learning_performance_sync.py:556"}, "properties": {"repobilityId": "f3b66e0a452c0e52", "scanner": "scanner-primary", "fingerprint": "f9026c66c3dd0e3d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5840893e8224acdc", "level": "note", "message": {"text": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_preopen_news_enrichment.py:79"}, "properties": {"repobilityId": "fbd34bef54d25571", "scanner": "scanner-primary", "fingerprint": "5840893e8224acdc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-25188895a809b865", "level": "note", "message": {"text": "Legacy-named symbol `strict_loss_filter_v1` in tests/test_candidate_quality_trainer.py:323"}, "properties": {"repobilityId": "7b8dd44b54be28ac", "scanner": "scanner-primary", "fingerprint": "25188895a809b865", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-66e28384281f9bcd", "level": "note", "message": {"text": "Legacy-named symbol `cap2_mfe_v1` in tests/test_loss_cap_profit_floor.py:226"}, "properties": {"repobilityId": "fa145316d1fd3090", "scanner": "scanner-primary", "fingerprint": "66e28384281f9bcd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-62dc852cd527cc75", "level": "note", "message": {"text": "Legacy-named symbol `advisor_context_v2` in tests/test_price_unit_normalization.py:122"}, "properties": {"repobilityId": "c6b0ad97f5c3f533", "scanner": "scanner-primary", "fingerprint": "62dc852cd527cc75", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-132c8a45c18c73d0", "level": "note", "message": {"text": "Legacy-named symbol `test_empty_selection_meta_fallback_is_watch_only_in_v2` in tests/test_claude_trade_quality_rework.py:391"}, "properties": {"repobilityId": "f55a4bd2ba69a603", "scanner": "scanner-primary", "fingerprint": "132c8a45c18c73d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-14fb3d9589ab9cbf", "level": "note", "message": {"text": "Legacy-named symbol `_environ_backup` in tests/test_live_guardian.py:29"}, "properties": {"repobilityId": "b99656993475229a", "scanner": "scanner-primary", "fingerprint": "14fb3d9589ab9cbf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b28e1ebd977539f6", "level": "note", "message": {"text": "Legacy-named symbol `pos_KR_067170_legacy` in tests/test_v2_phase1.py:215"}, "properties": {"repobilityId": "a3df2902bc84cd57", "scanner": "scanner-primary", "fingerprint": "b28e1ebd977539f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ba141223a60fda0e", "level": "note", "message": {"text": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_dashboard_candidate_audit_api.py:219"}, "properties": {"repobilityId": "ecd9efca3d55efd8", "scanner": "scanner-primary", "fingerprint": "ba141223a60fda0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2fc6fa63e5200270", "level": "note", "message": {"text": "Legacy-named symbol `test_dry_run_does_not_modify_file_and_write_creates_backup` in tests/test_lesson_quality_backfill.py:21"}, "properties": {"repobilityId": "969a5466ab6d812a", "scanner": "scanner-primary", "fingerprint": "2fc6fa63e5200270", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-134014fef163fd4e", "level": "note", "message": {"text": "Legacy-named symbol `test_triage_stage_allowlist_keeps_non_auto_sell_review_legacy` in tests/test_trading_decision_contract_improvements.py:258"}, "properties": {"repobilityId": "4589ad1a96941be9", "scanner": "scanner-primary", "fingerprint": "134014fef163fd4e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-83c2328fb1df5ec8", "level": "note", "message": {"text": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_candidate_discovery_overlay.py:33"}, "properties": {"repobilityId": "f0b9ebff19a53c44", "scanner": "scanner-primary", "fingerprint": "83c2328fb1df5ec8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-02cfb667e89d998a", "level": "note", "message": {"text": "Legacy-named symbol `patha_or_legacy` in tests/test_v2_quality_audit.py:89"}, "properties": {"repobilityId": "f1743d92cde6f16d", "scanner": "scanner-primary", "fingerprint": "02cfb667e89d998a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-03bb2070c57d7f48", "level": "note", "message": {"text": "Legacy-named symbol `actual_prompt_v1` in tests/test_candidate_audit.py:89"}, "properties": {"repobilityId": "841c772c70220dec", "scanner": "scanner-primary", "fingerprint": "03bb2070c57d7f48", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9fbbb59a4139f2e3", "level": "note", "message": {"text": "Legacy-named symbol `selection_preopen_watch_v1` in tests/test_preopen_shadow.py:302"}, "properties": {"repobilityId": "f7db7948a22cb169", "scanner": "scanner-primary", "fingerprint": "9fbbb59a4139f2e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ee2a4f4d47133011", "level": "note", "message": {"text": "Legacy-named symbol `trainer_quality_v1` in tests/test_candidate_action_live_mapping.py:3365"}, "properties": {"repobilityId": "6809d4e0f9206fc7", "scanner": "scanner-primary", "fingerprint": "ee2a4f4d47133011", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f491078a2f086da7", "level": "note", "message": {"text": "Legacy-named symbol `test_write_normalizes_us_supplement_and_creates_backup` in tests/test_p0_data_quality_backfill.py:52"}, "properties": {"repobilityId": "43e7b0f7d0fc6ae3", "scanner": "scanner-primary", "fingerprint": "f491078a2f086da7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b414ad9ef4ac31ba", "level": "note", "message": {"text": "Legacy-named symbol `test_panic_without_positions_still_confirms_and_runs_v2` in tests/test_telegram_danger_confirm.py:85"}, "properties": {"repobilityId": "8b2d61bf9307a7e5", "scanner": "scanner-primary", "fingerprint": "b414ad9ef4ac31ba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ca18ccf3dc56e699", "level": "note", "message": {"text": "Legacy-named symbol `pathb_price_v1` in tests/test_pathb_runtime.py:269"}, "properties": {"repobilityId": "a0cf260d784f4ca6", "scanner": "scanner-primary", "fingerprint": "ca18ccf3dc56e699", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a34c22ec22762bfd", "level": "note", "message": {"text": "Legacy-named symbol `test_runs_refresh_when_judgment_is_old` in tests/test_opening_judgment_refresh_dedup.py:38"}, "properties": {"repobilityId": "c1a51858dbf352f3", "scanner": "scanner-primary", "fingerprint": "a34c22ec22762bfd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0c9a6cd99b61554e", "level": "note", "message": {"text": "Legacy-named symbol `advisor_context_v2` in tests/test_kr_intraday_recheck_live.py:93"}, "properties": {"repobilityId": "0b677ed972b208aa", "scanner": "scanner-primary", "fingerprint": "0c9a6cd99b61554e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-299c2192c79b7be1", "level": "note", "message": {"text": "Legacy-named symbol `fresh_v2_reference_v1` in tests/test_v2_daily_loop.py:92"}, "properties": {"repobilityId": "c2a377cd5bb4c9a4", "scanner": "scanner-primary", "fingerprint": "299c2192c79b7be1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b3132af50bccd6cf", "level": "note", "message": {"text": "Legacy-named symbol `trainer_prompt_pool_v1` in tests/test_prompt_overlay.py:148"}, "properties": {"repobilityId": "d87708f30ff0933f", "scanner": "scanner-primary", "fingerprint": "b3132af50bccd6cf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4e025a69f5dc8efa", "level": "note", "message": {"text": "Legacy-named symbol `same_ticker_old` in tests/test_ops_kr_wait_re_evaluation_queue.py:203"}, "properties": {"repobilityId": "5042397bcdea827b", "scanner": "scanner-primary", "fingerprint": "4e025a69f5dc8efa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-da1452ab66fcd59f", "level": "note", "message": {"text": "Legacy-named symbol `cand_old` in tests/test_claude_decision_facts.py:285"}, "properties": {"repobilityId": "755974adc14899cc", "scanner": "scanner-primary", "fingerprint": "da1452ab66fcd59f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d185b242d05c28b3", "level": "note", "message": {"text": "Legacy-named symbol `compact_candidate_actions_v1` in tests/test_v2_phase6.py:491"}, "properties": {"repobilityId": "7cb0bea75576f947", "scanner": "scanner-primary", "fingerprint": "d185b242d05c28b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0bac829ce603b0cd", "level": "note", "message": {"text": "Legacy-named symbol `advisor_context_v2` in tests/test_preopen_auto_sell_recheck.py:331"}, "properties": {"repobilityId": "043fa35550d079bb", "scanner": "scanner-primary", "fingerprint": "0bac829ce603b0cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-db7efc8b6e30b295", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/kr_news_collector.py:552"}, "properties": {"repobilityId": "85a6120ca72d397e", "scanner": "scanner-primary", "fingerprint": "db7efc8b6e30b295", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9f1f51ad1d73fdf", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/supplement_collector.py:95"}, "properties": {"repobilityId": "3456d5631b9f188c", "scanner": "scanner-primary", "fingerprint": "f9f1f51ad1d73fdf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-331654936d3f371a", "level": "note", "message": {"text": "Legacy-named symbol `_save_legacy` in phase1_trainer/price_collector.py:845"}, "properties": {"repobilityId": "db9340fa3026b8e4", "scanner": "scanner-primary", "fingerprint": "331654936d3f371a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-53f32ca8a94b6b45", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 phase1_trainer/price_collector.py:316"}, "properties": {"repobilityId": "424a88367cc44fc1", "scanner": "scanner-primary", "fingerprint": "53f32ca8a94b6b45", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da114ce0f51a3bbd", "level": "note", "message": {"text": "Legacy-named symbol `profit_guard_v1` in test/test_audit_lab.py:602"}, "properties": {"repobilityId": "4f9870c3ececc1a3", "scanner": "scanner-primary", "fingerprint": "da114ce0f51a3bbd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7643c26e6d890d1a", "level": "note", "message": {"text": "Legacy-named symbol `audit_lab_event_loop_v1` in test/audit_lab/db.py:417"}, "properties": {"repobilityId": "3db14a0339b4389f", "scanner": "scanner-primary", "fingerprint": "7643c26e6d890d1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-06bff1e46d1c3d76", "level": "note", "message": {"text": "Legacy-named symbol `profit_guard_v2` in test/audit_lab/intraday_targets.py:54"}, "properties": {"repobilityId": "5953da8c99b818d6", "scanner": "scanner-primary", "fingerprint": "06bff1e46d1c3d76", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-77f80f8f1153348b", "level": "note", "message": {"text": "Legacy-named symbol `profit_guard_v1` in test/audit_lab/strategy_policy.py:24"}, "properties": {"repobilityId": "11265e294a9a68f5", "scanner": "scanner-primary", "fingerprint": "77f80f8f1153348b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-07a4f076a28dde0b", "level": "note", "message": {"text": "Legacy-named symbol `_restart_bot_process_legacy` in dashboard/dashboard_server.py:1107"}, "properties": {"repobilityId": "601aa0890e7eb228", "scanner": "scanner-primary", "fingerprint": "07a4f076a28dde0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f7ff3a7fdafb1a25", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 dashboard/dashboard_server.py:1075"}, "properties": {"repobilityId": "fc4d90eb20e890a4", "scanner": "scanner-primary", "fingerprint": "f7ff3a7fdafb1a25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f7d9195fc0ae331", "level": "note", "message": {"text": "Legacy-named symbol `pathb_price_v1` in decision/claude_price_plan.py:105"}, "properties": {"repobilityId": "2880e7046444ebcc", "scanner": "scanner-primary", "fingerprint": "9f7d9195fc0ae331", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4bb7d386ed4f63dc", "level": "note", "message": {"text": "Legacy-named symbol `legacy_v1` in lifecycle/validation.py:691"}, "properties": {"repobilityId": "54a4c6011401827b", "scanner": "scanner-primary", "fingerprint": "4bb7d386ed4f63dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e39d2cc2c37309e9", "level": "note", "message": {"text": "Legacy-named symbol `single_symbol_judge_v1` in execution/single_symbol_judge.py:423"}, "properties": {"repobilityId": "6fed82aa3f6c1671", "scanner": "scanner-primary", "fingerprint": "e39d2cc2c37309e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3aad1f967fbc6084", "level": "note", "message": {"text": "Legacy-named symbol `pathb_price_v1` in execution/claude_price_adapter.py:416"}, "properties": {"repobilityId": "1f9e96b6ea44d4aa", "scanner": "scanner-primary", "fingerprint": "3aad1f967fbc6084", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d326f836d9fa6ff2", "level": "note", "message": {"text": "Legacy-named symbol `buy_time_confirm_judge_v1` in execution/buy_time_confirm_judge.py:232"}, "properties": {"repobilityId": "bcd59c1dd0d6d8ea", "scanner": "scanner-primary", "fingerprint": "d326f836d9fa6ff2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-15d48a76bb4302f2", "level": "note", "message": {"text": "Legacy-named symbol `compact_candidate_actions_v1` in runtime/selection_compact_schema.py:500"}, "properties": {"repobilityId": "e5d2bf2b7c4999ee", "scanner": "scanner-primary", "fingerprint": "15d48a76bb4302f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3b289eb7a1af5f32", "level": "note", "message": {"text": "Legacy-named symbol `is_v2` in runtime/candidate_actions.py:232"}, "properties": {"repobilityId": "e5bea8238bc55cb1", "scanner": "scanner-primary", "fingerprint": "3b289eb7a1af5f32", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2a08f7ddca036f59", "level": "note", "message": {"text": "Legacy-named symbol `penalty_old` in runtime/candidate_freshness.py:184"}, "properties": {"repobilityId": "cd76776e3ebd03de", "scanner": "scanner-primary", "fingerprint": "2a08f7ddca036f59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c506bb0019ec86fd", "level": "note", "message": {"text": "Legacy-named symbol `trainer_prompt_pool_v1` in runtime/candidate_prompt_pool.py:13"}, "properties": {"repobilityId": "f7db2a1ad23611b3", "scanner": "scanner-primary", "fingerprint": "c506bb0019ec86fd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6796ade7cf42f2ca", "level": "note", "message": {"text": "Legacy-named symbol `candidate_post_rank_v1` in runtime/candidate_post_rank.py:6"}, "properties": {"repobilityId": "a682442a5cc6f34f", "scanner": "scanner-primary", "fingerprint": "6796ade7cf42f2ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1023fd9734bdd064", "level": "note", "message": {"text": "Legacy-named symbol `trainer_quality_v1` in runtime/candidate_quality_trainer.py:10"}, "properties": {"repobilityId": "ba22ccb906b00878", "scanner": "scanner-primary", "fingerprint": "1023fd9734bdd064", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d34e79d10b1b3130", "level": "note", "message": {"text": "Legacy-named symbol `execution_advisor_v1` in runtime/execution_advisor_runtime.py:289"}, "properties": {"repobilityId": "4803dcb1bab4ac88", "scanner": "scanner-primary", "fingerprint": "d34e79d10b1b3130", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c5e2b449be2a291a", "level": "note", "message": {"text": "Legacy-named symbol `fresh_v2` in runtime/v2_lifecycle_runtime.py:63"}, "properties": {"repobilityId": "ce81d06b784d6f60", "scanner": "scanner-primary", "fingerprint": "c5e2b449be2a291a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e6ed94e0d1f7ec14", "level": "note", "message": {"text": "Legacy-named symbol `us_quality_shadow_v1` in runtime/us_candidate_quality.py:8"}, "properties": {"repobilityId": "f32d4e9f3865337a", "scanner": "scanner-primary", "fingerprint": "e6ed94e0d1f7ec14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-af2cd18e925e7b36", "level": "note", "message": {"text": "Legacy-named symbol `discovery_overlay_v1` in runtime/candidate_discovery_overlay.py:10"}, "properties": {"repobilityId": "95cbae2f8a7cc2f9", "scanner": "scanner-primary", "fingerprint": "af2cd18e925e7b36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ad37dee56fe48c8a", "level": "note", "message": {"text": "Legacy-named symbol `pathb_price_v1` in runtime/pathb_runtime.py:1790"}, "properties": {"repobilityId": "e2c4d1f9dcf16e36", "scanner": "scanner-primary", "fingerprint": "ad37dee56fe48c8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d3bd84714c3db542", "level": "note", "message": {"text": "Stub function `startup_health_check` (body is just `pass`/`return`) \u2014 runtime/rehearsal/backends.py:249"}, "properties": {"repobilityId": "3379016c3e5de2d3", "scanner": "scanner-primary", "fingerprint": "d3bd84714c3db542", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-b721fcc8f2db5541", "level": "note", "message": {"text": "Legacy-named symbol `quick_exit_v2` in minority_report/quick_exit_check.py:137"}, "properties": {"repobilityId": "6df39fbaae91c688", "scanner": "scanner-primary", "fingerprint": "b721fcc8f2db5541", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6f05f0ff59bfb396", "level": "note", "message": {"text": "Legacy-named symbol `advisor_context_v2` in minority_report/hold_advisor.py:52"}, "properties": {"repobilityId": "027bb8b24197553b", "scanner": "scanner-primary", "fingerprint": "6f05f0ff59bfb396", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d060c92c0ff18142", "level": "note", "message": {"text": "Legacy-named symbol `execution_plan_v1` in minority_report/prompt_contracts.py:29"}, "properties": {"repobilityId": "9e4cfcdd0e9c8b08", "scanner": "scanner-primary", "fingerprint": "d060c92c0ff18142", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-21b1a6502c9055a5", "level": "note", "message": {"text": "Legacy-named symbol `selection_preopen_watch_v1` in minority_report/analysts.py:2951"}, "properties": {"repobilityId": "b37343451987f25a", "scanner": "scanner-primary", "fingerprint": "21b1a6502c9055a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4bd2241b21b6f091", "level": "note", "message": {"text": "Legacy-named symbol `_days_old` in minority_report/active_lessons.py:136"}, "properties": {"repobilityId": "7d7da234ae41b92a", "scanner": "scanner-primary", "fingerprint": "4bd2241b21b6f091", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ea974a84902d2834", "level": "note", "message": {"text": "Legacy-named symbol `advisor_context_v2` in tools/simulate_hold_advisor_decision_modes.py:254"}, "properties": {"repobilityId": "dec59f172659bfe4", "scanner": "scanner-primary", "fingerprint": "ea974a84902d2834", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-da2eef45a2a15fc2", "level": "note", "message": {"text": "Legacy-named symbol `create_live_backup` in tools/live_maintenance.py:250"}, "properties": {"repobilityId": "6d870408134bf305", "scanner": "scanner-primary", "fingerprint": "da2eef45a2a15fc2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-884a4167dd110de8", "level": "note", "message": {"text": "Legacy-named symbol `_sqlite_backup` in tools/promote_external_data.py:47"}, "properties": {"repobilityId": "80a92d5899f5cb6a", "scanner": "scanner-primary", "fingerprint": "884a4167dd110de8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2973ed27653754a5", "level": "note", "message": {"text": "Legacy-named symbol `matched_v2` in tools/audit_ticker_selection_attribution.py:416"}, "properties": {"repobilityId": "2accf79dd7968180", "scanner": "scanner-primary", "fingerprint": "2973ed27653754a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2e211562d2ffeee1", "level": "note", "message": {"text": "Legacy-named symbol `p0_data_quality_backfill_v1` in tools/p0_data_quality_backfill.py:30"}, "properties": {"repobilityId": "b02c85165f4b18f9", "scanner": "scanner-primary", "fingerprint": "2e211562d2ffeee1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-abb4e13c44532027", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/check_mojibake.py:65"}, "properties": {"repobilityId": "e00d4254683d1949", "scanner": "scanner-primary", "fingerprint": "abb4e13c44532027", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-89683934b2add3c4", "level": "note", "message": {"text": "Legacy-named symbol `actual_prompt_v1` in tools/analyze_candidate_audit.py:806"}, "properties": {"repobilityId": "63623fff1e257127", "scanner": "scanner-primary", "fingerprint": "89683934b2add3c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7f69e17f0fbe4fa1", "level": "note", "message": {"text": "Legacy-named symbol `strict_loss_filter_v1` in tools/preopen_candidate_replay.py:24"}, "properties": {"repobilityId": "7d044feb6263dbc4", "scanner": "scanner-primary", "fingerprint": "7f69e17f0fbe4fa1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2cd69bdeed715fc3", "level": "note", "message": {"text": "Legacy-named symbol `patha_or_legacy` in tools/v2_quality_audit.py:354"}, "properties": {"repobilityId": "9ffef77b8db1522e", "scanner": "scanner-primary", "fingerprint": "2cd69bdeed715fc3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-54fa44434fa4eed4", "level": "note", "message": {"text": "Legacy-named symbol `_sqlite_backup` in tools/clean_agent_call_event_store.py:92"}, "properties": {"repobilityId": "f34969cfa2baa75e", "scanner": "scanner-primary", "fingerprint": "54fa44434fa4eed4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-47da78732cfbce98", "level": "note", "message": {"text": "Stub function `set_enabled` (body is just `pass`/`return`) \u2014 tools/live_preflight.py:3963"}, "properties": {"repobilityId": "331a4d8c695788d1", "scanner": "scanner-primary", "fingerprint": "47da78732cfbce98", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-0432660e9d0925dc", "level": "note", "message": {"text": "Legacy-named symbol `advisor_context_v2` in tools/analyze_hold_advisor_latency.py:134"}, "properties": {"repobilityId": "b2ef2f238be17044", "scanner": "scanner-primary", "fingerprint": "0432660e9d0925dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9bbaf3ad0917a2e4", "level": "note", "message": {"text": "Legacy-named symbol `advisor_context_v2` in tools/monitor_hold_advisor_triage_quality.py:205"}, "properties": {"repobilityId": "3058ec090e43b03d", "scanner": "scanner-primary", "fingerprint": "9bbaf3ad0917a2e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7bdef92e0aa721db", "level": "note", "message": {"text": "Legacy-named symbol `fresh_v2_reference_v1` in tools/v2_daily_loop.py:298"}, "properties": {"repobilityId": "40ff850d02afdeb4", "scanner": "scanner-primary", "fingerprint": "7bdef92e0aa721db", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9a086e6268b4f7bb", "level": "note", "message": {"text": "Legacy-named symbol `sonnet_old` in tools/prompt_eval_improve.py:343"}, "properties": {"repobilityId": "8144c25640b57d0f", "scanner": "scanner-primary", "fingerprint": "9a086e6268b4f7bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc341d87e76ffc39", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 tools/live_guardian.py:446"}, "properties": {"repobilityId": "8b7274d1be521570", "scanner": "scanner-primary", "fingerprint": "dc341d87e76ffc39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7d4641e9d9c2d4a", "level": "note", "message": {"text": "197 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "25faedc32326d04a", "scanner": "scanner-primary", "fingerprint": "f7d4641e9d9c2d4a", "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": "dec0c011eb8688ef", "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": "47ce7a3c8f426db1", "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": "58e5b9c69d337a4a", "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": "8cc72b407528dca0", "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": "d662ad65e98256ca", "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": "3852c7ce1ac657d3", "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": "ea4ee224f90df20c", "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": "f5f95253a826f4f9", "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": "45b3c7168a78f8da", "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": "0dbf6e5f792b6747", "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": "18ccf06dfe85918a", "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": "d5d02963b895936d", "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": "aa932873ac40d01c", "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": "3a37b97298cbe153", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "a6cea2775dfe91a0", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "1857a737e58434ae", "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": "25e0b178b7ccf727", "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": "3d5ec8feb1289bd6", "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": "c968eb5cc43904f9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "87caef6f44de5431", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-e258d1973c46d268", "level": "note", "message": {"text": "Unused endpoint: ANY /api/summary"}, "properties": {"repobilityId": "e84245bf90a732c0", "scanner": "scanner-primary", "fingerprint": "e258d1973c46d268", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb36d5b64103a1c8", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/ops"}, "properties": {"repobilityId": "db10c3c169589e2f", "scanner": "scanner-primary", "fingerprint": "eb36d5b64103a1c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5dff5ff73c63cebe", "level": "note", "message": {"text": "Unused endpoint: ANY /api/logs/alerts"}, "properties": {"repobilityId": "e39581072d5ce54d", "scanner": "scanner-primary", "fingerprint": "5dff5ff73c63cebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a51aff466d1ef45", "level": "note", "message": {"text": "Unused endpoint: ANY /api/position/chart"}, "properties": {"repobilityId": "7ab6037b3c22b8db", "scanner": "scanner-primary", "fingerprint": "3a51aff466d1ef45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72bb235977c7de9e", "level": "note", "message": {"text": "Unused endpoint: ANY /api/preopen"}, "properties": {"repobilityId": "f8f08cc81574c5c4", "scanner": "scanner-primary", "fingerprint": "72bb235977c7de9e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-061d5526afce763a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/claude/status"}, "properties": {"repobilityId": "caa4d2c199edf709", "scanner": "scanner-primary", "fingerprint": "061d5526afce763a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53d682b70e72dd75", "level": "note", "message": {"text": "Unused endpoint: ANY /api/claude/toggle"}, "properties": {"repobilityId": "5805d83af0318425", "scanner": "scanner-primary", "fingerprint": "53d682b70e72dd75", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-399cc82f8ef11988", "level": "note", "message": {"text": "Unused endpoint: ANY /api/claude/trigger"}, "properties": {"repobilityId": "2b4b139e23871c83", "scanner": "scanner-primary", "fingerprint": "399cc82f8ef11988", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-58cbcec1ddccde5c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/judgments"}, "properties": {"repobilityId": "a2155df3eae81cf3", "scanner": "scanner-primary", "fingerprint": "58cbcec1ddccde5c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67094ff70034865f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/chart/equity"}, "properties": {"repobilityId": "ff167be59bc31695", "scanner": "scanner-primary", "fingerprint": "67094ff70034865f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c68b448d4778ac30", "level": "note", "message": {"text": "Unused endpoint: ANY /api/chart/analyst"}, "properties": {"repobilityId": "f44cb020f66de69b", "scanner": "scanner-primary", "fingerprint": "c68b448d4778ac30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f09ee4a7f6c91479", "level": "note", "message": {"text": "Unused endpoint: ANY /api/chart/market-context"}, "properties": {"repobilityId": "9b0def1df5e91ca6", "scanner": "scanner-primary", "fingerprint": "f09ee4a7f6c91479", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1605d8ec875d542", "level": "note", "message": {"text": "Unused endpoint: ANY /api/patterns"}, "properties": {"repobilityId": "9e913ebf15d9460f", "scanner": "scanner-primary", "fingerprint": "d1605d8ec875d542", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-553dbc6dbde36f1f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/active-lessons"}, "properties": {"repobilityId": "bf70b7532f3e7a48", "scanner": "scanner-primary", "fingerprint": "553dbc6dbde36f1f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67c1591d8224bfcf", "level": "note", "message": {"text": "Unused endpoint: ANY /api/hold-advisor/summary"}, "properties": {"repobilityId": "a23565cbb4864930", "scanner": "scanner-primary", "fingerprint": "67c1591d8224bfcf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a13f7eb82537a919", "level": "note", "message": {"text": "Unused endpoint: ANY /api/credits"}, "properties": {"repobilityId": "2a78203214702eb8", "scanner": "scanner-primary", "fingerprint": "a13f7eb82537a919", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-65c105e1a0bc4c76", "level": "note", "message": {"text": "Unused endpoint: ANY /api/control/status"}, "properties": {"repobilityId": "90fea73801182fc6", "scanner": "scanner-primary", "fingerprint": "65c105e1a0bc4c76", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d140147c57cf53a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/control/restart-dashboard"}, "properties": {"repobilityId": "64c458f6783957b4", "scanner": "scanner-primary", "fingerprint": "5d140147c57cf53a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a7622acf183f195b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/broker/refresh"}, "properties": {"repobilityId": "375bd9b8c7398286", "scanner": "scanner-primary", "fingerprint": "a7622acf183f195b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec52efe398b1a5e8", "level": "note", "message": {"text": "Unused endpoint: ANY /api/pnl/lifetime-realized"}, "properties": {"repobilityId": "16f8c71a9e84b0e7", "scanner": "scanner-primary", "fingerprint": "ec52efe398b1a5e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90300e67bbaec0f2", "level": "note", "message": {"text": "Unused endpoint: ANY /api/control/restart-bot"}, "properties": {"repobilityId": "71c2bf17018d007a", "scanner": "scanner-primary", "fingerprint": "90300e67bbaec0f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dcf4e78d1d3ba1db", "level": "note", "message": {"text": "Unused endpoint: ANY /api/control/order-size"}, "properties": {"repobilityId": "286dc552923f37a1", "scanner": "scanner-primary", "fingerprint": "dcf4e78d1d3ba1db", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3427a531ba46f035", "level": "note", "message": {"text": "Unused endpoint: ANY /api/control/gross-cap"}, "properties": {"repobilityId": "667bf3f3df5e0d6f", "scanner": "scanner-primary", "fingerprint": "3427a531ba46f035", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b46263851acc5e5", "level": "note", "message": {"text": "Unused endpoint: ANY /api/control/stop-cluster-reset"}, "properties": {"repobilityId": "ef84f32ab8820a9d", "scanner": "scanner-primary", "fingerprint": "4b46263851acc5e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5bead17e826f8a0", "level": "note", "message": {"text": "Unused endpoint: ANY /api/brain"}, "properties": {"repobilityId": "3cc0ea46e0e7c77d", "scanner": "scanner-primary", "fingerprint": "c5bead17e826f8a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2e67147ca876a7c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/brain/history"}, "properties": {"repobilityId": "07503adf02310c12", "scanner": "scanner-primary", "fingerprint": "b2e67147ca876a7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8d964c14ce23851", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stats/period"}, "properties": {"repobilityId": "66c7592dd6348e2d", "scanner": "scanner-primary", "fingerprint": "a8d964c14ce23851", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a3c1186be5c1d386", "level": "note", "message": {"text": "Unused endpoint: ANY /api/history/monthly"}, "properties": {"repobilityId": "ec63933941c5387d", "scanner": "scanner-primary", "fingerprint": "a3c1186be5c1d386", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bce028bd48f66dad", "level": "note", "message": {"text": "Unused endpoint: ANY /api/history/equity"}, "properties": {"repobilityId": "0dcaa5d6f6630f7a", "scanner": "scanner-primary", "fingerprint": "bce028bd48f66dad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7a239d6166c0ba4", "level": "note", "message": {"text": "Unused endpoint: ANY /api/trades/list"}, "properties": {"repobilityId": "7ec2008e28e0e021", "scanner": "scanner-primary", "fingerprint": "f7a239d6166c0ba4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-96146ca451efaeeb", "level": "note", "message": {"text": "Unused endpoint: ANY /api/trades/broker"}, "properties": {"repobilityId": "0c1ac74841d02d82", "scanner": "scanner-primary", "fingerprint": "96146ca451efaeeb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5667e428945265ff", "level": "note", "message": {"text": "Unused endpoint: ANY /api/trades/broker/status"}, "properties": {"repobilityId": "0bb97bacbb83791c", "scanner": "scanner-primary", "fingerprint": "5667e428945265ff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f01c74a912aee5cc", "level": "note", "message": {"text": "Unused endpoint: ANY /api/signals/recent"}, "properties": {"repobilityId": "bf4c7adcb5598760", "scanner": "scanner-primary", "fingerprint": "f01c74a912aee5cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f5b4c4ab68ecfabe", "level": "note", "message": {"text": "Unused endpoint: ANY /api/decisions"}, "properties": {"repobilityId": "b201dc79a8a6415b", "scanner": "scanner-primary", "fingerprint": "f5b4c4ab68ecfabe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b7da5c21eed48935", "level": "note", "message": {"text": "Unused endpoint: ANY /api/candidate-audit/summary"}, "properties": {"repobilityId": "1eb33d97f150afce", "scanner": "scanner-primary", "fingerprint": "b7da5c21eed48935", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0af3cac9f917954f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/candidate-audit/rows"}, "properties": {"repobilityId": "1b68913adcc26a2c", "scanner": "scanner-primary", "fingerprint": "0af3cac9f917954f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e55402a6bba27072", "level": "note", "message": {"text": "Unused endpoint: ANY /api/refresh_prices"}, "properties": {"repobilityId": "f94c4dc7f9d4ca06", "scanner": "scanner-primary", "fingerprint": "e55402a6bba27072", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d3aaaf32f720983f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/review_position"}, "properties": {"repobilityId": "8f968fbf55bc6393", "scanner": "scanner-primary", "fingerprint": "d3aaaf32f720983f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0ea5235ff1b85e5", "level": "note", "message": {"text": "Unused endpoint: ANY /api/immediate_sell"}, "properties": {"repobilityId": "8edb5eef40d5aef7", "scanner": "scanner-primary", "fingerprint": "c0ea5235ff1b85e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d31564b469ce2e1b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/tickers/today"}, "properties": {"repobilityId": "428d3cee984e5671", "scanner": "scanner-primary", "fingerprint": "d31564b469ce2e1b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "12c03f49ac5e4127", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f99c35fd76e8c6bc", "level": "note", "message": {"text": "Unused endpoint: ANY /history"}, "properties": {"repobilityId": "3fa49ab7658e8606", "scanner": "scanner-primary", "fingerprint": "f99c35fd76e8c6bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-882db530ae1d6bf0", "level": "note", "message": {"text": "Unused endpoint: ANY /trades"}, "properties": {"repobilityId": "23c4de69b7327a1d", "scanner": "scanner-primary", "fingerprint": "882db530ae1d6bf0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdcef65ed12aa823", "level": "note", "message": {"text": "Unused endpoint: ANY /broker-trades"}, "properties": {"repobilityId": "22ce75bf1eca94a3", "scanner": "scanner-primary", "fingerprint": "cdcef65ed12aa823", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7e79a7f0b514f901", "level": "note", "message": {"text": "Unused endpoint: ANY /pathb"}, "properties": {"repobilityId": "50807f2c07f9c7b9", "scanner": "scanner-primary", "fingerprint": "7e79a7f0b514f901", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-320972a7cc8ee166", "level": "note", "message": {"text": "Unused endpoint: ANY /preopen"}, "properties": {"repobilityId": "7004de1d3f751581", "scanner": "scanner-primary", "fingerprint": "320972a7cc8ee166", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d41953f8d69a746", "level": "note", "message": {"text": "Unused endpoint: ANY /candidate-audit"}, "properties": {"repobilityId": "7e5dcf2176fd0187", "scanner": "scanner-primary", "fingerprint": "0d41953f8d69a746", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f5b53c03c8b8d42", "level": "note", "message": {"text": "Unused endpoint: ANY /analytics"}, "properties": {"repobilityId": "0899c35e3a14976b", "scanner": "scanner-primary", "fingerprint": "7f5b53c03c8b8d42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-500d0d39af0df4ad", "level": "note", "message": {"text": "Unused endpoint: ANY /logs"}, "properties": {"repobilityId": "713b390736f42249", "scanner": "scanner-primary", "fingerprint": "500d0d39af0df4ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}