{"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-2744ffe21dc1ea1c", "name": "Possibly dead Python function: apply_learning_adjustments", "shortDescription": {"text": "Possibly dead Python function: apply_learning_adjustments"}, "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-e0c209b2c32533bd", "name": "Possibly dead Python function: backfill_king_daily_close", "shortDescription": {"text": "Possibly dead Python function: backfill_king_daily_close"}, "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-5b3bc2b273cd2f5b", "name": "Possibly dead Python function: db_get_email_lead_count", "shortDescription": {"text": "Possibly dead Python function: db_get_email_lead_count"}, "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-93b43b297959e82b", "name": "Possibly dead Python function: db_list_affiliates", "shortDescription": {"text": "Possibly dead Python function: db_list_affiliates"}, "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-2ab5877070ae9c62", "name": "Possibly dead Python function: update_gex_data_recalc", "shortDescription": {"text": "Possibly dead Python function: update_gex_data_recalc"}, "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-a06da47f04a4091f", "name": "Possibly dead Python function: update_member_field", "shortDescription": {"text": "Possibly dead Python function: update_member_field"}, "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-e36d2f09f3cdb3e1", "name": "Possibly dead Python function: set_king_streak", "shortDescription": {"text": "Possibly dead Python function: set_king_streak"}, "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-14445b16cfc47d61", "name": "Possibly dead Python function: deco", "shortDescription": {"text": "Possibly dead Python function: deco"}, "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-5fa92090bc287c72", "name": "Possibly dead Python function: safe_jsonify", "shortDescription": {"text": "Possibly dead Python function: safe_jsonify"}, "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-1f14897009a78b4d", "name": "Possibly dead Python function: fetch_loop_0dte", "shortDescription": {"text": "Possibly dead Python function: fetch_loop_0dte"}, "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-0f372c3844ee4404", "name": "Possibly dead Python function: live_price_loop", "shortDescription": {"text": "Possibly dead Python function: live_price_loop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92daa18689ec36ec", "name": "Possibly dead Python function: fetch_loop_all", "shortDescription": {"text": "Possibly dead Python function: fetch_loop_all"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-86d8c7b442f6aef0", "name": "Possibly dead Python function: email_queue_loop", "shortDescription": {"text": "Possibly dead Python function: email_queue_loop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cacca0fe3d713c7d", "name": "Possibly dead Python function: membership_expiry_loop", "shortDescription": {"text": "Possibly dead Python function: membership_expiry_loop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44b72327bd894601", "name": "Possibly dead Python function: snapshot_retention_loop", "shortDescription": {"text": "Possibly dead Python function: snapshot_retention_loop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ef9325b4d925fa3", "name": "Possibly dead Python function: schwab_sync_loop", "shortDescription": {"text": "Possibly dead Python function: schwab_sync_loop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b691cc93a5d0edb1", "name": "Possibly dead Python function: alerts_check_loop", "shortDescription": {"text": "Possibly dead Python function: alerts_check_loop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8748c4cd3fdeef97", "name": "Possibly dead Python function: weekend_wallst_loop", "shortDescription": {"text": "Possibly dead Python function: weekend_wallst_loop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd2b304f3c26653c", "name": "Possibly dead Python function: discord_auto_post_loop", "shortDescription": {"text": "Possibly dead Python function: discord_auto_post_loop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d7d7530dd9fb903", "name": "Stray `console.log` in TS/JS \u2014 chrome-extension/background.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 chrome-extension/background.js:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bff92e973ac42804", "name": "Icon-only button without accessible name \u2014 static/js/alerts.js:34", "shortDescription": {"text": "Icon-only button without accessible name \u2014 static/js/alerts.js:34"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e3996474dcaf0433", "name": "Stray `console.log` in TS/JS \u2014 static/js/core.js:1847", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 static/js/core.js:1847"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8735a911b857b75c", "name": "Icon-only button without accessible name \u2014 static/js/ic-simulator.js:138", "shortDescription": {"text": "Icon-only button without accessible name \u2014 static/js/ic-simulator.js:138"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6259a7217b203842", "name": "Stray `console.log` in TS/JS \u2014 static/js/heatmap.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 static/js/heatmap.js:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-5b8783ca04bf9b61", "name": "Insecure pattern 'direct_innerhtml_assignment' in chrome-extension/content.js:57", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in chrome-extension/content.js:57"}, "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-2db57433a8d442d2", "name": "Insecure pattern 'direct_innerhtml_assignment' in chrome-extension/popup.js:130", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in chrome-extension/popup.js:130"}, "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-f1ccd25e82e2798e", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/commander.js:64", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/commander.js:64"}, "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-7ab6acddd1f8a305", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/alerts.js:30", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/alerts.js:30"}, "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-9b55507b5923ec32", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/core.js:331", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/core.js:331"}, "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-3a58b827196e24ab", "name": "Insecure pattern 'local_storage_auth_token' in static/js/core.js:427", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in static/js/core.js:427"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cdc3cd9a31a1fc46", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/account.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/account.js:35"}, "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-98a6371414abab5e", "name": "Insecure pattern 'local_storage_auth_token' in static/js/account.js:284", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in static/js/account.js:284"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e74ee9d5ee00454b", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/perf.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/perf.js:35"}, "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-909c9e8e49c3456b", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/strike-stack.js:209", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/strike-stack.js:209"}, "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-3d7292166a780efc", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/chart.js:777", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/chart.js:777"}, "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-79f2743582c84058", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/ladder.js:194", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/ladder.js:194"}, "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-078dd4f213ff3627", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/ic-simulator.js:237", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/ic-simulator.js:237"}, "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-5cb32c93fd7512ef", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/spx-journal.js:154", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/spx-journal.js:154"}, "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-05022b21b5f91a3c", "name": "Insecure pattern 'local_storage_auth_token' in static/js/spx-journal.js:60", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in static/js/spx-journal.js:60"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d85c14cf8c1f92d5", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/heatmap.js:51", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/heatmap.js:51"}, "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-8b5f99f8f02f0cf2", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/history.js:37", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/history.js:37"}, "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-7d2dcdac5085d3dc", "name": "Very large file: gex_fetcher.py (1714 lines)", "shortDescription": {"text": "Very large file: gex_fetcher.py (1714 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-d2e27e060e15b9be", "name": "Very large file: gex_autoresearch.py (1787 lines)", "shortDescription": {"text": "Very large file: gex_autoresearch.py (1787 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-6fe6f22005f998b3", "name": "Very large file: gex_db.py (5805 lines)", "shortDescription": {"text": "Very large file: gex_db.py (5805 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-700f45cdeda7051d", "name": "Very large file: state.py (1855 lines)", "shortDescription": {"text": "Very large file: state.py (1855 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-49057ebccda74b70", "name": "Very large file: schwab_sync.py (1435 lines)", "shortDescription": {"text": "Very large file: schwab_sync.py (1435 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-94eb507721869539", "name": "Very large file: tests/test_gex_db.py (1332 lines)", "shortDescription": {"text": "Very large file: tests/test_gex_db.py (1332 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-ba406ded80647529", "name": "Very large file: tests/test_spx_journal.py (1589 lines)", "shortDescription": {"text": "Very large file: tests/test_spx_journal.py (1589 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-05ff3dad56c37a8b", "name": "Very large file: static/js/core.js (2236 lines)", "shortDescription": {"text": "Very large file: static/js/core.js (2236 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-b18519f0d29091f8", "name": "Very large file: static/js/spx-journal.js (1915 lines)", "shortDescription": {"text": "Very large file: static/js/spx-journal.js (1915 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-4e8600fe31966a91", "name": "Very large file: services/commander.py (1496 lines)", "shortDescription": {"text": "Very large file: services/commander.py (1496 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 67 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing 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-9000c4cda5e18d00", "name": "Commented-code block (5 lines) in gex_fetcher.py:765", "shortDescription": {"text": "Commented-code block (5 lines) in gex_fetcher.py:765"}, "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-9004fac2f4e03c0c", "name": "Network/subprocess call without timeout or try/except \u2014 gex_fetcher.py:57", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 gex_fetcher.py:57"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b77b4b8a2dc1e55", "name": "Commented-code block (5 lines) in config.py:33", "shortDescription": {"text": "Commented-code block (5 lines) in config.py:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a895cb52819a0096", "name": "Commented-code block (5 lines) in snaptrade_sync.py:435", "shortDescription": {"text": "Commented-code block (5 lines) in snaptrade_sync.py:435"}, "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-3bcbea3617151c19", "name": "Commented-code block (5 lines) in structure_classifier.py:89", "shortDescription": {"text": "Commented-code block (5 lines) in structure_classifier.py:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04bd538fc0ea0be4", "name": "Commented-code block (5 lines) in gex_db.py:943", "shortDescription": {"text": "Commented-code block (5 lines) in gex_db.py:943"}, "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-5594187c85445c83", "name": "Legacy-named symbol `data_copy` in state.py:1416", "shortDescription": {"text": "Legacy-named symbol `data_copy` in state.py:1416"}, "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-49222d932b1b127b", "name": "Commented-code block (5 lines) in state.py:175", "shortDescription": {"text": "Commented-code block (5 lines) in state.py:175"}, "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-c4cdd69fa3005737", "name": "Commented-code block (5 lines) in tests/test_validator.py:247", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_validator.py:247"}, "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-3815873bc48d08a2", "name": "Legacy-named symbol `cs_old` in tests/test_signup_flow.py:97", "shortDescription": {"text": "Legacy-named symbol `cs_old` in tests/test_signup_flow.py:97"}, "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-9cafb6c3c59b67a3", "name": "Legacy-named symbol `mem_v2` in tests/test_webhooks.py:170", "shortDescription": {"text": "Legacy-named symbol `mem_v2` in tests/test_webhooks.py:170"}, "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-62a21df47a886065", "name": "Legacy-named symbol `mem_old` in tests/test_auth.py:303", "shortDescription": {"text": "Legacy-named symbol `mem_old` in tests/test_auth.py:303"}, "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-b15e053a630d5b4b", "name": "Legacy-named symbol `test_get_gex_data_returns_copy` in tests/test_state.py:72", "shortDescription": {"text": "Legacy-named symbol `test_get_gex_data_returns_copy` in tests/test_state.py:72"}, "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-db88ea26222788b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/alerts.js:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/alerts.js:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fcbf4044e330e9af", "name": "Legacy-named symbol `gex_account_prefs_v1` in static/js/core.js:89", "shortDescription": {"text": "Legacy-named symbol `gex_account_prefs_v1` in static/js/core.js:89"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd762dcc1868b6dc", "name": "Commented-code block (5 lines) in static/js/core.js:570", "shortDescription": {"text": "Commented-code block (5 lines) in static/js/core.js:570"}, "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-9a72f2d5dc4625c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/core.js:242", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/core.js:242"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-daf1093f3dd6ccae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/account.js:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/account.js:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7955012e3fc91446", "name": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/perf.js:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/perf.js:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49654a1954e2ab41", "name": "Commented-code block (5 lines) in static/js/spx-journal.js:540", "shortDescription": {"text": "Commented-code block (5 lines) in static/js/spx-journal.js:540"}, "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-e616e3c5ec8725ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/spx-journal.js:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/spx-journal.js:34"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bdf627ef297cc886", "name": "Commented-code block (6 lines) in static/js/heatmap.js:126", "shortDescription": {"text": "Commented-code block (6 lines) in static/js/heatmap.js:126"}, "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-7c02bdc44163f11d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/heatmap.js:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/heatmap.js:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-67bdf48edf1598b8", "name": "Commented-code block (5 lines) in services/trade_copilot.py:60", "shortDescription": {"text": "Commented-code block (5 lines) in services/trade_copilot.py:60"}, "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-0d04670be86aeec5", "name": "Commented-code block (9 lines) in services/fetch_loops.py:335", "shortDescription": {"text": "Commented-code block (9 lines) in services/fetch_loops.py:335"}, "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-73d75c9f0ee3792b", "name": "Commented-code block (5 lines) in services/commander_loop.py:61", "shortDescription": {"text": "Commented-code block (5 lines) in services/commander_loop.py:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea64e6f1ea0f3fe2", "name": "Commented-code block (7 lines) in services/commander.py:1274", "shortDescription": {"text": "Commented-code block (7 lines) in services/commander.py:1274"}, "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-c497ed7c0d55df89", "name": "Commented-code block (5 lines) in services/uw_gex_fallback.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in services/uw_gex_fallback.py:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cba97668341471b", "name": "Commented-code block (5 lines) in services/copilot_grader.py:211", "shortDescription": {"text": "Commented-code block (5 lines) in services/copilot_grader.py:211"}, "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-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:\ngex_fetcher.py:is_weekly, gex_fetcher.py:is_weekly\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-0027e313ade46c8f", "name": "Near-duplicate function bodies in 7 places", "shortDescription": {"text": "Near-duplicate function bodies in 7 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ngex_strategies.py:should_enter, gex_strategies.py:should_enter, gex_strategies.py:should_enter, gex_strategies.py:should_enter\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-6b44d056b3e493ab", "name": "Unused endpoint: ANY /api/gex-preview", "shortDescription": {"text": "Unused endpoint: ANY /api/gex-preview"}, "fullDescription": {"text": "`blueprints/gex_api.py` declares `ANY /api/gex-preview` 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-c97251f29cfbd47c", "name": "Unused endpoint: ANY /api/gex/symbol-search", "shortDescription": {"text": "Unused endpoint: ANY /api/gex/symbol-search"}, "fullDescription": {"text": "`blueprints/gex_api.py` declares `ANY /api/gex/symbol-search` 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-226c96aea5f81c68", "name": "Unused endpoint: ANY /api/opening-baseline", "shortDescription": {"text": "Unused endpoint: ANY /api/opening-baseline"}, "fullDescription": {"text": "`blueprints/gex_api.py` declares `ANY /api/opening-baseline` 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-9d245521bdccc477", "name": "Unused endpoint: ANY /api/rolling-baseline", "shortDescription": {"text": "Unused endpoint: ANY /api/rolling-baseline"}, "fullDescription": {"text": "`blueprints/gex_api.py` declares `ANY /api/rolling-baseline` 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-581324818378b23c", "name": "Unused endpoint: ANY /api/gex/accuracy", "shortDescription": {"text": "Unused endpoint: ANY /api/gex/accuracy"}, "fullDescription": {"text": "`blueprints/gex_api.py` declares `ANY /api/gex/accuracy` 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-263186fdfb569eeb", "name": "Unused endpoint: ANY /api/tv/levels", "shortDescription": {"text": "Unused endpoint: ANY /api/tv/levels"}, "fullDescription": {"text": "`blueprints/tv_api.py` declares `ANY /api/tv/levels` 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-dfbb962e1b9b34f9", "name": "Unused endpoint: ANY /api/tv/strikes", "shortDescription": {"text": "Unused endpoint: ANY /api/tv/strikes"}, "fullDescription": {"text": "`blueprints/tv_api.py` declares `ANY /api/tv/strikes` 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-e83ca76102545b77", "name": "Unused endpoint: ANY /api/tv/generate-key", "shortDescription": {"text": "Unused endpoint: ANY /api/tv/generate-key"}, "fullDescription": {"text": "`blueprints/tv_api.py` declares `ANY /api/tv/generate-key` 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-e8d313d9eb1f61f0", "name": "Unused endpoint: ANY /api/tv/revoke-key", "shortDescription": {"text": "Unused endpoint: ANY /api/tv/revoke-key"}, "fullDescription": {"text": "`blueprints/tv_api.py` declares `ANY /api/tv/revoke-key` 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-fabf0f4a8f506e39", "name": "Unused endpoint: ANY /api/trades/<int:trade_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/trades/<int:trade_id>"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/trades/<int:trade_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fbf2e3cbfbe6f7f", "name": "Unused endpoint: ANY /api/signals/evaluate", "shortDescription": {"text": "Unused endpoint: ANY /api/signals/evaluate"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/signals/evaluate` 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-9b176a6df667af63", "name": "Unused endpoint: ANY /api/backtest/strategies", "shortDescription": {"text": "Unused endpoint: ANY /api/backtest/strategies"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/backtest/strategies` 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-47f7a4d77bdb679d", "name": "Unused endpoint: ANY /api/journal", "shortDescription": {"text": "Unused endpoint: ANY /api/journal"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/journal` 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-ac38144362fb23ce", "name": "Unused endpoint: ANY /api/journal/recent", "shortDescription": {"text": "Unused endpoint: ANY /api/journal/recent"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/journal/recent` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f91abfdd0e593ae3", "name": "Unused endpoint: ANY /api/journal/similar", "shortDescription": {"text": "Unused endpoint: ANY /api/journal/similar"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/journal/similar` 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-8985bbf55464decf", "name": "Unused endpoint: ANY /api/journal/stats", "shortDescription": {"text": "Unused endpoint: ANY /api/journal/stats"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/journal/stats` 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-8f8062d565898c36", "name": "Unused endpoint: ANY /api/journal/<trade_date>/outcome", "shortDescription": {"text": "Unused endpoint: ANY /api/journal/<trade_date>/outcome"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/journal/<trade_date>/outcome` 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-d92aa7658eae44b7", "name": "Unused endpoint: ANY /api/autoresearch/morning-analysis", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/morning-analysis"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/morning-analysis` 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-94c8e6e98ac268c2", "name": "Unused endpoint: ANY /api/autoresearch/validate-trade", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/validate-trade"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/validate-trade` 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-2d5a263d67fe3242", "name": "Unused endpoint: ANY /api/autoresearch/validations", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/validations"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/validations` 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-d4b590245fa90253", "name": "Unused endpoint: ANY /api/autoresearch/brief", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/brief"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/brief` 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-4325f49fc0789df0", "name": "Unused endpoint: ANY /api/autoresearch/record", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/record"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/record` 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-b5acc8e0e908d0ee", "name": "Unused endpoint: ANY /api/autoresearch/evaluate", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/evaluate"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/evaluate` 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-ea2a6e86a4d07c7e", "name": "Unused endpoint: ANY /api/autoresearch/progress", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/progress"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/progress` 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-026f3f416d86468d", "name": "Unused endpoint: ANY /api/autoresearch/evolve", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/evolve"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/evolve` 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-ead0f43305c8e7d7", "name": "Unused endpoint: ANY /api/autoresearch/backfill-accuracy", "shortDescription": {"text": "Unused endpoint: ANY /api/autoresearch/backfill-accuracy"}, "fullDescription": {"text": "`blueprints/knowledge.py` declares `ANY /api/autoresearch/backfill-accuracy` 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-c3cc95ad0650e176", "name": "Unused endpoint: ANY /api/checkout", "shortDescription": {"text": "Unused endpoint: ANY /api/checkout"}, "fullDescription": {"text": "`blueprints/stripe_pay.py` declares `ANY /api/checkout` 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-259589d305e079da", "name": "Unused endpoint: ANY /api/checkout/confirm", "shortDescription": {"text": "Unused endpoint: ANY /api/checkout/confirm"}, "fullDescription": {"text": "`blueprints/stripe_pay.py` declares `ANY /api/checkout/confirm` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1a4a2b6602144fb", "name": "Unused endpoint: ANY /api/stripe/webhook", "shortDescription": {"text": "Unused endpoint: ANY /api/stripe/webhook"}, "fullDescription": {"text": "`blueprints/stripe_pay.py` declares `ANY /api/stripe/webhook` 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-8fdf3ca085c9eaa7", "name": "Unused endpoint: ANY /api/auto-login", "shortDescription": {"text": "Unused endpoint: ANY /api/auto-login"}, "fullDescription": {"text": "`blueprints/auth.py` declares `ANY /api/auto-login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0975b20ced342fb7", "name": "Unused endpoint: ANY /api/member/claim-password", "shortDescription": {"text": "Unused endpoint: ANY /api/member/claim-password"}, "fullDescription": {"text": "`blueprints/auth.py` declares `ANY /api/member/claim-password` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70a8bd9c2d55ae37", "name": "Unused endpoint: ANY /api/member/reset-password", "shortDescription": {"text": "Unused endpoint: ANY /api/member/reset-password"}, "fullDescription": {"text": "`blueprints/auth.py` declares `ANY /api/member/reset-password` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db015a14a4dbf8c2", "name": "Unused endpoint: ANY /spx-journal", "shortDescription": {"text": "Unused endpoint: ANY /spx-journal"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /spx-journal` 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-fafab67d0c8dfb61", "name": "Unused endpoint: ANY /simulator", "shortDescription": {"text": "Unused endpoint: ANY /simulator"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /simulator` 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-b150bc00b923d125", "name": "Unused endpoint: ANY /api/spx-journal/trades", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/trades"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/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-87753a561889557f", "name": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/trades/<int:trade_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fdf4e3a0003753a", "name": "Unused endpoint: ANY /api/spx-journal/stats", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/stats"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/stats` 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-b3ef12190c92b7e3", "name": "Unused endpoint: ANY /api/spx-journal/settings", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/settings"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/settings` 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-a386f8f93f9ba197", "name": "Unused endpoint: ANY /api/spx-journal/edge", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/edge"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/edge` 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-f2082caa870a5a05", "name": "Unused endpoint: ANY /api/spx-journal/sizing", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/sizing"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/sizing` 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-d5e757d06d399095", "name": "Unused endpoint: ANY /api/spx-journal/projection", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/projection"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/projection` 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-878087b28365be63", "name": "Unused endpoint: ANY /api/spx-journal/today", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/today"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/today` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-174bd3603dc8bcac", "name": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>/confirm", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>/confirm"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/trades/<int:trade_id>/confirm` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b30f89507f66ced7", "name": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>/skip", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>/skip"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/trades/<int:trade_id>/skip` 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-8fd003f8545313fb", "name": "Unused endpoint: ANY /api/spx-journal/today/skip", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/today/skip"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/today/skip` 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-1ec03d6e789dd7b6", "name": "Unused endpoint: ANY /api/spx-journal/today/post-mortem", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/today/post-mortem"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/today/post-mortem` 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-d1aa01de78857f42", "name": "Unused endpoint: ANY /api/spx-journal/today/intraday-snapshot", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/today/intraday-snapshot"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/today/intraday-snapshot` 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-a6c6fe6fe5659f52", "name": "Unused endpoint: ANY /api/spx-journal/today/entry-exit", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/today/entry-exit"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/today/entry-exit` 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-3b51d718459ecb36", "name": "Unused endpoint: ANY /api/spx-journal/comparable-setups", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/comparable-setups"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/comparable-setups` 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-f5645a5d879e082a", "name": "Unused endpoint: ANY /api/spx-journal/events", "shortDescription": {"text": "Unused endpoint: ANY /api/spx-journal/events"}, "fullDescription": {"text": "`blueprints/spx_journal.py` declares `ANY /api/spx-journal/events` 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/20387"}, "properties": {"repository": "strikegex/gex-heatmap", "repoUrl": "https://github.com/strikegex/gex-heatmap", "branch": "main"}, "results": [{"ruleId": "scanner-2744ffe21dc1ea1c", "level": "note", "message": {"text": "Possibly dead Python function: apply_learning_adjustments"}, "properties": {"repobilityId": "52a5b1550ec0c0fc", "scanner": "scanner-primary", "fingerprint": "2744ffe21dc1ea1c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gex_autoresearch.py:1687"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0c209b2c32533bd", "level": "note", "message": {"text": "Possibly dead Python function: backfill_king_daily_close"}, "properties": {"repobilityId": "f14be44a38e791f7", "scanner": "scanner-primary", "fingerprint": "e0c209b2c32533bd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gex_db.py:3173"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5b3bc2b273cd2f5b", "level": "note", "message": {"text": "Possibly dead Python function: db_get_email_lead_count"}, "properties": {"repobilityId": "9cbfdfa25da1e228", "scanner": "scanner-primary", "fingerprint": "5b3bc2b273cd2f5b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gex_db.py:4944"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-93b43b297959e82b", "level": "note", "message": {"text": "Possibly dead Python function: db_list_affiliates"}, "properties": {"repobilityId": "97a54ef0b53c21f3", "scanner": "scanner-primary", "fingerprint": "93b43b297959e82b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gex_db.py:5065"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2ab5877070ae9c62", "level": "note", "message": {"text": "Possibly dead Python function: update_gex_data_recalc"}, "properties": {"repobilityId": "02b58c45cd686766", "scanner": "scanner-primary", "fingerprint": "2ab5877070ae9c62", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "state.py:1398"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a06da47f04a4091f", "level": "note", "message": {"text": "Possibly dead Python function: update_member_field"}, "properties": {"repobilityId": "826ee42ef2bf04d4", "scanner": "scanner-primary", "fingerprint": "a06da47f04a4091f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "state.py:1598"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e36d2f09f3cdb3e1", "level": "note", "message": {"text": "Possibly dead Python function: set_king_streak"}, "properties": {"repobilityId": "39722c5091912ab6", "scanner": "scanner-primary", "fingerprint": "e36d2f09f3cdb3e1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "state.py:1799"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-14445b16cfc47d61", "level": "note", "message": {"text": "Possibly dead Python function: deco"}, "properties": {"repobilityId": "11da05572c448654", "scanner": "scanner-primary", "fingerprint": "14445b16cfc47d61", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "middleware/auth.py:94"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5fa92090bc287c72", "level": "note", "message": {"text": "Possibly dead Python function: safe_jsonify"}, "properties": {"repobilityId": "ddb57cd0374be805", "scanner": "scanner-primary", "fingerprint": "5fa92090bc287c72", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "middleware/security.py:48"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f14897009a78b4d", "level": "note", "message": {"text": "Possibly dead Python function: fetch_loop_0dte"}, "properties": {"repobilityId": "bfc7e4629e60d4e2", "scanner": "scanner-primary", "fingerprint": "1f14897009a78b4d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:223"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0f372c3844ee4404", "level": "note", "message": {"text": "Possibly dead Python function: live_price_loop"}, "properties": {"repobilityId": "556bacbea896e532", "scanner": "scanner-primary", "fingerprint": "0f372c3844ee4404", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:437"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92daa18689ec36ec", "level": "note", "message": {"text": "Possibly dead Python function: fetch_loop_all"}, "properties": {"repobilityId": "82a99899941833e3", "scanner": "scanner-primary", "fingerprint": "92daa18689ec36ec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:538"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-86d8c7b442f6aef0", "level": "note", "message": {"text": "Possibly dead Python function: email_queue_loop"}, "properties": {"repobilityId": "7c6c4075da82f87e", "scanner": "scanner-primary", "fingerprint": "86d8c7b442f6aef0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:641"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cacca0fe3d713c7d", "level": "note", "message": {"text": "Possibly dead Python function: membership_expiry_loop"}, "properties": {"repobilityId": "fe425bb7152c616f", "scanner": "scanner-primary", "fingerprint": "cacca0fe3d713c7d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:652"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-44b72327bd894601", "level": "note", "message": {"text": "Possibly dead Python function: snapshot_retention_loop"}, "properties": {"repobilityId": "859e36da497ad1ad", "scanner": "scanner-primary", "fingerprint": "44b72327bd894601", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:713"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9ef9325b4d925fa3", "level": "note", "message": {"text": "Possibly dead Python function: schwab_sync_loop"}, "properties": {"repobilityId": "5014a2059d8bbd0b", "scanner": "scanner-primary", "fingerprint": "9ef9325b4d925fa3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:734"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b691cc93a5d0edb1", "level": "note", "message": {"text": "Possibly dead Python function: alerts_check_loop"}, "properties": {"repobilityId": "40b7cc30f125f9ca", "scanner": "scanner-primary", "fingerprint": "b691cc93a5d0edb1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:869"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8748c4cd3fdeef97", "level": "note", "message": {"text": "Possibly dead Python function: weekend_wallst_loop"}, "properties": {"repobilityId": "14835ae458828d70", "scanner": "scanner-primary", "fingerprint": "8748c4cd3fdeef97", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/fetch_loops.py:1047"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd2b304f3c26653c", "level": "note", "message": {"text": "Possibly dead Python function: discord_auto_post_loop"}, "properties": {"repobilityId": "1820ffcf1be7edcc", "scanner": "scanner-primary", "fingerprint": "dd2b304f3c26653c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/discord_posts.py:368"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7d7d7530dd9fb903", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 chrome-extension/background.js:17"}, "properties": {"repobilityId": "522257b52e9b9f46", "scanner": "scanner-primary", "fingerprint": "7d7d7530dd9fb903", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bff92e973ac42804", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 static/js/alerts.js:34"}, "properties": {"repobilityId": "67630151ef1c98b6", "scanner": "scanner-primary", "fingerprint": "bff92e973ac42804", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e3996474dcaf0433", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 static/js/core.js:1847"}, "properties": {"repobilityId": "f3cb9f84b35ceb9c", "scanner": "scanner-primary", "fingerprint": "e3996474dcaf0433", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8735a911b857b75c", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 static/js/ic-simulator.js:138"}, "properties": {"repobilityId": "a1ab8bbcf3e03c8e", "scanner": "scanner-primary", "fingerprint": "8735a911b857b75c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-6259a7217b203842", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 static/js/heatmap.js:49"}, "properties": {"repobilityId": "da02ca84a03bed3d", "scanner": "scanner-primary", "fingerprint": "6259a7217b203842", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"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-5b8783ca04bf9b61", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in chrome-extension/content.js:57"}, "properties": {"repobilityId": "8a59ad2d23f176fe", "scanner": "scanner-primary", "fingerprint": "5b8783ca04bf9b61", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chrome-extension/content.js"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-2db57433a8d442d2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in chrome-extension/popup.js:130"}, "properties": {"repobilityId": "98edfb31afa80f04", "scanner": "scanner-primary", "fingerprint": "2db57433a8d442d2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "chrome-extension/popup.js"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-f1ccd25e82e2798e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/commander.js:64"}, "properties": {"repobilityId": "5bf6622fe35b4733", "scanner": "scanner-primary", "fingerprint": "f1ccd25e82e2798e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/commander.js"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-7ab6acddd1f8a305", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/alerts.js:30"}, "properties": {"repobilityId": "04c34b7da4388338", "scanner": "scanner-primary", "fingerprint": "7ab6acddd1f8a305", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/alerts.js"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-9b55507b5923ec32", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/core.js:331"}, "properties": {"repobilityId": "166e80a4b1dabc45", "scanner": "scanner-primary", "fingerprint": "9b55507b5923ec32", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/core.js"}, "region": {"startLine": 331}}}]}, {"ruleId": "scanner-3a58b827196e24ab", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in static/js/core.js:427"}, "properties": {"repobilityId": "cb8fe3ed3b41c58e", "scanner": "scanner-primary", "fingerprint": "3a58b827196e24ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/core.js"}, "region": {"startLine": 427}}}]}, {"ruleId": "scanner-cdc3cd9a31a1fc46", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/account.js:35"}, "properties": {"repobilityId": "cf52d7bfc11334e5", "scanner": "scanner-primary", "fingerprint": "cdc3cd9a31a1fc46", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/account.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-98a6371414abab5e", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in static/js/account.js:284"}, "properties": {"repobilityId": "d0fc2bca6f09bfd2", "scanner": "scanner-primary", "fingerprint": "98a6371414abab5e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/account.js"}, "region": {"startLine": 284}}}]}, {"ruleId": "scanner-e74ee9d5ee00454b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/perf.js:35"}, "properties": {"repobilityId": "85640b4efe8988d0", "scanner": "scanner-primary", "fingerprint": "e74ee9d5ee00454b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/perf.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-909c9e8e49c3456b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/strike-stack.js:209"}, "properties": {"repobilityId": "7e584a8c97ccdbcb", "scanner": "scanner-primary", "fingerprint": "909c9e8e49c3456b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/strike-stack.js"}, "region": {"startLine": 209}}}]}, {"ruleId": "scanner-3d7292166a780efc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/chart.js:777"}, "properties": {"repobilityId": "6cc2b411d141d2a1", "scanner": "scanner-primary", "fingerprint": "3d7292166a780efc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/chart.js"}, "region": {"startLine": 777}}}]}, {"ruleId": "scanner-79f2743582c84058", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/ladder.js:194"}, "properties": {"repobilityId": "e99efbe41900e6ea", "scanner": "scanner-primary", "fingerprint": "79f2743582c84058", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/ladder.js"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-078dd4f213ff3627", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/ic-simulator.js:237"}, "properties": {"repobilityId": "9d6d31e8261b9f86", "scanner": "scanner-primary", "fingerprint": "078dd4f213ff3627", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/ic-simulator.js"}, "region": {"startLine": 237}}}]}, {"ruleId": "scanner-5cb32c93fd7512ef", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/spx-journal.js:154"}, "properties": {"repobilityId": "e3505ed55b02a066", "scanner": "scanner-primary", "fingerprint": "5cb32c93fd7512ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/spx-journal.js"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-05022b21b5f91a3c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in static/js/spx-journal.js:60"}, "properties": {"repobilityId": "01735344f023ecba", "scanner": "scanner-primary", "fingerprint": "05022b21b5f91a3c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/spx-journal.js"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-d85c14cf8c1f92d5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/heatmap.js:51"}, "properties": {"repobilityId": "80b7a18ed2d77aed", "scanner": "scanner-primary", "fingerprint": "d85c14cf8c1f92d5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/heatmap.js"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-8b5f99f8f02f0cf2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/history.js:37"}, "properties": {"repobilityId": "2f0c68902eb5b50e", "scanner": "scanner-primary", "fingerprint": "8b5f99f8f02f0cf2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/history.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-7d2dcdac5085d3dc", "level": "note", "message": {"text": "Very large file: gex_fetcher.py (1714 lines)"}, "properties": {"repobilityId": "d42f33be4ea4e346", "scanner": "scanner-primary", "fingerprint": "7d2dcdac5085d3dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d2e27e060e15b9be", "level": "note", "message": {"text": "Very large file: gex_autoresearch.py (1787 lines)"}, "properties": {"repobilityId": "ff9c4fde7595d916", "scanner": "scanner-primary", "fingerprint": "d2e27e060e15b9be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6fe6f22005f998b3", "level": "note", "message": {"text": "Very large file: gex_db.py (5805 lines)"}, "properties": {"repobilityId": "e09ba9f71e71c5ae", "scanner": "scanner-primary", "fingerprint": "6fe6f22005f998b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-700f45cdeda7051d", "level": "note", "message": {"text": "Very large file: state.py (1855 lines)"}, "properties": {"repobilityId": "4fe63f9d3be22d7c", "scanner": "scanner-primary", "fingerprint": "700f45cdeda7051d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-49057ebccda74b70", "level": "note", "message": {"text": "Very large file: schwab_sync.py (1435 lines)"}, "properties": {"repobilityId": "8a0e4785b67bd23f", "scanner": "scanner-primary", "fingerprint": "49057ebccda74b70", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-94eb507721869539", "level": "note", "message": {"text": "Very large file: tests/test_gex_db.py (1332 lines)"}, "properties": {"repobilityId": "4e01acf99febb38f", "scanner": "scanner-primary", "fingerprint": "94eb507721869539", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ba406ded80647529", "level": "note", "message": {"text": "Very large file: tests/test_spx_journal.py (1589 lines)"}, "properties": {"repobilityId": "80b079741e11f89d", "scanner": "scanner-primary", "fingerprint": "ba406ded80647529", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-05ff3dad56c37a8b", "level": "note", "message": {"text": "Very large file: static/js/core.js (2236 lines)"}, "properties": {"repobilityId": "db51dab40d617355", "scanner": "scanner-primary", "fingerprint": "05ff3dad56c37a8b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b18519f0d29091f8", "level": "note", "message": {"text": "Very large file: static/js/spx-journal.js (1915 lines)"}, "properties": {"repobilityId": "7da4a667f4f24e94", "scanner": "scanner-primary", "fingerprint": "b18519f0d29091f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4e8600fe31966a91", "level": "note", "message": {"text": "Very large file: services/commander.py (1496 lines)"}, "properties": {"repobilityId": "a9cfff003e9543f1", "scanner": "scanner-primary", "fingerprint": "4e8600fe31966a91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "44501a866f019ee8", "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": "ae481c646255c247", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "f024efe011ab46e7", "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": "67c56121a62032d3", "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": "1933f0017b20f1d3", "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": "a1f425c3ef0a2d93", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-9000c4cda5e18d00", "level": "none", "message": {"text": "Commented-code block (5 lines) in gex_fetcher.py:765"}, "properties": {"repobilityId": "ee1b8b243ecc25d2", "scanner": "scanner-primary", "fingerprint": "9000c4cda5e18d00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9004fac2f4e03c0c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 gex_fetcher.py:57"}, "properties": {"repobilityId": "404d4d1f27334658", "scanner": "scanner-primary", "fingerprint": "9004fac2f4e03c0c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b77b4b8a2dc1e55", "level": "none", "message": {"text": "Commented-code block (5 lines) in config.py:33"}, "properties": {"repobilityId": "d9339c8689b03dbe", "scanner": "scanner-primary", "fingerprint": "8b77b4b8a2dc1e55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a895cb52819a0096", "level": "none", "message": {"text": "Commented-code block (5 lines) in snaptrade_sync.py:435"}, "properties": {"repobilityId": "ce18e9552ed0172a", "scanner": "scanner-primary", "fingerprint": "a895cb52819a0096", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bcbea3617151c19", "level": "none", "message": {"text": "Commented-code block (5 lines) in structure_classifier.py:89"}, "properties": {"repobilityId": "623a1218ca4be487", "scanner": "scanner-primary", "fingerprint": "3bcbea3617151c19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04bd538fc0ea0be4", "level": "none", "message": {"text": "Commented-code block (5 lines) in gex_db.py:943"}, "properties": {"repobilityId": "2036133e0d732aa9", "scanner": "scanner-primary", "fingerprint": "04bd538fc0ea0be4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5594187c85445c83", "level": "note", "message": {"text": "Legacy-named symbol `data_copy` in state.py:1416"}, "properties": {"repobilityId": "9014822d10156c7c", "scanner": "scanner-primary", "fingerprint": "5594187c85445c83", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-49222d932b1b127b", "level": "none", "message": {"text": "Commented-code block (5 lines) in state.py:175"}, "properties": {"repobilityId": "5f7379be04e3f6d5", "scanner": "scanner-primary", "fingerprint": "49222d932b1b127b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4cdd69fa3005737", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_validator.py:247"}, "properties": {"repobilityId": "86977fffa0ce85b4", "scanner": "scanner-primary", "fingerprint": "c4cdd69fa3005737", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3815873bc48d08a2", "level": "note", "message": {"text": "Legacy-named symbol `cs_old` in tests/test_signup_flow.py:97"}, "properties": {"repobilityId": "e930179889c3191a", "scanner": "scanner-primary", "fingerprint": "3815873bc48d08a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9cafb6c3c59b67a3", "level": "note", "message": {"text": "Legacy-named symbol `mem_v2` in tests/test_webhooks.py:170"}, "properties": {"repobilityId": "8f7ea5adb7ac70b8", "scanner": "scanner-primary", "fingerprint": "9cafb6c3c59b67a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-62a21df47a886065", "level": "note", "message": {"text": "Legacy-named symbol `mem_old` in tests/test_auth.py:303"}, "properties": {"repobilityId": "01f4f3afeac20bee", "scanner": "scanner-primary", "fingerprint": "62a21df47a886065", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b15e053a630d5b4b", "level": "note", "message": {"text": "Legacy-named symbol `test_get_gex_data_returns_copy` in tests/test_state.py:72"}, "properties": {"repobilityId": "b9a11b21cea6e365", "scanner": "scanner-primary", "fingerprint": "b15e053a630d5b4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-db88ea26222788b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/alerts.js:37"}, "properties": {"repobilityId": "7fbefdc15a46611a", "scanner": "scanner-primary", "fingerprint": "db88ea26222788b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fcbf4044e330e9af", "level": "note", "message": {"text": "Legacy-named symbol `gex_account_prefs_v1` in static/js/core.js:89"}, "properties": {"repobilityId": "778209a92392c990", "scanner": "scanner-primary", "fingerprint": "fcbf4044e330e9af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cd762dcc1868b6dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in static/js/core.js:570"}, "properties": {"repobilityId": "b4531b27691e9c1f", "scanner": "scanner-primary", "fingerprint": "cd762dcc1868b6dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a72f2d5dc4625c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/core.js:242"}, "properties": {"repobilityId": "e5ed6594047aadb1", "scanner": "scanner-primary", "fingerprint": "9a72f2d5dc4625c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-daf1093f3dd6ccae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/account.js:151"}, "properties": {"repobilityId": "1da241977cd60f7d", "scanner": "scanner-primary", "fingerprint": "daf1093f3dd6ccae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7955012e3fc91446", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/perf.js:25"}, "properties": {"repobilityId": "c92cfffad3d54c2c", "scanner": "scanner-primary", "fingerprint": "7955012e3fc91446", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49654a1954e2ab41", "level": "none", "message": {"text": "Commented-code block (5 lines) in static/js/spx-journal.js:540"}, "properties": {"repobilityId": "f411d2355614a8af", "scanner": "scanner-primary", "fingerprint": "49654a1954e2ab41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e616e3c5ec8725ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/spx-journal.js:34"}, "properties": {"repobilityId": "fdec2fcc1a4e2661", "scanner": "scanner-primary", "fingerprint": "e616e3c5ec8725ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bdf627ef297cc886", "level": "none", "message": {"text": "Commented-code block (6 lines) in static/js/heatmap.js:126"}, "properties": {"repobilityId": "9318cd25be6f77b0", "scanner": "scanner-primary", "fingerprint": "bdf627ef297cc886", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c02bdc44163f11d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 static/js/heatmap.js:40"}, "properties": {"repobilityId": "b55038f3e6cffc47", "scanner": "scanner-primary", "fingerprint": "7c02bdc44163f11d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-67bdf48edf1598b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/trade_copilot.py:60"}, "properties": {"repobilityId": "4c2754144351c857", "scanner": "scanner-primary", "fingerprint": "67bdf48edf1598b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d04670be86aeec5", "level": "none", "message": {"text": "Commented-code block (9 lines) in services/fetch_loops.py:335"}, "properties": {"repobilityId": "dd8e641d5055c2bb", "scanner": "scanner-primary", "fingerprint": "0d04670be86aeec5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73d75c9f0ee3792b", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/commander_loop.py:61"}, "properties": {"repobilityId": "8253647a98954ad6", "scanner": "scanner-primary", "fingerprint": "73d75c9f0ee3792b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea64e6f1ea0f3fe2", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/commander.py:1274"}, "properties": {"repobilityId": "7df2a1ebc96c34a9", "scanner": "scanner-primary", "fingerprint": "ea64e6f1ea0f3fe2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c497ed7c0d55df89", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/uw_gex_fallback.py:34"}, "properties": {"repobilityId": "b75600cf78d78279", "scanner": "scanner-primary", "fingerprint": "c497ed7c0d55df89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cba97668341471b", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/copilot_grader.py:211"}, "properties": {"repobilityId": "f9978586098f08aa", "scanner": "scanner-primary", "fingerprint": "0cba97668341471b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "fffe2797bd02792c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "456927d6735caef0", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "359bf88deffab2a1", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "1917d6c858b9de2c", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "6790dd6e56afed28", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "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": "1c4285cd75cd50b4", "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": "f0df87fdeca999ce", "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": "7c06a2ad78b4e1a9", "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": "ce0414a3518ee25c", "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": "af53d24a1091cc54", "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": "35b9cecfba5be6ef", "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": "bde94072bc8000d9", "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": "caa3b7b096075a39", "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": "1487fcd2878a73fb", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-6b44d056b3e493ab", "level": "note", "message": {"text": "Unused endpoint: ANY /api/gex-preview"}, "properties": {"repobilityId": "26bc204d47da7c7f", "scanner": "scanner-primary", "fingerprint": "6b44d056b3e493ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c97251f29cfbd47c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/gex/symbol-search"}, "properties": {"repobilityId": "ca492e46b74cfffe", "scanner": "scanner-primary", "fingerprint": "c97251f29cfbd47c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-226c96aea5f81c68", "level": "note", "message": {"text": "Unused endpoint: ANY /api/opening-baseline"}, "properties": {"repobilityId": "4c05b9d267bdf276", "scanner": "scanner-primary", "fingerprint": "226c96aea5f81c68", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d245521bdccc477", "level": "note", "message": {"text": "Unused endpoint: ANY /api/rolling-baseline"}, "properties": {"repobilityId": "c1c0e91f70c318e0", "scanner": "scanner-primary", "fingerprint": "9d245521bdccc477", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-581324818378b23c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/gex/accuracy"}, "properties": {"repobilityId": "c1d120eb97cd09f4", "scanner": "scanner-primary", "fingerprint": "581324818378b23c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-263186fdfb569eeb", "level": "note", "message": {"text": "Unused endpoint: ANY /api/tv/levels"}, "properties": {"repobilityId": "d1a633485b306247", "scanner": "scanner-primary", "fingerprint": "263186fdfb569eeb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dfbb962e1b9b34f9", "level": "note", "message": {"text": "Unused endpoint: ANY /api/tv/strikes"}, "properties": {"repobilityId": "b12b9f78d6c263bf", "scanner": "scanner-primary", "fingerprint": "dfbb962e1b9b34f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e83ca76102545b77", "level": "note", "message": {"text": "Unused endpoint: ANY /api/tv/generate-key"}, "properties": {"repobilityId": "595714892e603243", "scanner": "scanner-primary", "fingerprint": "e83ca76102545b77", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8d313d9eb1f61f0", "level": "note", "message": {"text": "Unused endpoint: ANY /api/tv/revoke-key"}, "properties": {"repobilityId": "b6b5dc95fd8bb8ce", "scanner": "scanner-primary", "fingerprint": "e8d313d9eb1f61f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fabf0f4a8f506e39", "level": "note", "message": {"text": "Unused endpoint: ANY /api/trades/<int:trade_id>"}, "properties": {"repobilityId": "5f6f7c1df9e783b2", "scanner": "scanner-primary", "fingerprint": "fabf0f4a8f506e39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4fbf2e3cbfbe6f7f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/signals/evaluate"}, "properties": {"repobilityId": "785452354b7a2674", "scanner": "scanner-primary", "fingerprint": "4fbf2e3cbfbe6f7f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b176a6df667af63", "level": "note", "message": {"text": "Unused endpoint: ANY /api/backtest/strategies"}, "properties": {"repobilityId": "f548972f392465b5", "scanner": "scanner-primary", "fingerprint": "9b176a6df667af63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-47f7a4d77bdb679d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/journal"}, "properties": {"repobilityId": "24a7d82c91850895", "scanner": "scanner-primary", "fingerprint": "47f7a4d77bdb679d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac38144362fb23ce", "level": "note", "message": {"text": "Unused endpoint: ANY /api/journal/recent"}, "properties": {"repobilityId": "4fb0f1f5dca43596", "scanner": "scanner-primary", "fingerprint": "ac38144362fb23ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f91abfdd0e593ae3", "level": "note", "message": {"text": "Unused endpoint: ANY /api/journal/similar"}, "properties": {"repobilityId": "e2c2628e09a18f1a", "scanner": "scanner-primary", "fingerprint": "f91abfdd0e593ae3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8985bbf55464decf", "level": "note", "message": {"text": "Unused endpoint: ANY /api/journal/stats"}, "properties": {"repobilityId": "6ac59760070a92b2", "scanner": "scanner-primary", "fingerprint": "8985bbf55464decf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8f8062d565898c36", "level": "note", "message": {"text": "Unused endpoint: ANY /api/journal/<trade_date>/outcome"}, "properties": {"repobilityId": "9afec62814435544", "scanner": "scanner-primary", "fingerprint": "8f8062d565898c36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d92aa7658eae44b7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/morning-analysis"}, "properties": {"repobilityId": "ef3f29b6f96ccbbf", "scanner": "scanner-primary", "fingerprint": "d92aa7658eae44b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94c8e6e98ac268c2", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/validate-trade"}, "properties": {"repobilityId": "776288550206943a", "scanner": "scanner-primary", "fingerprint": "94c8e6e98ac268c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d5a263d67fe3242", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/validations"}, "properties": {"repobilityId": "4b0bc40de595d8cc", "scanner": "scanner-primary", "fingerprint": "2d5a263d67fe3242", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d4b590245fa90253", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/brief"}, "properties": {"repobilityId": "1f03e1960134bac1", "scanner": "scanner-primary", "fingerprint": "d4b590245fa90253", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4325f49fc0789df0", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/record"}, "properties": {"repobilityId": "2470096b236d8018", "scanner": "scanner-primary", "fingerprint": "4325f49fc0789df0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b5acc8e0e908d0ee", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/evaluate"}, "properties": {"repobilityId": "c9ba9b1ddaf9c785", "scanner": "scanner-primary", "fingerprint": "b5acc8e0e908d0ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea2a6e86a4d07c7e", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/progress"}, "properties": {"repobilityId": "a612ad718f1f46cd", "scanner": "scanner-primary", "fingerprint": "ea2a6e86a4d07c7e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-026f3f416d86468d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/evolve"}, "properties": {"repobilityId": "69f26d0b2808a71b", "scanner": "scanner-primary", "fingerprint": "026f3f416d86468d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ead0f43305c8e7d7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/autoresearch/backfill-accuracy"}, "properties": {"repobilityId": "51ccfdfe766440d8", "scanner": "scanner-primary", "fingerprint": "ead0f43305c8e7d7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3cc95ad0650e176", "level": "note", "message": {"text": "Unused endpoint: ANY /api/checkout"}, "properties": {"repobilityId": "608de983b955fd88", "scanner": "scanner-primary", "fingerprint": "c3cc95ad0650e176", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-259589d305e079da", "level": "note", "message": {"text": "Unused endpoint: ANY /api/checkout/confirm"}, "properties": {"repobilityId": "569a9595ad1f4dc9", "scanner": "scanner-primary", "fingerprint": "259589d305e079da", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1a4a2b6602144fb", "level": "note", "message": {"text": "Unused endpoint: ANY /api/stripe/webhook"}, "properties": {"repobilityId": "592e752d82fbf8aa", "scanner": "scanner-primary", "fingerprint": "c1a4a2b6602144fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8fdf3ca085c9eaa7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/auto-login"}, "properties": {"repobilityId": "d4ab8ff6ab5ed703", "scanner": "scanner-primary", "fingerprint": "8fdf3ca085c9eaa7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0975b20ced342fb7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/member/claim-password"}, "properties": {"repobilityId": "2fe2a8a643530d7f", "scanner": "scanner-primary", "fingerprint": "0975b20ced342fb7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-70a8bd9c2d55ae37", "level": "note", "message": {"text": "Unused endpoint: ANY /api/member/reset-password"}, "properties": {"repobilityId": "e2817a12418eed90", "scanner": "scanner-primary", "fingerprint": "70a8bd9c2d55ae37", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db015a14a4dbf8c2", "level": "note", "message": {"text": "Unused endpoint: ANY /spx-journal"}, "properties": {"repobilityId": "e82fb89c3f614724", "scanner": "scanner-primary", "fingerprint": "db015a14a4dbf8c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fafab67d0c8dfb61", "level": "note", "message": {"text": "Unused endpoint: ANY /simulator"}, "properties": {"repobilityId": "c49775c4ed2b18ac", "scanner": "scanner-primary", "fingerprint": "fafab67d0c8dfb61", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b150bc00b923d125", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/trades"}, "properties": {"repobilityId": "f838f66f4819418a", "scanner": "scanner-primary", "fingerprint": "b150bc00b923d125", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87753a561889557f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>"}, "properties": {"repobilityId": "838891095113d903", "scanner": "scanner-primary", "fingerprint": "87753a561889557f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1fdf4e3a0003753a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/stats"}, "properties": {"repobilityId": "f5ac4d0eb1bd2d0b", "scanner": "scanner-primary", "fingerprint": "1fdf4e3a0003753a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b3ef12190c92b7e3", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/settings"}, "properties": {"repobilityId": "6a16a4d4566451b8", "scanner": "scanner-primary", "fingerprint": "b3ef12190c92b7e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a386f8f93f9ba197", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/edge"}, "properties": {"repobilityId": "85804c9dc701f426", "scanner": "scanner-primary", "fingerprint": "a386f8f93f9ba197", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2082caa870a5a05", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/sizing"}, "properties": {"repobilityId": "19de0519e88485d6", "scanner": "scanner-primary", "fingerprint": "f2082caa870a5a05", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5e757d06d399095", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/projection"}, "properties": {"repobilityId": "2859bb50adc383c6", "scanner": "scanner-primary", "fingerprint": "d5e757d06d399095", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-878087b28365be63", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/today"}, "properties": {"repobilityId": "d1aee3fcacdc47c2", "scanner": "scanner-primary", "fingerprint": "878087b28365be63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-174bd3603dc8bcac", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>/confirm"}, "properties": {"repobilityId": "9d3cc2a9e644e5c0", "scanner": "scanner-primary", "fingerprint": "174bd3603dc8bcac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b30f89507f66ced7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/trades/<int:trade_id>/skip"}, "properties": {"repobilityId": "71d9b382be74f76c", "scanner": "scanner-primary", "fingerprint": "b30f89507f66ced7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8fd003f8545313fb", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/today/skip"}, "properties": {"repobilityId": "b97e33884980480e", "scanner": "scanner-primary", "fingerprint": "8fd003f8545313fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ec03d6e789dd7b6", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/today/post-mortem"}, "properties": {"repobilityId": "614b4ae96a073212", "scanner": "scanner-primary", "fingerprint": "1ec03d6e789dd7b6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1aa01de78857f42", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/today/intraday-snapshot"}, "properties": {"repobilityId": "bffc25525763c5d7", "scanner": "scanner-primary", "fingerprint": "d1aa01de78857f42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6c6fe6fe5659f52", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/today/entry-exit"}, "properties": {"repobilityId": "9ed852b61d6dc2be", "scanner": "scanner-primary", "fingerprint": "a6c6fe6fe5659f52", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b51d718459ecb36", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/comparable-setups"}, "properties": {"repobilityId": "8456a4815d4806b2", "scanner": "scanner-primary", "fingerprint": "3b51d718459ecb36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f5645a5d879e082a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/spx-journal/events"}, "properties": {"repobilityId": "1018241f5a134d90", "scanner": "scanner-primary", "fingerprint": "f5645a5d879e082a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}