{"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-4f39a1747a637033", "name": "Possibly dead Python function: base_product_name_from_product", "shortDescription": {"text": "Possibly dead Python function: base_product_name_from_product"}, "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-c5b69e36461877e1", "name": "Possibly dead Python function: image_file_sort_key", "shortDescription": {"text": "Possibly dead Python function: image_file_sort_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-d90581e6c4dd050c", "name": "Possibly dead Python function: test_cafe24_key", "shortDescription": {"text": "Possibly dead Python function: test_cafe24_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-5d9296264e3e406e", "name": "Possibly dead Python function: test_elevenst_key", "shortDescription": {"text": "Possibly dead Python function: test_elevenst_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-aed96770d285a12e", "name": "Possibly dead Python function: test_naver_key", "shortDescription": {"text": "Possibly dead Python function: test_naver_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-443f6d9a7625a14a", "name": "Possibly dead Python function: test_coupang_key", "shortDescription": {"text": "Possibly dead Python function: test_coupang_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-0224b3e0b368e219", "name": "Possibly dead Python function: test_lotteon_key", "shortDescription": {"text": "Possibly dead Python function: test_lotteon_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-84789301d761e8a1", "name": "Possibly dead Python function: run_seed_job", "shortDescription": {"text": "Possibly dead Python function: run_seed_job"}, "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-59f3bddb52140857", "name": "Possibly dead Python function: run_keyword_job", "shortDescription": {"text": "Possibly dead Python function: run_keyword_job"}, "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-f0c5c62ef94535d7", "name": "Possibly dead Python function: read_stdout", "shortDescription": {"text": "Possibly dead Python function: read_stdout"}, "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-a5fe347f28e5046b", "name": "Possibly dead Python function: run_automation_job", "shortDescription": {"text": "Possibly dead Python function: run_automation_job"}, "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-e22e3d2fdd243157", "name": "Possibly dead Python function: run_market_upload_job", "shortDescription": {"text": "Possibly dead Python function: run_market_upload_job"}, "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-8b9b019b54479f5e", "name": "Possibly dead Python function: convert_xlsx_to_xls_if_possible", "shortDescription": {"text": "Possibly dead Python function: convert_xlsx_to_xls_if_possible"}, "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-6c5835012a08760d", "name": "Possibly dead Python function: pm_option_sort_key", "shortDescription": {"text": "Possibly dead Python function: pm_option_sort_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-c9ed6d76215c036d", "name": "Possibly dead Python function: pm_select_automation_skus", "shortDescription": {"text": "Possibly dead Python function: pm_select_automation_skus"}, "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-0d0ffd657107db2c", "name": "Possibly dead Python function: log_message", "shortDescription": {"text": "Possibly dead Python function: log_message"}, "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-646c9674d50de825", "name": "Possibly dead Python function: do_POST", "shortDescription": {"text": "Possibly dead Python function: do_POST"}, "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-643cbbbbf0027225", "name": "Possibly dead Python function: create_seed_approval_rule", "shortDescription": {"text": "Possibly dead Python function: create_seed_approval_rule"}, "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-4cbe52523b4fb801", "name": "Possibly dead Python function: search_categories", "shortDescription": {"text": "Possibly dead Python function: search_categories"}, "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-4d7fb03cea826cda", "name": "Possibly dead Python function: approve_mapping", "shortDescription": {"text": "Possibly dead Python function: approve_mapping"}, "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-569066448707f318", "name": "Possibly dead Python function: extract_gs_code", "shortDescription": {"text": "Possibly dead Python function: extract_gs_code"}, "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-3713c7b9aa308032", "name": "Possibly dead Python function: has_disallowed_latin", "shortDescription": {"text": "Possibly dead Python function: has_disallowed_latin"}, "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-166183efa886c90b", "name": "Possibly dead Python function: run_listing_only", "shortDescription": {"text": "Possibly dead Python function: run_listing_only"}, "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-06ce418cfa462cf3", "name": "Possibly dead Python function: naver_shopping_titles", "shortDescription": {"text": "Possibly dead Python function: naver_shopping_titles"}, "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-51cfa6fc5fb9a327", "name": "Possibly dead Python function: reorder_kw_tokens", "shortDescription": {"text": "Possibly dead Python function: reorder_kw_tokens"}, "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-765a7d60c49312b0", "name": "Possibly dead Python function: cap_root_repetition", "shortDescription": {"text": "Possibly dead Python function: cap_root_repetition"}, "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-266ad9c5876f25b5", "name": "Possibly dead Python function: dedup_compound_suffix", "shortDescription": {"text": "Possibly dead Python function: dedup_compound_suffix"}, "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-0fb788f3e333b143", "name": "Possibly dead Python function: generate_r_keywords_gpt5", "shortDescription": {"text": "Possibly dead Python function: generate_r_keywords_gpt5"}, "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-4305c65306e0c3ed", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 webocrcludev2/app.bundle.js:4", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 webocrcludev2/app.bundle.js:4"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4262332477c54d40", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 webocrcludev2/components.jsx:961", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 webocrcludev2/components.jsx:961"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d828b853d5ed8cea", "name": "Stray `console.log` in TS/JS \u2014 ProductManager/navertagv2/server.js:1353", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ProductManager/navertagv2/server.js:1353"}, "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-b3361216f6427976", "name": "Stray `console.log` in TS/JS \u2014 ProductManager/navertagv2/public/app.js:588", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ProductManager/navertagv2/public/app.js:588"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5c53874a7ac6116", "name": "Insecure pattern 'dangerous_innerhtml' in webocrcludev2/app.bundle.js:4", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in webocrcludev2/app.bundle.js:4"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bef7172d50959bbc", "name": "Insecure pattern 'dangerous_innerhtml' in webocrcludev2/components.jsx:961", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in webocrcludev2/components.jsx:961"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-736089f4ea819d1a", "name": "Insecure pattern 'subprocess_shell_true' in webocrcludev2/build_frontend.py:26", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in webocrcludev2/build_frontend.py:26"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-61a77d20867dfa97", "name": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/cleanup_market_duplicates.py:82", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/cleanup_market_duplicates.py:82"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1664b5f2b360c2fc", "name": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/sync_coupang_1000_prices_to_naver.py:170", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/sync_coupang_1000_prices_to_naver.py:170"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8578e89a4d1f574b", "name": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/apply_coupang_instant_discounts_500plus.py:60", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/apply_coupang_instant_discounts_500plus.py:60"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65e5adadaa9ff944", "name": "Insecure pattern 'direct_innerhtml_assignment' in tools/coupang-price-bulk-helper/content.js:81", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/coupang-price-bulk-helper/content.js:81"}, "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-ad2c661f1843facb", "name": "Insecure pattern 'debug_true' in ProductManager/app.py:410", "shortDescription": {"text": "Insecure pattern 'debug_true' in ProductManager/app.py:410"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d25de6941a14dcd3", "name": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/static/js/app.js:162", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/static/js/app.js:162"}, "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-2e6e514250c3da91", "name": "Insecure pattern 'node_child_process' in ProductManager/navertagv2/server.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in ProductManager/navertagv2/server.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-efc6708b298a96f8", "name": "Insecure pattern 'cors_wildcard' in ProductManager/navertagv2/server.js:251", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in ProductManager/navertagv2/server.js:251"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6329e54960e5c2da", "name": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/navertagv2/extension/content.js:24", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/navertagv2/extension/content.js:24"}, "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-08f5652b54f96d42", "name": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/navertagv2/public/app.js:219", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/navertagv2/public/app.js:219"}, "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-713ffecbef20f6cb", "name": "Insecure pattern 'exec_used' in backend/main_claude_haiku45.py:49", "shortDescription": {"text": "Insecure pattern 'exec_used' in backend/main_claude_haiku45.py:49"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35d80569ebc7a6f9", "name": "Insecure pattern 'debug_true' in backend/app/gui/main_window.py:7562", "shortDescription": {"text": "Insecure pattern 'debug_true' in backend/app/gui/main_window.py:7562"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc2ebe1880b0c558", "name": "Insecure pattern 'debug_true' in KeywordOcr.App/Bridge/run_pipeline_bridge.py:121", "shortDescription": {"text": "Insecure pattern 'debug_true' in KeywordOcr.App/Bridge/run_pipeline_bridge.py:121"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-174ca8e74ef38410", "name": "Very large file: webocrcludev2/components.jsx (5435 lines)", "shortDescription": {"text": "Very large file: webocrcludev2/components.jsx (5435 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-2ce888d038ec8d59", "name": "Very large file: webocrcludev2/app.jsx (2467 lines)", "shortDescription": {"text": "Very large file: webocrcludev2/app.jsx (2467 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-cca27dea8bafefcd", "name": "Very large file: webocrcludev2/scripts/local_api_server.py (10641 lines)", "shortDescription": {"text": "Very large file: webocrcludev2/scripts/local_api_server.py (10641 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-16f5bd5704c82e78", "name": "Very large file: ProductManager/navertagv2/server.js (1358 lines)", "shortDescription": {"text": "Very large file: ProductManager/navertagv2/server.js (1358 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-045a244a6540198f", "name": "Very large file: backend/app/gui/main_window.py (8005 lines)", "shortDescription": {"text": "Very large file: backend/app/gui/main_window.py (8005 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-5d655f6803f3557e", "name": "Very large file: backend/app/services/pipeline.py (5813 lines)", "shortDescription": {"text": "Very large file: backend/app/services/pipeline.py (5813 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-c94a82a81644f7fd", "name": "Very large file: backend/app/services/legacy_core.py (5538 lines)", "shortDescription": {"text": "Very large file: backend/app/services/legacy_core.py (5538 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "5 test file(s) for 66 source file(s) (ratio 0.08). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 118 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 52 placeholder/mock markers across 5 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fad15119e3597eb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/app.bundle.js:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/app.bundle.js: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-e4f004bfba9a1402", "name": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/components.jsx:2466", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/components.jsx:2466"}, "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-2f78daad03ccdb4d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/app.jsx:157", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/app.jsx:157"}, "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-8c10c9de3816ddff", "name": "Network/subprocess call without timeout or try/except \u2014 webocrcludev2/build_frontend.py:24", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 webocrcludev2/build_frontend.py:24"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f4828e105c3cfe5", "name": "Legacy-named symbol `_build_keyword_prompt_legacy` in webocrcludev2/scripts/local_api_server.py:4200", "shortDescription": {"text": "Legacy-named symbol `_build_keyword_prompt_legacy` in webocrcludev2/scripts/local_api_server.py:4200"}, "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-b00786f10fd6b5be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ProductManager/navertagv2/server.js:405", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ProductManager/navertagv2/server.js:405"}, "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-4ae61c94b630f00b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ProductManager/navertagv2/public/app.js:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ProductManager/navertagv2/public/app.js:24"}, "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-134fe30270d6ea29", "name": "Network/subprocess call without timeout or try/except \u2014 backend/app/gui/ocr_window.py:309", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/gui/ocr_window.py:309"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-66e47a6f96e272b8", "name": "Legacy-named symbol `use_keyword_v2` in backend/app/services/pipeline.py:1251", "shortDescription": {"text": "Legacy-named symbol `use_keyword_v2` in backend/app/services/pipeline.py:1251"}, "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-739698ccd05058a6", "name": "Stub function `_noop_status` (body is just `pass`/`return`) \u2014 backend/app/services/free_keyword_analysis/analyzer.py:37", "shortDescription": {"text": "Stub function `_noop_status` (body is just `pass`/`return`) \u2014 backend/app/services/free_keyword_analysis/analyzer.py:37"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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:\nwebocrcludev2/scripts/cleanup_market_duplicates.py:request, webocrcludev2/scripts/cleanup_market_duplicates.py:request, webocrcludev2/scripts/sync_coupang_1000_prices_to_naver.py:request, webocrcludev2/scripts/apply_coupang_instant_discounts_500plus.py:request\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:\nwebocrcludev2/scripts/sync_coupang_1000_prices_to_naver.py:read_kv, webocrcludev2/scripts/apply_coupang_instant_discounts_500plus.py:read_kv\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nwebocrcludev2/scripts/local_api_server.py:call_openai_category_judge, webocrcludev2/scripts/local_api_server.py:call, webocrcludev2/scripts/local_api_server.py:call\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-55af422f37f0dd25", "name": "Flask mutation route `upload_excel` without `@login_required` \u2014 ProductManager/app.py:81", "shortDescription": {"text": "Flask mutation route `upload_excel` without `@login_required` \u2014 ProductManager/app.py:81"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac129427215e24c1", "name": "Flask mutation route `api_preview` without `@login_required` \u2014 ProductManager/app.py:143", "shortDescription": {"text": "Flask mutation route `api_preview` without `@login_required` \u2014 ProductManager/app.py:143"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82d14b9968a21900", "name": "Flask mutation route `api_download` without `@login_required` \u2014 ProductManager/app.py:187", "shortDescription": {"text": "Flask mutation route `api_download` without `@login_required` \u2014 ProductManager/app.py:187"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4cf6be0d133ce24", "name": "Flask mutation route `api_history_result_upload` without `@login_required` \u2014 ProductManager/app.py:268", "shortDescription": {"text": "Flask mutation route `api_history_result_upload` without `@login_required` \u2014 ProductManager/app.py:268"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3140b09927004a4e", "name": "Flask mutation route `api_result_upload_update` without `@login_required` \u2014 ProductManager/app.py:334", "shortDescription": {"text": "Flask mutation route `api_result_upload_update` without `@login_required` \u2014 ProductManager/app.py:334"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6544263c31bcb8d", "name": "Flask mutation route `api_cancel_listing` without `@login_required` \u2014 ProductManager/app.py:375", "shortDescription": {"text": "Flask mutation route `api_cancel_listing` without `@login_required` \u2014 ProductManager/app.py:375"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a70f48929c188b0", "name": "Dangling fetch: POST /api/import-logo (webocrcludev2/app.bundle.js:4)", "shortDescription": {"text": "Dangling fetch: POST /api/import-logo (webocrcludev2/app.bundle.js:4)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:4` calls `POST /api/import-logo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/import-logo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b8cb7092bd8a628", "name": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(ze)}&limit=8 (webocrcludev2/app.bundle.js:4)", "shortDescription": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(ze)}&limit=8 (webocrcludev2/app.bundle.js:4)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:4` calls `GET /api/category-bundle?q=${encodeURIComponent(ze)}&limit=8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-bundle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d695e4afd7e32e0", "name": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(te.market)}&${k}&limit=120 (webocrcludev2/app.bundle.js:", "shortDescription": {"text": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(te.market)}&${k}&limit=120 (webocrcludev2/app.bundle.js:4)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:4` calls `GET /api/categories?market=${encodeURIComponent(te.market)}&${k}&limit=120` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/categories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1e74302812315af", "name": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(ve)}&limit=8 (webocrcludev2/app.bundle.js:4)", "shortDescription": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(ve)}&limit=8 (webocrcludev2/app.bundle.js:4)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:4` calls `GET /api/category-bundle?q=${encodeURIComponent(ve)}&limit=8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-bundle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe289d597ca0abf8", "name": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/app.bundle.js:5)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/app.bundle.js:5)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:5` calls `POST /api/market-upload/mark-deleted` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload/mark-deleted`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82ecc55746027804", "name": "Dangling fetch: POST /api/market-upload/delete-products (webocrcludev2/app.bundle.js:5)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload/delete-products (webocrcludev2/app.bundle.js:5)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:5` calls `POST /api/market-upload/delete-products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload/delete-products`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c419e471c25f573", "name": "Dangling fetch: GET /api/jobs/${s} (webocrcludev2/app.bundle.js:9)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${s} (webocrcludev2/app.bundle.js:9)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:9` calls `GET /api/jobs/${s}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73e708470aca4b18", "name": "Dangling fetch: POST /api/market-upload (webocrcludev2/app.bundle.js:9)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload (webocrcludev2/app.bundle.js:9)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:9` calls `POST /api/market-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-faee4fa88b9bea6a", "name": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:9)", "shortDescription": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:9)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:9` calls `POST /api/job-stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/job-stop`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-558adf2b0776e755", "name": "Dangling fetch: POST /api/excel-export (webocrcludev2/app.bundle.js:9)", "shortDescription": {"text": "Dangling fetch: POST /api/excel-export (webocrcludev2/app.bundle.js:9)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:9` calls `POST /api/excel-export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/excel-export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e215985a5c9167ea", "name": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.bundle.js:10)", "shortDescription": {"text": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.bundle.js:10)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:10` calls `POST /api/open-export-path` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-export-path`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29376e7029752d63", "name": "Dangling fetch: POST /api/emergency-codex-context (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/emergency-codex-context (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/emergency-codex-context` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/emergency-codex-context`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce2013c88b1d550e", "name": "Dangling fetch: POST /api/emergency-codex-open (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/emergency-codex-open (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/emergency-codex-open` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/emergency-codex-open`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b2aca80022724dd", "name": "Dangling fetch: GET /api/jobs/${o} (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${o} (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `GET /api/jobs/${o}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d920e8ce987a03ce", "name": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/market-upload/mark-deleted` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload/mark-deleted`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c87bdcee0cbacf9", "name": "Dangling fetch: POST /api/market-upload (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/market-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-352b0daa245e54d4", "name": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(p.channel.market)}&q=${encodeURIComponent(x)}&limit=80 (", "shortDescription": {"text": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(p.channel.market)}&q=${encodeURIComponent(x)}&limit=80 (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `GET /api/categories?market=${encodeURIComponent(p.channel.market)}&q=${encodeURIComponent(x)}&limit=80` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/categories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d180ac29c7625947", "name": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(be)}&limit=8 (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(be)}&limit=8 (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `GET /api/category-bundle?q=${encodeURIComponent(be)}&limit=8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-bundle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f520ef8b99bbb325", "name": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `GET /api/upload-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e5e7b1226b6a4e4d", "name": "Dangling fetch: GET /api/keyword-profile (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: GET /api/keyword-profile (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `GET /api/keyword-profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cacb50b50e3a6a8d", "name": "Dangling fetch: POST /api/keyword-profile/save (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/save (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/keyword-profile/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/save`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e297e0f33e95c0a1", "name": "Dangling fetch: GET /api/keyword-profile/list (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: GET /api/keyword-profile/list (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `GET /api/keyword-profile/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b091a1a4fb4c6af", "name": "Dangling fetch: POST /api/keyword-profile/save-as (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/save-as (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/keyword-profile/save-as` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/save-as`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d5e5f456e1a070d", "name": "Dangling fetch: POST /api/keyword-profile/load (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/load (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/keyword-profile/load` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/load`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d76923da7c9201c3", "name": "Dangling fetch: POST /api/keyword-profile/delete (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/delete (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/keyword-profile/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0612c39999cafdba", "name": "Dangling fetch: POST /api/keyword-profile/import (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/import (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/keyword-profile/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62e7c5f2ecc43d9c", "name": "Dangling fetch: POST /api/keyword-profile/codex (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/codex (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/keyword-profile/codex` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/codex`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9d947a8cfa48992", "name": "Dangling fetch: POST /api/keyword-profile/reset (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/reset (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/keyword-profile/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/reset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e4de84c4c3bd88b", "name": "Dangling fetch: POST /api/market-key (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/market-key (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/market-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-efa63a80c4e11403", "name": "Dangling fetch: POST /api/market-key-test (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: POST /api/market-key-test (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `POST /api/market-key-test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-key-test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56e661f73d222c6a", "name": "Dangling fetch: GET /api/market-keys (webocrcludev2/app.bundle.js:11)", "shortDescription": {"text": "Dangling fetch: GET /api/market-keys (webocrcludev2/app.bundle.js:11)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:11` calls `GET /api/market-keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0210f3be84a89445", "name": "Dangling fetch: GET /api/seed?path=${encodeURIComponent(i)} (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: GET /api/seed?path=${encodeURIComponent(i)} (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `GET /api/seed?path=${encodeURIComponent(i)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8bc24f7a7b12b44f", "name": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `GET /api/pm/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a2532998f93ec4b", "name": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `GET /api/pm/dates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/dates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ecd63b2634c932cf", "name": "Dangling fetch: POST /api/pm/products (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/pm/products (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `POST /api/pm/products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/products`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11ec6c5dd3b65add", "name": "Dangling fetch: POST /api/pm/import (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/pm/import (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `POST /api/pm/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94cae37dbb4c9301", "name": "Dangling fetch: POST /api/pm/upload-csv (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/pm/upload-csv (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `POST /api/pm/upload-csv` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/upload-csv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4cc967451832563", "name": "Dangling fetch: GET /api/jobs/${u} (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${u} (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `GET /api/jobs/${u}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7fb78105b0f708bc", "name": "Dangling fetch: GET /api/seeds (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: GET /api/seeds (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `GET /api/seeds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seeds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3e72b4dcfdae0dc", "name": "Dangling fetch: POST /api/automation-prepare (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/automation-prepare (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `POST /api/automation-prepare` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/automation-prepare`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17d774396563b400", "name": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `POST /api/job-stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/job-stop`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6f1e547ce15c470", "name": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `GET /api/upload-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a549c2aba7e1bd5", "name": "Dangling fetch: POST /api/import-source (webocrcludev2/app.bundle.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/import-source (webocrcludev2/app.bundle.js:23)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:23` calls `POST /api/import-source` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/import-source`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13434816fd3e7c85", "name": "Dangling fetch: POST /api/workspace-reset (webocrcludev2/app.bundle.js:24)", "shortDescription": {"text": "Dangling fetch: POST /api/workspace-reset (webocrcludev2/app.bundle.js:24)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:24` calls `POST /api/workspace-reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/workspace-reset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82b8df2b304f0be3", "name": "Dangling fetch: GET /api/jobs/${t} (webocrcludev2/app.bundle.js:24)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${t} (webocrcludev2/app.bundle.js:24)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:24` calls `GET /api/jobs/${t}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-205681283acef2e8", "name": "Dangling fetch: POST /api/source-to-seed (webocrcludev2/app.bundle.js:24)", "shortDescription": {"text": "Dangling fetch: POST /api/source-to-seed (webocrcludev2/app.bundle.js:24)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:24` calls `POST /api/source-to-seed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/source-to-seed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5dbbc58d65578033", "name": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.bundle.js:26)", "shortDescription": {"text": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.bundle.js:26)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:26` calls `POST /api/seed-action` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seed-action`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f75bccf12e7ef7d", "name": "Dangling fetch: POST /api/seeds-export (webocrcludev2/app.bundle.js:26)", "shortDescription": {"text": "Dangling fetch: POST /api/seeds-export (webocrcludev2/app.bundle.js:26)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:26` calls `POST /api/seeds-export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seeds-export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-712457a4ac49e45b", "name": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.bundle.js:26)", "shortDescription": {"text": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.bundle.js:26)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:26` calls `POST /api/open-export-path` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-export-path`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6504e8637e4d406", "name": "Dangling fetch: GET /api/jobs/${t} (webocrcludev2/app.bundle.js:28)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${t} (webocrcludev2/app.bundle.js:28)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:28` calls `GET /api/jobs/${t}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67eb1ecebbe20378", "name": "Dangling fetch: GET /api/jobs/${h.jobId} (webocrcludev2/app.bundle.js:28)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${h.jobId} (webocrcludev2/app.bundle.js:28)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:28` calls `GET /api/jobs/${h.jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c834d68c63ffd81", "name": "Dangling fetch: POST /api/keyword-generate (webocrcludev2/app.bundle.js:28)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-generate (webocrcludev2/app.bundle.js:28)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:28` calls `POST /api/keyword-generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c02cc51a608a6dab", "name": "Dangling fetch: POST /api/category-match/preview (webocrcludev2/app.bundle.js:28)", "shortDescription": {"text": "Dangling fetch: POST /api/category-match/preview (webocrcludev2/app.bundle.js:28)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:28` calls `POST /api/category-match/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-match/preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08da5f0bd711c20c", "name": "Dangling fetch: GET /api/category-match/search?market=${encodeURIComponent(t.target.key)}&q=${encodeURIComponent(s)}&lim", "shortDescription": {"text": "Dangling fetch: GET /api/category-match/search?market=${encodeURIComponent(t.target.key)}&q=${encodeURIComponent(s)}&limit=40 (webocrcludev2/app.bundle.js:28)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:28` calls `GET /api/category-match/search?market=${encodeURIComponent(t.target.key)}&q=${encodeURIComponent(s)}&limit=40` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-match/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0ddd5d1d472d7c8", "name": "Dangling fetch: POST /api/category-match/approve (webocrcludev2/app.bundle.js:28)", "shortDescription": {"text": "Dangling fetch: POST /api/category-match/approve (webocrcludev2/app.bundle.js:28)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:28` calls `POST /api/category-match/approve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-match/approve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df467577578d5b60", "name": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:28)", "shortDescription": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:28)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:28` calls `POST /api/job-stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/job-stop`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9397880e8651ce8", "name": "Dangling fetch: POST /api/seed-update-images (webocrcludev2/app.bundle.js:28)", "shortDescription": {"text": "Dangling fetch: POST /api/seed-update-images (webocrcludev2/app.bundle.js:28)"}, "fullDescription": {"text": "`webocrcludev2/app.bundle.js:28` calls `POST /api/seed-update-images` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seed-update-images`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2a1bf59fb868eb2", "name": "Dangling fetch: POST /api/import-logo (webocrcludev2/components.jsx:2075)", "shortDescription": {"text": "Dangling fetch: POST /api/import-logo (webocrcludev2/components.jsx:2075)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:2075` calls `POST /api/import-logo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/import-logo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a2864a4968fe3bc", "name": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(activeCategoryQuery)}&limit=8 (webocrcludev2/components.", "shortDescription": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(activeCategoryQuery)}&limit=8 (webocrcludev2/components.jsx:2413)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:2413` calls `GET /api/category-bundle?q=${encodeURIComponent(activeCategoryQuery)}&limit=8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-bundle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc0347d23eb1ad90", "name": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(channel.market)}&${categoryParams}&limit=120 (webocrclud", "shortDescription": {"text": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(channel.market)}&${categoryParams}&limit=120 (webocrcludev2/components.jsx:2466)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:2466` calls `GET /api/categories?market=${encodeURIComponent(channel.market)}&${categoryParams}&limit=120` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/categories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb54e42e1266d4fa", "name": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(query)}&limit=8 (webocrcludev2/components.jsx:2760)", "shortDescription": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(query)}&limit=8 (webocrcludev2/components.jsx:2760)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:2760` calls `GET /api/category-bundle?q=${encodeURIComponent(query)}&limit=8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-bundle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2791352ae507b4c9", "name": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/components.jsx:3429)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/components.jsx:3429)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3429` calls `POST /api/market-upload/mark-deleted` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload/mark-deleted`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-426e4656c2cfce63", "name": "Dangling fetch: POST /api/market-upload/delete-products (webocrcludev2/components.jsx:3447)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload/delete-products (webocrcludev2/components.jsx:3447)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3447` calls `POST /api/market-upload/delete-products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload/delete-products`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec150382ef93a8bd", "name": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/components.jsx:3619)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/components.jsx:3619)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3619` calls `GET /api/jobs/${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-813cc7914e61dc01", "name": "Dangling fetch: POST /api/market-upload (webocrcludev2/components.jsx:3706)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload (webocrcludev2/components.jsx:3706)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3706` calls `POST /api/market-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac6305266aa58104", "name": "Dangling fetch: POST /api/job-stop (webocrcludev2/components.jsx:3728)", "shortDescription": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/components.jsx:3728)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3728` calls `POST /api/job-stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/job-stop`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d4fdebccfb84fe8", "name": "Dangling fetch: POST /api/excel-export (webocrcludev2/components.jsx:3749)", "shortDescription": {"text": "Dangling fetch: POST /api/excel-export (webocrcludev2/components.jsx:3749)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3749` calls `POST /api/excel-export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/excel-export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29ce79f1b2304c35", "name": "Dangling fetch: POST /api/open-export-path (webocrcludev2/components.jsx:3822)", "shortDescription": {"text": "Dangling fetch: POST /api/open-export-path (webocrcludev2/components.jsx:3822)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3822` calls `POST /api/open-export-path` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-export-path`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-635a744c0b3acc14", "name": "Dangling fetch: POST /api/emergency-codex-context (webocrcludev2/components.jsx:3840)", "shortDescription": {"text": "Dangling fetch: POST /api/emergency-codex-context (webocrcludev2/components.jsx:3840)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3840` calls `POST /api/emergency-codex-context` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/emergency-codex-context`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83657d7f411ed6df", "name": "Dangling fetch: POST /api/emergency-codex-open (webocrcludev2/components.jsx:3868)", "shortDescription": {"text": "Dangling fetch: POST /api/emergency-codex-open (webocrcludev2/components.jsx:3868)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:3868` calls `POST /api/emergency-codex-open` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/emergency-codex-open`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ff4aaf93f746134", "name": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/components.jsx:4247)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/components.jsx:4247)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4247` calls `GET /api/jobs/${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91afe23e333e0aa1", "name": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/components.jsx:4269)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/components.jsx:4269)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4269` calls `POST /api/market-upload/mark-deleted` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload/mark-deleted`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60256445d9b8d7ef", "name": "Dangling fetch: POST /api/market-upload (webocrcludev2/components.jsx:4298)", "shortDescription": {"text": "Dangling fetch: POST /api/market-upload (webocrcludev2/components.jsx:4298)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4298` calls `POST /api/market-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83e2da43d2ecf24b", "name": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(categoryEditor.channel.market)}&q=${encodeURIComponent(c", "shortDescription": {"text": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(categoryEditor.channel.market)}&q=${encodeURIComponent(categorySearch)}&limit=80 (webocrcludev2/components.jsx:4324)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4324` calls `GET /api/categories?market=${encodeURIComponent(categoryEditor.channel.market)}&q=${encodeURIComponent(categorySearch)}&limit=80` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/categories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6571daf2fe6d00a1", "name": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(query)}&limit=8 (webocrcludev2/components.jsx:4379)", "shortDescription": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(query)}&limit=8 (webocrcludev2/components.jsx:4379)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4379` calls `GET /api/category-bundle?q=${encodeURIComponent(query)}&limit=8` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-bundle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31646529f933fa8c", "name": "Dangling fetch: GET /api/upload-history (webocrcludev2/components.jsx:4683)", "shortDescription": {"text": "Dangling fetch: GET /api/upload-history (webocrcludev2/components.jsx:4683)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4683` calls `GET /api/upload-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e4bf94eacd86525", "name": "Dangling fetch: GET /api/keyword-profile (webocrcludev2/components.jsx:4824)", "shortDescription": {"text": "Dangling fetch: GET /api/keyword-profile (webocrcludev2/components.jsx:4824)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4824` calls `GET /api/keyword-profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8015065a6a0baf9", "name": "Dangling fetch: POST /api/keyword-profile/save (webocrcludev2/components.jsx:4844)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/save (webocrcludev2/components.jsx:4844)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4844` calls `POST /api/keyword-profile/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/save`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95954e23396d25fa", "name": "Dangling fetch: GET /api/keyword-profile/list (webocrcludev2/components.jsx:4865)", "shortDescription": {"text": "Dangling fetch: GET /api/keyword-profile/list (webocrcludev2/components.jsx:4865)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4865` calls `GET /api/keyword-profile/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2784e629a88f110f", "name": "Dangling fetch: POST /api/keyword-profile/save-as (webocrcludev2/components.jsx:4878)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/save-as (webocrcludev2/components.jsx:4878)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4878` calls `POST /api/keyword-profile/save-as` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/save-as`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4cfabbb311dc0f2d", "name": "Dangling fetch: POST /api/keyword-profile/load (webocrcludev2/components.jsx:4897)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/load (webocrcludev2/components.jsx:4897)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4897` calls `POST /api/keyword-profile/load` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/load`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-900ee6b25fe221c4", "name": "Dangling fetch: POST /api/keyword-profile/delete (webocrcludev2/components.jsx:4915)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/delete (webocrcludev2/components.jsx:4915)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4915` calls `POST /api/keyword-profile/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1544180248600586", "name": "Dangling fetch: POST /api/keyword-profile/import (webocrcludev2/components.jsx:4938)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/import (webocrcludev2/components.jsx:4938)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4938` calls `POST /api/keyword-profile/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0967506f006d9c4", "name": "Dangling fetch: POST /api/keyword-profile/codex (webocrcludev2/components.jsx:4957)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/codex (webocrcludev2/components.jsx:4957)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4957` calls `POST /api/keyword-profile/codex` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/codex`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c9a144c1230d6a5", "name": "Dangling fetch: POST /api/keyword-profile/reset (webocrcludev2/components.jsx:4975)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-profile/reset (webocrcludev2/components.jsx:4975)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:4975` calls `POST /api/keyword-profile/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-profile/reset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c1cd0d5c58e42be", "name": "Dangling fetch: POST /api/market-key (webocrcludev2/components.jsx:5007)", "shortDescription": {"text": "Dangling fetch: POST /api/market-key (webocrcludev2/components.jsx:5007)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:5007` calls `POST /api/market-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73a6dd31d181138b", "name": "Dangling fetch: POST /api/market-key-test (webocrcludev2/components.jsx:5019)", "shortDescription": {"text": "Dangling fetch: POST /api/market-key-test (webocrcludev2/components.jsx:5019)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:5019` calls `POST /api/market-key-test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-key-test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff49302061b84159", "name": "Dangling fetch: GET /api/market-keys (webocrcludev2/components.jsx:5057)", "shortDescription": {"text": "Dangling fetch: GET /api/market-keys (webocrcludev2/components.jsx:5057)"}, "fullDescription": {"text": "`webocrcludev2/components.jsx:5057` calls `GET /api/market-keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/market-keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc8bda747d03fd70", "name": "Dangling fetch: GET /api/seed?path=${encodeURIComponent(path)} (webocrcludev2/app.jsx:157)", "shortDescription": {"text": "Dangling fetch: GET /api/seed?path=${encodeURIComponent(path)} (webocrcludev2/app.jsx:157)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:157` calls `GET /api/seed?path=${encodeURIComponent(path)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0b294f44b4c07fb", "name": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.jsx:273)", "shortDescription": {"text": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.jsx:273)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:273` calls `GET /api/pm/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b441b14af62b3e1", "name": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.jsx:275)", "shortDescription": {"text": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.jsx:275)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:275` calls `GET /api/pm/dates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/dates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75b40e67c103875d", "name": "Dangling fetch: POST /api/pm/products (webocrcludev2/app.jsx:296)", "shortDescription": {"text": "Dangling fetch: POST /api/pm/products (webocrcludev2/app.jsx:296)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:296` calls `POST /api/pm/products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/products`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3932612550d74009", "name": "Dangling fetch: POST /api/pm/import (webocrcludev2/app.jsx:321)", "shortDescription": {"text": "Dangling fetch: POST /api/pm/import (webocrcludev2/app.jsx:321)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:321` calls `POST /api/pm/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97501cf03354e78b", "name": "Dangling fetch: POST /api/pm/upload-csv (webocrcludev2/app.jsx:348)", "shortDescription": {"text": "Dangling fetch: POST /api/pm/upload-csv (webocrcludev2/app.jsx:348)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:348` calls `POST /api/pm/upload-csv` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/upload-csv`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c0b59da3e091e92e", "name": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.jsx:578)", "shortDescription": {"text": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.jsx:578)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:578` calls `GET /api/pm/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76d25db043c2fd38", "name": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.jsx:580)", "shortDescription": {"text": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.jsx:580)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:580` calls `GET /api/pm/dates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pm/dates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8dfa112a6e62b9c0", "name": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:597)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:597)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:597` calls `GET /api/jobs/${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ae7a0abaea9d546", "name": "Dangling fetch: GET /api/seeds (webocrcludev2/app.jsx:604)", "shortDescription": {"text": "Dangling fetch: GET /api/seeds (webocrcludev2/app.jsx:604)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:604` calls `GET /api/seeds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seeds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a020a37b9820c68f", "name": "Dangling fetch: POST /api/automation-prepare (webocrcludev2/app.jsx:641)", "shortDescription": {"text": "Dangling fetch: POST /api/automation-prepare (webocrcludev2/app.jsx:641)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:641` calls `POST /api/automation-prepare` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/automation-prepare`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa5bec03f0c50e3a", "name": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.jsx:660)", "shortDescription": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.jsx:660)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:660` calls `POST /api/job-stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/job-stop`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f587f9ac15de92f3", "name": "Dangling fetch: GET /api/seeds (webocrcludev2/app.jsx:868)", "shortDescription": {"text": "Dangling fetch: GET /api/seeds (webocrcludev2/app.jsx:868)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:868` calls `GET /api/seeds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seeds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44d49cc27700ba7a", "name": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.jsx:891)", "shortDescription": {"text": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.jsx:891)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:891` calls `GET /api/upload-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/upload-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34e96c921ac3308a", "name": "Dangling fetch: POST /api/import-source (webocrcludev2/app.jsx:981)", "shortDescription": {"text": "Dangling fetch: POST /api/import-source (webocrcludev2/app.jsx:981)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:981` calls `POST /api/import-source` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/import-source`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea39923a7f53844f", "name": "Dangling fetch: POST /api/workspace-reset (webocrcludev2/app.jsx:1063)", "shortDescription": {"text": "Dangling fetch: POST /api/workspace-reset (webocrcludev2/app.jsx:1063)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1063` calls `POST /api/workspace-reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/workspace-reset`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-131ab9b0e484d4a5", "name": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:1109)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:1109)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1109` calls `GET /api/jobs/${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69d902d800d3681b", "name": "Dangling fetch: POST /api/source-to-seed (webocrcludev2/app.jsx:1186)", "shortDescription": {"text": "Dangling fetch: POST /api/source-to-seed (webocrcludev2/app.jsx:1186)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1186` calls `POST /api/source-to-seed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/source-to-seed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9958abf2c7e5abd", "name": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.jsx:1241)", "shortDescription": {"text": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.jsx:1241)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1241` calls `POST /api/seed-action` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seed-action`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82da1da9c9b16cc9", "name": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.jsx:1267)", "shortDescription": {"text": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.jsx:1267)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1267` calls `POST /api/seed-action` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seed-action`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab4af2d5e29ae09f", "name": "Dangling fetch: POST /api/seeds-export (webocrcludev2/app.jsx:1289)", "shortDescription": {"text": "Dangling fetch: POST /api/seeds-export (webocrcludev2/app.jsx:1289)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1289` calls `POST /api/seeds-export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seeds-export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc5e4b065ef1e0f1", "name": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.jsx:1296)", "shortDescription": {"text": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.jsx:1296)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1296` calls `POST /api/open-export-path` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-export-path`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-688cc6e4072c718f", "name": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:1413)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:1413)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1413` calls `GET /api/jobs/${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4baacddf2a32e1e3", "name": "Dangling fetch: GET /api/jobs/${keywordJob.jobId} (webocrcludev2/app.jsx:1434)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/${keywordJob.jobId} (webocrcludev2/app.jsx:1434)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1434` calls `GET /api/jobs/${keywordJob.jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-266d7a877bace4fe", "name": "Dangling fetch: POST /api/keyword-generate (webocrcludev2/app.jsx:1502)", "shortDescription": {"text": "Dangling fetch: POST /api/keyword-generate (webocrcludev2/app.jsx:1502)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1502` calls `POST /api/keyword-generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/keyword-generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d7b8e867d5a25d6", "name": "Dangling fetch: POST /api/category-match/preview (webocrcludev2/app.jsx:1639)", "shortDescription": {"text": "Dangling fetch: POST /api/category-match/preview (webocrcludev2/app.jsx:1639)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1639` calls `POST /api/category-match/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-match/preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67a433a5392ac0ef", "name": "Dangling fetch: GET /api/category-match/search?market=${encodeURIComponent(panel.target.key)}&q=${encodeURIComponent(que", "shortDescription": {"text": "Dangling fetch: GET /api/category-match/search?market=${encodeURIComponent(panel.target.key)}&q=${encodeURIComponent(query)}&limit=40 (webocrcludev2/app.jsx:1715)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1715` calls `GET /api/category-match/search?market=${encodeURIComponent(panel.target.key)}&q=${encodeURIComponent(query)}&limit=40` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-match/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24fc0a7428b97f46", "name": "Dangling fetch: POST /api/category-match/approve (webocrcludev2/app.jsx:1749)", "shortDescription": {"text": "Dangling fetch: POST /api/category-match/approve (webocrcludev2/app.jsx:1749)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1749` calls `POST /api/category-match/approve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/category-match/approve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82c62209944a0626", "name": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.jsx:1778)", "shortDescription": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.jsx:1778)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:1778` calls `POST /api/job-stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/job-stop`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a1fb52c18d8c879", "name": "Dangling fetch: POST /api/seed-update-images (webocrcludev2/app.jsx:2036)", "shortDescription": {"text": "Dangling fetch: POST /api/seed-update-images (webocrcludev2/app.jsx:2036)"}, "fullDescription": {"text": "`webocrcludev2/app.jsx:2036` calls `POST /api/seed-update-images` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seed-update-images`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-abc804c9b2d9d288", "name": "Dangling fetch: POST /api/history/${batchId}/result-upload (ProductManager/static/js/app.js:662)", "shortDescription": {"text": "Dangling fetch: POST /api/history/${batchId}/result-upload (ProductManager/static/js/app.js:662)"}, "fullDescription": {"text": "`ProductManager/static/js/app.js:662` calls `POST /api/history/${batchId}/result-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/history/<p>/result-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-673a989361fd89a1", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (ProductManager/navertagv2/server.js:854)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (ProductManager/navertagv2/server.js:854)"}, "fullDescription": {"text": "`ProductManager/navertagv2/server.js:854` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c39d9e109d70d768", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (ProductManager/navertagv2/server.js:884)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (ProductManager/navertagv2/server.js:884)"}, "fullDescription": {"text": "`ProductManager/navertagv2/server.js:884` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fdcce2f89bb0f3e2", "name": "Dangling fetch: POST https://api.commerce.naver.com/external/v1/oauth2/token (ProductManager/navertagv2/server.js:1015)", "shortDescription": {"text": "Dangling fetch: POST https://api.commerce.naver.com/external/v1/oauth2/token (ProductManager/navertagv2/server.js:1015)"}, "fullDescription": {"text": "`ProductManager/navertagv2/server.js:1015` calls `POST https://api.commerce.naver.com/external/v1/oauth2/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.commerce.naver.com/external/v1/oauth2/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b418f37c004d1f99", "name": "Dangling fetch: GET https://api.commerce.naver.com${apiPath} (ProductManager/navertagv2/server.js:1028)", "shortDescription": {"text": "Dangling fetch: GET https://api.commerce.naver.com${apiPath} (ProductManager/navertagv2/server.js:1028)"}, "fullDescription": {"text": "`ProductManager/navertagv2/server.js:1028` calls `GET https://api.commerce.naver.com${apiPath}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.commerce.naver.com/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f99c35fd76e8c6bc", "name": "Unused endpoint: ANY /history", "shortDescription": {"text": "Unused endpoint: ANY /history"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /history` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f2ce57a0bee2a15", "name": "Unused endpoint: ANY /results", "shortDescription": {"text": "Unused endpoint: ANY /results"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /results` 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-8877994083ed2902", "name": "Unused endpoint: ANY /dashboard", "shortDescription": {"text": "Unused endpoint: ANY /dashboard"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /dashboard` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91f4aa89ddf9e031", "name": "Unused endpoint: ANY /api/suppliers", "shortDescription": {"text": "Unused endpoint: ANY /api/suppliers"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/suppliers` 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-637497c45c43c212", "name": "Unused endpoint: ANY /api/upload-dates", "shortDescription": {"text": "Unused endpoint: ANY /api/upload-dates"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/upload-dates` 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-52a5a71878590e30", "name": "Unused endpoint: ANY /api/preview", "shortDescription": {"text": "Unused endpoint: ANY /api/preview"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/preview` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-983cb808dd601a7d", "name": "Unused endpoint: ANY /api/download", "shortDescription": {"text": "Unused endpoint: ANY /api/download"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/download` 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-013542711dd8e3a9", "name": "Unused endpoint: ANY /api/download-file/<filename>", "shortDescription": {"text": "Unused endpoint: ANY /api/download-file/<filename>"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/download-file/<filename>` 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-87536038ad543230", "name": "Unused endpoint: ANY /api/history", "shortDescription": {"text": "Unused endpoint: ANY /api/history"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/history` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d76c6fb9dcbbc54", "name": "Unused endpoint: ANY /api/history/<int:batch_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/history/<int:batch_id>"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/history/<int:batch_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7188eb3955f2e52", "name": "Unused endpoint: ANY /api/history/<int:batch_id>/result-upload", "shortDescription": {"text": "Unused endpoint: ANY /api/history/<int:batch_id>/result-upload"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/history/<int:batch_id>/result-upload` 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-e315bed1e5efb565", "name": "Unused endpoint: ANY /api/result-uploads", "shortDescription": {"text": "Unused endpoint: ANY /api/result-uploads"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/result-uploads` 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-f157fa7e037b617f", "name": "Unused endpoint: ANY /api/result-uploads/<int:upload_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/result-uploads/<int:upload_id>"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/result-uploads/<int:upload_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f37f9da1b866d862", "name": "Unused endpoint: ANY /api/result-uploads/<int:upload_id>/download", "shortDescription": {"text": "Unused endpoint: ANY /api/result-uploads/<int:upload_id>/download"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/result-uploads/<int:upload_id>/download` 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-8c862d9fa2ebeee0", "name": "Unused endpoint: ANY /api/history/<int:batch_id>/cancel", "shortDescription": {"text": "Unused endpoint: ANY /api/history/<int:batch_id>/cancel"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/history/<int:batch_id>/cancel` 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-738e55f004014cfe", "name": "Unused endpoint: ANY /api/history/<int:batch_id>/redownload", "shortDescription": {"text": "Unused endpoint: ANY /api/history/<int:batch_id>/redownload"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/history/<int:batch_id>/redownload` 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-662f45cc97d5654a", "name": "Unused endpoint: ANY /api/dashboard", "shortDescription": {"text": "Unused endpoint: ANY /api/dashboard"}, "fullDescription": {"text": "`ProductManager/app.py` declares `ANY /api/dashboard` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18229"}, "properties": {"repository": "rkghrud-dev/webocrv2lacal", "repoUrl": "https://github.com/rkghrud-dev/webocrv2lacal", "branch": "main"}, "results": [{"ruleId": "scanner-4f39a1747a637033", "level": "note", "message": {"text": "Possibly dead Python function: base_product_name_from_product"}, "properties": {"repobilityId": "4ad27960ef106908", "scanner": "scanner-primary", "fingerprint": "4f39a1747a637033", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:924"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c5b69e36461877e1", "level": "note", "message": {"text": "Possibly dead Python function: image_file_sort_key"}, "properties": {"repobilityId": "c188dbf25d834949", "scanner": "scanner-primary", "fingerprint": "c5b69e36461877e1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:2047"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d90581e6c4dd050c", "level": "note", "message": {"text": "Possibly dead Python function: test_cafe24_key"}, "properties": {"repobilityId": "1f7863dbabe4d970", "scanner": "scanner-primary", "fingerprint": "d90581e6c4dd050c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:2460"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d9296264e3e406e", "level": "note", "message": {"text": "Possibly dead Python function: test_elevenst_key"}, "properties": {"repobilityId": "033be6575d2ff427", "scanner": "scanner-primary", "fingerprint": "5d9296264e3e406e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:2488"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aed96770d285a12e", "level": "note", "message": {"text": "Possibly dead Python function: test_naver_key"}, "properties": {"repobilityId": "85531b460734bf77", "scanner": "scanner-primary", "fingerprint": "aed96770d285a12e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:2508"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-443f6d9a7625a14a", "level": "note", "message": {"text": "Possibly dead Python function: test_coupang_key"}, "properties": {"repobilityId": "b7879b4ef1cf08c2", "scanner": "scanner-primary", "fingerprint": "443f6d9a7625a14a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:2543"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0224b3e0b368e219", "level": "note", "message": {"text": "Possibly dead Python function: test_lotteon_key"}, "properties": {"repobilityId": "bb730d6ea8d233c5", "scanner": "scanner-primary", "fingerprint": "0224b3e0b368e219", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:2558"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84789301d761e8a1", "level": "note", "message": {"text": "Possibly dead Python function: run_seed_job"}, "properties": {"repobilityId": "bdd1306c0404e04f", "scanner": "scanner-primary", "fingerprint": "84789301d761e8a1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:5241"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-59f3bddb52140857", "level": "note", "message": {"text": "Possibly dead Python function: run_keyword_job"}, "properties": {"repobilityId": "de64c36b3ea55916", "scanner": "scanner-primary", "fingerprint": "59f3bddb52140857", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:5413"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f0c5c62ef94535d7", "level": "note", "message": {"text": "Possibly dead Python function: read_stdout"}, "properties": {"repobilityId": "afd323c7b28e9207", "scanner": "scanner-primary", "fingerprint": "f0c5c62ef94535d7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:7054"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a5fe347f28e5046b", "level": "note", "message": {"text": "Possibly dead Python function: run_automation_job"}, "properties": {"repobilityId": "f2821e3760c57105", "scanner": "scanner-primary", "fingerprint": "a5fe347f28e5046b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:5768"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e22e3d2fdd243157", "level": "note", "message": {"text": "Possibly dead Python function: run_market_upload_job"}, "properties": {"repobilityId": "d637eca6218368c2", "scanner": "scanner-primary", "fingerprint": "e22e3d2fdd243157", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:7112"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8b9b019b54479f5e", "level": "note", "message": {"text": "Possibly dead Python function: convert_xlsx_to_xls_if_possible"}, "properties": {"repobilityId": "4b0a7b41ff11e677", "scanner": "scanner-primary", "fingerprint": "8b9b019b54479f5e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:8058"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6c5835012a08760d", "level": "note", "message": {"text": "Possibly dead Python function: pm_option_sort_key"}, "properties": {"repobilityId": "e6e41653ccecf10b", "scanner": "scanner-primary", "fingerprint": "6c5835012a08760d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:9391"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c9ed6d76215c036d", "level": "note", "message": {"text": "Possibly dead Python function: pm_select_automation_skus"}, "properties": {"repobilityId": "c60be26b97127167", "scanner": "scanner-primary", "fingerprint": "c9ed6d76215c036d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:9523"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0d0ffd657107db2c", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "0d0ffd657107db2c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:9781"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-646c9674d50de825", "level": "note", "message": {"text": "Possibly dead Python function: do_POST"}, "properties": {"repobilityId": "53357410ca9379a9", "scanner": "scanner-primary", "fingerprint": "646c9674d50de825", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/local_api_server.py:9944"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-643cbbbbf0027225", "level": "note", "message": {"text": "Possibly dead Python function: create_seed_approval_rule"}, "properties": {"repobilityId": "46c5fc9a11872f50", "scanner": "scanner-primary", "fingerprint": "643cbbbbf0027225", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/build_category_matching_db.py:467"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4cbe52523b4fb801", "level": "note", "message": {"text": "Possibly dead Python function: search_categories"}, "properties": {"repobilityId": "51a53a81bcc5aaaf", "scanner": "scanner-primary", "fingerprint": "4cbe52523b4fb801", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/category_matching_db.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4d7fb03cea826cda", "level": "note", "message": {"text": "Possibly dead Python function: approve_mapping"}, "properties": {"repobilityId": "499eec7b29a6a0f5", "scanner": "scanner-primary", "fingerprint": "4d7fb03cea826cda", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/category_matching_db.py:283"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-569066448707f318", "level": "note", "message": {"text": "Possibly dead Python function: extract_gs_code"}, "properties": {"repobilityId": "2ebf3c4101a7f53e", "scanner": "scanner-primary", "fingerprint": "569066448707f318", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/cafe24.py:173"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3713c7b9aa308032", "level": "note", "message": {"text": "Possibly dead Python function: has_disallowed_latin"}, "properties": {"repobilityId": "81508bfb89d81da1", "scanner": "scanner-primary", "fingerprint": "3713c7b9aa308032", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/keyword_utils.py:24"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-166183efa886c90b", "level": "note", "message": {"text": "Possibly dead Python function: run_listing_only"}, "properties": {"repobilityId": "e221ec11cddb10ec", "scanner": "scanner-primary", "fingerprint": "166183efa886c90b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/pipeline.py:5477"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-06ce418cfa462cf3", "level": "note", "message": {"text": "Possibly dead Python function: naver_shopping_titles"}, "properties": {"repobilityId": "9587de1597694ad9", "scanner": "scanner-primary", "fingerprint": "06ce418cfa462cf3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/naver_shopping.py:217"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-51cfa6fc5fb9a327", "level": "note", "message": {"text": "Possibly dead Python function: reorder_kw_tokens"}, "properties": {"repobilityId": "164c57f3e35c6f59", "scanner": "scanner-primary", "fingerprint": "51cfa6fc5fb9a327", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/legacy_core.py:801"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-765a7d60c49312b0", "level": "note", "message": {"text": "Possibly dead Python function: cap_root_repetition"}, "properties": {"repobilityId": "d81f6880d5f14f68", "scanner": "scanner-primary", "fingerprint": "765a7d60c49312b0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/legacy_core.py:905"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-266ad9c5876f25b5", "level": "note", "message": {"text": "Possibly dead Python function: dedup_compound_suffix"}, "properties": {"repobilityId": "f07f415ad4b96384", "scanner": "scanner-primary", "fingerprint": "266ad9c5876f25b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/legacy_core.py:983"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0fb788f3e333b143", "level": "note", "message": {"text": "Possibly dead Python function: generate_r_keywords_gpt5"}, "properties": {"repobilityId": "1a114a47943f5e5b", "scanner": "scanner-primary", "fingerprint": "0fb788f3e333b143", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/legacy_core.py:1580"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4305c65306e0c3ed", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 webocrcludev2/app.bundle.js:4"}, "properties": {"repobilityId": "5d155e485690df8e", "scanner": "scanner-primary", "fingerprint": "4305c65306e0c3ed", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4262332477c54d40", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 webocrcludev2/components.jsx:961"}, "properties": {"repobilityId": "310eda40686c94a6", "scanner": "scanner-primary", "fingerprint": "4262332477c54d40", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d828b853d5ed8cea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ProductManager/navertagv2/server.js:1353"}, "properties": {"repobilityId": "99582f27d049c68f", "scanner": "scanner-primary", "fingerprint": "d828b853d5ed8cea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3361216f6427976", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ProductManager/navertagv2/public/app.js:588"}, "properties": {"repobilityId": "c5b4ff989d3a5eb7", "scanner": "scanner-primary", "fingerprint": "b3361216f6427976", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-a5c53874a7ac6116", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in webocrcludev2/app.bundle.js:4"}, "properties": {"repobilityId": "f80833336a530bad", "scanner": "scanner-primary", "fingerprint": "a5c53874a7ac6116", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/app.bundle.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-bef7172d50959bbc", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in webocrcludev2/components.jsx:961"}, "properties": {"repobilityId": "490728039bd5db07", "scanner": "scanner-primary", "fingerprint": "bef7172d50959bbc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/components.jsx"}, "region": {"startLine": 961}}}]}, {"ruleId": "scanner-736089f4ea819d1a", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in webocrcludev2/build_frontend.py:26"}, "properties": {"repobilityId": "7e803de60abf6af5", "scanner": "scanner-primary", "fingerprint": "736089f4ea819d1a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/build_frontend.py"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-61a77d20867dfa97", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/cleanup_market_duplicates.py:82"}, "properties": {"repobilityId": "e998376ac00ce375", "scanner": "scanner-primary", "fingerprint": "61a77d20867dfa97", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/cleanup_market_duplicates.py"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-1664b5f2b360c2fc", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/sync_coupang_1000_prices_to_naver.py:170"}, "properties": {"repobilityId": "6cf87665abae82b1", "scanner": "scanner-primary", "fingerprint": "1664b5f2b360c2fc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/sync_coupang_1000_prices_to_naver.py"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-8578e89a4d1f574b", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in webocrcludev2/scripts/apply_coupang_instant_discounts_500plus.py:60"}, "properties": {"repobilityId": "1f9c665c792ba247", "scanner": "scanner-primary", "fingerprint": "8578e89a4d1f574b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "webocrcludev2/scripts/apply_coupang_instant_discounts_500plus.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-65e5adadaa9ff944", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/coupang-price-bulk-helper/content.js:81"}, "properties": {"repobilityId": "b2095033405a215f", "scanner": "scanner-primary", "fingerprint": "65e5adadaa9ff944", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/coupang-price-bulk-helper/content.js"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-ad2c661f1843facb", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in ProductManager/app.py:410"}, "properties": {"repobilityId": "19793259013475a4", "scanner": "scanner-primary", "fingerprint": "ad2c661f1843facb", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/app.py"}, "region": {"startLine": 410}}}]}, {"ruleId": "scanner-d25de6941a14dcd3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/static/js/app.js:162"}, "properties": {"repobilityId": "ab728822a513af3d", "scanner": "scanner-primary", "fingerprint": "d25de6941a14dcd3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/static/js/app.js"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-2e6e514250c3da91", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in ProductManager/navertagv2/server.js:6"}, "properties": {"repobilityId": "842044f2d3171d65", "scanner": "scanner-primary", "fingerprint": "2e6e514250c3da91", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/navertagv2/server.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-efc6708b298a96f8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in ProductManager/navertagv2/server.js:251"}, "properties": {"repobilityId": "37cfbd128abf6712", "scanner": "scanner-primary", "fingerprint": "efc6708b298a96f8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/navertagv2/server.js"}, "region": {"startLine": 251}}}]}, {"ruleId": "scanner-6329e54960e5c2da", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/navertagv2/extension/content.js:24"}, "properties": {"repobilityId": "cad9d0a2958c853b", "scanner": "scanner-primary", "fingerprint": "6329e54960e5c2da", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/navertagv2/extension/content.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-08f5652b54f96d42", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ProductManager/navertagv2/public/app.js:219"}, "properties": {"repobilityId": "c0c37821a5925e22", "scanner": "scanner-primary", "fingerprint": "08f5652b54f96d42", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/navertagv2/public/app.js"}, "region": {"startLine": 219}}}]}, {"ruleId": "scanner-713ffecbef20f6cb", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in backend/main_claude_haiku45.py:49"}, "properties": {"repobilityId": "2c4d1c290869d970", "scanner": "scanner-primary", "fingerprint": "713ffecbef20f6cb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main_claude_haiku45.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-35d80569ebc7a6f9", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in backend/app/gui/main_window.py:7562"}, "properties": {"repobilityId": "e55e5b7e1a491517", "scanner": "scanner-primary", "fingerprint": "35d80569ebc7a6f9", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/gui/main_window.py"}, "region": {"startLine": 7562}}}]}, {"ruleId": "scanner-cc2ebe1880b0c558", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in KeywordOcr.App/Bridge/run_pipeline_bridge.py:121"}, "properties": {"repobilityId": "b9a7494a90ee47f1", "scanner": "scanner-primary", "fingerprint": "cc2ebe1880b0c558", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "KeywordOcr.App/Bridge/run_pipeline_bridge.py"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-174ca8e74ef38410", "level": "note", "message": {"text": "Very large file: webocrcludev2/components.jsx (5435 lines)"}, "properties": {"repobilityId": "6e8e360d1b6927e8", "scanner": "scanner-primary", "fingerprint": "174ca8e74ef38410", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ce888d038ec8d59", "level": "note", "message": {"text": "Very large file: webocrcludev2/app.jsx (2467 lines)"}, "properties": {"repobilityId": "c4f24d00e9d0d285", "scanner": "scanner-primary", "fingerprint": "2ce888d038ec8d59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cca27dea8bafefcd", "level": "note", "message": {"text": "Very large file: webocrcludev2/scripts/local_api_server.py (10641 lines)"}, "properties": {"repobilityId": "f356df2e6333cc72", "scanner": "scanner-primary", "fingerprint": "cca27dea8bafefcd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-16f5bd5704c82e78", "level": "note", "message": {"text": "Very large file: ProductManager/navertagv2/server.js (1358 lines)"}, "properties": {"repobilityId": "749d48eb339c1843", "scanner": "scanner-primary", "fingerprint": "16f5bd5704c82e78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-045a244a6540198f", "level": "note", "message": {"text": "Very large file: backend/app/gui/main_window.py (8005 lines)"}, "properties": {"repobilityId": "91932b500a1c5d43", "scanner": "scanner-primary", "fingerprint": "045a244a6540198f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5d655f6803f3557e", "level": "note", "message": {"text": "Very large file: backend/app/services/pipeline.py (5813 lines)"}, "properties": {"repobilityId": "3457e10b2458f2c8", "scanner": "scanner-primary", "fingerprint": "5d655f6803f3557e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c94a82a81644f7fd", "level": "note", "message": {"text": "Very large file: backend/app/services/legacy_core.py (5538 lines)"}, "properties": {"repobilityId": "42a999a99e9ee27b", "scanner": "scanner-primary", "fingerprint": "c94a82a81644f7fd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "87cdd728a901810e", "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": "649cf3fcae84d891", "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": "0dea113647247dbc", "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": "6c7838d114025ded", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "4e0776084d4759d4", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "5aa2b233a6a6b313", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "4a30e15326d17227", "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": "f8fc08c831b69025", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-4fad15119e3597eb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/app.bundle.js:4"}, "properties": {"repobilityId": "0e60c9df2835496c", "scanner": "scanner-primary", "fingerprint": "4fad15119e3597eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e4f004bfba9a1402", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/components.jsx:2466"}, "properties": {"repobilityId": "f39fb81c7c07ba62", "scanner": "scanner-primary", "fingerprint": "e4f004bfba9a1402", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f78daad03ccdb4d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 webocrcludev2/app.jsx:157"}, "properties": {"repobilityId": "ecd51de0fdccea38", "scanner": "scanner-primary", "fingerprint": "2f78daad03ccdb4d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c10c9de3816ddff", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 webocrcludev2/build_frontend.py:24"}, "properties": {"repobilityId": "8220bc92a69a3116", "scanner": "scanner-primary", "fingerprint": "8c10c9de3816ddff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f4828e105c3cfe5", "level": "note", "message": {"text": "Legacy-named symbol `_build_keyword_prompt_legacy` in webocrcludev2/scripts/local_api_server.py:4200"}, "properties": {"repobilityId": "df18659691abd509", "scanner": "scanner-primary", "fingerprint": "8f4828e105c3cfe5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b00786f10fd6b5be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ProductManager/navertagv2/server.js:405"}, "properties": {"repobilityId": "2a82a9c5dbdd733c", "scanner": "scanner-primary", "fingerprint": "b00786f10fd6b5be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ae61c94b630f00b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ProductManager/navertagv2/public/app.js:24"}, "properties": {"repobilityId": "5e37813687fddbdf", "scanner": "scanner-primary", "fingerprint": "4ae61c94b630f00b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-134fe30270d6ea29", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/app/gui/ocr_window.py:309"}, "properties": {"repobilityId": "d425a4c7ed3d8129", "scanner": "scanner-primary", "fingerprint": "134fe30270d6ea29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-66e47a6f96e272b8", "level": "note", "message": {"text": "Legacy-named symbol `use_keyword_v2` in backend/app/services/pipeline.py:1251"}, "properties": {"repobilityId": "51b0ace2cedb0c3b", "scanner": "scanner-primary", "fingerprint": "66e47a6f96e272b8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-739698ccd05058a6", "level": "note", "message": {"text": "Stub function `_noop_status` (body is just `pass`/`return`) \u2014 backend/app/services/free_keyword_analysis/analyzer.py:37"}, "properties": {"repobilityId": "514d57c722a6ccfe", "scanner": "scanner-primary", "fingerprint": "739698ccd05058a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "d986a21729864fb0", "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": "749f04e56372b461", "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": "f54abbb5ab063722", "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": "b7e895db2ce57563", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "0443e08acdda1bc4", "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": "b89bba3221be0797", "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": "14e10fdf7062d0ba", "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": "df4c20534946a0c2", "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": "c81e3962b9fe8ec5", "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": "f529e6d75886a7f5", "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": "86f491edf40d2520", "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": "dcbfec5dd29aeb5d", "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": "b62642d266d515a6", "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": "263103bc1d1c2ea0", "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": "99f4b8cdb3380509", "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": "36415732888c19e0", "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": "432201e08b12b8e6", "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": "b26ccb5c7414f2a3", "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": "61578ec0a54a12be", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-55af422f37f0dd25", "level": "error", "message": {"text": "Flask mutation route `upload_excel` without `@login_required` \u2014 ProductManager/app.py:81"}, "properties": {"repobilityId": "205e9a063aeed385", "scanner": "scanner-primary", "fingerprint": "55af422f37f0dd25", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/app.py"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-ac129427215e24c1", "level": "error", "message": {"text": "Flask mutation route `api_preview` without `@login_required` \u2014 ProductManager/app.py:143"}, "properties": {"repobilityId": "84b3dc5962627fb6", "scanner": "scanner-primary", "fingerprint": "ac129427215e24c1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/app.py"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-82d14b9968a21900", "level": "error", "message": {"text": "Flask mutation route `api_download` without `@login_required` \u2014 ProductManager/app.py:187"}, "properties": {"repobilityId": "c292ab9e523beff2", "scanner": "scanner-primary", "fingerprint": "82d14b9968a21900", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/app.py"}, "region": {"startLine": 187}}}]}, {"ruleId": "scanner-d4cf6be0d133ce24", "level": "error", "message": {"text": "Flask mutation route `api_history_result_upload` without `@login_required` \u2014 ProductManager/app.py:268"}, "properties": {"repobilityId": "b6ec6d27ffce90e7", "scanner": "scanner-primary", "fingerprint": "d4cf6be0d133ce24", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/app.py"}, "region": {"startLine": 268}}}]}, {"ruleId": "scanner-3140b09927004a4e", "level": "error", "message": {"text": "Flask mutation route `api_result_upload_update` without `@login_required` \u2014 ProductManager/app.py:334"}, "properties": {"repobilityId": "7827afdf00eef622", "scanner": "scanner-primary", "fingerprint": "3140b09927004a4e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/app.py"}, "region": {"startLine": 334}}}]}, {"ruleId": "scanner-f6544263c31bcb8d", "level": "error", "message": {"text": "Flask mutation route `api_cancel_listing` without `@login_required` \u2014 ProductManager/app.py:375"}, "properties": {"repobilityId": "3ebf4e3432fb5deb", "scanner": "scanner-primary", "fingerprint": "f6544263c31bcb8d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ProductManager/app.py"}, "region": {"startLine": 375}}}]}, {"ruleId": "scanner-2a70f48929c188b0", "level": "error", "message": {"text": "Dangling fetch: POST /api/import-logo (webocrcludev2/app.bundle.js:4)"}, "properties": {"repobilityId": "8fd7d2641f2eb408", "scanner": "scanner-primary", "fingerprint": "2a70f48929c188b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b8cb7092bd8a628", "level": "error", "message": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(ze)}&limit=8 (webocrcludev2/app.bundle.js:4)"}, "properties": {"repobilityId": "0f82bd13fd74eec7", "scanner": "scanner-primary", "fingerprint": "1b8cb7092bd8a628", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d695e4afd7e32e0", "level": "error", "message": {"text": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(te.market)}&${k}&limit=120 (webocrcludev2/app.bundle.js:4)"}, "properties": {"repobilityId": "6cdfb5d4fd3a55c3", "scanner": "scanner-primary", "fingerprint": "3d695e4afd7e32e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1e74302812315af", "level": "error", "message": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(ve)}&limit=8 (webocrcludev2/app.bundle.js:4)"}, "properties": {"repobilityId": "f0d7747c784ae3d8", "scanner": "scanner-primary", "fingerprint": "e1e74302812315af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe289d597ca0abf8", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/app.bundle.js:5)"}, "properties": {"repobilityId": "34d7aea1d00efba6", "scanner": "scanner-primary", "fingerprint": "fe289d597ca0abf8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82ecc55746027804", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload/delete-products (webocrcludev2/app.bundle.js:5)"}, "properties": {"repobilityId": "2bdf68da2fe718b6", "scanner": "scanner-primary", "fingerprint": "82ecc55746027804", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c419e471c25f573", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${s} (webocrcludev2/app.bundle.js:9)"}, "properties": {"repobilityId": "283a59233eaa5927", "scanner": "scanner-primary", "fingerprint": "5c419e471c25f573", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73e708470aca4b18", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload (webocrcludev2/app.bundle.js:9)"}, "properties": {"repobilityId": "8ce84edeaf47d6c4", "scanner": "scanner-primary", "fingerprint": "73e708470aca4b18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-faee4fa88b9bea6a", "level": "error", "message": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:9)"}, "properties": {"repobilityId": "63aa9369d165e40a", "scanner": "scanner-primary", "fingerprint": "faee4fa88b9bea6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-558adf2b0776e755", "level": "error", "message": {"text": "Dangling fetch: POST /api/excel-export (webocrcludev2/app.bundle.js:9)"}, "properties": {"repobilityId": "d665b0c25d61e148", "scanner": "scanner-primary", "fingerprint": "558adf2b0776e755", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e215985a5c9167ea", "level": "error", "message": {"text": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.bundle.js:10)"}, "properties": {"repobilityId": "c68003a8fdecb9f2", "scanner": "scanner-primary", "fingerprint": "e215985a5c9167ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29376e7029752d63", "level": "error", "message": {"text": "Dangling fetch: POST /api/emergency-codex-context (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "56240051b45139cc", "scanner": "scanner-primary", "fingerprint": "29376e7029752d63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce2013c88b1d550e", "level": "error", "message": {"text": "Dangling fetch: POST /api/emergency-codex-open (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "a403a7b18427c3d6", "scanner": "scanner-primary", "fingerprint": "ce2013c88b1d550e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b2aca80022724dd", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${o} (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "5bfc2d6c7da7adbf", "scanner": "scanner-primary", "fingerprint": "9b2aca80022724dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d920e8ce987a03ce", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "0c01973b16d57a4c", "scanner": "scanner-primary", "fingerprint": "d920e8ce987a03ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c87bdcee0cbacf9", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "3b24251918843f1b", "scanner": "scanner-primary", "fingerprint": "3c87bdcee0cbacf9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-352b0daa245e54d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(p.channel.market)}&q=${encodeURIComponent(x)}&limit=80 (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "a4522e87cd35e60f", "scanner": "scanner-primary", "fingerprint": "352b0daa245e54d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d180ac29c7625947", "level": "error", "message": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(be)}&limit=8 (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "ee9279b5cce09107", "scanner": "scanner-primary", "fingerprint": "d180ac29c7625947", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f520ef8b99bbb325", "level": "error", "message": {"text": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "8d572b618f1f5b47", "scanner": "scanner-primary", "fingerprint": "f520ef8b99bbb325", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e5e7b1226b6a4e4d", "level": "error", "message": {"text": "Dangling fetch: GET /api/keyword-profile (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "4234e445bcab47d5", "scanner": "scanner-primary", "fingerprint": "e5e7b1226b6a4e4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cacb50b50e3a6a8d", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/save (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "86133653f518f87f", "scanner": "scanner-primary", "fingerprint": "cacb50b50e3a6a8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e297e0f33e95c0a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/keyword-profile/list (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "8a96d97de92c7f78", "scanner": "scanner-primary", "fingerprint": "e297e0f33e95c0a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b091a1a4fb4c6af", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/save-as (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "67eb97f40733d298", "scanner": "scanner-primary", "fingerprint": "8b091a1a4fb4c6af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d5e5f456e1a070d", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/load (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "9674cd367e2b7e5e", "scanner": "scanner-primary", "fingerprint": "4d5e5f456e1a070d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d76923da7c9201c3", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/delete (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "3e708ee1a20ac815", "scanner": "scanner-primary", "fingerprint": "d76923da7c9201c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0612c39999cafdba", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/import (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "a624ffccbb41ae1e", "scanner": "scanner-primary", "fingerprint": "0612c39999cafdba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62e7c5f2ecc43d9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/codex (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "233f24efce4fdd22", "scanner": "scanner-primary", "fingerprint": "62e7c5f2ecc43d9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9d947a8cfa48992", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/reset (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "ed53e3164c29d857", "scanner": "scanner-primary", "fingerprint": "e9d947a8cfa48992", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e4de84c4c3bd88b", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-key (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "56763db324ee97ff", "scanner": "scanner-primary", "fingerprint": "0e4de84c4c3bd88b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efa63a80c4e11403", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-key-test (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "fa184b040a514982", "scanner": "scanner-primary", "fingerprint": "efa63a80c4e11403", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-56e661f73d222c6a", "level": "error", "message": {"text": "Dangling fetch: GET /api/market-keys (webocrcludev2/app.bundle.js:11)"}, "properties": {"repobilityId": "c8e7cd65fd0b2ee2", "scanner": "scanner-primary", "fingerprint": "56e661f73d222c6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0210f3be84a89445", "level": "error", "message": {"text": "Dangling fetch: GET /api/seed?path=${encodeURIComponent(i)} (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "61c0993a5b24f040", "scanner": "scanner-primary", "fingerprint": "0210f3be84a89445", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8bc24f7a7b12b44f", "level": "error", "message": {"text": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "824b41bd8751e3d3", "scanner": "scanner-primary", "fingerprint": "8bc24f7a7b12b44f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a2532998f93ec4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "0a44d5324fba9cdc", "scanner": "scanner-primary", "fingerprint": "5a2532998f93ec4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecd63b2634c932cf", "level": "error", "message": {"text": "Dangling fetch: POST /api/pm/products (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "1741ad8e08e009dc", "scanner": "scanner-primary", "fingerprint": "ecd63b2634c932cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11ec6c5dd3b65add", "level": "error", "message": {"text": "Dangling fetch: POST /api/pm/import (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "08500fa467d04168", "scanner": "scanner-primary", "fingerprint": "11ec6c5dd3b65add", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94cae37dbb4c9301", "level": "error", "message": {"text": "Dangling fetch: POST /api/pm/upload-csv (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "05e17dcbc198bab1", "scanner": "scanner-primary", "fingerprint": "94cae37dbb4c9301", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8bc24f7a7b12b44f", "level": "error", "message": {"text": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "824b41bd8751e3d3", "scanner": "scanner-primary", "fingerprint": "8bc24f7a7b12b44f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a2532998f93ec4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "0a44d5324fba9cdc", "scanner": "scanner-primary", "fingerprint": "5a2532998f93ec4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4cc967451832563", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${u} (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "1fa46885b8964337", "scanner": "scanner-primary", "fingerprint": "e4cc967451832563", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fb78105b0f708bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/seeds (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "3f862a6871a791f7", "scanner": "scanner-primary", "fingerprint": "7fb78105b0f708bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3e72b4dcfdae0dc", "level": "error", "message": {"text": "Dangling fetch: POST /api/automation-prepare (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "da055c82e8d22ebd", "scanner": "scanner-primary", "fingerprint": "d3e72b4dcfdae0dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17d774396563b400", "level": "error", "message": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "aed273df0f0d1c34", "scanner": "scanner-primary", "fingerprint": "17d774396563b400", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fb78105b0f708bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/seeds (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "3f862a6871a791f7", "scanner": "scanner-primary", "fingerprint": "7fb78105b0f708bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6f1e547ce15c470", "level": "error", "message": {"text": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "0ebfdf9d50bd4feb", "scanner": "scanner-primary", "fingerprint": "d6f1e547ce15c470", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a549c2aba7e1bd5", "level": "error", "message": {"text": "Dangling fetch: POST /api/import-source (webocrcludev2/app.bundle.js:23)"}, "properties": {"repobilityId": "760eec4c948c8f3b", "scanner": "scanner-primary", "fingerprint": "1a549c2aba7e1bd5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13434816fd3e7c85", "level": "error", "message": {"text": "Dangling fetch: POST /api/workspace-reset (webocrcludev2/app.bundle.js:24)"}, "properties": {"repobilityId": "281c79ac9de87d44", "scanner": "scanner-primary", "fingerprint": "13434816fd3e7c85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82b8df2b304f0be3", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${t} (webocrcludev2/app.bundle.js:24)"}, "properties": {"repobilityId": "772f3a33c8b36458", "scanner": "scanner-primary", "fingerprint": "82b8df2b304f0be3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-205681283acef2e8", "level": "error", "message": {"text": "Dangling fetch: POST /api/source-to-seed (webocrcludev2/app.bundle.js:24)"}, "properties": {"repobilityId": "924770804be2d827", "scanner": "scanner-primary", "fingerprint": "205681283acef2e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5dbbc58d65578033", "level": "error", "message": {"text": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.bundle.js:26)"}, "properties": {"repobilityId": "915c00afcb593ecc", "scanner": "scanner-primary", "fingerprint": "5dbbc58d65578033", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5dbbc58d65578033", "level": "error", "message": {"text": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.bundle.js:26)"}, "properties": {"repobilityId": "915c00afcb593ecc", "scanner": "scanner-primary", "fingerprint": "5dbbc58d65578033", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f75bccf12e7ef7d", "level": "error", "message": {"text": "Dangling fetch: POST /api/seeds-export (webocrcludev2/app.bundle.js:26)"}, "properties": {"repobilityId": "7efae6778dd12cf4", "scanner": "scanner-primary", "fingerprint": "1f75bccf12e7ef7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-712457a4ac49e45b", "level": "error", "message": {"text": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.bundle.js:26)"}, "properties": {"repobilityId": "4f8a8dc8da74c985", "scanner": "scanner-primary", "fingerprint": "712457a4ac49e45b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6504e8637e4d406", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${t} (webocrcludev2/app.bundle.js:28)"}, "properties": {"repobilityId": "0ba73f27768d4031", "scanner": "scanner-primary", "fingerprint": "b6504e8637e4d406", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67eb1ecebbe20378", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${h.jobId} (webocrcludev2/app.bundle.js:28)"}, "properties": {"repobilityId": "395e81484aaa0b83", "scanner": "scanner-primary", "fingerprint": "67eb1ecebbe20378", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c834d68c63ffd81", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-generate (webocrcludev2/app.bundle.js:28)"}, "properties": {"repobilityId": "a827151277bd5570", "scanner": "scanner-primary", "fingerprint": "1c834d68c63ffd81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c02cc51a608a6dab", "level": "error", "message": {"text": "Dangling fetch: POST /api/category-match/preview (webocrcludev2/app.bundle.js:28)"}, "properties": {"repobilityId": "142f5d3a7d8e64a1", "scanner": "scanner-primary", "fingerprint": "c02cc51a608a6dab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08da5f0bd711c20c", "level": "error", "message": {"text": "Dangling fetch: GET /api/category-match/search?market=${encodeURIComponent(t.target.key)}&q=${encodeURIComponent(s)}&limit=40 (webocrcludev2/app.bundle.js:28)"}, "properties": {"repobilityId": "1c0b10bce1c21832", "scanner": "scanner-primary", "fingerprint": "08da5f0bd711c20c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0ddd5d1d472d7c8", "level": "error", "message": {"text": "Dangling fetch: POST /api/category-match/approve (webocrcludev2/app.bundle.js:28)"}, "properties": {"repobilityId": "2fe58bd752e14f87", "scanner": "scanner-primary", "fingerprint": "d0ddd5d1d472d7c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df467577578d5b60", "level": "error", "message": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.bundle.js:28)"}, "properties": {"repobilityId": "a21a7e6640f14438", "scanner": "scanner-primary", "fingerprint": "df467577578d5b60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9397880e8651ce8", "level": "error", "message": {"text": "Dangling fetch: POST /api/seed-update-images (webocrcludev2/app.bundle.js:28)"}, "properties": {"repobilityId": "f63386e53f77c587", "scanner": "scanner-primary", "fingerprint": "f9397880e8651ce8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2a1bf59fb868eb2", "level": "error", "message": {"text": "Dangling fetch: POST /api/import-logo (webocrcludev2/components.jsx:2075)"}, "properties": {"repobilityId": "40ff8f22a00aa391", "scanner": "scanner-primary", "fingerprint": "a2a1bf59fb868eb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a2864a4968fe3bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(activeCategoryQuery)}&limit=8 (webocrcludev2/components.jsx:2413)"}, "properties": {"repobilityId": "426c7e354a2a8432", "scanner": "scanner-primary", "fingerprint": "5a2864a4968fe3bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc0347d23eb1ad90", "level": "error", "message": {"text": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(channel.market)}&${categoryParams}&limit=120 (webocrcludev2/components.jsx:2466)"}, "properties": {"repobilityId": "48b8764bfd8d100f", "scanner": "scanner-primary", "fingerprint": "cc0347d23eb1ad90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb54e42e1266d4fa", "level": "error", "message": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(query)}&limit=8 (webocrcludev2/components.jsx:2760)"}, "properties": {"repobilityId": "c13d5282cf936349", "scanner": "scanner-primary", "fingerprint": "fb54e42e1266d4fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2791352ae507b4c9", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/components.jsx:3429)"}, "properties": {"repobilityId": "c353e393e4dc07eb", "scanner": "scanner-primary", "fingerprint": "2791352ae507b4c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-426e4656c2cfce63", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload/delete-products (webocrcludev2/components.jsx:3447)"}, "properties": {"repobilityId": "fcd2d41af7b08f9b", "scanner": "scanner-primary", "fingerprint": "426e4656c2cfce63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec150382ef93a8bd", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/components.jsx:3619)"}, "properties": {"repobilityId": "b782a46a2b6dd987", "scanner": "scanner-primary", "fingerprint": "ec150382ef93a8bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-813cc7914e61dc01", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload (webocrcludev2/components.jsx:3706)"}, "properties": {"repobilityId": "0c63dfe8b2455714", "scanner": "scanner-primary", "fingerprint": "813cc7914e61dc01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac6305266aa58104", "level": "error", "message": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/components.jsx:3728)"}, "properties": {"repobilityId": "f2dd2849c5c2ab14", "scanner": "scanner-primary", "fingerprint": "ac6305266aa58104", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d4fdebccfb84fe8", "level": "error", "message": {"text": "Dangling fetch: POST /api/excel-export (webocrcludev2/components.jsx:3749)"}, "properties": {"repobilityId": "378fcf60b673fb70", "scanner": "scanner-primary", "fingerprint": "2d4fdebccfb84fe8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29ce79f1b2304c35", "level": "error", "message": {"text": "Dangling fetch: POST /api/open-export-path (webocrcludev2/components.jsx:3822)"}, "properties": {"repobilityId": "d521f38f1b252569", "scanner": "scanner-primary", "fingerprint": "29ce79f1b2304c35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-635a744c0b3acc14", "level": "error", "message": {"text": "Dangling fetch: POST /api/emergency-codex-context (webocrcludev2/components.jsx:3840)"}, "properties": {"repobilityId": "819972c8e2c4cf8f", "scanner": "scanner-primary", "fingerprint": "635a744c0b3acc14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83657d7f411ed6df", "level": "error", "message": {"text": "Dangling fetch: POST /api/emergency-codex-open (webocrcludev2/components.jsx:3868)"}, "properties": {"repobilityId": "06725cbf36064951", "scanner": "scanner-primary", "fingerprint": "83657d7f411ed6df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ff4aaf93f746134", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/components.jsx:4247)"}, "properties": {"repobilityId": "ccff116320d542c3", "scanner": "scanner-primary", "fingerprint": "6ff4aaf93f746134", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-91afe23e333e0aa1", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload/mark-deleted (webocrcludev2/components.jsx:4269)"}, "properties": {"repobilityId": "43bbc96189be6f09", "scanner": "scanner-primary", "fingerprint": "91afe23e333e0aa1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60256445d9b8d7ef", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-upload (webocrcludev2/components.jsx:4298)"}, "properties": {"repobilityId": "54adf7b07b95dca3", "scanner": "scanner-primary", "fingerprint": "60256445d9b8d7ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83e2da43d2ecf24b", "level": "error", "message": {"text": "Dangling fetch: GET /api/categories?market=${encodeURIComponent(categoryEditor.channel.market)}&q=${encodeURIComponent(categorySearch)}&limit=80 (webocrcludev2/components.jsx:4324)"}, "properties": {"repobilityId": "037fd057310476c0", "scanner": "scanner-primary", "fingerprint": "83e2da43d2ecf24b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6571daf2fe6d00a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/category-bundle?q=${encodeURIComponent(query)}&limit=8 (webocrcludev2/components.jsx:4379)"}, "properties": {"repobilityId": "04b658158bc05e82", "scanner": "scanner-primary", "fingerprint": "6571daf2fe6d00a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31646529f933fa8c", "level": "error", "message": {"text": "Dangling fetch: GET /api/upload-history (webocrcludev2/components.jsx:4683)"}, "properties": {"repobilityId": "5176dc3772d7e76c", "scanner": "scanner-primary", "fingerprint": "31646529f933fa8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e4bf94eacd86525", "level": "error", "message": {"text": "Dangling fetch: GET /api/keyword-profile (webocrcludev2/components.jsx:4824)"}, "properties": {"repobilityId": "9939a8a1025841d8", "scanner": "scanner-primary", "fingerprint": "5e4bf94eacd86525", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a8015065a6a0baf9", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/save (webocrcludev2/components.jsx:4844)"}, "properties": {"repobilityId": "dcdd8309a0529fd1", "scanner": "scanner-primary", "fingerprint": "a8015065a6a0baf9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95954e23396d25fa", "level": "error", "message": {"text": "Dangling fetch: GET /api/keyword-profile/list (webocrcludev2/components.jsx:4865)"}, "properties": {"repobilityId": "951ada5dd7b6044a", "scanner": "scanner-primary", "fingerprint": "95954e23396d25fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2784e629a88f110f", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/save-as (webocrcludev2/components.jsx:4878)"}, "properties": {"repobilityId": "90ef962ef4be8d36", "scanner": "scanner-primary", "fingerprint": "2784e629a88f110f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4cfabbb311dc0f2d", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/load (webocrcludev2/components.jsx:4897)"}, "properties": {"repobilityId": "00c904ed03c4f258", "scanner": "scanner-primary", "fingerprint": "4cfabbb311dc0f2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-900ee6b25fe221c4", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/delete (webocrcludev2/components.jsx:4915)"}, "properties": {"repobilityId": "121c61c5059cc6f7", "scanner": "scanner-primary", "fingerprint": "900ee6b25fe221c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1544180248600586", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/import (webocrcludev2/components.jsx:4938)"}, "properties": {"repobilityId": "246a7ed5413ebf18", "scanner": "scanner-primary", "fingerprint": "1544180248600586", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0967506f006d9c4", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/codex (webocrcludev2/components.jsx:4957)"}, "properties": {"repobilityId": "d2b480a4fa094323", "scanner": "scanner-primary", "fingerprint": "a0967506f006d9c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c9a144c1230d6a5", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-profile/reset (webocrcludev2/components.jsx:4975)"}, "properties": {"repobilityId": "6bc14f08d23a8b70", "scanner": "scanner-primary", "fingerprint": "8c9a144c1230d6a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c1cd0d5c58e42be", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-key (webocrcludev2/components.jsx:5007)"}, "properties": {"repobilityId": "cdcdcc5991012b2c", "scanner": "scanner-primary", "fingerprint": "8c1cd0d5c58e42be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73a6dd31d181138b", "level": "error", "message": {"text": "Dangling fetch: POST /api/market-key-test (webocrcludev2/components.jsx:5019)"}, "properties": {"repobilityId": "965ff2c10950f887", "scanner": "scanner-primary", "fingerprint": "73a6dd31d181138b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff49302061b84159", "level": "error", "message": {"text": "Dangling fetch: GET /api/market-keys (webocrcludev2/components.jsx:5057)"}, "properties": {"repobilityId": "f24778238adb2f2a", "scanner": "scanner-primary", "fingerprint": "ff49302061b84159", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc8bda747d03fd70", "level": "error", "message": {"text": "Dangling fetch: GET /api/seed?path=${encodeURIComponent(path)} (webocrcludev2/app.jsx:157)"}, "properties": {"repobilityId": "b30a8ad6be4f38d4", "scanner": "scanner-primary", "fingerprint": "fc8bda747d03fd70", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0b294f44b4c07fb", "level": "error", "message": {"text": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.jsx:273)"}, "properties": {"repobilityId": "c292bb454b5193b8", "scanner": "scanner-primary", "fingerprint": "e0b294f44b4c07fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b441b14af62b3e1", "level": "error", "message": {"text": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.jsx:275)"}, "properties": {"repobilityId": "5ffbcb2de4fc5914", "scanner": "scanner-primary", "fingerprint": "8b441b14af62b3e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75b40e67c103875d", "level": "error", "message": {"text": "Dangling fetch: POST /api/pm/products (webocrcludev2/app.jsx:296)"}, "properties": {"repobilityId": "fe4d7bd6d03fab71", "scanner": "scanner-primary", "fingerprint": "75b40e67c103875d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3932612550d74009", "level": "error", "message": {"text": "Dangling fetch: POST /api/pm/import (webocrcludev2/app.jsx:321)"}, "properties": {"repobilityId": "8eb56e450dd4e998", "scanner": "scanner-primary", "fingerprint": "3932612550d74009", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97501cf03354e78b", "level": "error", "message": {"text": "Dangling fetch: POST /api/pm/upload-csv (webocrcludev2/app.jsx:348)"}, "properties": {"repobilityId": "7d4cbb77d082858a", "scanner": "scanner-primary", "fingerprint": "97501cf03354e78b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c0b59da3e091e92e", "level": "error", "message": {"text": "Dangling fetch: GET /api/pm/status (webocrcludev2/app.jsx:578)"}, "properties": {"repobilityId": "e3511da4f71735db", "scanner": "scanner-primary", "fingerprint": "c0b59da3e091e92e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76d25db043c2fd38", "level": "error", "message": {"text": "Dangling fetch: GET /api/pm/dates (webocrcludev2/app.jsx:580)"}, "properties": {"repobilityId": "e256c608b307927b", "scanner": "scanner-primary", "fingerprint": "76d25db043c2fd38", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8dfa112a6e62b9c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:597)"}, "properties": {"repobilityId": "c20014be23cbf244", "scanner": "scanner-primary", "fingerprint": "8dfa112a6e62b9c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ae7a0abaea9d546", "level": "error", "message": {"text": "Dangling fetch: GET /api/seeds (webocrcludev2/app.jsx:604)"}, "properties": {"repobilityId": "dce683a092187c52", "scanner": "scanner-primary", "fingerprint": "3ae7a0abaea9d546", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a020a37b9820c68f", "level": "error", "message": {"text": "Dangling fetch: POST /api/automation-prepare (webocrcludev2/app.jsx:641)"}, "properties": {"repobilityId": "e7db72e7257a3d02", "scanner": "scanner-primary", "fingerprint": "a020a37b9820c68f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa5bec03f0c50e3a", "level": "error", "message": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.jsx:660)"}, "properties": {"repobilityId": "5dacc472dba80e0c", "scanner": "scanner-primary", "fingerprint": "fa5bec03f0c50e3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f587f9ac15de92f3", "level": "error", "message": {"text": "Dangling fetch: GET /api/seeds (webocrcludev2/app.jsx:868)"}, "properties": {"repobilityId": "748d290782909ba0", "scanner": "scanner-primary", "fingerprint": "f587f9ac15de92f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44d49cc27700ba7a", "level": "error", "message": {"text": "Dangling fetch: GET /api/upload-history (webocrcludev2/app.jsx:891)"}, "properties": {"repobilityId": "be532457e7da6742", "scanner": "scanner-primary", "fingerprint": "44d49cc27700ba7a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34e96c921ac3308a", "level": "error", "message": {"text": "Dangling fetch: POST /api/import-source (webocrcludev2/app.jsx:981)"}, "properties": {"repobilityId": "d035cd993947bfa8", "scanner": "scanner-primary", "fingerprint": "34e96c921ac3308a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea39923a7f53844f", "level": "error", "message": {"text": "Dangling fetch: POST /api/workspace-reset (webocrcludev2/app.jsx:1063)"}, "properties": {"repobilityId": "a18c4293224d080f", "scanner": "scanner-primary", "fingerprint": "ea39923a7f53844f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-131ab9b0e484d4a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:1109)"}, "properties": {"repobilityId": "add8a4835814dd87", "scanner": "scanner-primary", "fingerprint": "131ab9b0e484d4a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69d902d800d3681b", "level": "error", "message": {"text": "Dangling fetch: POST /api/source-to-seed (webocrcludev2/app.jsx:1186)"}, "properties": {"repobilityId": "e227fd596c92033d", "scanner": "scanner-primary", "fingerprint": "69d902d800d3681b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9958abf2c7e5abd", "level": "error", "message": {"text": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.jsx:1241)"}, "properties": {"repobilityId": "d2ab7998918a1a91", "scanner": "scanner-primary", "fingerprint": "d9958abf2c7e5abd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82da1da9c9b16cc9", "level": "error", "message": {"text": "Dangling fetch: POST /api/seed-action (webocrcludev2/app.jsx:1267)"}, "properties": {"repobilityId": "76820754d8a4d99f", "scanner": "scanner-primary", "fingerprint": "82da1da9c9b16cc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab4af2d5e29ae09f", "level": "error", "message": {"text": "Dangling fetch: POST /api/seeds-export (webocrcludev2/app.jsx:1289)"}, "properties": {"repobilityId": "e1a54d5161c62f9c", "scanner": "scanner-primary", "fingerprint": "ab4af2d5e29ae09f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc5e4b065ef1e0f1", "level": "error", "message": {"text": "Dangling fetch: POST /api/open-export-path (webocrcludev2/app.jsx:1296)"}, "properties": {"repobilityId": "437ba0f168b5590e", "scanner": "scanner-primary", "fingerprint": "fc5e4b065ef1e0f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-688cc6e4072c718f", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${jobId} (webocrcludev2/app.jsx:1413)"}, "properties": {"repobilityId": "e9c83d912eca7d65", "scanner": "scanner-primary", "fingerprint": "688cc6e4072c718f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4baacddf2a32e1e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/${keywordJob.jobId} (webocrcludev2/app.jsx:1434)"}, "properties": {"repobilityId": "7dfb89913fa37361", "scanner": "scanner-primary", "fingerprint": "4baacddf2a32e1e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-266d7a877bace4fe", "level": "error", "message": {"text": "Dangling fetch: POST /api/keyword-generate (webocrcludev2/app.jsx:1502)"}, "properties": {"repobilityId": "1ebb7532fc600775", "scanner": "scanner-primary", "fingerprint": "266d7a877bace4fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d7b8e867d5a25d6", "level": "error", "message": {"text": "Dangling fetch: POST /api/category-match/preview (webocrcludev2/app.jsx:1639)"}, "properties": {"repobilityId": "a441f17b0f121298", "scanner": "scanner-primary", "fingerprint": "2d7b8e867d5a25d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67a433a5392ac0ef", "level": "error", "message": {"text": "Dangling fetch: GET /api/category-match/search?market=${encodeURIComponent(panel.target.key)}&q=${encodeURIComponent(query)}&limit=40 (webocrcludev2/app.jsx:1715)"}, "properties": {"repobilityId": "d7e05c6a6dc37b2e", "scanner": "scanner-primary", "fingerprint": "67a433a5392ac0ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24fc0a7428b97f46", "level": "error", "message": {"text": "Dangling fetch: POST /api/category-match/approve (webocrcludev2/app.jsx:1749)"}, "properties": {"repobilityId": "80866f50116585b4", "scanner": "scanner-primary", "fingerprint": "24fc0a7428b97f46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82c62209944a0626", "level": "error", "message": {"text": "Dangling fetch: POST /api/job-stop (webocrcludev2/app.jsx:1778)"}, "properties": {"repobilityId": "4181eb0025df18fa", "scanner": "scanner-primary", "fingerprint": "82c62209944a0626", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a1fb52c18d8c879", "level": "error", "message": {"text": "Dangling fetch: POST /api/seed-update-images (webocrcludev2/app.jsx:2036)"}, "properties": {"repobilityId": "380b261f19ceabb5", "scanner": "scanner-primary", "fingerprint": "0a1fb52c18d8c879", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abc804c9b2d9d288", "level": "error", "message": {"text": "Dangling fetch: POST /api/history/${batchId}/result-upload (ProductManager/static/js/app.js:662)"}, "properties": {"repobilityId": "5a2d4bae1789912c", "scanner": "scanner-primary", "fingerprint": "abc804c9b2d9d288", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-673a989361fd89a1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (ProductManager/navertagv2/server.js:854)"}, "properties": {"repobilityId": "209ae2d59e78fb8d", "scanner": "scanner-primary", "fingerprint": "673a989361fd89a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c39d9e109d70d768", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (ProductManager/navertagv2/server.js:884)"}, "properties": {"repobilityId": "6caf868ffec062cb", "scanner": "scanner-primary", "fingerprint": "c39d9e109d70d768", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fdcce2f89bb0f3e2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.commerce.naver.com/external/v1/oauth2/token (ProductManager/navertagv2/server.js:1015)"}, "properties": {"repobilityId": "6b522ef6a72399a9", "scanner": "scanner-primary", "fingerprint": "fdcce2f89bb0f3e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b418f37c004d1f99", "level": "error", "message": {"text": "Dangling fetch: GET https://api.commerce.naver.com${apiPath} (ProductManager/navertagv2/server.js:1028)"}, "properties": {"repobilityId": "732d954f77fc2fdf", "scanner": "scanner-primary", "fingerprint": "b418f37c004d1f99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "e5a5d1af7eb3dde1", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f99c35fd76e8c6bc", "level": "note", "message": {"text": "Unused endpoint: ANY /history"}, "properties": {"repobilityId": "f70fd5f0786ccd59", "scanner": "scanner-primary", "fingerprint": "f99c35fd76e8c6bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8f2ce57a0bee2a15", "level": "note", "message": {"text": "Unused endpoint: ANY /results"}, "properties": {"repobilityId": "3ecbe59d88ca35a7", "scanner": "scanner-primary", "fingerprint": "8f2ce57a0bee2a15", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8877994083ed2902", "level": "note", "message": {"text": "Unused endpoint: ANY /dashboard"}, "properties": {"repobilityId": "a743b20336618ea0", "scanner": "scanner-primary", "fingerprint": "8877994083ed2902", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-91f4aa89ddf9e031", "level": "note", "message": {"text": "Unused endpoint: ANY /api/suppliers"}, "properties": {"repobilityId": "78fe7ca958223d52", "scanner": "scanner-primary", "fingerprint": "91f4aa89ddf9e031", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-637497c45c43c212", "level": "note", "message": {"text": "Unused endpoint: ANY /api/upload-dates"}, "properties": {"repobilityId": "8a43a56bdda86789", "scanner": "scanner-primary", "fingerprint": "637497c45c43c212", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-52a5a71878590e30", "level": "note", "message": {"text": "Unused endpoint: ANY /api/preview"}, "properties": {"repobilityId": "a5d62298aee6169b", "scanner": "scanner-primary", "fingerprint": "52a5a71878590e30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-983cb808dd601a7d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/download"}, "properties": {"repobilityId": "c74734b73d921bcc", "scanner": "scanner-primary", "fingerprint": "983cb808dd601a7d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-013542711dd8e3a9", "level": "note", "message": {"text": "Unused endpoint: ANY /api/download-file/<filename>"}, "properties": {"repobilityId": "6952fd0a7cc70863", "scanner": "scanner-primary", "fingerprint": "013542711dd8e3a9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87536038ad543230", "level": "note", "message": {"text": "Unused endpoint: ANY /api/history"}, "properties": {"repobilityId": "1c1a9421e20ed26e", "scanner": "scanner-primary", "fingerprint": "87536038ad543230", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d76c6fb9dcbbc54", "level": "note", "message": {"text": "Unused endpoint: ANY /api/history/<int:batch_id>"}, "properties": {"repobilityId": "153eb74b6f6fe168", "scanner": "scanner-primary", "fingerprint": "0d76c6fb9dcbbc54", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7188eb3955f2e52", "level": "note", "message": {"text": "Unused endpoint: ANY /api/history/<int:batch_id>/result-upload"}, "properties": {"repobilityId": "ed2a79e1a56208b7", "scanner": "scanner-primary", "fingerprint": "d7188eb3955f2e52", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e315bed1e5efb565", "level": "note", "message": {"text": "Unused endpoint: ANY /api/result-uploads"}, "properties": {"repobilityId": "09cc04242309cbdd", "scanner": "scanner-primary", "fingerprint": "e315bed1e5efb565", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f157fa7e037b617f", "level": "note", "message": {"text": "Unused endpoint: ANY /api/result-uploads/<int:upload_id>"}, "properties": {"repobilityId": "d00d2046bfe25fb3", "scanner": "scanner-primary", "fingerprint": "f157fa7e037b617f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f37f9da1b866d862", "level": "note", "message": {"text": "Unused endpoint: ANY /api/result-uploads/<int:upload_id>/download"}, "properties": {"repobilityId": "a16404aa61eb491a", "scanner": "scanner-primary", "fingerprint": "f37f9da1b866d862", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8c862d9fa2ebeee0", "level": "note", "message": {"text": "Unused endpoint: ANY /api/history/<int:batch_id>/cancel"}, "properties": {"repobilityId": "b32809a049a8302f", "scanner": "scanner-primary", "fingerprint": "8c862d9fa2ebeee0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-738e55f004014cfe", "level": "note", "message": {"text": "Unused endpoint: ANY /api/history/<int:batch_id>/redownload"}, "properties": {"repobilityId": "3e96d9a8384b3dcc", "scanner": "scanner-primary", "fingerprint": "738e55f004014cfe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-662f45cc97d5654a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/dashboard"}, "properties": {"repobilityId": "bb3e26e468f1aa12", "scanner": "scanner-primary", "fingerprint": "662f45cc97d5654a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}