{"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-71747c62b1fbe680", "name": "Possibly dead Python function: repl", "shortDescription": {"text": "Possibly dead Python function: repl"}, "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-b263117d2b0eca97", "name": "Possibly dead Python function: key", "shortDescription": {"text": "Possibly dead Python function: key"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57a6e631e256fa57", "name": "Possibly dead Python function: run_hackernews", "shortDescription": {"text": "Possibly dead Python function: run_hackernews"}, "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-92f4e2a32e58ca85", "name": "Possibly dead Python function: run_bobae", "shortDescription": {"text": "Possibly dead Python function: run_bobae"}, "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-17653929522a3db6", "name": "Possibly dead Python function: run_ruli", "shortDescription": {"text": "Possibly dead Python function: run_ruli"}, "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-7b86d63fa9ab0775", "name": "Possibly dead Python function: run_fmk", "shortDescription": {"text": "Possibly dead Python function: run_fmk"}, "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-9686fa8db6d4ca7c", "name": "Possibly dead Python function: run_dcinside", "shortDescription": {"text": "Possibly dead Python function: run_dcinside"}, "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-40f35ee578d993f9", "name": "Possibly dead Python function: run_ppomppu", "shortDescription": {"text": "Possibly dead Python function: run_ppomppu"}, "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-4e93869732508ac7", "name": "Possibly dead Python function: run_bobae", "shortDescription": {"text": "Possibly dead Python function: run_bobae"}, "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-79d13839dc381583", "name": "Possibly dead Python function: run_ruli", "shortDescription": {"text": "Possibly dead Python function: run_ruli"}, "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-6c95b94a28c13e63", "name": "Possibly dead Python function: run_fmk", "shortDescription": {"text": "Possibly dead Python function: run_fmk"}, "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-a7e37aae36441756", "name": "Possibly dead Python function: run_mlbpark", "shortDescription": {"text": "Possibly dead Python function: run_mlbpark"}, "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-c21bb8c35ad9e9fb", "name": "Possibly dead Python function: fmt_pct", "shortDescription": {"text": "Possibly dead Python function: fmt_pct"}, "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-dc3181967279899b", "name": "Possibly dead Python function: broadcast_new_voc", "shortDescription": {"text": "Possibly dead Python function: broadcast_new_voc"}, "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-78b8617ad6d4a13e", "name": "Possibly dead Python function: decorator", "shortDescription": {"text": "Possibly dead Python function: decorator"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e0cb8db3b68a4c4", "name": "Possibly dead Python function: set_rules", "shortDescription": {"text": "Possibly dead Python function: set_rules"}, "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-91f4adebcbd7ba4a", "name": "Possibly dead Python function: do_run_migrations", "shortDescription": {"text": "Possibly dead Python function: do_run_migrations"}, "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-09a88407b8e18831", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-5fc955e2a6f4eed9", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-08827fcc06442cc7", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-fd398f85fcc03607", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-8e7d40d3dff5b8b3", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-7fffea7d201419c1", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-6679e069c988eda4", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-24770ec21e6ea0ae", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "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-6f180940284db605", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "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-d6f9eb6f87efc9c1", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/__tests__/mobile_audit.test.ts:143", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/__tests__/mobile_audit.test.ts:143"}, "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-f197b408a754b6cc", "name": "Privileged port 252 in use", "shortDescription": {"text": "Privileged port 252 in use"}, "fullDescription": {"text": "Port 252 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8c5b7cf3e34f55be", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e63e3200091414ec", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b20060656428f58", "name": "Insecure pattern 'direct_innerhtml_assignment' in signalforge_platform.html:462", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in signalforge_platform.html:462"}, "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-ae6f4a3e8ad5771f", "name": "Possible secret in crawler/platforms/mybroadband.py", "shortDescription": {"text": "Possible secret in crawler/platforms/mybroadband.py"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-646827cd43f66fd1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4adf3921d69b0173", "name": "Very large file: crawler/tasks.py (1470 lines)", "shortDescription": {"text": "Very large file: crawler/tasks.py (1470 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-1e0ec951eda4c93e", "name": "Very large file: crawler/scripts/relink_products.py (1242 lines)", "shortDescription": {"text": "Very large file: crawler/scripts/relink_products.py (1242 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-5a64e39fa2fb409a", "name": "Very large file: crawler/insight/workflow_validator.py (1378 lines)", "shortDescription": {"text": "Very large file: crawler/insight/workflow_validator.py (1378 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-20a6474aeba70955", "name": "Very large file: backend/app/api/_internal.py (4228 lines)", "shortDescription": {"text": "Very large file: backend/app/api/_internal.py (4228 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-a271c1defd933cb8", "name": "Very large file: backend/app/services/deep_service.py (2788 lines)", "shortDescription": {"text": "Very large file: backend/app/services/deep_service.py (2788 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 119 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 25 placeholder/mock markers across 17 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-27061598479278ec", "name": "Legacy-named symbol `verify_backup` in crawler/tasks.py:929", "shortDescription": {"text": "Legacy-named symbol `verify_backup` in crawler/tasks.py:929"}, "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-0c3ffe11f03e82a2", "name": "Commented-code block (5 lines) in crawler/tasks.py:818", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/tasks.py:818"}, "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-fcbbd7d6732e9419", "name": "Legacy-named symbol `verify_backup` in crawler/celery_app.py:358", "shortDescription": {"text": "Legacy-named symbol `verify_backup` in crawler/celery_app.py:358"}, "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-6cba400bf41dcdf8", "name": "Commented-code block (5 lines) in crawler/celery_app.py:439", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/celery_app.py:439"}, "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-7b914f5e2bb90727", "name": "Commented-code block (7 lines) in crawler/platforms/resetera.py:49", "shortDescription": {"text": "Commented-code block (7 lines) in crawler/platforms/resetera.py:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-949cefa5321f9418", "name": "Legacy-named symbol `p_copy` in crawler/platforms/gsmarena_forum.py:221", "shortDescription": {"text": "Legacy-named symbol `p_copy` in crawler/platforms/gsmarena_forum.py:221"}, "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-1ffa3791b0624eac", "name": "Commented-code block (5 lines) in crawler/platforms/hackernews.py:38", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/platforms/hackernews.py:38"}, "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-1ec2f9e2fa6268ec", "name": "Legacy-named symbol `p_copy` in crawler/platforms/gsmarena.py:242", "shortDescription": {"text": "Legacy-named symbol `p_copy` in crawler/platforms/gsmarena.py:242"}, "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-4e965ae7c2e0c9c5", "name": "Commented-code block (5 lines) in crawler/base/crawler.py:366", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/base/crawler.py:366"}, "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-8d93f4711975ceb7", "name": "Commented-code block (9 lines) in crawler/nlp/topic_classifier.py:82", "shortDescription": {"text": "Commented-code block (9 lines) in crawler/nlp/topic_classifier.py:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8529b00a0c02f76b", "name": "Commented-code block (5 lines) in crawler/tests/test_trust_7day.py:57", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/tests/test_trust_7day.py:57"}, "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-89447177ae771f64", "name": "Legacy-named symbol `test_relink_v2` in crawler/tests/test_relink_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `test_relink_v2` in crawler/tests/test_relink_v2.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92629525c1a6f888", "name": "Commented-code block (12 lines) in crawler/tests/test_meta_hard_cap.py:134", "shortDescription": {"text": "Commented-code block (12 lines) in crawler/tests/test_meta_hard_cap.py:134"}, "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-a1fb728d171168f7", "name": "Commented-code block (5 lines) in crawler/tests/test_llm_tier_selection.py:48", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/tests/test_llm_tier_selection.py:48"}, "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-d2cd7c608e9aac28", "name": "Legacy-named symbol `test_llm_routing_v2` in crawler/tests/test_llm_routing_v2.py:11", "shortDescription": {"text": "Legacy-named symbol `test_llm_routing_v2` in crawler/tests/test_llm_routing_v2.py:11"}, "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-8ca9f32ed2c88206", "name": "Commented-code block (5 lines) in crawler/tests/test_topic_llm_main.py:99", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/tests/test_topic_llm_main.py:99"}, "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-c0db62045e08fabe", "name": "Legacy-named symbol `build_prompt_v2` in crawler/tests/test_topic_llm_apply_v2.py:4", "shortDescription": {"text": "Legacy-named symbol `build_prompt_v2` in crawler/tests/test_topic_llm_apply_v2.py:4"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-604126664bcd3d8d", "name": "Legacy-named symbol `crisis_backfill_v2` in crawler/tests/test_crisis_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `crisis_backfill_v2` in crawler/tests/test_crisis_v2.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9eac3d3587634975", "name": "Legacy-named symbol `harvest_week_report_v2` in crawler/tests/test_weekly_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `harvest_week_report_v2` in crawler/tests/test_weekly_v2.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5f868669ffdc5e3", "name": "Legacy-named symbol `test_xda_mapping_v2` in crawler/tests/test_xda_mapping_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `test_xda_mapping_v2` in crawler/tests/test_xda_mapping_v2.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c337a6f5f926523a", "name": "Legacy-named symbol `test_system_prompt_v3_is_stronger_than_v2` in crawler/tests/test_llm_v3_prompts.py:33", "shortDescription": {"text": "Legacy-named symbol `test_system_prompt_v3_is_stronger_than_v2` in crawler/tests/test_llm_v3_prompts.py:33"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c01210d007fddd4", "name": "Legacy-named symbol `prompt_v2` in crawler/tests/test_prompt_v3.py:71", "shortDescription": {"text": "Legacy-named symbol `prompt_v2` in crawler/tests/test_prompt_v3.py:71"}, "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-fc4bb21f6cf128fd", "name": "Commented-code block (5 lines) in crawler/tests/test_loc_validator.py:52", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/tests/test_loc_validator.py:52"}, "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-62037fbea1a5ecbf", "name": "Legacy-named symbol `topic_eval_v2` in crawler/tests/test_topic_eval_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `topic_eval_v2` in crawler/tests/test_topic_eval_v2.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d2f8884d90e8b00", "name": "Legacy-named symbol `test_relink_v2` in crawler/tests/test_relink_v3.py:196", "shortDescription": {"text": "Legacy-named symbol `test_relink_v2` in crawler/tests/test_relink_v3.py:196"}, "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-d0859f00c7e9a023", "name": "Legacy-named symbol `test_fold_flip_legacy` in crawler/tests/test_relink.py:43", "shortDescription": {"text": "Legacy-named symbol `test_fold_flip_legacy` in crawler/tests/test_relink.py:43"}, "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-2e2c52779f6d0a21", "name": "Legacy-named symbol `missing_legacy` in crawler/tests/test_hackernews_search_v3.py:119", "shortDescription": {"text": "Legacy-named symbol `missing_legacy` in crawler/tests/test_hackernews_search_v3.py:119"}, "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-48f0be7f3d31d3ac", "name": "Legacy-named symbol `topic_llm_prompt_v2` in crawler/scripts/topic_llm_apply.py:73", "shortDescription": {"text": "Legacy-named symbol `topic_llm_prompt_v2` in crawler/scripts/topic_llm_apply.py:73"}, "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-9f4901a9e5d22cb7", "name": "Commented-code block (9 lines) in crawler/scripts/crisis_platform_direct.py:255", "shortDescription": {"text": "Commented-code block (9 lines) in crawler/scripts/crisis_platform_direct.py:255"}, "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-baa2370e54377c3e", "name": "Legacy-named symbol `topic_eval_v2` in crawler/scripts/topic_eval_v2.py:25", "shortDescription": {"text": "Legacy-named symbol `topic_eval_v2` in crawler/scripts/topic_eval_v2.py:25"}, "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-b582bfb3ee06afc6", "name": "Legacy-named symbol `test_crisis_v2` in crawler/scripts/crisis_backfill_v2.py:48", "shortDescription": {"text": "Legacy-named symbol `test_crisis_v2` in crawler/scripts/crisis_backfill_v2.py:48"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2d22dd444e31e63", "name": "Legacy-named symbol `crisis_backfill_v2` in crawler/scripts/crisis_platform_backfill.py:9", "shortDescription": {"text": "Legacy-named symbol `crisis_backfill_v2` in crawler/scripts/crisis_platform_backfill.py:9"}, "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-1a438575d1106c90", "name": "Commented-code block (9 lines) in crawler/scripts/topic_eval_multilabel.py:136", "shortDescription": {"text": "Commented-code block (9 lines) in crawler/scripts/topic_eval_multilabel.py:136"}, "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-f72929179fb5e078", "name": "Legacy-named symbol `_write_backup` in crawler/scripts/topic_backfill.py:117", "shortDescription": {"text": "Legacy-named symbol `_write_backup` in crawler/scripts/topic_backfill.py:117"}, "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-8405c778a4a16ce9", "name": "Legacy-named symbol `_write_delete_backup` in crawler/scripts/dedup_voc.py:96", "shortDescription": {"text": "Legacy-named symbol `_write_delete_backup` in crawler/scripts/dedup_voc.py:96"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b215f1a960ec7e71", "name": "Legacy-named symbol `_write_backup` in crawler/scripts/sentiment_backfill.py:109", "shortDescription": {"text": "Legacy-named symbol `_write_backup` in crawler/scripts/sentiment_backfill.py:109"}, "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-6e22b5d8bf32e80f", "name": "Commented-code block (6 lines) in crawler/scripts/relink_products.py:62", "shortDescription": {"text": "Commented-code block (6 lines) in crawler/scripts/relink_products.py:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15b0f4e7c5df5ee2", "name": "Legacy-named symbol `d_old` in crawler/scripts/korean_pagination_deep.py:194", "shortDescription": {"text": "Legacy-named symbol `d_old` in crawler/scripts/korean_pagination_deep.py:194"}, "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-64160012afa7a621", "name": "Legacy-named symbol `topic_llm_prompt_v2` in crawler/scripts/topic_llm_prompt_v2.py:1", "shortDescription": {"text": "Legacy-named symbol `topic_llm_prompt_v2` in crawler/scripts/topic_llm_prompt_v2.py:1"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed8f86ac0531783a", "name": "Commented-code block (5 lines) in crawler/insight/workflow_drift_stats.py:102", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/insight/workflow_drift_stats.py:102"}, "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-076564305415f869", "name": "Commented-code block (7 lines) in crawler/insight/collection_trend.py:56", "shortDescription": {"text": "Commented-code block (7 lines) in crawler/insight/collection_trend.py:56"}, "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-7880fcde2f6a1539", "name": "Legacy-named symbol `harvest_week_report_v2` in crawler/insight/harvest_week_report_v2.py:15", "shortDescription": {"text": "Legacy-named symbol `harvest_week_report_v2` in crawler/insight/harvest_week_report_v2.py:15"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-96e2f684f5d1251a", "name": "Commented-code block (5 lines) in crawler/insight/llm_provider.py:37", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/insight/llm_provider.py:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-faad79aa02167335", "name": "Commented-code block (6 lines) in crawler/insight/workflow_validator.py:195", "shortDescription": {"text": "Commented-code block (6 lines) in crawler/insight/workflow_validator.py:195"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-207c5ef7ec293b06", "name": "Commented-code block (5 lines) in crawler/insight/backfill_audit_monitor.py:97", "shortDescription": {"text": "Commented-code block (5 lines) in crawler/insight/backfill_audit_monitor.py:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29e4fa44712c9534", "name": "Commented-code block (5 lines) in frontend/vite.config.js:9", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/vite.config.js:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f29253e4bd148aa5", "name": "Commented-code block (5 lines) in frontend/vite.config.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/vite.config.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcc821cf7ee1a809", "name": "Commented-code block (5 lines) in frontend/src/__tests__/export_button.test.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/__tests__/export_button.test.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e469ce75e7913c5e", "name": "Commented-code block (12 lines) in frontend/src/__tests__/mobile_audit.test.ts:8", "shortDescription": {"text": "Commented-code block (12 lines) in frontend/src/__tests__/mobile_audit.test.ts:8"}, "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-a2ca1e843ac8ef98", "name": "Commented-code block (5 lines) in frontend/src/__tests__/card_actions.test.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/__tests__/card_actions.test.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-058cbf512baf395d", "name": "Commented-code block (5 lines) in frontend/src/utils/chartTheme.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/utils/chartTheme.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af9d908d16df4fc3", "name": "Commented-code block (7 lines) in frontend/src/components/history/CrisisLearningCard.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/history/CrisisLearningCard.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-807e90ef7297209d", "name": "Commented-code block (5 lines) in frontend/src/components/global/CommandPalette.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/global/CommandPalette.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c48da1f4c72b847", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/global/CommandPalette.tsx:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/global/CommandPalette.tsx:4"}, "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-ee526473b4965516", "name": "Commented-code block (8 lines) in frontend/src/pages/History.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/pages/History.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3590ec52a05fc2e1", "name": "Commented-code block (6 lines) in frontend/src/services/api.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/services/api.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63b745ad27030e82", "name": "Commented-code block (6 lines) in frontend/src/services/compareApi.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/services/compareApi.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4033b3f6584f36dd", "name": "Legacy-named symbol `test_crisis_cases_v2` in backend/tests/test_crisis_cases_v2.py:12", "shortDescription": {"text": "Legacy-named symbol `test_crisis_cases_v2` in backend/tests/test_crisis_cases_v2.py:12"}, "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-7f5e509d979a5fa5", "name": "Legacy-named symbol `test_rules_v2` in backend/tests/test_rules_v2.py:10", "shortDescription": {"text": "Legacy-named symbol `test_rules_v2` in backend/tests/test_rules_v2.py:10"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6511130ad16125c", "name": "Legacy-named symbol `verify_backup` in backend/tests/test_alerts_metric_path.py:29", "shortDescription": {"text": "Legacy-named symbol `verify_backup` in backend/tests/test_alerts_metric_path.py:29"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-567d5267037e8c00", "name": "Commented-code block (7 lines) in backend/app/api/alerts.py:206", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/api/alerts.py:206"}, "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-32df240a56f46328", "name": "Legacy-named symbol `verify_backup` in backend/app/api/_internal.py:1080", "shortDescription": {"text": "Legacy-named symbol `verify_backup` in backend/app/api/_internal.py:1080"}, "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-c72ae2310330f5d8", "name": "Commented-code block (7 lines) in backend/app/api/_internal.py:400", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/api/_internal.py:400"}, "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-615a8421d98e0a55", "name": "Legacy-named symbol `model_copy` in backend/app/services/temporal_service.py:235", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/app/services/temporal_service.py:235"}, "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-6379d722f5173d6a", "name": "Commented-code block (6 lines) in backend/alembic/versions/0004_p3_objects.py:24", "shortDescription": {"text": "Commented-code block (6 lines) in backend/alembic/versions/0004_p3_objects.py:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-902c93a20a643f5b", "name": "Commented-code block (9 lines) in backend/alembic/versions/0005_alert_objects.py:93", "shortDescription": {"text": "Commented-code block (9 lines) in backend/alembic/versions/0005_alert_objects.py:93"}, "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-b120a62e7b7c167f", "name": "181 env vars used in code but missing from .env.example", "shortDescription": {"text": "181 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AIDH_DEAD_LETTER_DIR`, `ALERTS_API_URL`, `ALERT_PROVIDER`, `ALERT_WEBHOOK_URL`, `AUDIT_BACKUP_RISK_WITH_PRESERVE`, `AUDIT_DRY_RUN_ERROR_RISK`, `AUDIT_INSERT_ONLY_SCRIPTS`, `AUDIT_MIN_RUNS_FOR_ALERT` + 173 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ncrawler/platforms/nu_nl.py:crawl, crawler/platforms/sspai.py:crawl, crawler/platforms/iphoneincanada.py:crawl\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-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:\ncrawler/platforms/androidpolice.py:crawl, crawler/platforms/tomsguide.py:crawl\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ncrawler/platforms/resetera.py:crawl, crawler/platforms/notebookcheck.py:crawl, crawler/platforms/hwupgrade.py:crawl, crawler/platforms/ifixit.py:crawl\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-032a13e516788926", "name": "Frontend route `/collection` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/collection` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c7ac07c8f1325bc", "name": "Frontend route `/history` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/history` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc88e754bc2746f0", "name": "Frontend route `/data-quality` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/data-quality` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81fc5be70678aace", "name": "Frontend route `/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cfd6812525009f1c", "name": "FastAPI POST `llm_narrative` without auth dependency \u2014 backend/app/api/temporal.py:82", "shortDescription": {"text": "FastAPI POST `llm_narrative` without auth dependency \u2014 backend/app/api/temporal.py:82"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97a821b5a41a5c54", "name": "FastAPI POST `create_rule` without auth dependency \u2014 backend/app/api/alerts.py:352", "shortDescription": {"text": "FastAPI POST `create_rule` without auth dependency \u2014 backend/app/api/alerts.py:352"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d657dfb8d38298b", "name": "FastAPI PATCH `patch_rule` without auth dependency \u2014 backend/app/api/alerts.py:387", "shortDescription": {"text": "FastAPI PATCH `patch_rule` without auth dependency \u2014 backend/app/api/alerts.py:387"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a69edca32449255a", "name": "FastAPI DELETE `delete_rule` without auth dependency \u2014 backend/app/api/alerts.py:431", "shortDescription": {"text": "FastAPI DELETE `delete_rule` without auth dependency \u2014 backend/app/api/alerts.py:431"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-822430150a78b6b9", "name": "FastAPI POST `apply_presets` without auth dependency \u2014 backend/app/api/alerts.py:450", "shortDescription": {"text": "FastAPI POST `apply_presets` without auth dependency \u2014 backend/app/api/alerts.py:450"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f33ee8e9a06ff76f", "name": "FastAPI POST `channels_slack_test` without auth dependency \u2014 backend/app/api/alerts.py:552", "shortDescription": {"text": "FastAPI POST `channels_slack_test` without auth dependency \u2014 backend/app/api/alerts.py:552"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c16195d0fd713cc3", "name": "FastAPI POST `fire_test` without auth dependency \u2014 backend/app/api/alerts.py:588", "shortDescription": {"text": "FastAPI POST `fire_test` without auth dependency \u2014 backend/app/api/alerts.py:588"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58fae9aadfbd70c2", "name": "FastAPI POST `export_pdf_endpoint` without auth dependency \u2014 backend/app/api/_internal.py:2629", "shortDescription": {"text": "FastAPI POST `export_pdf_endpoint` without auth dependency \u2014 backend/app/api/_internal.py:2629"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe364ad9257b5447", "name": "FastAPI POST `share_token_create` without auth dependency \u2014 backend/app/api/_internal.py:2674", "shortDescription": {"text": "FastAPI POST `share_token_create` without auth dependency \u2014 backend/app/api/_internal.py:2674"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c04a49206cf95ced", "name": "FastAPI POST `cache_warm` without auth dependency \u2014 backend/app/api/_internal.py:2948", "shortDescription": {"text": "FastAPI POST `cache_warm` without auth dependency \u2014 backend/app/api/_internal.py:2948"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a13aa8f233deee5e", "name": "FastAPI POST `compare_llm` without auth dependency \u2014 backend/app/api/insights.py:103", "shortDescription": {"text": "FastAPI POST `compare_llm` without auth dependency \u2014 backend/app/api/insights.py:103"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a83785aadf646c9", "name": "FastAPI POST `trigger_crawl` without auth dependency \u2014 backend/app/api/crawl_jobs.py:21", "shortDescription": {"text": "FastAPI POST `trigger_crawl` without auth dependency \u2014 backend/app/api/crawl_jobs.py:21"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb165587b0baca73", "name": "Unused endpoint: GET /api/v1/platforms", "shortDescription": {"text": "Unused endpoint: GET /api/v1/platforms"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /api/v1/platforms` 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-d04ddb18e3ae4ee3", "name": "Unused endpoint: GET /api/v1", "shortDescription": {"text": "Unused endpoint: GET /api/v1"}, "fullDescription": {"text": "`backend/app/api/products.py` declares `GET /api/v1` 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-917a953567c1ac66", "name": "Unused endpoint: GET /api/v1/{code}/voc", "shortDescription": {"text": "Unused endpoint: GET /api/v1/{code}/voc"}, "fullDescription": {"text": "`backend/app/api/products.py` declares `GET /api/v1/{code}/voc` 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-8a452d3f6d616ae2", "name": "Unused endpoint: GET /api/v1/{code}/stats", "shortDescription": {"text": "Unused endpoint: GET /api/v1/{code}/stats"}, "fullDescription": {"text": "`backend/app/api/products.py` declares `GET /api/v1/{code}/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-78f30f9c1ae8bee1", "name": "Unused endpoint: GET /api/v1/issue-lifecycle", "shortDescription": {"text": "Unused endpoint: GET /api/v1/issue-lifecycle"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/issue-lifecycle` 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-1551a2a9c8ff13c6", "name": "Unused endpoint: GET /api/v1/category-product-matrix", "shortDescription": {"text": "Unused endpoint: GET /api/v1/category-product-matrix"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/category-product-matrix` 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-3275be819b3f7478", "name": "Unused endpoint: GET /api/v1/site-diffusion", "shortDescription": {"text": "Unused endpoint: GET /api/v1/site-diffusion"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/site-diffusion` 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-3a04d5280d06d363", "name": "Unused endpoint: GET /api/v1/country-sentiment-gap", "shortDescription": {"text": "Unused endpoint: GET /api/v1/country-sentiment-gap"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/country-sentiment-gap` 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-2112a65ac0875c5a", "name": "Unused endpoint: GET /api/v1/engagement-sentiment", "shortDescription": {"text": "Unused endpoint: GET /api/v1/engagement-sentiment"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/engagement-sentiment` 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-2a72b047d10f9ce1", "name": "Unused endpoint: GET /api/v1/new-term-survival", "shortDescription": {"text": "Unused endpoint: GET /api/v1/new-term-survival"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/new-term-survival` 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-a92f0a6aa5ff6049", "name": "Unused endpoint: GET /api/v1/keyword-cooccurrence", "shortDescription": {"text": "Unused endpoint: GET /api/v1/keyword-cooccurrence"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/keyword-cooccurrence` 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-5c10ce720fb4df32", "name": "Unused endpoint: GET /api/v1/anomaly-context", "shortDescription": {"text": "Unused endpoint: GET /api/v1/anomaly-context"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/anomaly-context` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b3aa35d1e159579", "name": "Unused endpoint: GET /api/v1/sentiment-driver", "shortDescription": {"text": "Unused endpoint: GET /api/v1/sentiment-driver"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/sentiment-driver` 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-9ce8c2c40c11f4cf", "name": "Unused endpoint: GET /api/v1/anomaly-with-drivers", "shortDescription": {"text": "Unused endpoint: GET /api/v1/anomaly-with-drivers"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/anomaly-with-drivers` 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-50733f786831d9aa", "name": "Unused endpoint: GET /api/v1/anomaly-drilldown", "shortDescription": {"text": "Unused endpoint: GET /api/v1/anomaly-drilldown"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/anomaly-drilldown` 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-4bd27ad648423c04", "name": "Unused endpoint: GET /api/v1/anomaly-drilldown-hour", "shortDescription": {"text": "Unused endpoint: GET /api/v1/anomaly-drilldown-hour"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/anomaly-drilldown-hour` 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-69e860ef959b3847", "name": "Unused endpoint: GET /api/v1/category-momentum", "shortDescription": {"text": "Unused endpoint: GET /api/v1/category-momentum"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/category-momentum` 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-cc67275268611225", "name": "Unused endpoint: GET /api/v1/keyword-network", "shortDescription": {"text": "Unused endpoint: GET /api/v1/keyword-network"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/keyword-network` 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-520b8a3dba07384b", "name": "Unused endpoint: GET /api/v1/lifecycle-funnel", "shortDescription": {"text": "Unused endpoint: GET /api/v1/lifecycle-funnel"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/lifecycle-funnel` 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-046d30ccef390028", "name": "Unused endpoint: GET /api/v1/influence-rank", "shortDescription": {"text": "Unused endpoint: GET /api/v1/influence-rank"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/influence-rank` 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-6917495dd5dc7bcf", "name": "Unused endpoint: GET /api/v1/product-funnel", "shortDescription": {"text": "Unused endpoint: GET /api/v1/product-funnel"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/product-funnel` 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-f71fe9f774ef6d3d", "name": "Unused endpoint: GET /api/v1/keyword-detail", "shortDescription": {"text": "Unused endpoint: GET /api/v1/keyword-detail"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/keyword-detail` 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-bedd7bc74e28b0e1", "name": "Unused endpoint: GET /api/v1/galaxy-timeline", "shortDescription": {"text": "Unused endpoint: GET /api/v1/galaxy-timeline"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/galaxy-timeline` 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-aebead2cd7da4788", "name": "Unused endpoint: GET /api/v1/crisis-cases", "shortDescription": {"text": "Unused endpoint: GET /api/v1/crisis-cases"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/crisis-cases` 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-70a71cced58b1462", "name": "Unused endpoint: GET /api/v1/series-comparison", "shortDescription": {"text": "Unused endpoint: GET /api/v1/series-comparison"}, "fullDescription": {"text": "`backend/app/api/deep.py` declares `GET /api/v1/series-comparison` 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-4852427a1bfa4635", "name": "Unused endpoint: GET /api/v1/overview", "shortDescription": {"text": "Unused endpoint: GET /api/v1/overview"}, "fullDescription": {"text": "`backend/app/api/dashboard.py` declares `GET /api/v1/overview` 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-30791d875b21720d", "name": "Unused endpoint: GET /sentiment-trend", "shortDescription": {"text": "Unused endpoint: GET /sentiment-trend"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /sentiment-trend` 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-441bfb0ee3f4281d", "name": "Unused endpoint: GET /category-dist", "shortDescription": {"text": "Unused endpoint: GET /category-dist"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /category-dist` 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-752a398ed0fab8a3", "name": "Unused endpoint: GET /country-heatmap", "shortDescription": {"text": "Unused endpoint: GET /country-heatmap"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /country-heatmap` 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-d61cace0727ca2d6", "name": "Unused endpoint: GET /top-issues", "shortDescription": {"text": "Unused endpoint: GET /top-issues"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /top-issues` 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-18a4887e7bea6b36", "name": "Unused endpoint: GET /compare", "shortDescription": {"text": "Unused endpoint: GET /compare"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /compare` 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-a904f4f159cfb95b", "name": "Unused endpoint: GET /keyword-track", "shortDescription": {"text": "Unused endpoint: GET /keyword-track"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /keyword-track` 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-0e6168e1431d8e32", "name": "Unused endpoint: GET /cohort-compare", "shortDescription": {"text": "Unused endpoint: GET /cohort-compare"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /cohort-compare` 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-9656f902a3d9d0b8", "name": "Unused endpoint: GET /site-health", "shortDescription": {"text": "Unused endpoint: GET /site-health"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /site-health` 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-65f60ba06fe64029", "name": "Unused endpoint: GET /recent-issues", "shortDescription": {"text": "Unused endpoint: GET /recent-issues"}, "fullDescription": {"text": "`backend/app/api/analytics.py` declares `GET /recent-issues` 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-0114199b3acdd926", "name": "Unused endpoint: GET /api/v1/graph", "shortDescription": {"text": "Unused endpoint: GET /api/v1/graph"}, "fullDescription": {"text": "`backend/app/api/kg.py` declares `GET /api/v1/graph` 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-44b8dd81d5aafbc9", "name": "Unused endpoint: GET /api/v1/node/{node_id}/samples", "shortDescription": {"text": "Unused endpoint: GET /api/v1/node/{node_id}/samples"}, "fullDescription": {"text": "`backend/app/api/kg.py` declares `GET /api/v1/node/{node_id}/samples` 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-9e8f224eaa152834", "name": "Unused endpoint: GET /api/v1/search", "shortDescription": {"text": "Unused endpoint: GET /api/v1/search"}, "fullDescription": {"text": "`backend/app/api/kg.py` declares `GET /api/v1/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-65533f066836a708", "name": "Unused endpoint: GET /api/v1/{token}", "shortDescription": {"text": "Unused endpoint: GET /api/v1/{token}"}, "fullDescription": {"text": "`backend/app/api/shared.py` declares `GET /api/v1/{token}` 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-be1b48c5e621a56b", "name": "Unused endpoint: GET /api/v1/temporal-series", "shortDescription": {"text": "Unused endpoint: GET /api/v1/temporal-series"}, "fullDescription": {"text": "`backend/app/api/temporal.py` declares `GET /api/v1/temporal-series` 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-2302a8b24e7760b4", "name": "Unused endpoint: GET /api/v1/temporal-compare", "shortDescription": {"text": "Unused endpoint: GET /api/v1/temporal-compare"}, "fullDescription": {"text": "`backend/app/api/temporal.py` declares `GET /api/v1/temporal-compare` 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-f2cf9e3764234027", "name": "Unused endpoint: POST /api/v1/llm-narrative", "shortDescription": {"text": "Unused endpoint: POST /api/v1/llm-narrative"}, "fullDescription": {"text": "`backend/app/api/temporal.py` declares `POST /api/v1/llm-narrative` 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-cffebb4589a2b4e8", "name": "Unused endpoint: GET /api/v1/platforms/health", "shortDescription": {"text": "Unused endpoint: GET /api/v1/platforms/health"}, "fullDescription": {"text": "`backend/app/api/community.py` declares `GET /api/v1/platforms/health` 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-c3b90afb0cc08625", "name": "Unused endpoint: GET /api/v1/platforms/product-matrix", "shortDescription": {"text": "Unused endpoint: GET /api/v1/platforms/product-matrix"}, "fullDescription": {"text": "`backend/app/api/community.py` declares `GET /api/v1/platforms/product-matrix` 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-04567c4544434d2c", "name": "Unused endpoint: GET /api/v1/platforms/dispersion", "shortDescription": {"text": "Unused endpoint: GET /api/v1/platforms/dispersion"}, "fullDescription": {"text": "`backend/app/api/community.py` declares `GET /api/v1/platforms/dispersion` 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-2dc8b886112881dd", "name": "Unused endpoint: GET /api/v1/platforms/early-signal", "shortDescription": {"text": "Unused endpoint: GET /api/v1/platforms/early-signal"}, "fullDescription": {"text": "`backend/app/api/community.py` declares `GET /api/v1/platforms/early-signal` 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-0fb7ee6d86db8550", "name": "Unused endpoint: GET /api/v1/platforms/clusters", "shortDescription": {"text": "Unused endpoint: GET /api/v1/platforms/clusters"}, "fullDescription": {"text": "`backend/app/api/community.py` declares `GET /api/v1/platforms/clusters` 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-4a435bc37344c175", "name": "Unused endpoint: GET /api/v1/platforms/anomalies", "shortDescription": {"text": "Unused endpoint: GET /api/v1/platforms/anomalies"}, "fullDescription": {"text": "`backend/app/api/community.py` declares `GET /api/v1/platforms/anomalies` 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-be3c6302ff65406b", "name": "Unused endpoint: GET /api/v1/rules", "shortDescription": {"text": "Unused endpoint: GET /api/v1/rules"}, "fullDescription": {"text": "`backend/app/api/alerts.py` declares `GET /api/v1/rules` 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-f2919258f5dd41a3", "name": "Unused endpoint: POST /api/v1/rules", "shortDescription": {"text": "Unused endpoint: POST /api/v1/rules"}, "fullDescription": {"text": "`backend/app/api/alerts.py` declares `POST /api/v1/rules` 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/20175"}, "properties": {"repository": "squall321/SignalForge", "repoUrl": "https://github.com/squall321/SignalForge", "branch": "main"}, "results": [{"ruleId": "scanner-71747c62b1fbe680", "level": "note", "message": {"text": "Possibly dead Python function: repl"}, "properties": {"repobilityId": "6f5d3779bbb8be8b", "scanner": "scanner-primary", "fingerprint": "71747c62b1fbe680", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "integrations/aidatahub/aidatahub_sync.py:408"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b263117d2b0eca97", "level": "note", "message": {"text": "Possibly dead Python function: key"}, "properties": {"repobilityId": "82ad9f64418e6fec", "scanner": "scanner-primary", "fingerprint": "b263117d2b0eca97", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/nlp/topic_classifier.py:443"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-57a6e631e256fa57", "level": "note", "message": {"text": "Possibly dead Python function: run_hackernews"}, "properties": {"repobilityId": "dad8bbb2d1bf996a", "scanner": "scanner-primary", "fingerprint": "57a6e631e256fa57", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_backfill_v2.py:462"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-92f4e2a32e58ca85", "level": "note", "message": {"text": "Possibly dead Python function: run_bobae"}, "properties": {"repobilityId": "06c2446eea257427", "scanner": "scanner-primary", "fingerprint": "92f4e2a32e58ca85", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_backfill_v2.py:471"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-17653929522a3db6", "level": "note", "message": {"text": "Possibly dead Python function: run_ruli"}, "properties": {"repobilityId": "f6aee9e5b3ecbccc", "scanner": "scanner-primary", "fingerprint": "17653929522a3db6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_backfill_v2.py:493"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b86d63fa9ab0775", "level": "note", "message": {"text": "Possibly dead Python function: run_fmk"}, "properties": {"repobilityId": "5025842e0f7ba94e", "scanner": "scanner-primary", "fingerprint": "7b86d63fa9ab0775", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_backfill_v2.py:515"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9686fa8db6d4ca7c", "level": "note", "message": {"text": "Possibly dead Python function: run_dcinside"}, "properties": {"repobilityId": "1efc65b6e4670972", "scanner": "scanner-primary", "fingerprint": "9686fa8db6d4ca7c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_platform_backfill.py:228"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-40f35ee578d993f9", "level": "note", "message": {"text": "Possibly dead Python function: run_ppomppu"}, "properties": {"repobilityId": "d7f5629b7e41d76e", "scanner": "scanner-primary", "fingerprint": "40f35ee578d993f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_platform_backfill.py:256"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4e93869732508ac7", "level": "note", "message": {"text": "Possibly dead Python function: run_bobae"}, "properties": {"repobilityId": "06c2446eea257427", "scanner": "scanner-primary", "fingerprint": "4e93869732508ac7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_platform_backfill.py:284"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-79d13839dc381583", "level": "note", "message": {"text": "Possibly dead Python function: run_ruli"}, "properties": {"repobilityId": "f6aee9e5b3ecbccc", "scanner": "scanner-primary", "fingerprint": "79d13839dc381583", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_platform_backfill.py:306"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6c95b94a28c13e63", "level": "note", "message": {"text": "Possibly dead Python function: run_fmk"}, "properties": {"repobilityId": "5025842e0f7ba94e", "scanner": "scanner-primary", "fingerprint": "6c95b94a28c13e63", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_platform_backfill.py:328"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a7e37aae36441756", "level": "note", "message": {"text": "Possibly dead Python function: run_mlbpark"}, "properties": {"repobilityId": "12e40e4d4b1992b9", "scanner": "scanner-primary", "fingerprint": "a7e37aae36441756", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/scripts/crisis_platform_backfill.py:350"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c21bb8c35ad9e9fb", "level": "note", "message": {"text": "Possibly dead Python function: fmt_pct"}, "properties": {"repobilityId": "f5c0892d0dc35cb0", "scanner": "scanner-primary", "fingerprint": "c21bb8c35ad9e9fb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/reports/_common.py:60"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dc3181967279899b", "level": "note", "message": {"text": "Possibly dead Python function: broadcast_new_voc"}, "properties": {"repobilityId": "e3f599721267c3c1", "scanner": "scanner-primary", "fingerprint": "dc3181967279899b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/websocket.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-78b8617ad6d4a13e", "level": "note", "message": {"text": "Possibly dead Python function: decorator"}, "properties": {"repobilityId": "ffbcbc9bc189af1c", "scanner": "scanner-primary", "fingerprint": "78b8617ad6d4a13e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/core/cache.py:145"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2e0cb8db3b68a4c4", "level": "note", "message": {"text": "Possibly dead Python function: set_rules"}, "properties": {"repobilityId": "a2e71001df459d70", "scanner": "scanner-primary", "fingerprint": "2e0cb8db3b68a4c4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/core/alerts/engine.py:77"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-91f4adebcbd7ba4a", "level": "note", "message": {"text": "Possibly dead Python function: do_run_migrations"}, "properties": {"repobilityId": "087acb17722cfd2f", "scanner": "scanner-primary", "fingerprint": "91f4adebcbd7ba4a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/env.py:47"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-09a88407b8e18831", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "09a88407b8e18831", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0014_galaxy_master_timeline_mv.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5fc955e2a6f4eed9", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "5fc955e2a6f4eed9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0014_galaxy_master_timeline_mv.py:62"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-08827fcc06442cc7", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "08827fcc06442cc7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0011_voc_unmapped_reason.py:35"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fd398f85fcc03607", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "fd398f85fcc03607", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0011_voc_unmapped_reason.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8e7d40d3dff5b8b3", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "8e7d40d3dff5b8b3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0009_products_release_boost.py:103"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7fffea7d201419c1", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "7fffea7d201419c1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0009_products_release_boost.py:132"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6679e069c988eda4", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "6679e069c988eda4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0015_reddit_rss_platform.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-24770ec21e6ea0ae", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "24770ec21e6ea0ae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0015_reddit_rss_platform.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f180940284db605", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "6f180940284db605", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0012_voc_topics.py:25"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d6f9eb6f87efc9c1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/__tests__/mobile_audit.test.ts:143"}, "properties": {"repobilityId": "f3fd599ab11ca079", "scanner": "scanner-primary", "fingerprint": "d6f9eb6f87efc9c1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f197b408a754b6cc", "level": "warning", "message": {"text": "Privileged port 252 in use"}, "properties": {"repobilityId": "44fc507a66442f8b", "scanner": "scanner-primary", "fingerprint": "f197b408a754b6cc", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/_common.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8c5b7cf3e34f55be", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "8c5b7cf3e34f55be", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/lib/latest-meta.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e63e3200091414ec", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "e63e3200091414ec", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/lib/latest-meta.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b20060656428f58", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in signalforge_platform.html:462"}, "properties": {"repobilityId": "e38d9a6f794e6a62", "scanner": "scanner-primary", "fingerprint": "1b20060656428f58", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "signalforge_platform.html"}, "region": {"startLine": 462}}}]}, {"ruleId": "scanner-ae6f4a3e8ad5771f", "level": "error", "message": {"text": "Possible secret in crawler/platforms/mybroadband.py"}, "properties": {"repobilityId": "a05584a58ed410dc", "scanner": "scanner-primary", "fingerprint": "ae6f4a3e8ad5771f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "crawler/platforms/mybroadband.py"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-646827cd43f66fd1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8f683eaeabbfc4f3", "scanner": "scanner-primary", "fingerprint": "646827cd43f66fd1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-646827cd43f66fd1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0dff97d5463075a3", "scanner": "scanner-primary", "fingerprint": "646827cd43f66fd1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-646827cd43f66fd1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8f683eaeabbfc4f3", "scanner": "scanner-primary", "fingerprint": "646827cd43f66fd1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa.yml"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-646827cd43f66fd1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0dff97d5463075a3", "scanner": "scanner-primary", "fingerprint": "646827cd43f66fd1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/qa.yml"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bee6b8956e03198c", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-4adf3921d69b0173", "level": "note", "message": {"text": "Very large file: crawler/tasks.py (1470 lines)"}, "properties": {"repobilityId": "d1b8439e5b54b4d3", "scanner": "scanner-primary", "fingerprint": "4adf3921d69b0173", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e0ec951eda4c93e", "level": "note", "message": {"text": "Very large file: crawler/scripts/relink_products.py (1242 lines)"}, "properties": {"repobilityId": "9a76e35e82490327", "scanner": "scanner-primary", "fingerprint": "1e0ec951eda4c93e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5a64e39fa2fb409a", "level": "note", "message": {"text": "Very large file: crawler/insight/workflow_validator.py (1378 lines)"}, "properties": {"repobilityId": "9fe9e6db32327dc1", "scanner": "scanner-primary", "fingerprint": "5a64e39fa2fb409a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-20a6474aeba70955", "level": "note", "message": {"text": "Very large file: backend/app/api/_internal.py (4228 lines)"}, "properties": {"repobilityId": "eb36bdb76e5e5bd9", "scanner": "scanner-primary", "fingerprint": "20a6474aeba70955", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a271c1defd933cb8", "level": "note", "message": {"text": "Very large file: backend/app/services/deep_service.py (2788 lines)"}, "properties": {"repobilityId": "c0b313b0e7dafcc6", "scanner": "scanner-primary", "fingerprint": "a271c1defd933cb8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "bb4841c49e615f58", "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": "3acda0adc5e9b6ca", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "f620619ce0fa6f6b", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "fb4fc92468321916", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "3042735d1d1b4be6", "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": "71f08d9068e17c8a", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-27061598479278ec", "level": "note", "message": {"text": "Legacy-named symbol `verify_backup` in crawler/tasks.py:929"}, "properties": {"repobilityId": "834bd7f14066ba9b", "scanner": "scanner-primary", "fingerprint": "27061598479278ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0c3ffe11f03e82a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/tasks.py:818"}, "properties": {"repobilityId": "64e49387ad3dd632", "scanner": "scanner-primary", "fingerprint": "0c3ffe11f03e82a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcbbd7d6732e9419", "level": "note", "message": {"text": "Legacy-named symbol `verify_backup` in crawler/celery_app.py:358"}, "properties": {"repobilityId": "1966162b936b5916", "scanner": "scanner-primary", "fingerprint": "fcbbd7d6732e9419", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6cba400bf41dcdf8", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/celery_app.py:439"}, "properties": {"repobilityId": "807d732c99fbd5a5", "scanner": "scanner-primary", "fingerprint": "6cba400bf41dcdf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b914f5e2bb90727", "level": "none", "message": {"text": "Commented-code block (7 lines) in crawler/platforms/resetera.py:49"}, "properties": {"repobilityId": "693f4e598c0c4418", "scanner": "scanner-primary", "fingerprint": "7b914f5e2bb90727", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-949cefa5321f9418", "level": "note", "message": {"text": "Legacy-named symbol `p_copy` in crawler/platforms/gsmarena_forum.py:221"}, "properties": {"repobilityId": "7b8fdfbbe3c7992a", "scanner": "scanner-primary", "fingerprint": "949cefa5321f9418", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1ffa3791b0624eac", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/platforms/hackernews.py:38"}, "properties": {"repobilityId": "3d560ae6ebd84f16", "scanner": "scanner-primary", "fingerprint": "1ffa3791b0624eac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ec2f9e2fa6268ec", "level": "note", "message": {"text": "Legacy-named symbol `p_copy` in crawler/platforms/gsmarena.py:242"}, "properties": {"repobilityId": "898e1cd4cce1da15", "scanner": "scanner-primary", "fingerprint": "1ec2f9e2fa6268ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4e965ae7c2e0c9c5", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/base/crawler.py:366"}, "properties": {"repobilityId": "f6ce4d1a04912f3d", "scanner": "scanner-primary", "fingerprint": "4e965ae7c2e0c9c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d93f4711975ceb7", "level": "none", "message": {"text": "Commented-code block (9 lines) in crawler/nlp/topic_classifier.py:82"}, "properties": {"repobilityId": "1b82b29fda57f231", "scanner": "scanner-primary", "fingerprint": "8d93f4711975ceb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8529b00a0c02f76b", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/tests/test_trust_7day.py:57"}, "properties": {"repobilityId": "44ac2ef95da224b0", "scanner": "scanner-primary", "fingerprint": "8529b00a0c02f76b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89447177ae771f64", "level": "note", "message": {"text": "Legacy-named symbol `test_relink_v2` in crawler/tests/test_relink_v2.py:1"}, "properties": {"repobilityId": "67b59a988ded9012", "scanner": "scanner-primary", "fingerprint": "89447177ae771f64", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-92629525c1a6f888", "level": "none", "message": {"text": "Commented-code block (12 lines) in crawler/tests/test_meta_hard_cap.py:134"}, "properties": {"repobilityId": "cad06745d8549fb8", "scanner": "scanner-primary", "fingerprint": "92629525c1a6f888", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1fb728d171168f7", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/tests/test_llm_tier_selection.py:48"}, "properties": {"repobilityId": "67ca31642c133766", "scanner": "scanner-primary", "fingerprint": "a1fb728d171168f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2cd7c608e9aac28", "level": "note", "message": {"text": "Legacy-named symbol `test_llm_routing_v2` in crawler/tests/test_llm_routing_v2.py:11"}, "properties": {"repobilityId": "549810389e1a86d3", "scanner": "scanner-primary", "fingerprint": "d2cd7c608e9aac28", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8ca9f32ed2c88206", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/tests/test_topic_llm_main.py:99"}, "properties": {"repobilityId": "840cea2c5ab56abf", "scanner": "scanner-primary", "fingerprint": "8ca9f32ed2c88206", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0db62045e08fabe", "level": "note", "message": {"text": "Legacy-named symbol `build_prompt_v2` in crawler/tests/test_topic_llm_apply_v2.py:4"}, "properties": {"repobilityId": "72e6b32540ea9527", "scanner": "scanner-primary", "fingerprint": "c0db62045e08fabe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-604126664bcd3d8d", "level": "note", "message": {"text": "Legacy-named symbol `crisis_backfill_v2` in crawler/tests/test_crisis_v2.py:1"}, "properties": {"repobilityId": "1be63a66d4b4594d", "scanner": "scanner-primary", "fingerprint": "604126664bcd3d8d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9eac3d3587634975", "level": "note", "message": {"text": "Legacy-named symbol `harvest_week_report_v2` in crawler/tests/test_weekly_v2.py:1"}, "properties": {"repobilityId": "ff8673a9467773e7", "scanner": "scanner-primary", "fingerprint": "9eac3d3587634975", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c5f868669ffdc5e3", "level": "note", "message": {"text": "Legacy-named symbol `test_xda_mapping_v2` in crawler/tests/test_xda_mapping_v2.py:1"}, "properties": {"repobilityId": "83cb2739422c1d7b", "scanner": "scanner-primary", "fingerprint": "c5f868669ffdc5e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c337a6f5f926523a", "level": "note", "message": {"text": "Legacy-named symbol `test_system_prompt_v3_is_stronger_than_v2` in crawler/tests/test_llm_v3_prompts.py:33"}, "properties": {"repobilityId": "cf8b26c6dc1137f0", "scanner": "scanner-primary", "fingerprint": "c337a6f5f926523a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9c01210d007fddd4", "level": "note", "message": {"text": "Legacy-named symbol `prompt_v2` in crawler/tests/test_prompt_v3.py:71"}, "properties": {"repobilityId": "46798f31252ef0c1", "scanner": "scanner-primary", "fingerprint": "9c01210d007fddd4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fc4bb21f6cf128fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/tests/test_loc_validator.py:52"}, "properties": {"repobilityId": "6cdf4cbc88333a86", "scanner": "scanner-primary", "fingerprint": "fc4bb21f6cf128fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62037fbea1a5ecbf", "level": "note", "message": {"text": "Legacy-named symbol `topic_eval_v2` in crawler/tests/test_topic_eval_v2.py:1"}, "properties": {"repobilityId": "31855c09c43bd525", "scanner": "scanner-primary", "fingerprint": "62037fbea1a5ecbf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7d2f8884d90e8b00", "level": "note", "message": {"text": "Legacy-named symbol `test_relink_v2` in crawler/tests/test_relink_v3.py:196"}, "properties": {"repobilityId": "445c2bf7c1085015", "scanner": "scanner-primary", "fingerprint": "7d2f8884d90e8b00", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d0859f00c7e9a023", "level": "note", "message": {"text": "Legacy-named symbol `test_fold_flip_legacy` in crawler/tests/test_relink.py:43"}, "properties": {"repobilityId": "1d8ad7ca03e752ca", "scanner": "scanner-primary", "fingerprint": "d0859f00c7e9a023", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2e2c52779f6d0a21", "level": "note", "message": {"text": "Legacy-named symbol `missing_legacy` in crawler/tests/test_hackernews_search_v3.py:119"}, "properties": {"repobilityId": "4a4616b0a420b231", "scanner": "scanner-primary", "fingerprint": "2e2c52779f6d0a21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-48f0be7f3d31d3ac", "level": "note", "message": {"text": "Legacy-named symbol `topic_llm_prompt_v2` in crawler/scripts/topic_llm_apply.py:73"}, "properties": {"repobilityId": "ff02f853a071b650", "scanner": "scanner-primary", "fingerprint": "48f0be7f3d31d3ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9f4901a9e5d22cb7", "level": "none", "message": {"text": "Commented-code block (9 lines) in crawler/scripts/crisis_platform_direct.py:255"}, "properties": {"repobilityId": "a2a89df43d59ba0c", "scanner": "scanner-primary", "fingerprint": "9f4901a9e5d22cb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-baa2370e54377c3e", "level": "note", "message": {"text": "Legacy-named symbol `topic_eval_v2` in crawler/scripts/topic_eval_v2.py:25"}, "properties": {"repobilityId": "eb946e3fe83242d0", "scanner": "scanner-primary", "fingerprint": "baa2370e54377c3e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b582bfb3ee06afc6", "level": "note", "message": {"text": "Legacy-named symbol `test_crisis_v2` in crawler/scripts/crisis_backfill_v2.py:48"}, "properties": {"repobilityId": "1c79aa61af8f4d62", "scanner": "scanner-primary", "fingerprint": "b582bfb3ee06afc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a2d22dd444e31e63", "level": "note", "message": {"text": "Legacy-named symbol `crisis_backfill_v2` in crawler/scripts/crisis_platform_backfill.py:9"}, "properties": {"repobilityId": "9b07ca01e588c258", "scanner": "scanner-primary", "fingerprint": "a2d22dd444e31e63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a438575d1106c90", "level": "none", "message": {"text": "Commented-code block (9 lines) in crawler/scripts/topic_eval_multilabel.py:136"}, "properties": {"repobilityId": "a3c774c2f9dab6f6", "scanner": "scanner-primary", "fingerprint": "1a438575d1106c90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f72929179fb5e078", "level": "note", "message": {"text": "Legacy-named symbol `_write_backup` in crawler/scripts/topic_backfill.py:117"}, "properties": {"repobilityId": "c9ce16157c01cc7a", "scanner": "scanner-primary", "fingerprint": "f72929179fb5e078", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8405c778a4a16ce9", "level": "note", "message": {"text": "Legacy-named symbol `_write_delete_backup` in crawler/scripts/dedup_voc.py:96"}, "properties": {"repobilityId": "c46820f397c95427", "scanner": "scanner-primary", "fingerprint": "8405c778a4a16ce9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b215f1a960ec7e71", "level": "note", "message": {"text": "Legacy-named symbol `_write_backup` in crawler/scripts/sentiment_backfill.py:109"}, "properties": {"repobilityId": "7df7c77c7782acf0", "scanner": "scanner-primary", "fingerprint": "b215f1a960ec7e71", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6e22b5d8bf32e80f", "level": "none", "message": {"text": "Commented-code block (6 lines) in crawler/scripts/relink_products.py:62"}, "properties": {"repobilityId": "94d4c084c83e3c30", "scanner": "scanner-primary", "fingerprint": "6e22b5d8bf32e80f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15b0f4e7c5df5ee2", "level": "note", "message": {"text": "Legacy-named symbol `d_old` in crawler/scripts/korean_pagination_deep.py:194"}, "properties": {"repobilityId": "c275558d451ed342", "scanner": "scanner-primary", "fingerprint": "15b0f4e7c5df5ee2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-64160012afa7a621", "level": "note", "message": {"text": "Legacy-named symbol `topic_llm_prompt_v2` in crawler/scripts/topic_llm_prompt_v2.py:1"}, "properties": {"repobilityId": "1cbe84a17a6f06c3", "scanner": "scanner-primary", "fingerprint": "64160012afa7a621", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ed8f86ac0531783a", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/insight/workflow_drift_stats.py:102"}, "properties": {"repobilityId": "853e1da979edf40b", "scanner": "scanner-primary", "fingerprint": "ed8f86ac0531783a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-076564305415f869", "level": "none", "message": {"text": "Commented-code block (7 lines) in crawler/insight/collection_trend.py:56"}, "properties": {"repobilityId": "bf8e7cd6c79e786a", "scanner": "scanner-primary", "fingerprint": "076564305415f869", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7880fcde2f6a1539", "level": "note", "message": {"text": "Legacy-named symbol `harvest_week_report_v2` in crawler/insight/harvest_week_report_v2.py:15"}, "properties": {"repobilityId": "be3222fbe6ea66b9", "scanner": "scanner-primary", "fingerprint": "7880fcde2f6a1539", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-96e2f684f5d1251a", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/insight/llm_provider.py:37"}, "properties": {"repobilityId": "b2325cf6732b002f", "scanner": "scanner-primary", "fingerprint": "96e2f684f5d1251a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-faad79aa02167335", "level": "none", "message": {"text": "Commented-code block (6 lines) in crawler/insight/workflow_validator.py:195"}, "properties": {"repobilityId": "740d54d278a9e1e4", "scanner": "scanner-primary", "fingerprint": "faad79aa02167335", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-207c5ef7ec293b06", "level": "none", "message": {"text": "Commented-code block (5 lines) in crawler/insight/backfill_audit_monitor.py:97"}, "properties": {"repobilityId": "d1f13a34d8b317f8", "scanner": "scanner-primary", "fingerprint": "207c5ef7ec293b06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29e4fa44712c9534", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/vite.config.js:9"}, "properties": {"repobilityId": "f66e30d1f5c00806", "scanner": "scanner-primary", "fingerprint": "29e4fa44712c9534", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f29253e4bd148aa5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/vite.config.ts:10"}, "properties": {"repobilityId": "badc9e9da18850a9", "scanner": "scanner-primary", "fingerprint": "f29253e4bd148aa5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcc821cf7ee1a809", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/__tests__/export_button.test.tsx:3"}, "properties": {"repobilityId": "0a123e6b294c3bc4", "scanner": "scanner-primary", "fingerprint": "dcc821cf7ee1a809", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e469ce75e7913c5e", "level": "none", "message": {"text": "Commented-code block (12 lines) in frontend/src/__tests__/mobile_audit.test.ts:8"}, "properties": {"repobilityId": "f47d332c588eaea0", "scanner": "scanner-primary", "fingerprint": "e469ce75e7913c5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2ca1e843ac8ef98", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/__tests__/card_actions.test.tsx:3"}, "properties": {"repobilityId": "de66da1b221a8233", "scanner": "scanner-primary", "fingerprint": "a2ca1e843ac8ef98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-058cbf512baf395d", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/utils/chartTheme.ts:3"}, "properties": {"repobilityId": "753ddb05d3ae48e5", "scanner": "scanner-primary", "fingerprint": "058cbf512baf395d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af9d908d16df4fc3", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/history/CrisisLearningCard.tsx:1"}, "properties": {"repobilityId": "be0b964054edb779", "scanner": "scanner-primary", "fingerprint": "af9d908d16df4fc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-807e90ef7297209d", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/global/CommandPalette.tsx:1"}, "properties": {"repobilityId": "7a4e62d25fd6b3f2", "scanner": "scanner-primary", "fingerprint": "807e90ef7297209d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c48da1f4c72b847", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/global/CommandPalette.tsx:4"}, "properties": {"repobilityId": "8fb65c0fa7fc665a", "scanner": "scanner-primary", "fingerprint": "9c48da1f4c72b847", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ee526473b4965516", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/pages/History.tsx:1"}, "properties": {"repobilityId": "74af32e5b9b6c842", "scanner": "scanner-primary", "fingerprint": "ee526473b4965516", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3590ec52a05fc2e1", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/services/api.ts:3"}, "properties": {"repobilityId": "e34be72de7939633", "scanner": "scanner-primary", "fingerprint": "3590ec52a05fc2e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63b745ad27030e82", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/services/compareApi.ts:4"}, "properties": {"repobilityId": "1bbf5ce541bf4b4d", "scanner": "scanner-primary", "fingerprint": "63b745ad27030e82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4033b3f6584f36dd", "level": "note", "message": {"text": "Legacy-named symbol `test_crisis_cases_v2` in backend/tests/test_crisis_cases_v2.py:12"}, "properties": {"repobilityId": "6d448292657e7f1d", "scanner": "scanner-primary", "fingerprint": "4033b3f6584f36dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7f5e509d979a5fa5", "level": "note", "message": {"text": "Legacy-named symbol `test_rules_v2` in backend/tests/test_rules_v2.py:10"}, "properties": {"repobilityId": "06f028963656bd6d", "scanner": "scanner-primary", "fingerprint": "7f5e509d979a5fa5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c6511130ad16125c", "level": "note", "message": {"text": "Legacy-named symbol `verify_backup` in backend/tests/test_alerts_metric_path.py:29"}, "properties": {"repobilityId": "424ea87ce342b49b", "scanner": "scanner-primary", "fingerprint": "c6511130ad16125c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-567d5267037e8c00", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/api/alerts.py:206"}, "properties": {"repobilityId": "10f7d87f795dd906", "scanner": "scanner-primary", "fingerprint": "567d5267037e8c00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32df240a56f46328", "level": "note", "message": {"text": "Legacy-named symbol `verify_backup` in backend/app/api/_internal.py:1080"}, "properties": {"repobilityId": "2c1f54e4cfe8c002", "scanner": "scanner-primary", "fingerprint": "32df240a56f46328", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c72ae2310330f5d8", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/api/_internal.py:400"}, "properties": {"repobilityId": "e75127317c8cd137", "scanner": "scanner-primary", "fingerprint": "c72ae2310330f5d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-615a8421d98e0a55", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/app/services/temporal_service.py:235"}, "properties": {"repobilityId": "7ab97d19d2ae5afe", "scanner": "scanner-primary", "fingerprint": "615a8421d98e0a55", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6379d722f5173d6a", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/alembic/versions/0004_p3_objects.py:24"}, "properties": {"repobilityId": "2e8a7838b2a87fb6", "scanner": "scanner-primary", "fingerprint": "6379d722f5173d6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-902c93a20a643f5b", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/alembic/versions/0005_alert_objects.py:93"}, "properties": {"repobilityId": "efd226d7c30ee320", "scanner": "scanner-primary", "fingerprint": "902c93a20a643f5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b120a62e7b7c167f", "level": "note", "message": {"text": "181 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "eed73ea949f39431", "scanner": "scanner-primary", "fingerprint": "b120a62e7b7c167f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "8a8eb631b181e736", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c5badef61fbf8ffb", "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": "32381ad0c31dd94b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "aa9cbca8ff70566a", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "4a7c06952fe31e85", "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": "dd14f542726403d6", "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": "517837a02919e0cd", "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": "1569deada2230082", "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": "3e9c42047afbdc73", "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": "09a7fe61b8d7a544", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "5d5dee6a5eee1c06", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0ab577c14fef8711", "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": "eac76a831d709f1e", "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": "07c8b3a42ff4887e", "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": "d56d9d9852ca2b54", "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": "d2b508e5da17c7f3", "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": "fe7ef28a23894429", "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": "f5ea60dae2b21b2b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "e31784e0b806d76e", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a5e8894b123e1ac6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-032a13e516788926", "level": "warning", "message": {"text": "Frontend route `/collection` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "c0af2ef4e854757d", "scanner": "scanner-primary", "fingerprint": "032a13e516788926", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2c7ac07c8f1325bc", "level": "warning", "message": {"text": "Frontend route `/history` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "f7325d9448a07b5f", "scanner": "scanner-primary", "fingerprint": "2c7ac07c8f1325bc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fc88e754bc2746f0", "level": "warning", "message": {"text": "Frontend route `/data-quality` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "e5e723f7e298d72c", "scanner": "scanner-primary", "fingerprint": "fc88e754bc2746f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-81fc5be70678aace", "level": "warning", "message": {"text": "Frontend route `/charts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "c2c98cf203a73f96", "scanner": "scanner-primary", "fingerprint": "81fc5be70678aace", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cfd6812525009f1c", "level": "error", "message": {"text": "FastAPI POST `llm_narrative` without auth dependency \u2014 backend/app/api/temporal.py:82"}, "properties": {"repobilityId": "9695ca34ca029b99", "scanner": "scanner-primary", "fingerprint": "cfd6812525009f1c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/temporal.py"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-97a821b5a41a5c54", "level": "error", "message": {"text": "FastAPI POST `create_rule` without auth dependency \u2014 backend/app/api/alerts.py:352"}, "properties": {"repobilityId": "3d06418ade98bc46", "scanner": "scanner-primary", "fingerprint": "97a821b5a41a5c54", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/alerts.py"}, "region": {"startLine": 352}}}]}, {"ruleId": "scanner-2d657dfb8d38298b", "level": "error", "message": {"text": "FastAPI PATCH `patch_rule` without auth dependency \u2014 backend/app/api/alerts.py:387"}, "properties": {"repobilityId": "32041aab68d29d5b", "scanner": "scanner-primary", "fingerprint": "2d657dfb8d38298b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/alerts.py"}, "region": {"startLine": 387}}}]}, {"ruleId": "scanner-a69edca32449255a", "level": "error", "message": {"text": "FastAPI DELETE `delete_rule` without auth dependency \u2014 backend/app/api/alerts.py:431"}, "properties": {"repobilityId": "944425de5b960c0d", "scanner": "scanner-primary", "fingerprint": "a69edca32449255a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/alerts.py"}, "region": {"startLine": 431}}}]}, {"ruleId": "scanner-822430150a78b6b9", "level": "error", "message": {"text": "FastAPI POST `apply_presets` without auth dependency \u2014 backend/app/api/alerts.py:450"}, "properties": {"repobilityId": "667c0f5f52f9a7c2", "scanner": "scanner-primary", "fingerprint": "822430150a78b6b9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/alerts.py"}, "region": {"startLine": 450}}}]}, {"ruleId": "scanner-f33ee8e9a06ff76f", "level": "error", "message": {"text": "FastAPI POST `channels_slack_test` without auth dependency \u2014 backend/app/api/alerts.py:552"}, "properties": {"repobilityId": "2b7e5f002655c24b", "scanner": "scanner-primary", "fingerprint": "f33ee8e9a06ff76f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/alerts.py"}, "region": {"startLine": 552}}}]}, {"ruleId": "scanner-c16195d0fd713cc3", "level": "error", "message": {"text": "FastAPI POST `fire_test` without auth dependency \u2014 backend/app/api/alerts.py:588"}, "properties": {"repobilityId": "8f26cf6469510a14", "scanner": "scanner-primary", "fingerprint": "c16195d0fd713cc3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/alerts.py"}, "region": {"startLine": 588}}}]}, {"ruleId": "scanner-58fae9aadfbd70c2", "level": "error", "message": {"text": "FastAPI POST `export_pdf_endpoint` without auth dependency \u2014 backend/app/api/_internal.py:2629"}, "properties": {"repobilityId": "e6e62611d55d2a66", "scanner": "scanner-primary", "fingerprint": "58fae9aadfbd70c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/_internal.py"}, "region": {"startLine": 2629}}}]}, {"ruleId": "scanner-fe364ad9257b5447", "level": "error", "message": {"text": "FastAPI POST `share_token_create` without auth dependency \u2014 backend/app/api/_internal.py:2674"}, "properties": {"repobilityId": "ea67af7ff309dd13", "scanner": "scanner-primary", "fingerprint": "fe364ad9257b5447", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/_internal.py"}, "region": {"startLine": 2674}}}]}, {"ruleId": "scanner-c04a49206cf95ced", "level": "error", "message": {"text": "FastAPI POST `cache_warm` without auth dependency \u2014 backend/app/api/_internal.py:2948"}, "properties": {"repobilityId": "7d40a2f394de93d2", "scanner": "scanner-primary", "fingerprint": "c04a49206cf95ced", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/_internal.py"}, "region": {"startLine": 2948}}}]}, {"ruleId": "scanner-a13aa8f233deee5e", "level": "error", "message": {"text": "FastAPI POST `compare_llm` without auth dependency \u2014 backend/app/api/insights.py:103"}, "properties": {"repobilityId": "51213542e763a7b7", "scanner": "scanner-primary", "fingerprint": "a13aa8f233deee5e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/insights.py"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-9a83785aadf646c9", "level": "error", "message": {"text": "FastAPI POST `trigger_crawl` without auth dependency \u2014 backend/app/api/crawl_jobs.py:21"}, "properties": {"repobilityId": "252f241be6fc9da7", "scanner": "scanner-primary", "fingerprint": "9a83785aadf646c9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/api/crawl_jobs.py"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-eb165587b0baca73", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/platforms"}, "properties": {"repobilityId": "a0c54001947a924a", "scanner": "scanner-primary", "fingerprint": "eb165587b0baca73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d04ddb18e3ae4ee3", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1"}, "properties": {"repobilityId": "f865309196842c8a", "scanner": "scanner-primary", "fingerprint": "d04ddb18e3ae4ee3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-917a953567c1ac66", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/{code}/voc"}, "properties": {"repobilityId": "5bf12d0dd62aa3a2", "scanner": "scanner-primary", "fingerprint": "917a953567c1ac66", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a452d3f6d616ae2", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/{code}/stats"}, "properties": {"repobilityId": "bc3986cdd4cde659", "scanner": "scanner-primary", "fingerprint": "8a452d3f6d616ae2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-78f30f9c1ae8bee1", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/issue-lifecycle"}, "properties": {"repobilityId": "eb9664d8a4829f1a", "scanner": "scanner-primary", "fingerprint": "78f30f9c1ae8bee1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1551a2a9c8ff13c6", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/category-product-matrix"}, "properties": {"repobilityId": "4110b0382b68b7d5", "scanner": "scanner-primary", "fingerprint": "1551a2a9c8ff13c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3275be819b3f7478", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/site-diffusion"}, "properties": {"repobilityId": "c5cdd8c9c2971ed7", "scanner": "scanner-primary", "fingerprint": "3275be819b3f7478", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a04d5280d06d363", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/country-sentiment-gap"}, "properties": {"repobilityId": "7700f09bb93e8d91", "scanner": "scanner-primary", "fingerprint": "3a04d5280d06d363", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2112a65ac0875c5a", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/engagement-sentiment"}, "properties": {"repobilityId": "3fd39801a02354fb", "scanner": "scanner-primary", "fingerprint": "2112a65ac0875c5a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a72b047d10f9ce1", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/new-term-survival"}, "properties": {"repobilityId": "d9dbfa3d29e24c2e", "scanner": "scanner-primary", "fingerprint": "2a72b047d10f9ce1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a92f0a6aa5ff6049", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/keyword-cooccurrence"}, "properties": {"repobilityId": "541cb700887b053d", "scanner": "scanner-primary", "fingerprint": "a92f0a6aa5ff6049", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c10ce720fb4df32", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/anomaly-context"}, "properties": {"repobilityId": "21fb9406e3cca85e", "scanner": "scanner-primary", "fingerprint": "5c10ce720fb4df32", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b3aa35d1e159579", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/sentiment-driver"}, "properties": {"repobilityId": "4bfce38ac2a61aa6", "scanner": "scanner-primary", "fingerprint": "6b3aa35d1e159579", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ce8c2c40c11f4cf", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/anomaly-with-drivers"}, "properties": {"repobilityId": "9b0e9e1d1c6c3d07", "scanner": "scanner-primary", "fingerprint": "9ce8c2c40c11f4cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50733f786831d9aa", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/anomaly-drilldown"}, "properties": {"repobilityId": "842ce0109ed847fa", "scanner": "scanner-primary", "fingerprint": "50733f786831d9aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4bd27ad648423c04", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/anomaly-drilldown-hour"}, "properties": {"repobilityId": "439989dfd6fc1d72", "scanner": "scanner-primary", "fingerprint": "4bd27ad648423c04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69e860ef959b3847", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/category-momentum"}, "properties": {"repobilityId": "5479fdce933f58f5", "scanner": "scanner-primary", "fingerprint": "69e860ef959b3847", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cc67275268611225", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/keyword-network"}, "properties": {"repobilityId": "6daab7e1285c1932", "scanner": "scanner-primary", "fingerprint": "cc67275268611225", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-520b8a3dba07384b", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/lifecycle-funnel"}, "properties": {"repobilityId": "9e9e8e286be9ce8f", "scanner": "scanner-primary", "fingerprint": "520b8a3dba07384b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-046d30ccef390028", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/influence-rank"}, "properties": {"repobilityId": "29512e48948eeb2a", "scanner": "scanner-primary", "fingerprint": "046d30ccef390028", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6917495dd5dc7bcf", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/product-funnel"}, "properties": {"repobilityId": "83f2510977f4b138", "scanner": "scanner-primary", "fingerprint": "6917495dd5dc7bcf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f71fe9f774ef6d3d", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/keyword-detail"}, "properties": {"repobilityId": "e4a1ee76af6bbbf3", "scanner": "scanner-primary", "fingerprint": "f71fe9f774ef6d3d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bedd7bc74e28b0e1", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/galaxy-timeline"}, "properties": {"repobilityId": "8152f352ed541f15", "scanner": "scanner-primary", "fingerprint": "bedd7bc74e28b0e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aebead2cd7da4788", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/crisis-cases"}, "properties": {"repobilityId": "0ae322baa126b31b", "scanner": "scanner-primary", "fingerprint": "aebead2cd7da4788", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-70a71cced58b1462", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/series-comparison"}, "properties": {"repobilityId": "3d51024346069238", "scanner": "scanner-primary", "fingerprint": "70a71cced58b1462", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4852427a1bfa4635", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/overview"}, "properties": {"repobilityId": "0486950f79dc24d2", "scanner": "scanner-primary", "fingerprint": "4852427a1bfa4635", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-30791d875b21720d", "level": "note", "message": {"text": "Unused endpoint: GET /sentiment-trend"}, "properties": {"repobilityId": "f8b299fb0d20f1c3", "scanner": "scanner-primary", "fingerprint": "30791d875b21720d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-441bfb0ee3f4281d", "level": "note", "message": {"text": "Unused endpoint: GET /category-dist"}, "properties": {"repobilityId": "fc6757d65bf1c27f", "scanner": "scanner-primary", "fingerprint": "441bfb0ee3f4281d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-752a398ed0fab8a3", "level": "note", "message": {"text": "Unused endpoint: GET /country-heatmap"}, "properties": {"repobilityId": "fe5b4c33f6112061", "scanner": "scanner-primary", "fingerprint": "752a398ed0fab8a3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d61cace0727ca2d6", "level": "note", "message": {"text": "Unused endpoint: GET /top-issues"}, "properties": {"repobilityId": "1130a064a1b92dfa", "scanner": "scanner-primary", "fingerprint": "d61cace0727ca2d6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18a4887e7bea6b36", "level": "note", "message": {"text": "Unused endpoint: GET /compare"}, "properties": {"repobilityId": "5a8b39efd1d0121b", "scanner": "scanner-primary", "fingerprint": "18a4887e7bea6b36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a904f4f159cfb95b", "level": "note", "message": {"text": "Unused endpoint: GET /keyword-track"}, "properties": {"repobilityId": "5ef1e36ed2d5ef55", "scanner": "scanner-primary", "fingerprint": "a904f4f159cfb95b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0e6168e1431d8e32", "level": "note", "message": {"text": "Unused endpoint: GET /cohort-compare"}, "properties": {"repobilityId": "685a7fae825a07bb", "scanner": "scanner-primary", "fingerprint": "0e6168e1431d8e32", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9656f902a3d9d0b8", "level": "note", "message": {"text": "Unused endpoint: GET /site-health"}, "properties": {"repobilityId": "3dfb0a155c1b73e7", "scanner": "scanner-primary", "fingerprint": "9656f902a3d9d0b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-65f60ba06fe64029", "level": "note", "message": {"text": "Unused endpoint: GET /recent-issues"}, "properties": {"repobilityId": "eace1d8930ba064e", "scanner": "scanner-primary", "fingerprint": "65f60ba06fe64029", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0114199b3acdd926", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/graph"}, "properties": {"repobilityId": "fb7145de76447556", "scanner": "scanner-primary", "fingerprint": "0114199b3acdd926", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-44b8dd81d5aafbc9", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/node/{node_id}/samples"}, "properties": {"repobilityId": "a3951866b8602838", "scanner": "scanner-primary", "fingerprint": "44b8dd81d5aafbc9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e8f224eaa152834", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/search"}, "properties": {"repobilityId": "70b4b2920bfed332", "scanner": "scanner-primary", "fingerprint": "9e8f224eaa152834", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-65533f066836a708", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/{token}"}, "properties": {"repobilityId": "c256d171cfcc60bb", "scanner": "scanner-primary", "fingerprint": "65533f066836a708", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be1b48c5e621a56b", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/temporal-series"}, "properties": {"repobilityId": "02b83ef6cfaeed29", "scanner": "scanner-primary", "fingerprint": "be1b48c5e621a56b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2302a8b24e7760b4", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/temporal-compare"}, "properties": {"repobilityId": "96809a4ffd05f69e", "scanner": "scanner-primary", "fingerprint": "2302a8b24e7760b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2cf9e3764234027", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/llm-narrative"}, "properties": {"repobilityId": "6ed54fd5107c19f6", "scanner": "scanner-primary", "fingerprint": "f2cf9e3764234027", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cffebb4589a2b4e8", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/platforms/health"}, "properties": {"repobilityId": "bdbb00e52e42f49f", "scanner": "scanner-primary", "fingerprint": "cffebb4589a2b4e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3b90afb0cc08625", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/platforms/product-matrix"}, "properties": {"repobilityId": "63073bcfbd155c74", "scanner": "scanner-primary", "fingerprint": "c3b90afb0cc08625", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-04567c4544434d2c", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/platforms/dispersion"}, "properties": {"repobilityId": "9a19632d99835195", "scanner": "scanner-primary", "fingerprint": "04567c4544434d2c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2dc8b886112881dd", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/platforms/early-signal"}, "properties": {"repobilityId": "d9c7d285e3340732", "scanner": "scanner-primary", "fingerprint": "2dc8b886112881dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0fb7ee6d86db8550", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/platforms/clusters"}, "properties": {"repobilityId": "a4b41cb7c11f11b2", "scanner": "scanner-primary", "fingerprint": "0fb7ee6d86db8550", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a435bc37344c175", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/platforms/anomalies"}, "properties": {"repobilityId": "de9dbfb87c6d002f", "scanner": "scanner-primary", "fingerprint": "4a435bc37344c175", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be3c6302ff65406b", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/rules"}, "properties": {"repobilityId": "aae026a6ad690d41", "scanner": "scanner-primary", "fingerprint": "be3c6302ff65406b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2919258f5dd41a3", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/rules"}, "properties": {"repobilityId": "da7e67cc616ea01d", "scanner": "scanner-primary", "fingerprint": "f2919258f5dd41a3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}