{"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-d084c0fef9522382", "name": "Possibly dead Python function: spy", "shortDescription": {"text": "Possibly dead Python function: spy"}, "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-4010e318519dc968", "name": "Possibly dead Python function: is_td", "shortDescription": {"text": "Possibly dead Python function: is_td"}, "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-6522c2b94980a9f5", "name": "Possibly dead Python function: run_engine", "shortDescription": {"text": "Possibly dead Python function: run_engine"}, "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-11f692bbfe3fa63c", "name": "Possibly dead Python function: run_manager", "shortDescription": {"text": "Possibly dead Python function: run_manager"}, "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-4dc44f394667b850", "name": "Possibly dead Python function: spy_tp", "shortDescription": {"text": "Possibly dead Python function: spy_tp"}, "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-890c61de698855a1", "name": "Possibly dead Python function: manual_screening", "shortDescription": {"text": "Possibly dead Python function: manual_screening"}, "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-5d390ff5794c2b75", "name": "Possibly dead Python function: manual_rebalance", "shortDescription": {"text": "Possibly dead Python function: manual_rebalance"}, "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-2fce293e35d351cd", "name": "Possibly dead Python function: run_urgent_rebalance", "shortDescription": {"text": "Possibly dead Python function: run_urgent_rebalance"}, "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-946235cd74c4bd3d", "name": "Possibly dead Python function: manual_monitor", "shortDescription": {"text": "Possibly dead Python function: manual_monitor"}, "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-67c401f4764672ff", "name": "Possibly dead Python function: calculate_take_profit", "shortDescription": {"text": "Possibly dead Python function: calculate_take_profit"}, "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-49c3ce46d8eda86d", "name": "Possibly dead Python function: apply_sector_diversification", "shortDescription": {"text": "Possibly dead Python function: apply_sector_diversification"}, "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-65893e5c2023120d", "name": "Possibly dead Python function: export_to_excel", "shortDescription": {"text": "Possibly dead Python function: export_to_excel"}, "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-feb8b12e651b269a", "name": "Possibly dead Python function: compare_benchmark", "shortDescription": {"text": "Possibly dead Python function: compare_benchmark"}, "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-9e2a77d4723e37cc", "name": "Possibly dead Python function: plot_drawdown", "shortDescription": {"text": "Possibly dead Python function: plot_drawdown"}, "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-2badd79219ddc194", "name": "Possibly dead Python function: plot_monthly_returns", "shortDescription": {"text": "Possibly dead Python function: plot_monthly_returns"}, "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-56ec31ce896e3624", "name": "Possibly dead Python function: plot_position_distribution", "shortDescription": {"text": "Possibly dead Python function: plot_position_distribution"}, "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-007a042695fcdf76", "name": "Possibly dead Python function: update_prices", "shortDescription": {"text": "Possibly dead Python function: update_prices"}, "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-d59950d8f349f654", "name": "Possibly dead Python function: classify_stocks", "shortDescription": {"text": "Possibly dead Python function: classify_stocks"}, "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-f1ce36f1b2ed17a4", "name": "Possibly dead Python function: apply_sector_diversification", "shortDescription": {"text": "Possibly dead Python function: apply_sector_diversification"}, "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-d6730490ace76206", "name": "Possibly dead Python function: calculate_rebalance_for_sector_limit", "shortDescription": {"text": "Possibly dead Python function: calculate_rebalance_for_sector_limit"}, "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-554fc6caea3ca3f2", "name": "Possibly dead Python function: disconnect", "shortDescription": {"text": "Possibly dead Python function: disconnect"}, "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-ebcf2e4430aacbd0", "name": "Possibly dead Python function: subscribe_price", "shortDescription": {"text": "Possibly dead Python function: subscribe_price"}, "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-2323e8c9fe6ac01c", "name": "Privileged port 1 in use", "shortDescription": {"text": "Privileged port 1 in use"}, "fullDescription": {"text": "Port 1 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81f127c60a39a906", "name": "Privileged port 7 in use", "shortDescription": {"text": "Privileged port 7 in use"}, "fullDescription": {"text": "Port 7 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb63ebbc2cb37f55", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a777b914c615e331", "name": "Privileged port 10 in use", "shortDescription": {"text": "Privileged port 10 in use"}, "fullDescription": {"text": "Port 10 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d0302bc03c101f6", "name": "Privileged port 55 in use", "shortDescription": {"text": "Privileged port 55 in use"}, "fullDescription": {"text": "Port 55 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "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-71a6e47290476c17", "name": "Insecure pattern 'direct_innerhtml_assignment' in unit_converter.html:242", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in unit_converter.html:242"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7712c313bcd86e8f", "name": "Insecure pattern 'subprocess_shell_true' in 007_stock_trade/scripts/run_checklist.py:85", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in 007_stock_trade/scripts/run_checklist.py:85"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83cfb3c93b432e3c", "name": "Very large file: 008_stock_trade_us/src/quant_engine.py (1351 lines)", "shortDescription": {"text": "Very large file: 008_stock_trade_us/src/quant_engine.py (1351 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-a00a111230b62bfd", "name": "Very large file: 008_stock_trade_us/src/telegram/bot.py (1624 lines)", "shortDescription": {"text": "Very large file: 008_stock_trade_us/src/telegram/bot.py (1624 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-aed4d3ac733b498f", "name": "Very large file: 016_claude_rtl/crates/cli/tests/sva_property.rs (1874 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/cli/tests/sva_property.rs (1874 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-0ffc4374d04258e9", "name": "Very large file: 016_claude_rtl/crates/cli/src/lib.rs (2756 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/cli/src/lib.rs (2756 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-add04e3298a59aa2", "name": "Very large file: 016_claude_rtl/crates/sim-engine/tests/dyn_storage.rs (2009 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/tests/dyn_storage.rs (2009 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-565eda03e326cad8", "name": "Very large file: 016_claude_rtl/crates/sim-engine/tests/end_to_end.rs (3223 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/tests/end_to_end.rs (3223 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-30ec0816c83aa53c", "name": "Very large file: 016_claude_rtl/crates/sim-engine/src/eval.rs (1747 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/eval.rs (1747 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-711513f64ea940b9", "name": "Very large file: 016_claude_rtl/crates/sim-engine/src/builtins.rs (1650 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/builtins.rs (1650 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-2d75a3dc8ec976b3", "name": "Very large file: 016_claude_rtl/crates/sim-engine/src/state.rs (1376 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/state.rs (1376 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-57e5e2e67394c007", "name": "Very large file: 016_claude_rtl/crates/sim-engine/src/sched.rs (2271 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/sched.rs (2271 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-efd4d1999ebdfa40", "name": "Very large file: 016_claude_rtl/crates/sim-engine/src/native_eval.rs (2995 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/native_eval.rs (2995 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-65343ff48a918535", "name": "Very large file: 016_claude_rtl/crates/elaborate/src/lib.rs (10333 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/elaborate/src/lib.rs (10333 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-f8d05162ca0747e5", "name": "Very large file: 016_claude_rtl/crates/elaborate/src/tests.rs (2975 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/elaborate/src/tests.rs (2975 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-7fd70afc5726c150", "name": "Very large file: 016_claude_rtl/crates/hdl-parser/src/lib.rs (5877 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/hdl-parser/src/lib.rs (5877 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-a8ce97d070a6d008", "name": "Very large file: 016_claude_rtl/crates/hdl-preprocess/src/lib.rs (2320 lines)", "shortDescription": {"text": "Very large file: 016_claude_rtl/crates/hdl-preprocess/src/lib.rs (2320 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-56d93448587a6f8a", "name": "Very large file: 005_money/001_python_code/ver3/gui_app_v3.py (1373 lines)", "shortDescription": {"text": "Very large file: 005_money/001_python_code/ver3/gui_app_v3.py (1373 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-a51943121f46e10a", "name": "Very large file: 005_money/001_python_code/ver3/strategy_v3.py (1564 lines)", "shortDescription": {"text": "Very large file: 005_money/001_python_code/ver3/strategy_v3.py (1564 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-2a61c9e69324843c", "name": "Very large file: 014_casper/scripts/intraday_backtest_compare.py (1426 lines)", "shortDescription": {"text": "Very large file: 014_casper/scripts/intraday_backtest_compare.py (1426 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-b169984f3fbf01cc", "name": "Very large file: 014_casper/src/bot.py (2867 lines)", "shortDescription": {"text": "Very large file: 014_casper/src/bot.py (2867 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 1821 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 45 placeholder/mock markers across 23 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c054b6cf39b8de8e", "name": "Agent instruction/config may expose a secret: 007_stock_trade/CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: 007_stock_trade/CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f4e0bac794fc10a", "name": "Agent authority lacks a verifier contract: 007_stock_trade/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 007_stock_trade/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-216f375d5a205025", "name": "Agent authority lacks a verifier contract: 007_stock_trade/.claude/rules/00-quick-reference.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 007_stock_trade/.claude/rules/00-quick-reference.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4994bd4d6e4243d9", "name": "Agent authority lacks a verifier contract: 012_stock_dashboard/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 012_stock_dashboard/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-176ce9bfaad40ed0", "name": "Agent authority lacks a verifier contract: 011_macos_cc_usage/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 011_macos_cc_usage/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1eecd5c0127d413d", "name": "Agent instruction/config may expose a secret: 008_stock_trade_us/CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: 008_stock_trade_us/CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4eda1f4244f3e549", "name": "Agent authority lacks a verifier contract: 008_stock_trade_us/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 008_stock_trade_us/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ecc56dfeafe7498", "name": "Agent authority lacks a verifier contract: 008_stock_trade_us/.claude/rules/01-project-overview.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 008_stock_trade_us/.claude/rules/01-project-overview.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-146258f6756c4f98", "name": "Agent authority lacks a verifier contract: 008_stock_trade_us/.claude/rules/02-telegram-commands.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 008_stock_trade_us/.claude/rules/02-telegram-commands.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d00913264e290442", "name": "Agent instruction/config may expose a secret: 006_auto_bot/CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: 006_auto_bot/CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27979f96c368be08", "name": "Agent authority lacks a verifier contract: 006_auto_bot/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 006_auto_bot/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7cec2c30ab4f0e69", "name": "Agent authority lacks a verifier contract: 009_dashboard/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 009_dashboard/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b3742195cffe257b", "name": "Agent instruction/config may expose a secret: 005_money/CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: 005_money/CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe82c5cfe5e5e87f", "name": "Agent authority lacks a verifier contract: 005_money/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 005_money/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f88973d3aeff885", "name": "Agent authority lacks a verifier contract: 005_money/.claude/rules/04-telegram-commands.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 005_money/.claude/rules/04-telegram-commands.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f22aa9d9f9d3c7af", "name": "Agent authority lacks a verifier contract: 005_money/.claude/rules/06-bot-flow-diagram.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 005_money/.claude/rules/06-bot-flow-diagram.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-911740cd09df2702", "name": "Agent authority lacks a verifier contract: 005_money/.claude/rules/03-code-structure.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 005_money/.claude/rules/03-code-structure.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-77ee7f818ad881dc", "name": "Agent authority lacks a verifier contract: 010_ios_dashboard/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 010_ios_dashboard/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c0516a5cf3f182c", "name": "Agent authority lacks a verifier contract: 013_shortcut/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 013_shortcut/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d028a1789f1176a9", "name": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/scripts/run_checklist.py:85", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/scripts/run_checklist.py:85"}, "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-91e58605bdd108a8", "name": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/scripts/check_watchdog_syntax.py:14", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/scripts/check_watchdog_syntax.py:14"}, "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-63edf9f88eb28f05", "name": "Legacy-named symbol `trades_copy` in 007_stock_trade/src/quant_engine.py:717", "shortDescription": {"text": "Legacy-named symbol `trades_copy` in 007_stock_trade/src/quant_engine.py:717"}, "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-8ad082284f0cf968", "name": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/src/api/kis_websocket.py:96", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/src/api/kis_websocket.py:96"}, "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-cda19cb3c1e4214d", "name": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/src/api/kis_auth.py:118", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/src/api/kis_auth.py:118"}, "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-a0d4e476ae382994", "name": "Blocking `time.sleep(...)` inside `async def cmd_screening` \u2014 007_stock_trade/src/telegram/commands/analysis_commands.py", "shortDescription": {"text": "Blocking `time.sleep(...)` inside `async def cmd_screening` \u2014 007_stock_trade/src/telegram/commands/analysis_commands.py:77"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `time.sleep(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-49b258a4bb2debe0", "name": "Legacy-named symbol `_migrate_legacy` in 007_stock_trade/src/scheduler/auto_manager.py:100", "shortDescription": {"text": "Legacy-named symbol `_migrate_legacy` in 007_stock_trade/src/scheduler/auto_manager.py:100"}, "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-166ac45e39b02068", "name": "Commented-code block (6 lines) in 012_stock_dashboard/workers/news_worker.py:87", "shortDescription": {"text": "Commented-code block (6 lines) in 012_stock_dashboard/workers/news_worker.py:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e62d4731bf86ecd9", "name": "Network/subprocess call without timeout or try/except \u2014 008_stock_trade_us/src/api/kis_websocket.py:96", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 008_stock_trade_us/src/api/kis_websocket.py:96"}, "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-0990c01e30aec04a", "name": "Network/subprocess call without timeout or try/except \u2014 008_stock_trade_us/src/api/kis_auth.py:118", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 008_stock_trade_us/src/api/kis_auth.py:118"}, "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-90a7ee8e167b1441", "name": "Blocking `time.sleep(...)` inside `async def cmd_screening` \u2014 008_stock_trade_us/src/telegram/bot.py:922", "shortDescription": {"text": "Blocking `time.sleep(...)` inside `async def cmd_screening` \u2014 008_stock_trade_us/src/telegram/bot.py:922"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `time.sleep(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d68e83ad9094ac3", "name": "Commented-code block (5 lines) in 006_auto_bot/001_code/shared/claude_html_converter.py:189", "shortDescription": {"text": "Commented-code block (5 lines) in 006_auto_bot/001_code/shared/claude_html_converter.py:189"}, "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-a78fb4a6da0777bb", "name": "Legacy-named symbol `hours_old` in 006_auto_bot/003_test_code/test_news_dimensions.py:52", "shortDescription": {"text": "Legacy-named symbol `hours_old` in 006_auto_bot/003_test_code/test_news_dimensions.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-e8bbe39cebcb87ef", "name": "Legacy-named symbol `strategy_v2` in 005_money/tests/ver3/test_profit_target_modes.py:19", "shortDescription": {"text": "Legacy-named symbol `strategy_v2` in 005_money/tests/ver3/test_profit_target_modes.py:19"}, "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-8ba2781d8e4452a6", "name": "Legacy-named symbol `create_bithumb_signature_v2` in 005_money/001_python_code/bithumb_auth_fixed.py:15", "shortDescription": {"text": "Legacy-named symbol `create_bithumb_signature_v2` in 005_money/001_python_code/bithumb_auth_fixed.py:15"}, "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-1a47e615b4d08bfb", "name": "Legacy-named symbol `strategy_v1` in 005_money/001_python_code/lib/gui/indicator_calculator.py:13", "shortDescription": {"text": "Legacy-named symbol `strategy_v1` in 005_money/001_python_code/lib/gui/indicator_calculator.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-ee589b136348304b", "name": "Legacy-named symbol `strategy_v1` in 005_money/001_python_code/lib/gui/components/chart_widget.py:20", "shortDescription": {"text": "Legacy-named symbol `strategy_v1` in 005_money/001_python_code/lib/gui/components/chart_widget.py:20"}, "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-45353f80c0c27f86", "name": "Commented-code block (6 lines) in 005_money/001_python_code/lib/api/bithumb_api.py:467", "shortDescription": {"text": "Commented-code block (6 lines) in 005_money/001_python_code/lib/api/bithumb_api.py:467"}, "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-9a12766f49edb512", "name": "Stub function `get_config` (body is just `pass`/`return`) \u2014 005_money/001_python_code/lib/interfaces/version_interface.p", "shortDescription": {"text": "Stub function `get_config` (body is just `pass`/`return`) \u2014 005_money/001_python_code/lib/interfaces/version_interface.py:25"}, "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-3053c4d4fa735271", "name": "Legacy-named symbol `config_v2` in 005_money/001_python_code/ver3/config_base.py:8", "shortDescription": {"text": "Legacy-named symbol `config_v2` in 005_money/001_python_code/ver3/config_base.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-51fa0dab66b02221", "name": "Legacy-named symbol `_create_backup` in 005_money/001_python_code/ver3/preference_manager_v3.py:132", "shortDescription": {"text": "Legacy-named symbol `_create_backup` in 005_money/001_python_code/ver3/preference_manager_v3.py:132"}, "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-588378c4e1e79f9a", "name": "Legacy-named symbol `check_strategy_v2` in 005_money/001_python_code/ver3/validate_profit_target_implementation.py:37", "shortDescription": {"text": "Legacy-named symbol `check_strategy_v2` in 005_money/001_python_code/ver3/validate_profit_target_implementation.py:37"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ec6953db8e4f297", "name": "Commented-code block (5 lines) in 014_casper/tests/test_liquidity.py:49", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/tests/test_liquidity.py:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cab4c7e0851a6fd", "name": "Commented-code block (5 lines) in 014_casper/tests/test_position.py:107", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/tests/test_position.py:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9703a0abb53ac10c", "name": "Commented-code block (5 lines) in 014_casper/tests/conftest.py:47", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/tests/conftest.py:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c66537a48ec3cfd", "name": "Commented-code block (5 lines) in 014_casper/tests/test_strategy_ict_filters.py:31", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/tests/test_strategy_ict_filters.py:31"}, "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-75dbda7cbb0b3fac", "name": "Commented-code block (5 lines) in 014_casper/scripts/intraday_backtest_compare.py:200", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/scripts/intraday_backtest_compare.py:200"}, "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-159fe7989e8685d5", "name": "Commented-code block (5 lines) in 014_casper/src/bot.py:174", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/src/bot.py:174"}, "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-bdf2b63ff88747cd", "name": "Commented-code block (5 lines) in 014_casper/src/api/kis_auth.py:22", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/src/api/kis_auth.py:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9adaaa8998cef37e", "name": "Commented-code block (6 lines) in 014_casper/src/api/kis_client.py:112", "shortDescription": {"text": "Commented-code block (6 lines) in 014_casper/src/api/kis_client.py:112"}, "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-96b8f567393e6434", "name": "Commented-code block (5 lines) in 014_casper/src/telegram/notifier.py:105", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/src/telegram/notifier.py:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6637acd8de844efe", "name": "Commented-code block (5 lines) in 014_casper/src/core/strategy.py:152", "shortDescription": {"text": "Commented-code block (5 lines) in 014_casper/src/core/strategy.py:152"}, "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-f15628eda7b25db5", "name": "Commented-code block (8 lines) in 014_casper/src/core/position.py:37", "shortDescription": {"text": "Commented-code block (8 lines) in 014_casper/src/core/position.py:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e331a92ce2034ac", "name": "Commented-code block (8 lines) in 014_casper/src/core/portfolio.py:49", "shortDescription": {"text": "Commented-code block (8 lines) in 014_casper/src/core/portfolio.py:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41d295c8db24a85a", "name": "97 env vars used in code but missing from .env.example", "shortDescription": {"text": "97 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AGY_BIN`, `AGY_SEARCH_MODELS`, `AGY_SEARCH_TIMEOUT`, `AUTO_BOT_DRAFT_ONLY`, `AUTO_FEATURED_CARD`, `BLOGGER_IMAGES_ENABLED`, `BLOGGER_IMAGE_RUN_ID`, `BLOGGER_MAX_IMAGES_PER_POST` + 89 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:\n007_stock_trade/main.py:test_api_connection, 008_stock_trade_us/main.py:test_api_connection\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:\n007_stock_trade/scripts/run_backtest.py:get_price_data, 007_stock_trade/scripts/optimize_weights.py:get_price_data, 008_stock_trade_us/scripts/run_backtest.py:get_price_data, 008_stock_trade_us/scripts/optimize_weights.py:get_price_data\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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`012_stock_dashboard/app.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`009_dashboard/app.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-2bbac4c297da20d6", "name": "Unused endpoint: ANY /stock", "shortDescription": {"text": "Unused endpoint: ANY /stock"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /stock` 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-5e1279ef9b7784f3", "name": "Unused endpoint: ANY /crypto", "shortDescription": {"text": "Unused endpoint: ANY /crypto"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /crypto` 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-3fd7234fb4389727", "name": "Unused endpoint: ANY /embed", "shortDescription": {"text": "Unused endpoint: ANY /embed"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /embed` 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-e258d1973c46d268", "name": "Unused endpoint: ANY /api/summary", "shortDescription": {"text": "Unused endpoint: ANY /api/summary"}, "fullDescription": {"text": "`009_dashboard/app.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-03812128bf5f26b3", "name": "Unused endpoint: ANY /api/stock/positions", "shortDescription": {"text": "Unused endpoint: ANY /api/stock/positions"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/stock/positions` 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-08bda46678f257ce", "name": "Unused endpoint: ANY /api/stock/account", "shortDescription": {"text": "Unused endpoint: ANY /api/stock/account"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/stock/account` 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-5ee96af0a3685c8f", "name": "Unused endpoint: ANY /api/stock/transactions", "shortDescription": {"text": "Unused endpoint: ANY /api/stock/transactions"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/stock/transactions` 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-9649567c327460b1", "name": "Unused endpoint: ANY /api/crypto/regime", "shortDescription": {"text": "Unused endpoint: ANY /api/crypto/regime"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/crypto/regime` 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-2991771d2b18c2ef", "name": "Unused endpoint: ANY /api/crypto/trades", "shortDescription": {"text": "Unused endpoint: ANY /api/crypto/trades"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/crypto/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-b0f44278ff5388ba", "name": "Unused endpoint: ANY /api/crypto/performance", "shortDescription": {"text": "Unused endpoint: ANY /api/crypto/performance"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/crypto/performance` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d06519d1d9291907", "name": "Unused endpoint: ANY /api/v2/summary", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/summary"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/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-447c067d5ed76665", "name": "Unused endpoint: ANY /api/v2/crypto/regime", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/crypto/regime"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/crypto/regime` 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-e75e40aebc29d883", "name": "Unused endpoint: ANY /api/v2/crypto/trades", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/crypto/trades"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/crypto/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-6fb70bd9ddde2bc1", "name": "Unused endpoint: ANY /api/v2/crypto/performance", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/crypto/performance"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/crypto/performance` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbc45727873bbb82", "name": "Unused endpoint: ANY /api/v2/stock/positions", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/stock/positions"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/stock/positions` 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-20feea9e9da75967", "name": "Unused endpoint: ANY /api/v2/stock/daily", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/stock/daily"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/stock/daily` 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-3cc2d01709ad8555", "name": "Unused endpoint: ANY /api/v2/stock/transactions", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/stock/transactions"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/stock/transactions` 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-f30379efbc9a7f71", "name": "Unused endpoint: ANY /api/v2/stock/account", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/stock/account"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/stock/account` 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-8b5fc6d65de4315a", "name": "Unused endpoint: ANY /api/v2/stock/trading-mode", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/stock/trading-mode"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/stock/trading-mode` 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-25e458875cdb990d", "name": "Unused endpoint: ANY /api/v2/system/status", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/system/status"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/system/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-148faf9cf4a912ca", "name": "Unused endpoint: ANY /api/v2/crypto/coins", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/crypto/coins"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/crypto/coins` 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-14a8427d97d9b080", "name": "Unused endpoint: ANY /api/v2/crypto/coins/<coin>/trades", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/crypto/coins/<coin>/trades"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/crypto/coins/<coin>/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-c5e2b42713740168", "name": "Unused endpoint: ANY /api/v2/crypto/price/<coin>", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/crypto/price/<coin>"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/crypto/price/<coin>` 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-44c186a179f45a6f", "name": "Unused endpoint: ANY /api/v2/crypto/chart/<coin>", "shortDescription": {"text": "Unused endpoint: ANY /api/v2/crypto/chart/<coin>"}, "fullDescription": {"text": "`009_dashboard/app.py` declares `ANY /api/v2/crypto/chart/<coin>` 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/21375"}, "properties": {"repository": "tjddnr0912/violet_sw", "repoUrl": "https://github.com/tjddnr0912/violet_sw", "branch": "main"}, "results": [{"ruleId": "scanner-d084c0fef9522382", "level": "note", "message": {"text": "Possibly dead Python function: spy"}, "properties": {"repobilityId": "4aaf8a692323c28c", "scanner": "scanner-primary", "fingerprint": "d084c0fef9522382", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/scripts/check_position_monitor_stop.py:46"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4010e318519dc968", "level": "note", "message": {"text": "Possibly dead Python function: is_td"}, "properties": {"repobilityId": "0e23193e1af481cd", "scanner": "scanner-primary", "fingerprint": "4010e318519dc968", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/scripts/check_rebalance_first_trading_day.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6522c2b94980a9f5", "level": "note", "message": {"text": "Possibly dead Python function: run_engine"}, "properties": {"repobilityId": "d2febb2f40986910", "scanner": "scanner-primary", "fingerprint": "6522c2b94980a9f5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/scripts/run_daemon.py:227"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-11f692bbfe3fa63c", "level": "note", "message": {"text": "Possibly dead Python function: run_manager"}, "properties": {"repobilityId": "8c1f6a1c5d67bd8c", "scanner": "scanner-primary", "fingerprint": "11f692bbfe3fa63c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/scripts/run_daemon.py:355"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4dc44f394667b850", "level": "note", "message": {"text": "Possibly dead Python function: spy_tp"}, "properties": {"repobilityId": "2447cf7aceb80041", "scanner": "scanner-primary", "fingerprint": "4dc44f394667b850", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/scripts/check_position_monitor_tp.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-890c61de698855a1", "level": "note", "message": {"text": "Possibly dead Python function: manual_screening"}, "properties": {"repobilityId": "0f4cd72aed22a238", "scanner": "scanner-primary", "fingerprint": "890c61de698855a1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/quant_engine.py:895"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d390ff5794c2b75", "level": "note", "message": {"text": "Possibly dead Python function: manual_rebalance"}, "properties": {"repobilityId": "c5e13209960dfb30", "scanner": "scanner-primary", "fingerprint": "5d390ff5794c2b75", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/quant_engine.py:899"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2fce293e35d351cd", "level": "note", "message": {"text": "Possibly dead Python function: run_urgent_rebalance"}, "properties": {"repobilityId": "c1bcd6c353909d7f", "scanner": "scanner-primary", "fingerprint": "2fce293e35d351cd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/quant_engine.py:945"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-946235cd74c4bd3d", "level": "note", "message": {"text": "Possibly dead Python function: manual_monitor"}, "properties": {"repobilityId": "f2cdf5ff7a5e2290", "scanner": "scanner-primary", "fingerprint": "946235cd74c4bd3d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/quant_engine.py:1038"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-67c401f4764672ff", "level": "note", "message": {"text": "Possibly dead Python function: calculate_take_profit"}, "properties": {"repobilityId": "b69afd9725c0c972", "scanner": "scanner-primary", "fingerprint": "67c401f4764672ff", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/base.py:195"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-49c3ce46d8eda86d", "level": "note", "message": {"text": "Possibly dead Python function: apply_sector_diversification"}, "properties": {"repobilityId": "f35420891c9834cc", "scanner": "scanner-primary", "fingerprint": "49c3ce46d8eda86d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/screener.py:358"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-65893e5c2023120d", "level": "note", "message": {"text": "Possibly dead Python function: export_to_excel"}, "properties": {"repobilityId": "6d09990b911af4c1", "scanner": "scanner-primary", "fingerprint": "65893e5c2023120d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/screener.py:478"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-feb8b12e651b269a", "level": "note", "message": {"text": "Possibly dead Python function: compare_benchmark"}, "properties": {"repobilityId": "f3d236b082e9b890", "scanner": "scanner-primary", "fingerprint": "feb8b12e651b269a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/analytics.py:213"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e2a77d4723e37cc", "level": "note", "message": {"text": "Possibly dead Python function: plot_drawdown"}, "properties": {"repobilityId": "5b2aa6492e73cfe5", "scanner": "scanner-primary", "fingerprint": "9e2a77d4723e37cc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/analytics.py:446"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2badd79219ddc194", "level": "note", "message": {"text": "Possibly dead Python function: plot_monthly_returns"}, "properties": {"repobilityId": "3250c15dd466f223", "scanner": "scanner-primary", "fingerprint": "2badd79219ddc194", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/analytics.py:498"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56ec31ce896e3624", "level": "note", "message": {"text": "Possibly dead Python function: plot_position_distribution"}, "properties": {"repobilityId": "f9a400ddfc5e7ba5", "scanner": "scanner-primary", "fingerprint": "56ec31ce896e3624", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/analytics.py:546"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-007a042695fcdf76", "level": "note", "message": {"text": "Possibly dead Python function: update_prices"}, "properties": {"repobilityId": "f4c20a6f82c94845", "scanner": "scanner-primary", "fingerprint": "007a042695fcdf76", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/risk.py:535"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d59950d8f349f654", "level": "note", "message": {"text": "Possibly dead Python function: classify_stocks"}, "properties": {"repobilityId": "d6817eb030db7801", "scanner": "scanner-primary", "fingerprint": "d59950d8f349f654", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/sector.py:159"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f1ce36f1b2ed17a4", "level": "note", "message": {"text": "Possibly dead Python function: apply_sector_diversification"}, "properties": {"repobilityId": "f35420891c9834cc", "scanner": "scanner-primary", "fingerprint": "f1ce36f1b2ed17a4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/sector.py:252"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d6730490ace76206", "level": "note", "message": {"text": "Possibly dead Python function: calculate_rebalance_for_sector_limit"}, "properties": {"repobilityId": "c35279f421d925b8", "scanner": "scanner-primary", "fingerprint": "d6730490ace76206", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/strategy/quant/sector.py:309"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-554fc6caea3ca3f2", "level": "note", "message": {"text": "Possibly dead Python function: disconnect"}, "properties": {"repobilityId": "87a37be95663a882", "scanner": "scanner-primary", "fingerprint": "554fc6caea3ca3f2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/api/kis_websocket.py:140"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ebcf2e4430aacbd0", "level": "note", "message": {"text": "Possibly dead Python function: subscribe_price"}, "properties": {"repobilityId": "8e59fba88cf2f3ce", "scanner": "scanner-primary", "fingerprint": "ebcf2e4430aacbd0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/api/kis_websocket.py:146"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2323e8c9fe6ac01c", "level": "warning", "message": {"text": "Privileged port 1 in use"}, "properties": {"repobilityId": "ddf3fa6c29abb8d2", "scanner": "scanner-primary", "fingerprint": "2323e8c9fe6ac01c", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "006_auto_bot/run_investment_bot.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-81f127c60a39a906", "level": "warning", "message": {"text": "Privileged port 7 in use"}, "properties": {"repobilityId": "428a6faecc63b5d6", "scanner": "scanner-primary", "fingerprint": "81f127c60a39a906", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "006_auto_bot/run_buffett_bot.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb63ebbc2cb37f55", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "eb63ebbc2cb37f55", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "006_auto_bot/run_buffett_bot.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a777b914c615e331", "level": "warning", "message": {"text": "Privileged port 10 in use"}, "properties": {"repobilityId": "735372d6b5594915", "scanner": "scanner-primary", "fingerprint": "a777b914c615e331", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "014_casper/run_casper.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d0302bc03c101f6", "level": "warning", "message": {"text": "Privileged port 55 in use"}, "properties": {"repobilityId": "51a768b3e1831ac0", "scanner": "scanner-primary", "fingerprint": "6d0302bc03c101f6", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "014_casper/run_casper.sh"}, "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-71a6e47290476c17", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in unit_converter.html:242"}, "properties": {"repobilityId": "69638abbf1947a39", "scanner": "scanner-primary", "fingerprint": "71a6e47290476c17", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "unit_converter.html"}, "region": {"startLine": 242}}}]}, {"ruleId": "scanner-7712c313bcd86e8f", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in 007_stock_trade/scripts/run_checklist.py:85"}, "properties": {"repobilityId": "a00bc16565beb263", "scanner": "scanner-primary", "fingerprint": "7712c313bcd86e8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/scripts/run_checklist.py"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-83cfb3c93b432e3c", "level": "note", "message": {"text": "Very large file: 008_stock_trade_us/src/quant_engine.py (1351 lines)"}, "properties": {"repobilityId": "202945820d16185f", "scanner": "scanner-primary", "fingerprint": "83cfb3c93b432e3c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a00a111230b62bfd", "level": "note", "message": {"text": "Very large file: 008_stock_trade_us/src/telegram/bot.py (1624 lines)"}, "properties": {"repobilityId": "2c65eb22bda78174", "scanner": "scanner-primary", "fingerprint": "a00a111230b62bfd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aed4d3ac733b498f", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/cli/tests/sva_property.rs (1874 lines)"}, "properties": {"repobilityId": "fd79c101983adce5", "scanner": "scanner-primary", "fingerprint": "aed4d3ac733b498f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0ffc4374d04258e9", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/cli/src/lib.rs (2756 lines)"}, "properties": {"repobilityId": "3ab2b8f414de4d6f", "scanner": "scanner-primary", "fingerprint": "0ffc4374d04258e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-add04e3298a59aa2", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/tests/dyn_storage.rs (2009 lines)"}, "properties": {"repobilityId": "32d63421844c58ba", "scanner": "scanner-primary", "fingerprint": "add04e3298a59aa2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-565eda03e326cad8", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/tests/end_to_end.rs (3223 lines)"}, "properties": {"repobilityId": "25ba0733bb395153", "scanner": "scanner-primary", "fingerprint": "565eda03e326cad8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-30ec0816c83aa53c", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/eval.rs (1747 lines)"}, "properties": {"repobilityId": "753185d43ee78eb7", "scanner": "scanner-primary", "fingerprint": "30ec0816c83aa53c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-711513f64ea940b9", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/builtins.rs (1650 lines)"}, "properties": {"repobilityId": "acbbacea67e08f3f", "scanner": "scanner-primary", "fingerprint": "711513f64ea940b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2d75a3dc8ec976b3", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/state.rs (1376 lines)"}, "properties": {"repobilityId": "224e1cb865a007b3", "scanner": "scanner-primary", "fingerprint": "2d75a3dc8ec976b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-57e5e2e67394c007", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/sched.rs (2271 lines)"}, "properties": {"repobilityId": "b394b79f07445db3", "scanner": "scanner-primary", "fingerprint": "57e5e2e67394c007", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-efd4d1999ebdfa40", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/sim-engine/src/native_eval.rs (2995 lines)"}, "properties": {"repobilityId": "866f3af5f2b7cef6", "scanner": "scanner-primary", "fingerprint": "efd4d1999ebdfa40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-65343ff48a918535", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/elaborate/src/lib.rs (10333 lines)"}, "properties": {"repobilityId": "6d5a22c097e13bbd", "scanner": "scanner-primary", "fingerprint": "65343ff48a918535", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f8d05162ca0747e5", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/elaborate/src/tests.rs (2975 lines)"}, "properties": {"repobilityId": "2f9607441eb910d2", "scanner": "scanner-primary", "fingerprint": "f8d05162ca0747e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7fd70afc5726c150", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/hdl-parser/src/lib.rs (5877 lines)"}, "properties": {"repobilityId": "00d53542025a238c", "scanner": "scanner-primary", "fingerprint": "7fd70afc5726c150", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a8ce97d070a6d008", "level": "note", "message": {"text": "Very large file: 016_claude_rtl/crates/hdl-preprocess/src/lib.rs (2320 lines)"}, "properties": {"repobilityId": "695d222781333979", "scanner": "scanner-primary", "fingerprint": "a8ce97d070a6d008", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-56d93448587a6f8a", "level": "note", "message": {"text": "Very large file: 005_money/001_python_code/ver3/gui_app_v3.py (1373 lines)"}, "properties": {"repobilityId": "1f221dd38bad6e4a", "scanner": "scanner-primary", "fingerprint": "56d93448587a6f8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a51943121f46e10a", "level": "note", "message": {"text": "Very large file: 005_money/001_python_code/ver3/strategy_v3.py (1564 lines)"}, "properties": {"repobilityId": "8175eb4e4503f1b8", "scanner": "scanner-primary", "fingerprint": "a51943121f46e10a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2a61c9e69324843c", "level": "note", "message": {"text": "Very large file: 014_casper/scripts/intraday_backtest_compare.py (1426 lines)"}, "properties": {"repobilityId": "ac6683429cf109a1", "scanner": "scanner-primary", "fingerprint": "2a61c9e69324843c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b169984f3fbf01cc", "level": "note", "message": {"text": "Very large file: 014_casper/src/bot.py (2867 lines)"}, "properties": {"repobilityId": "f91518a3733492ac", "scanner": "scanner-primary", "fingerprint": "b169984f3fbf01cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "fd08b81ce48c5819", "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": "dd821358fd184174", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "151f4e2cd1390771", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "17b42e68c6b66a7a", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "4e40a823a2d0a8a0", "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": "f532ed8727cc9c59", "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": "6cf07fd5e9ec65c5", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-c054b6cf39b8de8e", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: 007_stock_trade/CLAUDE.md"}, "properties": {"repobilityId": "8962045031c437e0", "scanner": "scanner-primary", "fingerprint": "c054b6cf39b8de8e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/CLAUDE.md"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-1f4e0bac794fc10a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 007_stock_trade/CLAUDE.md"}, "properties": {"repobilityId": "2b489848f6475bc4", "scanner": "scanner-primary", "fingerprint": "1f4e0bac794fc10a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-216f375d5a205025", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 007_stock_trade/.claude/rules/00-quick-reference.md"}, "properties": {"repobilityId": "090a26dab2ec3aa9", "scanner": "scanner-primary", "fingerprint": "216f375d5a205025", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/.claude/rules/00-quick-reference.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4994bd4d6e4243d9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 012_stock_dashboard/CLAUDE.md"}, "properties": {"repobilityId": "9d7e09fec0c412f2", "scanner": "scanner-primary", "fingerprint": "4994bd4d6e4243d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "012_stock_dashboard/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-176ce9bfaad40ed0", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 011_macos_cc_usage/CLAUDE.md"}, "properties": {"repobilityId": "0e8cc7ba87ab5c85", "scanner": "scanner-primary", "fingerprint": "176ce9bfaad40ed0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "011_macos_cc_usage/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1eecd5c0127d413d", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: 008_stock_trade_us/CLAUDE.md"}, "properties": {"repobilityId": "5e2ff73d10c34c3b", "scanner": "scanner-primary", "fingerprint": "1eecd5c0127d413d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "008_stock_trade_us/CLAUDE.md"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-4eda1f4244f3e549", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 008_stock_trade_us/CLAUDE.md"}, "properties": {"repobilityId": "458e0556c85e4cfe", "scanner": "scanner-primary", "fingerprint": "4eda1f4244f3e549", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "008_stock_trade_us/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2ecc56dfeafe7498", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 008_stock_trade_us/.claude/rules/01-project-overview.md"}, "properties": {"repobilityId": "5e9d6b5f9abf20b8", "scanner": "scanner-primary", "fingerprint": "2ecc56dfeafe7498", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "008_stock_trade_us/.claude/rules/01-project-overview.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-146258f6756c4f98", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 008_stock_trade_us/.claude/rules/02-telegram-commands.md"}, "properties": {"repobilityId": "1135777c1b228823", "scanner": "scanner-primary", "fingerprint": "146258f6756c4f98", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "008_stock_trade_us/.claude/rules/02-telegram-commands.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d00913264e290442", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: 006_auto_bot/CLAUDE.md"}, "properties": {"repobilityId": "58f3800b9a122243", "scanner": "scanner-primary", "fingerprint": "d00913264e290442", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "006_auto_bot/CLAUDE.md"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-27979f96c368be08", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 006_auto_bot/CLAUDE.md"}, "properties": {"repobilityId": "ab6a6feb4ced5811", "scanner": "scanner-primary", "fingerprint": "27979f96c368be08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "006_auto_bot/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7cec2c30ab4f0e69", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 009_dashboard/CLAUDE.md"}, "properties": {"repobilityId": "f883fce67485a837", "scanner": "scanner-primary", "fingerprint": "7cec2c30ab4f0e69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "009_dashboard/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b3742195cffe257b", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: 005_money/CLAUDE.md"}, "properties": {"repobilityId": "9e5ca39a09a585b7", "scanner": "scanner-primary", "fingerprint": "b3742195cffe257b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "005_money/CLAUDE.md"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-fe82c5cfe5e5e87f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 005_money/CLAUDE.md"}, "properties": {"repobilityId": "a6e60e92ff1659dd", "scanner": "scanner-primary", "fingerprint": "fe82c5cfe5e5e87f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "005_money/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3f88973d3aeff885", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 005_money/.claude/rules/04-telegram-commands.md"}, "properties": {"repobilityId": "80110cc657aca97f", "scanner": "scanner-primary", "fingerprint": "3f88973d3aeff885", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "005_money/.claude/rules/04-telegram-commands.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f22aa9d9f9d3c7af", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 005_money/.claude/rules/06-bot-flow-diagram.md"}, "properties": {"repobilityId": "9faac5a62167a552", "scanner": "scanner-primary", "fingerprint": "f22aa9d9f9d3c7af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "005_money/.claude/rules/06-bot-flow-diagram.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-911740cd09df2702", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 005_money/.claude/rules/03-code-structure.md"}, "properties": {"repobilityId": "771e9f6d962b6e77", "scanner": "scanner-primary", "fingerprint": "911740cd09df2702", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "005_money/.claude/rules/03-code-structure.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-77ee7f818ad881dc", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 010_ios_dashboard/CLAUDE.md"}, "properties": {"repobilityId": "81175d12e643a621", "scanner": "scanner-primary", "fingerprint": "77ee7f818ad881dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "010_ios_dashboard/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c0516a5cf3f182c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: 013_shortcut/CLAUDE.md"}, "properties": {"repobilityId": "173d422e2a042e64", "scanner": "scanner-primary", "fingerprint": "5c0516a5cf3f182c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "013_shortcut/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d028a1789f1176a9", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/scripts/run_checklist.py:85"}, "properties": {"repobilityId": "6659234ba1f20d2e", "scanner": "scanner-primary", "fingerprint": "d028a1789f1176a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91e58605bdd108a8", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/scripts/check_watchdog_syntax.py:14"}, "properties": {"repobilityId": "860d27f4540dc91e", "scanner": "scanner-primary", "fingerprint": "91e58605bdd108a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-63edf9f88eb28f05", "level": "note", "message": {"text": "Legacy-named symbol `trades_copy` in 007_stock_trade/src/quant_engine.py:717"}, "properties": {"repobilityId": "87fd164772d13e85", "scanner": "scanner-primary", "fingerprint": "63edf9f88eb28f05", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8ad082284f0cf968", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/src/api/kis_websocket.py:96"}, "properties": {"repobilityId": "5a78ec39a3e1c11c", "scanner": "scanner-primary", "fingerprint": "8ad082284f0cf968", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cda19cb3c1e4214d", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 007_stock_trade/src/api/kis_auth.py:118"}, "properties": {"repobilityId": "8c69c7d916422352", "scanner": "scanner-primary", "fingerprint": "cda19cb3c1e4214d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a0d4e476ae382994", "level": "error", "message": {"text": "Blocking `time.sleep(...)` inside `async def cmd_screening` \u2014 007_stock_trade/src/telegram/commands/analysis_commands.py:77"}, "properties": {"repobilityId": "95593e8f909e3136", "scanner": "scanner-primary", "fingerprint": "a0d4e476ae382994", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "007_stock_trade/src/telegram/commands/analysis_commands.py"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-49b258a4bb2debe0", "level": "note", "message": {"text": "Legacy-named symbol `_migrate_legacy` in 007_stock_trade/src/scheduler/auto_manager.py:100"}, "properties": {"repobilityId": "9d6664b5d5b9dfef", "scanner": "scanner-primary", "fingerprint": "49b258a4bb2debe0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-166ac45e39b02068", "level": "none", "message": {"text": "Commented-code block (6 lines) in 012_stock_dashboard/workers/news_worker.py:87"}, "properties": {"repobilityId": "65f83d7d0ecff0bb", "scanner": "scanner-primary", "fingerprint": "166ac45e39b02068", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e62d4731bf86ecd9", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 008_stock_trade_us/src/api/kis_websocket.py:96"}, "properties": {"repobilityId": "9a9665d46799c559", "scanner": "scanner-primary", "fingerprint": "e62d4731bf86ecd9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0990c01e30aec04a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 008_stock_trade_us/src/api/kis_auth.py:118"}, "properties": {"repobilityId": "e7ed4d187ea677bf", "scanner": "scanner-primary", "fingerprint": "0990c01e30aec04a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-90a7ee8e167b1441", "level": "error", "message": {"text": "Blocking `time.sleep(...)` inside `async def cmd_screening` \u2014 008_stock_trade_us/src/telegram/bot.py:922"}, "properties": {"repobilityId": "0108a8d3da66854f", "scanner": "scanner-primary", "fingerprint": "90a7ee8e167b1441", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "008_stock_trade_us/src/telegram/bot.py"}, "region": {"startLine": 922}}}]}, {"ruleId": "scanner-7d68e83ad9094ac3", "level": "none", "message": {"text": "Commented-code block (5 lines) in 006_auto_bot/001_code/shared/claude_html_converter.py:189"}, "properties": {"repobilityId": "b863c61115f5c4df", "scanner": "scanner-primary", "fingerprint": "7d68e83ad9094ac3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a78fb4a6da0777bb", "level": "note", "message": {"text": "Legacy-named symbol `hours_old` in 006_auto_bot/003_test_code/test_news_dimensions.py:52"}, "properties": {"repobilityId": "6e7c2e03e055ee8f", "scanner": "scanner-primary", "fingerprint": "a78fb4a6da0777bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e8bbe39cebcb87ef", "level": "note", "message": {"text": "Legacy-named symbol `strategy_v2` in 005_money/tests/ver3/test_profit_target_modes.py:19"}, "properties": {"repobilityId": "1901fadf40d3135a", "scanner": "scanner-primary", "fingerprint": "e8bbe39cebcb87ef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8ba2781d8e4452a6", "level": "note", "message": {"text": "Legacy-named symbol `create_bithumb_signature_v2` in 005_money/001_python_code/bithumb_auth_fixed.py:15"}, "properties": {"repobilityId": "9ff6f199f7b8da35", "scanner": "scanner-primary", "fingerprint": "8ba2781d8e4452a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a47e615b4d08bfb", "level": "note", "message": {"text": "Legacy-named symbol `strategy_v1` in 005_money/001_python_code/lib/gui/indicator_calculator.py:13"}, "properties": {"repobilityId": "65288d6f2d767df3", "scanner": "scanner-primary", "fingerprint": "1a47e615b4d08bfb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ee589b136348304b", "level": "note", "message": {"text": "Legacy-named symbol `strategy_v1` in 005_money/001_python_code/lib/gui/components/chart_widget.py:20"}, "properties": {"repobilityId": "fafb52eef9da6f2a", "scanner": "scanner-primary", "fingerprint": "ee589b136348304b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-45353f80c0c27f86", "level": "none", "message": {"text": "Commented-code block (6 lines) in 005_money/001_python_code/lib/api/bithumb_api.py:467"}, "properties": {"repobilityId": "89a629b0e5092ea1", "scanner": "scanner-primary", "fingerprint": "45353f80c0c27f86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a12766f49edb512", "level": "note", "message": {"text": "Stub function `get_config` (body is just `pass`/`return`) \u2014 005_money/001_python_code/lib/interfaces/version_interface.py:25"}, "properties": {"repobilityId": "c678c32933524751", "scanner": "scanner-primary", "fingerprint": "9a12766f49edb512", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-3053c4d4fa735271", "level": "note", "message": {"text": "Legacy-named symbol `config_v2` in 005_money/001_python_code/ver3/config_base.py:8"}, "properties": {"repobilityId": "a275c41d8c771c51", "scanner": "scanner-primary", "fingerprint": "3053c4d4fa735271", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-51fa0dab66b02221", "level": "note", "message": {"text": "Legacy-named symbol `_create_backup` in 005_money/001_python_code/ver3/preference_manager_v3.py:132"}, "properties": {"repobilityId": "9dfbf695490421be", "scanner": "scanner-primary", "fingerprint": "51fa0dab66b02221", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-588378c4e1e79f9a", "level": "note", "message": {"text": "Legacy-named symbol `check_strategy_v2` in 005_money/001_python_code/ver3/validate_profit_target_implementation.py:37"}, "properties": {"repobilityId": "b21736916c76a024", "scanner": "scanner-primary", "fingerprint": "588378c4e1e79f9a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0ec6953db8e4f297", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/tests/test_liquidity.py:49"}, "properties": {"repobilityId": "f2962b30fcaa0c91", "scanner": "scanner-primary", "fingerprint": "0ec6953db8e4f297", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cab4c7e0851a6fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/tests/test_position.py:107"}, "properties": {"repobilityId": "af23905278d80cf5", "scanner": "scanner-primary", "fingerprint": "0cab4c7e0851a6fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9703a0abb53ac10c", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/tests/conftest.py:47"}, "properties": {"repobilityId": "aa6317ce6d5ea566", "scanner": "scanner-primary", "fingerprint": "9703a0abb53ac10c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c66537a48ec3cfd", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/tests/test_strategy_ict_filters.py:31"}, "properties": {"repobilityId": "07c48e18f2d6eb5c", "scanner": "scanner-primary", "fingerprint": "9c66537a48ec3cfd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75dbda7cbb0b3fac", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/scripts/intraday_backtest_compare.py:200"}, "properties": {"repobilityId": "7977c62a6cf5b0c0", "scanner": "scanner-primary", "fingerprint": "75dbda7cbb0b3fac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-159fe7989e8685d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/src/bot.py:174"}, "properties": {"repobilityId": "b1cc3f2556c8e1e7", "scanner": "scanner-primary", "fingerprint": "159fe7989e8685d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdf2b63ff88747cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/src/api/kis_auth.py:22"}, "properties": {"repobilityId": "5273f401e0ee15df", "scanner": "scanner-primary", "fingerprint": "bdf2b63ff88747cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9adaaa8998cef37e", "level": "none", "message": {"text": "Commented-code block (6 lines) in 014_casper/src/api/kis_client.py:112"}, "properties": {"repobilityId": "5b6e21a4a58c87de", "scanner": "scanner-primary", "fingerprint": "9adaaa8998cef37e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96b8f567393e6434", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/src/telegram/notifier.py:105"}, "properties": {"repobilityId": "8fdd6553490a1c97", "scanner": "scanner-primary", "fingerprint": "96b8f567393e6434", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6637acd8de844efe", "level": "none", "message": {"text": "Commented-code block (5 lines) in 014_casper/src/core/strategy.py:152"}, "properties": {"repobilityId": "792ceba7fc1f019f", "scanner": "scanner-primary", "fingerprint": "6637acd8de844efe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f15628eda7b25db5", "level": "none", "message": {"text": "Commented-code block (8 lines) in 014_casper/src/core/position.py:37"}, "properties": {"repobilityId": "84ff8fb000e65d50", "scanner": "scanner-primary", "fingerprint": "f15628eda7b25db5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e331a92ce2034ac", "level": "none", "message": {"text": "Commented-code block (8 lines) in 014_casper/src/core/portfolio.py:49"}, "properties": {"repobilityId": "95d0c4f821d7d117", "scanner": "scanner-primary", "fingerprint": "2e331a92ce2034ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41d295c8db24a85a", "level": "note", "message": {"text": "97 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c1e5d1102a2e8c84", "scanner": "scanner-primary", "fingerprint": "41d295c8db24a85a", "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": "278bd57faf7b4dc2", "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": "f88cca105ab603c7", "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": "7466791bab2acf47", "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": "3fb7873b2a09c4a2", "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": "8c5f9ecbf2e2fdc6", "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": "6c598d31c4f10bd8", "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": "67cae78f93f86d96", "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": "9edef9bf91573250", "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": "c22429889e7d72cc", "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": "75f7e0954793faee", "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": "923502e58ea2d150", "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": "769698c58b9d195a", "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": "b5707bbc0b1fe49f", "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": "623cc7e0d5f8ccd7", "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": "7af63642a1c8b374", "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": "d8395da471100d33", "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": "aa493283b8646186", "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": "0734db611168076e", "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": "80472190b3fc670a", "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": "d8b5df4dc35a23ad", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "36856164670e49ee", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "2d62bf0c3c0361a6", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2bbac4c297da20d6", "level": "note", "message": {"text": "Unused endpoint: ANY /stock"}, "properties": {"repobilityId": "9dc61a5f70dbe2d0", "scanner": "scanner-primary", "fingerprint": "2bbac4c297da20d6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5e1279ef9b7784f3", "level": "note", "message": {"text": "Unused endpoint: ANY /crypto"}, "properties": {"repobilityId": "82f271e32bc37c5a", "scanner": "scanner-primary", "fingerprint": "5e1279ef9b7784f3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fd7234fb4389727", "level": "note", "message": {"text": "Unused endpoint: ANY /embed"}, "properties": {"repobilityId": "a63c07612355b30a", "scanner": "scanner-primary", "fingerprint": "3fd7234fb4389727", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e258d1973c46d268", "level": "note", "message": {"text": "Unused endpoint: ANY /api/summary"}, "properties": {"repobilityId": "1aed7140b2302083", "scanner": "scanner-primary", "fingerprint": "e258d1973c46d268", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03812128bf5f26b3", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stock/positions"}, "properties": {"repobilityId": "4d38d4c6dda07d47", "scanner": "scanner-primary", "fingerprint": "03812128bf5f26b3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-08bda46678f257ce", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stock/account"}, "properties": {"repobilityId": "c0fd208ef6f691b3", "scanner": "scanner-primary", "fingerprint": "08bda46678f257ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ee96af0a3685c8f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stock/transactions"}, "properties": {"repobilityId": "ca4f909470bf69db", "scanner": "scanner-primary", "fingerprint": "5ee96af0a3685c8f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9649567c327460b1", "level": "note", "message": {"text": "Unused endpoint: ANY /api/crypto/regime"}, "properties": {"repobilityId": "84085579595cb9cc", "scanner": "scanner-primary", "fingerprint": "9649567c327460b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2991771d2b18c2ef", "level": "note", "message": {"text": "Unused endpoint: ANY /api/crypto/trades"}, "properties": {"repobilityId": "704745e2d5ab4ae5", "scanner": "scanner-primary", "fingerprint": "2991771d2b18c2ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b0f44278ff5388ba", "level": "note", "message": {"text": "Unused endpoint: ANY /api/crypto/performance"}, "properties": {"repobilityId": "ddd9657cd3a460ee", "scanner": "scanner-primary", "fingerprint": "b0f44278ff5388ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d06519d1d9291907", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/summary"}, "properties": {"repobilityId": "14b9b5743ee34f17", "scanner": "scanner-primary", "fingerprint": "d06519d1d9291907", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-447c067d5ed76665", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/crypto/regime"}, "properties": {"repobilityId": "53ff59f5a9762a0e", "scanner": "scanner-primary", "fingerprint": "447c067d5ed76665", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e75e40aebc29d883", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/crypto/trades"}, "properties": {"repobilityId": "22949cae004ebd33", "scanner": "scanner-primary", "fingerprint": "e75e40aebc29d883", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6fb70bd9ddde2bc1", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/crypto/performance"}, "properties": {"repobilityId": "3027f06b39cbb57c", "scanner": "scanner-primary", "fingerprint": "6fb70bd9ddde2bc1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dbc45727873bbb82", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/stock/positions"}, "properties": {"repobilityId": "4068fc7016b3c789", "scanner": "scanner-primary", "fingerprint": "dbc45727873bbb82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-20feea9e9da75967", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/stock/daily"}, "properties": {"repobilityId": "8513aad444c4c615", "scanner": "scanner-primary", "fingerprint": "20feea9e9da75967", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3cc2d01709ad8555", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/stock/transactions"}, "properties": {"repobilityId": "e46492be229436a4", "scanner": "scanner-primary", "fingerprint": "3cc2d01709ad8555", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f30379efbc9a7f71", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/stock/account"}, "properties": {"repobilityId": "2a6016a21f79dd71", "scanner": "scanner-primary", "fingerprint": "f30379efbc9a7f71", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b5fc6d65de4315a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/stock/trading-mode"}, "properties": {"repobilityId": "4564afde5dd6ee4c", "scanner": "scanner-primary", "fingerprint": "8b5fc6d65de4315a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25e458875cdb990d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/system/status"}, "properties": {"repobilityId": "a00faa4747300d1e", "scanner": "scanner-primary", "fingerprint": "25e458875cdb990d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-148faf9cf4a912ca", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/crypto/coins"}, "properties": {"repobilityId": "3f7b815d54ec332b", "scanner": "scanner-primary", "fingerprint": "148faf9cf4a912ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-14a8427d97d9b080", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/crypto/coins/<coin>/trades"}, "properties": {"repobilityId": "49fa87195be5a9a8", "scanner": "scanner-primary", "fingerprint": "14a8427d97d9b080", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5e2b42713740168", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/crypto/price/<coin>"}, "properties": {"repobilityId": "78529f5d29dd42b5", "scanner": "scanner-primary", "fingerprint": "c5e2b42713740168", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-44c186a179f45a6f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/v2/crypto/chart/<coin>"}, "properties": {"repobilityId": "49481a752a5b997c", "scanner": "scanner-primary", "fingerprint": "44c186a179f45a6f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}