{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: Rayda0114/leadfu-ai", "shortDescription": {"text": "Foundry mined unresolved feedback: Rayda0114/leadfu-ai"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Rayda0114/leadfu-ai#1\nRepo: Rayda0114/leadfu-ai\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment': 3, 'comment_chain': 3, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_o"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: Rayda0114/leadfu-ai", "shortDescription": {"text": "Foundry mined blueprint gap alignment: Rayda0114/leadfu-ai"}, "fullDescription": {"text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Rayda0114/leadfu-ai#1\nRepo: Rayda0114/leadfu-ai\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment': 3, 'comment_chain': 3, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'f"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: Rayda0114/leadfu-ai", "shortDescription": {"text": "Foundry mined test ci gap after feedback: Rayda0114/leadfu-ai"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: assumption_check\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Rayda0114/leadfu-ai#1\nRepo: Rayda0114/leadfu-ai\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment': 3, 'comment_chain': 3, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge typ"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: Rayda0114/leadfu-ai", "shortDescription": {"text": "Foundry mined bad chains: Rayda0114/leadfu-ai"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Rayda0114/leadfu-ai#1\nRepo: Rayda0114/leadfu-ai\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'deployment_env_gap': 2, 'test_ci_gap': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'source_or_other': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6ea7fe1e646bfc26\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"u"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "scanner-f730f5b600f9df97", "name": "Possibly dead Python function: map_twse_record", "shortDescription": {"text": "Possibly dead Python function: map_twse_record"}, "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-abdb8441ccc4c48a", "name": "Possibly dead Python function: fubon", "shortDescription": {"text": "Possibly dead Python function: fubon"}, "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-129f30064c750b6f", "name": "Possibly dead Python function: fuhhwa", "shortDescription": {"text": "Possibly dead Python function: fuhhwa"}, "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-d5750a25ef1483b5", "name": "Possibly dead Python function: fubon", "shortDescription": {"text": "Possibly dead Python function: fubon"}, "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-0e0d34da4b84fc4b", "name": "Possibly dead Python function: fuhhwa", "shortDescription": {"text": "Possibly dead Python function: fuhhwa"}, "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-eeec35d7da55fa95", "name": "Possibly dead Python function: sort_key", "shortDescription": {"text": "Possibly dead Python function: 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-e638b06c23c6e8d9", "name": "Possibly dead Python function: normalize_major_tpex", "shortDescription": {"text": "Possibly dead Python function: normalize_major_tpex"}, "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-0b0de2066bc7f214", "name": "Possibly dead Python function: normalize_major_twse", "shortDescription": {"text": "Possibly dead Python function: normalize_major_twse"}, "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-32188a2a778f51d0", "name": "Possibly dead Python function: normalize_warning", "shortDescription": {"text": "Possibly dead Python function: normalize_warning"}, "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-5428006457193016", "name": "Possibly dead Python function: normalize_disposal", "shortDescription": {"text": "Possibly dead Python function: normalize_disposal"}, "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-7ea3f56b746c42d6", "name": "Stray `console.log` in TS/JS \u2014 worker.js:823", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker.js:823"}, "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-e8c416987c9794ae", "name": "Stray `console.log` in TS/JS \u2014 js/main.js:952", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 js/main.js:952"}, "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-4a081362e7915e14", "name": "Privileged port 15 in use", "shortDescription": {"text": "Privileged port 15 in use"}, "fullDescription": {"text": "Port 15 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f0879d971f1065b", "name": "Privileged port 40 in use", "shortDescription": {"text": "Privileged port 40 in use"}, "fullDescription": {"text": "Port 40 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-71b21d3238467133", "name": "Privileged port 13 in use", "shortDescription": {"text": "Privileged port 13 in use"}, "fullDescription": {"text": "Port 13 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-613770340bc60ce5", "name": "Insecure pattern 'cors_wildcard' in worker.js:1066", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in worker.js:1066"}, "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-d591bd6bb061f553", "name": "Insecure pattern 'direct_innerhtml_assignment' in index.html:780", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:780"}, "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-29715bf811bbe15a", "name": "Insecure pattern 'direct_innerhtml_assignment' in index-mobile.html:421", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index-mobile.html:421"}, "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-560fa7fc5687207f", "name": "Insecure pattern 'direct_innerhtml_assignment' in index-legacy-20260613.html:526", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index-legacy-20260613.html:526"}, "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-c7f97d9d9aa1a6a1", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/main.js:31", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/main.js:31"}, "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-49548ced5258b6c6", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener-m.html:224", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener-m.html:224"}, "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-06e4731e9dfe48c1", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/member.html:180", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/member.html:180"}, "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-95708784e389787d", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/risk-radar.html:212", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/risk-radar.html:212"}, "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-16b77324efa8d325", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks-m.html:185", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks-m.html:185"}, "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-2a8485d22338dcd8", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/member-m.html:221", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/member-m.html:221"}, "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-d90718fcf5ad086b", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/check-m.html:169", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/check-m.html:169"}, "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-2d177b4a75ac3abd", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividends.html:129", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividends.html:129"}, "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-df927ce9da5b9389", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-compare.html:206", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-compare.html:206"}, "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-ae3602a49c55f69f", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/check.html:300", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/check.html:300"}, "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-23a8a8350376ecd7", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/announcements.html:169", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/announcements.html:169"}, "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-7d03e21c29efb6ea", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks.html:182", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks.html:182"}, "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-e9c597c73c97d2e6", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/ipo.html:196", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/ipo.html:196"}, "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-b2c330a661b48404", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/preview-home.html:531", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/preview-home.html:531"}, "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-a12ba1bb115c8bf0", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/sentiment-demo.html:230", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/sentiment-demo.html:230"}, "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-7e6ed32d8d523461", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/risk-radar-m.html:150", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/risk-radar-m.html:150"}, "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-05eae764c9c4c916", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/margin.html:132", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/margin.html:132"}, "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-afe06968180a919b", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/news.html:181", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/news.html:181"}, "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-7d508fccd9dc25c5", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/line-callback.html:40", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/line-callback.html:40"}, "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-e0675b9e5670dffc", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-m.html:190", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-m.html:190"}, "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-9e1bdc2dd26e67fd", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividends-m.html:141", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividends-m.html:141"}, "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-c735431209db2e1d", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/value-stocks-m.html:142", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/value-stocks-m.html:142"}, "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-192588a7001dd4bf", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener.html:357", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener.html:357"}, "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-e5cb73889112427c", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividend-calendar.html:152", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividend-calendar.html:152"}, "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-9601fee14f193e25", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-detail.html:104", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-detail.html:104"}, "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-8d640fc6e0b4e2e2", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/vip-m.html:329", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/vip-m.html:329"}, "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-2fe5f5fe7b64e4e6", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/watchlist.html:164", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/watchlist.html:164"}, "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-46591c10f7c0a65b", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/ai-m.html:132", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/ai-m.html:132"}, "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-48dd0d7fc1d6334c", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/portfolio-m.html:219", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/portfolio-m.html: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-60a999ddf90ac166", "name": "Insecure pattern 'insert_adjacent_html' in pages/portfolio-m.html:494", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in pages/portfolio-m.html:494"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bfc352aa0e3630d", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/value-stocks.html:130", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/value-stocks.html:130"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8ab5c1ed68c54d4", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks-list-m.html:148", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks-list-m.html:148"}, "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-448021ed970fa32a", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/sbl.html:126", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/sbl.html:126"}, "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-ed097a86f64f9119", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/admin.html:70", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/admin.html:70"}, "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-832cc1d5954171c0", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/us-market.html:332", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/us-market.html:332"}, "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-539f42d11ff977c1", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/institutional.html:130", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/institutional.html:130"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-453938302d6c22e5", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener-adv-m.html:254", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener-adv-m.html:254"}, "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-eed5eff2e3955811", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/watchlist-m.html:203", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/watchlist-m.html:203"}, "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-0bfdfb13b97dff87", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf.html:193", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf.html:193"}, "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-e8536d55fe4d0ccd", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-compare.html:288", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-compare.html:288"}, "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-dfaa7e19bbf2e7e8", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/search.html:147", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/search.html:147"}, "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-7beecc369f656611", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/fraud-check.html:168", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/fraud-check.html:168"}, "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-96dd3a0eb1bcaea7", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/market-risk.html:138", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/market-risk.html:138"}, "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-6acae9ac0756cb0d", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/ai.html:135", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/ai.html:135"}, "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-b8202c01180d2f15", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-m.html:159", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-m.html:159"}, "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-c34418c5b0b7b122", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/industries-m.html:134", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/industries-m.html:134"}, "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-edbfb0b71f2e544d", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/discussion.html:323", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/discussion.html:323"}, "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-edaa2d519ba82317", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-health.html:227", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-health.html:227"}, "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-8aff35cbcb707cdf", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/industries.html:233", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/industries.html:233"}, "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-e874145959635ebe", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/vip.html:532", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/vip.html:532"}, "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-47eb0e0adc7f0d28", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/news-m.html:143", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/news-m.html:143"}, "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-9c6c85bbf847b8e9", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/news-detail.html:135", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/news-detail.html:135"}, "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-e35f428fa8a35868", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/portfolio-health.html:420", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/portfolio-health.html:420"}, "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-25513acde6cc59c6", "name": "Insecure pattern 'insert_adjacent_html' in pages/portfolio-health.html:1097", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in pages/portfolio-health.html:1097"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30f668746b650d99", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/conference.html:121", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/conference.html:121"}, "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-4fd7b0d9ec69ff2f", "name": "Insecure pattern 'direct_innerhtml_assignment' in pages/weekly.html:110", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/weekly.html:110"}, "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-18133e0f57584e3c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a2d1c9337a3990f", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47eed4f128ae4188", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26d78cfb8f17220f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d00c7e277d32cdcb", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff32e90cad736f31", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af27a0daa0b37f9b", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b5b3266773f3154", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f5c94e5e8e9ce6c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a56405c69aa09ab5", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edea0c52b8ec4253", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0c6f4444616cea4", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e8fd1a12df4d03a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fffae1e100f12946", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c07e08e90fe2536", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5db238418a941b42", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-032becf86fb716b7", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68924daaabbab9c2", "name": "Very large file: worker.js (2867 lines)", "shortDescription": {"text": "Very large file: worker.js (2867 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d6e6cdd2e0c849f", "name": "Very large file: js/main.js (4192 lines)", "shortDescription": {"text": "Very large file: js/main.js (4192 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": "0 test file(s) for 61 source file(s) (ratio 0.00). 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 491 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 19 placeholder/mock markers across 3 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-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "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, tests. 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-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-204cb2fabdda4410", "name": "`fetch()` without try/.catch or AbortSignal \u2014 worker.js:1055", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker.js:1055"}, "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-564f51fbc34e26f3", "name": "Legacy-named symbol `leadfu_onboarded_v1` in js/main.js:1882", "shortDescription": {"text": "Legacy-named symbol `leadfu_onboarded_v1` in js/main.js:1882"}, "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-bc694e51c29116f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 js/main.js:2138", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 js/main.js:2138"}, "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-c2d60906b23e170a", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/fetch_tdcc.py:22", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fetch_tdcc.py:22"}, "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-a506cdc68d03b89b", "name": "Legacy-named symbol `raw_backup` in scripts/fetch_emerging.py:190", "shortDescription": {"text": "Legacy-named symbol `raw_backup` in scripts/fetch_emerging.py:190"}, "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-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:\nscripts/calc_risk_score.py:num, scripts/scan_strategies.py:num\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:\nscripts/snapshot_fundamentals.py:load, scripts/calc_inst_streak.py:load, scripts/calc_fin_trend.py:load\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}}]}}, "automationDetails": {"id": "repobility/17877"}, "properties": {"repository": "Rayda0114/leadfu-ai", "repoUrl": "https://github.com/Rayda0114/leadfu-ai", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Rayda0114/leadfu-ai"}, "properties": {"repobilityId": 360906, "scanner": "foundry_dataset", "fingerprint": "5d6d37e50d46eb693d9541fae288ac629768b9e97a39eefaf423b4707e98c474", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"test_ci_gap": 1, "source_or_other": 2, "deployment_env_gap": 2, "partial blueprint fit": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_alignment": 2, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 39, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 2, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 7, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 23, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 2, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 7, "comment_chain": 3, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Rayda0114/leadfu-ai#1", "issue_number": "1", "quality_tiers": {"unresolved": 5, "assumption_check": 2}, "repo_full_name": "Rayda0114/leadfu-ai", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-1aeaa06abbd36136", "graph_gold_label": "assumption_check", "changed_file_labels": {"source_or_other": 12}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Rayda0114/leadfu-ai#1\nRepo: Rayda0114/leadfu-ai\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment': 3, 'comment_chain': 3, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 7, 'comment_chain_touches_file': 6, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 5, 'human_reported_issue_no_linked_fix': 3, 'deployment_env_gap': 2, 'source_or_other': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_alignment': 2, 'partial blueprint fit': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Rayda0114/leadfu-ai", "source_id": "graph-query-motif_query-3d975b0a82c92635", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Rayda0114/leadfu-ai", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Rayda0114/leadfu-ai"}, "properties": {"repobilityId": 344374, "scanner": "foundry_dataset", "fingerprint": "bc397bd4e3633c5390f3f285eeec7baa0f4648b1e9cec5514e1129e623059993", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"test_ci_gap": 1, "source_or_other": 2, "deployment_env_gap": 2, "partial blueprint fit": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_alignment": 2, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 39, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 2, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 7, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 23, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 2, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 7, "comment_chain": 3, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Rayda0114/leadfu-ai#1", "issue_number": "1", "quality_tiers": {"unresolved": 5, "assumption_check": 2}, "repo_full_name": "Rayda0114/leadfu-ai", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-b262c81789419d94", "graph_gold_label": "assumption_check", "changed_file_labels": {"source_or_other": 12}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Rayda0114/leadfu-ai#1\nRepo: Rayda0114/leadfu-ai\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment': 3, 'comment_chain': 3, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 7, 'comment_chain_touches_file': 6, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 5, 'human_reported_issue_no_linked_fix': 3, 'deployment_env_gap': 2, 'source_or_other': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_alignment': 2, 'partial blueprint fit': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Rayda0114/leadfu-ai", "source_id": "graph-query-motif_query-bb02a8ec6a9d5bd0", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Rayda0114/leadfu-ai", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: Rayda0114/leadfu-ai"}, "properties": {"repobilityId": 336235, "scanner": "foundry_dataset", "fingerprint": "d5aa2797fb66cb3d522f4a2fc4d7142de9072bb8e0c79e6dc751b63127674280", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_ci_gap": 1, "source_or_other": 2, "deployment_env_gap": 2, "partial blueprint fit": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "blueprint_human_gap_alignment": 2, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 10}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 39, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 2, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 7, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 23, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 2, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 7, "comment_chain": 3, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Rayda0114/leadfu-ai#1", "issue_number": "1", "quality_tiers": {"unresolved": 5, "assumption_check": 2}, "repo_full_name": "Rayda0114/leadfu-ai", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-672eb253fdbde3db", "graph_gold_label": "assumption_check", "changed_file_labels": {"source_or_other": 12}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: assumption_check\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Rayda0114/leadfu-ai#1\nRepo: Rayda0114/leadfu-ai\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment': 3, 'comment_chain': 3, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 7, 'comment_chain_touches_file': 6, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 5, 'human_reported_issue_no_linked_fix': 3, 'deployment_env_gap': 2, 'source_or_other': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_alignment': 2, 'partial blueprint fit': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 10}\nQuality tiers: {'unresolved': 5, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Rayda0114/leadfu-ai", "source_id": "graph-query-motif_query-3fd9c73b82938195", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Rayda0114/leadfu-ai", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Rayda0114/leadfu-ai"}, "properties": {"repobilityId": 315870, "scanner": "foundry_dataset", "fingerprint": "6475803c99f23cf63ef00123052eff340feb8969d44ab4a26cb8bc483544f707", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "Rayda0114/leadfu-ai#1", "human_labels": ["deployment_env_gap", "source_or_other", "test_ci_gap"], "issue_number": "1", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "Rayda0114/leadfu-ai", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-ce351fbc7c8f66e7", "helicopter_views": {"graphs": 2}, "artifact_families": {"ci": 2, "docs": 5, "architecture": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"source_or_other": 2}, "linked_commit_count": 0, "helicopter_view_count": 2, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: Rayda0114/leadfu-ai\nThread: Rayda0114/leadfu-ai#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Rayda0114/leadfu-ai#1\nRepo: Rayda0114/leadfu-ai\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'deployment_env_gap': 2, 'test_ci_gap': 1}\nPolarities: {'bad': 3}\nChanged file labels: {'source_or_other': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6ea7fe1e646bfc26\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Rayda0114/leadfu-ai/pull/1\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Rayda0114/leadfu-ai\\nAuthor: cloudflare-workers-and-pages[bot] (Bot)\\nURL: https://github.com/Rayda0114/leadfu-ai/pull/1\\nTitle: Add Cloudflare Workers configuration\\nBody:\\nThis PR configures your project for Cloudflare Workers deployment using [Wrangler autoconfig](https://developers.cloudflare.com/workers/framework-guides/automatic-configuration).\\n\\nMerging this PR commits the configuration to your repository, enabling faster deployments and version controlled settings.\\n\\n**Detected settings:**\\n- Framework: `static`\\n\\n- Deploy command: `npx wrangler deploy`\\n- Version (non-production deploy) command: `npx wrangler versions upload`\\n\\n> **Note:** For this PR, we used these detected settings to generate a working preview. When merged, we'll override your build and deploy commands if they don't match what's currently configured, ensuring successful deployments for your setup.\\n\\n**Next steps after merging:**\\nYour Worker configuration lives in [`wrangler.jsonc`](https://developers.cloudflare.com/workers/wrangler/configuration/). You can now:\\n- [Store your data](https://developers.cloudflare.com/workers/runtime-apis/b\"\n  },\n  {\n    \"id\": \"github-feedback-comment-daa7d33d324c2b36\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Rayda0114/leadfu-ai/pull/1#issuecomment-4456715999\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Rayda0114/leadfu-ai\\nAuthor: netlify[bot] (Bot)\\nURL: https://github.com/Rayda0114/leadfu-ai/pull/1#issuecomment-4456715999\\nTitle: \\nBody:\\n### <span aria-hidden=\\\"true\\\">\u2705</span> Deploy Preview for *friendly-mousse-33de3d* ready!\\n\\n\\n|  Name | Link |\\n|:-:|------------------------|\\n|<span aria-hidden=\\\"true\\\">\ud83d\udd28</span> Latest commit | d394d33d2f9\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Rayda0114/leadfu-ai", "source_id": "comment-chain-pattern-bad_chains-7e59f3121b779e58", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Rayda0114/leadfu-ai", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "scanner-f730f5b600f9df97", "level": "note", "message": {"text": "Possibly dead Python function: map_twse_record"}, "properties": {"repobilityId": "fc28c01ff54872f1", "scanner": "scanner-primary", "fingerprint": "f730f5b600f9df97", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_companies.py:153"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-abdb8441ccc4c48a", "level": "note", "message": {"text": "Possibly dead Python function: fubon"}, "properties": {"repobilityId": "4ceba2bd1441b61f", "scanner": "scanner-primary", "fingerprint": "abdb8441ccc4c48a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_etf_dividend.py:137"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-129f30064c750b6f", "level": "note", "message": {"text": "Possibly dead Python function: fuhhwa"}, "properties": {"repobilityId": "964b386509bdafcb", "scanner": "scanner-primary", "fingerprint": "129f30064c750b6f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_etf_dividend.py:169"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d5750a25ef1483b5", "level": "note", "message": {"text": "Possibly dead Python function: fubon"}, "properties": {"repobilityId": "4ceba2bd1441b61f", "scanner": "scanner-primary", "fingerprint": "d5750a25ef1483b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_etf_holdings.py:112"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e0d34da4b84fc4b", "level": "note", "message": {"text": "Possibly dead Python function: fuhhwa"}, "properties": {"repobilityId": "964b386509bdafcb", "scanner": "scanner-primary", "fingerprint": "0e0d34da4b84fc4b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_etf_holdings.py:146"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eeec35d7da55fa95", "level": "note", "message": {"text": "Possibly dead Python function: sort_key"}, "properties": {"repobilityId": "ac2a4181eae38738", "scanner": "scanner-primary", "fingerprint": "eeec35d7da55fa95", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_ipo.py:185"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e638b06c23c6e8d9", "level": "note", "message": {"text": "Possibly dead Python function: normalize_major_tpex"}, "properties": {"repobilityId": "56390522c6e0372e", "scanner": "scanner-primary", "fingerprint": "e638b06c23c6e8d9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_announcements.py:65"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0b0de2066bc7f214", "level": "note", "message": {"text": "Possibly dead Python function: normalize_major_twse"}, "properties": {"repobilityId": "3614d55e2f2805c5", "scanner": "scanner-primary", "fingerprint": "0b0de2066bc7f214", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_announcements.py:84"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32188a2a778f51d0", "level": "note", "message": {"text": "Possibly dead Python function: normalize_warning"}, "properties": {"repobilityId": "3f290079df3640f1", "scanner": "scanner-primary", "fingerprint": "32188a2a778f51d0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_announcements.py:103"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5428006457193016", "level": "note", "message": {"text": "Possibly dead Python function: normalize_disposal"}, "properties": {"repobilityId": "a268b635318b2528", "scanner": "scanner-primary", "fingerprint": "5428006457193016", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/fetch_announcements.py:125"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ea3f56b746c42d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker.js:823"}, "properties": {"repobilityId": "1fb47c3a0b98f77b", "scanner": "scanner-primary", "fingerprint": "7ea3f56b746c42d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8c416987c9794ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 js/main.js:952"}, "properties": {"repobilityId": "cf1b25f1a6d656fd", "scanner": "scanner-primary", "fingerprint": "e8c416987c9794ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a081362e7915e14", "level": "warning", "message": {"text": "Privileged port 15 in use"}, "properties": {"repobilityId": "3340f9a170f285cd", "scanner": "scanner-primary", "fingerprint": "4a081362e7915e14", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/setup_sentiment_schedule.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2f0879d971f1065b", "level": "warning", "message": {"text": "Privileged port 40 in use"}, "properties": {"repobilityId": "28c59d470d4929c6", "scanner": "scanner-primary", "fingerprint": "2f0879d971f1065b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/setup_sentiment_schedule.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71b21d3238467133", "level": "warning", "message": {"text": "Privileged port 13 in use"}, "properties": {"repobilityId": "79d721e4d6f64798", "scanner": "scanner-primary", "fingerprint": "71b21d3238467133", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/supabase-keepalive.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-613770340bc60ce5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in worker.js:1066"}, "properties": {"repobilityId": "52c95f8560202c9e", "scanner": "scanner-primary", "fingerprint": "613770340bc60ce5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "worker.js"}, "region": {"startLine": 1066}}}]}, {"ruleId": "scanner-d591bd6bb061f553", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:780"}, "properties": {"repobilityId": "f91708437a3a5445", "scanner": "scanner-primary", "fingerprint": "d591bd6bb061f553", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index.html"}, "region": {"startLine": 780}}}]}, {"ruleId": "scanner-29715bf811bbe15a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index-mobile.html:421"}, "properties": {"repobilityId": "0308e243dbce200e", "scanner": "scanner-primary", "fingerprint": "29715bf811bbe15a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index-mobile.html"}, "region": {"startLine": 421}}}]}, {"ruleId": "scanner-560fa7fc5687207f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index-legacy-20260613.html:526"}, "properties": {"repobilityId": "28202e2d9dd30217", "scanner": "scanner-primary", "fingerprint": "560fa7fc5687207f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index-legacy-20260613.html"}, "region": {"startLine": 526}}}]}, {"ruleId": "scanner-c7f97d9d9aa1a6a1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/main.js:31"}, "properties": {"repobilityId": "3b23e0cd41b5e603", "scanner": "scanner-primary", "fingerprint": "c7f97d9d9aa1a6a1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/main.js"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-49548ced5258b6c6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener-m.html:224"}, "properties": {"repobilityId": "7377f89a3008a475", "scanner": "scanner-primary", "fingerprint": "49548ced5258b6c6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/screener-m.html"}, "region": {"startLine": 224}}}]}, {"ruleId": "scanner-06e4731e9dfe48c1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/member.html:180"}, "properties": {"repobilityId": "467a617093bc39f5", "scanner": "scanner-primary", "fingerprint": "06e4731e9dfe48c1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/member.html"}, "region": {"startLine": 180}}}]}, {"ruleId": "scanner-95708784e389787d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/risk-radar.html:212"}, "properties": {"repobilityId": "ffbe4bed80d49b85", "scanner": "scanner-primary", "fingerprint": "95708784e389787d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/risk-radar.html"}, "region": {"startLine": 212}}}]}, {"ruleId": "scanner-16b77324efa8d325", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks-m.html:185"}, "properties": {"repobilityId": "46c93ec639cddbb4", "scanner": "scanner-primary", "fingerprint": "16b77324efa8d325", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/stocks-m.html"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-2a8485d22338dcd8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/member-m.html:221"}, "properties": {"repobilityId": "741ac235a446d4ae", "scanner": "scanner-primary", "fingerprint": "2a8485d22338dcd8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/member-m.html"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-d90718fcf5ad086b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/check-m.html:169"}, "properties": {"repobilityId": "a59bb3a52af0113e", "scanner": "scanner-primary", "fingerprint": "d90718fcf5ad086b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/check-m.html"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-2d177b4a75ac3abd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividends.html:129"}, "properties": {"repobilityId": "b1335b8f8ac64448", "scanner": "scanner-primary", "fingerprint": "2d177b4a75ac3abd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/dividends.html"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-df927ce9da5b9389", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-compare.html:206"}, "properties": {"repobilityId": "7a9c3d100910127a", "scanner": "scanner-primary", "fingerprint": "df927ce9da5b9389", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/etf-compare.html"}, "region": {"startLine": 206}}}]}, {"ruleId": "scanner-ae3602a49c55f69f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/check.html:300"}, "properties": {"repobilityId": "87d65288f3eb856b", "scanner": "scanner-primary", "fingerprint": "ae3602a49c55f69f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/check.html"}, "region": {"startLine": 300}}}]}, {"ruleId": "scanner-23a8a8350376ecd7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/announcements.html:169"}, "properties": {"repobilityId": "cf281d00949b1ff2", "scanner": "scanner-primary", "fingerprint": "23a8a8350376ecd7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/announcements.html"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-7d03e21c29efb6ea", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks.html:182"}, "properties": {"repobilityId": "b33fa15e1635a0e3", "scanner": "scanner-primary", "fingerprint": "7d03e21c29efb6ea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/stocks.html"}, "region": {"startLine": 182}}}]}, {"ruleId": "scanner-e9c597c73c97d2e6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/ipo.html:196"}, "properties": {"repobilityId": "b8a2092f5170f23e", "scanner": "scanner-primary", "fingerprint": "e9c597c73c97d2e6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/ipo.html"}, "region": {"startLine": 196}}}]}, {"ruleId": "scanner-b2c330a661b48404", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/preview-home.html:531"}, "properties": {"repobilityId": "bade64c3d479577f", "scanner": "scanner-primary", "fingerprint": "b2c330a661b48404", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/preview-home.html"}, "region": {"startLine": 531}}}]}, {"ruleId": "scanner-a12ba1bb115c8bf0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/sentiment-demo.html:230"}, "properties": {"repobilityId": "fd382f2261dc4e80", "scanner": "scanner-primary", "fingerprint": "a12ba1bb115c8bf0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/sentiment-demo.html"}, "region": {"startLine": 230}}}]}, {"ruleId": "scanner-7e6ed32d8d523461", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/risk-radar-m.html:150"}, "properties": {"repobilityId": "8379638aecabfc5f", "scanner": "scanner-primary", "fingerprint": "7e6ed32d8d523461", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/risk-radar-m.html"}, "region": {"startLine": 150}}}]}, {"ruleId": "scanner-05eae764c9c4c916", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/margin.html:132"}, "properties": {"repobilityId": "6e9d661e42ad86ef", "scanner": "scanner-primary", "fingerprint": "05eae764c9c4c916", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/margin.html"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-afe06968180a919b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/news.html:181"}, "properties": {"repobilityId": "8b70fabc6539169a", "scanner": "scanner-primary", "fingerprint": "afe06968180a919b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/news.html"}, "region": {"startLine": 181}}}]}, {"ruleId": "scanner-7d508fccd9dc25c5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/line-callback.html:40"}, "properties": {"repobilityId": "99e612bf00eea299", "scanner": "scanner-primary", "fingerprint": "7d508fccd9dc25c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/line-callback.html"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-e0675b9e5670dffc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-m.html:190"}, "properties": {"repobilityId": "51743a1263332bac", "scanner": "scanner-primary", "fingerprint": "e0675b9e5670dffc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/stock-m.html"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-9e1bdc2dd26e67fd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividends-m.html:141"}, "properties": {"repobilityId": "9e2a180640f1cb1b", "scanner": "scanner-primary", "fingerprint": "9e1bdc2dd26e67fd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/dividends-m.html"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-c735431209db2e1d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/value-stocks-m.html:142"}, "properties": {"repobilityId": "605fb07c170f6478", "scanner": "scanner-primary", "fingerprint": "c735431209db2e1d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/value-stocks-m.html"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-192588a7001dd4bf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener.html:357"}, "properties": {"repobilityId": "c18b90650b867adb", "scanner": "scanner-primary", "fingerprint": "192588a7001dd4bf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/screener.html"}, "region": {"startLine": 357}}}]}, {"ruleId": "scanner-e5cb73889112427c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/dividend-calendar.html:152"}, "properties": {"repobilityId": "e5e4074226e8ced9", "scanner": "scanner-primary", "fingerprint": "e5cb73889112427c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/dividend-calendar.html"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-9601fee14f193e25", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-detail.html:104"}, "properties": {"repobilityId": "0c8788f6cf4cd045", "scanner": "scanner-primary", "fingerprint": "9601fee14f193e25", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/stock-detail.html"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-8d640fc6e0b4e2e2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/vip-m.html:329"}, "properties": {"repobilityId": "eaf9daf524b81a8e", "scanner": "scanner-primary", "fingerprint": "8d640fc6e0b4e2e2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/vip-m.html"}, "region": {"startLine": 329}}}]}, {"ruleId": "scanner-2fe5f5fe7b64e4e6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/watchlist.html:164"}, "properties": {"repobilityId": "f60b5f8b119f8bb5", "scanner": "scanner-primary", "fingerprint": "2fe5f5fe7b64e4e6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/watchlist.html"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-46591c10f7c0a65b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/ai-m.html:132"}, "properties": {"repobilityId": "2859057118c58e48", "scanner": "scanner-primary", "fingerprint": "46591c10f7c0a65b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/ai-m.html"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-48dd0d7fc1d6334c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/portfolio-m.html:219"}, "properties": {"repobilityId": "28b6a487e3719704", "scanner": "scanner-primary", "fingerprint": "48dd0d7fc1d6334c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/portfolio-m.html"}, "region": {"startLine": 219}}}]}, {"ruleId": "scanner-60a999ddf90ac166", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in pages/portfolio-m.html:494"}, "properties": {"repobilityId": "28cd993fc862907c", "scanner": "scanner-primary", "fingerprint": "60a999ddf90ac166", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/portfolio-m.html"}, "region": {"startLine": 494}}}]}, {"ruleId": "scanner-0bfc352aa0e3630d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/value-stocks.html:130"}, "properties": {"repobilityId": "4fba45affa282561", "scanner": "scanner-primary", "fingerprint": "0bfc352aa0e3630d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/value-stocks.html"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-d8ab5c1ed68c54d4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stocks-list-m.html:148"}, "properties": {"repobilityId": "fd2888baa470c52e", "scanner": "scanner-primary", "fingerprint": "d8ab5c1ed68c54d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/stocks-list-m.html"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-448021ed970fa32a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/sbl.html:126"}, "properties": {"repobilityId": "b0469f9d5c2d5eb4", "scanner": "scanner-primary", "fingerprint": "448021ed970fa32a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/sbl.html"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-ed097a86f64f9119", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/admin.html:70"}, "properties": {"repobilityId": "17cdde3a9996d031", "scanner": "scanner-primary", "fingerprint": "ed097a86f64f9119", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/admin.html"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-832cc1d5954171c0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/us-market.html:332"}, "properties": {"repobilityId": "08637d6f6e641105", "scanner": "scanner-primary", "fingerprint": "832cc1d5954171c0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/us-market.html"}, "region": {"startLine": 332}}}]}, {"ruleId": "scanner-539f42d11ff977c1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/institutional.html:130"}, "properties": {"repobilityId": "0b62f24fd9ce0fd9", "scanner": "scanner-primary", "fingerprint": "539f42d11ff977c1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/institutional.html"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-453938302d6c22e5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/screener-adv-m.html:254"}, "properties": {"repobilityId": "3f4233a1247b9281", "scanner": "scanner-primary", "fingerprint": "453938302d6c22e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/screener-adv-m.html"}, "region": {"startLine": 254}}}]}, {"ruleId": "scanner-eed5eff2e3955811", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/watchlist-m.html:203"}, "properties": {"repobilityId": "2185c90924e0457f", "scanner": "scanner-primary", "fingerprint": "eed5eff2e3955811", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/watchlist-m.html"}, "region": {"startLine": 203}}}]}, {"ruleId": "scanner-0bfdfb13b97dff87", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf.html:193"}, "properties": {"repobilityId": "ee34003c8da084b3", "scanner": "scanner-primary", "fingerprint": "0bfdfb13b97dff87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/etf.html"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-e8536d55fe4d0ccd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/stock-compare.html:288"}, "properties": {"repobilityId": "738cb317af2a8a12", "scanner": "scanner-primary", "fingerprint": "e8536d55fe4d0ccd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/stock-compare.html"}, "region": {"startLine": 288}}}]}, {"ruleId": "scanner-dfaa7e19bbf2e7e8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/search.html:147"}, "properties": {"repobilityId": "d4df6b6454cb1405", "scanner": "scanner-primary", "fingerprint": "dfaa7e19bbf2e7e8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/search.html"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-7beecc369f656611", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/fraud-check.html:168"}, "properties": {"repobilityId": "e1cc8f1380c449a0", "scanner": "scanner-primary", "fingerprint": "7beecc369f656611", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/fraud-check.html"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-96dd3a0eb1bcaea7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/market-risk.html:138"}, "properties": {"repobilityId": "776ca1e199444e36", "scanner": "scanner-primary", "fingerprint": "96dd3a0eb1bcaea7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/market-risk.html"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-6acae9ac0756cb0d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/ai.html:135"}, "properties": {"repobilityId": "b20278e9a041a63c", "scanner": "scanner-primary", "fingerprint": "6acae9ac0756cb0d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/ai.html"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-b8202c01180d2f15", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-m.html:159"}, "properties": {"repobilityId": "8bfb8b9e149abca8", "scanner": "scanner-primary", "fingerprint": "b8202c01180d2f15", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/etf-m.html"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-c34418c5b0b7b122", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/industries-m.html:134"}, "properties": {"repobilityId": "b70955d0a2ecd14a", "scanner": "scanner-primary", "fingerprint": "c34418c5b0b7b122", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/industries-m.html"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-edbfb0b71f2e544d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/discussion.html:323"}, "properties": {"repobilityId": "9717bb3b4efd3840", "scanner": "scanner-primary", "fingerprint": "edbfb0b71f2e544d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/discussion.html"}, "region": {"startLine": 323}}}]}, {"ruleId": "scanner-edaa2d519ba82317", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/etf-health.html:227"}, "properties": {"repobilityId": "032d09af3141edd6", "scanner": "scanner-primary", "fingerprint": "edaa2d519ba82317", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/etf-health.html"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-8aff35cbcb707cdf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/industries.html:233"}, "properties": {"repobilityId": "0538c50962d2ba9a", "scanner": "scanner-primary", "fingerprint": "8aff35cbcb707cdf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/industries.html"}, "region": {"startLine": 233}}}]}, {"ruleId": "scanner-e874145959635ebe", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/vip.html:532"}, "properties": {"repobilityId": "66b09522b3748587", "scanner": "scanner-primary", "fingerprint": "e874145959635ebe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/vip.html"}, "region": {"startLine": 532}}}]}, {"ruleId": "scanner-47eb0e0adc7f0d28", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/news-m.html:143"}, "properties": {"repobilityId": "afb394d80d205915", "scanner": "scanner-primary", "fingerprint": "47eb0e0adc7f0d28", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/news-m.html"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-9c6c85bbf847b8e9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/news-detail.html:135"}, "properties": {"repobilityId": "3cffc96f54fa7083", "scanner": "scanner-primary", "fingerprint": "9c6c85bbf847b8e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/news-detail.html"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-e35f428fa8a35868", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/portfolio-health.html:420"}, "properties": {"repobilityId": "6db5329310d9c8dc", "scanner": "scanner-primary", "fingerprint": "e35f428fa8a35868", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/portfolio-health.html"}, "region": {"startLine": 420}}}]}, {"ruleId": "scanner-25513acde6cc59c6", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in pages/portfolio-health.html:1097"}, "properties": {"repobilityId": "ccfe95e35310839c", "scanner": "scanner-primary", "fingerprint": "25513acde6cc59c6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/portfolio-health.html"}, "region": {"startLine": 1097}}}]}, {"ruleId": "scanner-30f668746b650d99", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/conference.html:121"}, "properties": {"repobilityId": "1152c419d3340ee9", "scanner": "scanner-primary", "fingerprint": "30f668746b650d99", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/conference.html"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-4fd7b0d9ec69ff2f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pages/weekly.html:110"}, "properties": {"repobilityId": "2ba34a9d93dbdf7d", "scanner": "scanner-primary", "fingerprint": "4fd7b0d9ec69ff2f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pages/weekly.html"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-18133e0f57584e3c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0246bdaaebc44181", "scanner": "scanner-primary", "fingerprint": "18133e0f57584e3c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-news-premarket.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-18133e0f57584e3c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2e195af48d7af2cf", "scanner": "scanner-primary", "fingerprint": "18133e0f57584e3c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-news-premarket.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-1a2d1c9337a3990f", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "33acfd4e617446ba", "scanner": "scanner-primary", "fingerprint": "1a2d1c9337a3990f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-news-premarket.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-47eed4f128ae4188", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "66253619675838da", "scanner": "scanner-primary", "fingerprint": "47eed4f128ae4188", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scan-strategies.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-47eed4f128ae4188", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2b7dee3e40c4172e", "scanner": "scanner-primary", "fingerprint": "47eed4f128ae4188", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scan-strategies.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-26d78cfb8f17220f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7e370bfc78309331", "scanner": "scanner-primary", "fingerprint": "26d78cfb8f17220f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-news.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-26d78cfb8f17220f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cdbae570bddd9f1f", "scanner": "scanner-primary", "fingerprint": "26d78cfb8f17220f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-news.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-d00c7e277d32cdcb", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2589349fcdcdae9d", "scanner": "scanner-primary", "fingerprint": "d00c7e277d32cdcb", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/notify-feedback.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-d00c7e277d32cdcb", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ac7273528fc0d194", "scanner": "scanner-primary", "fingerprint": "d00c7e277d32cdcb", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/notify-feedback.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-ff32e90cad736f31", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "df286de6a68d1417", "scanner": "scanner-primary", "fingerprint": "ff32e90cad736f31", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-worker.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-ff32e90cad736f31", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae3f937d37f88e7f", "scanner": "scanner-primary", "fingerprint": "ff32e90cad736f31", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-worker.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-ff32e90cad736f31", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b05258fd7dfc25f1", "scanner": "scanner-primary", "fingerprint": "ff32e90cad736f31", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-worker.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-af27a0daa0b37f9b", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "f7458b7920f8544b", "scanner": "scanner-primary", "fingerprint": "af27a0daa0b37f9b", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-market-risk.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b5b3266773f3154", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d3d9a66d2272a6a6", "scanner": "scanner-primary", "fingerprint": "1b5b3266773f3154", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/us-data-update.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-1b5b3266773f3154", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "de4a0604f1fc2b78", "scanner": "scanner-primary", "fingerprint": "1b5b3266773f3154", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/us-data-update.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-9f5c94e5e8e9ce6c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "f0581399bea1b568", "scanner": "scanner-primary", "fingerprint": "9f5c94e5e8e9ce6c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/us-data-update.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a56405c69aa09ab5", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "eb4a28dcabbf9688", "scanner": "scanner-primary", "fingerprint": "a56405c69aa09ab5", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/taifex-evening.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-edea0c52b8ec4253", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "eb1e27d1099d1536", "scanner": "scanner-primary", "fingerprint": "edea0c52b8ec4253", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-data-update.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-edea0c52b8ec4253", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ac70a25703ec7009", "scanner": "scanner-primary", "fingerprint": "edea0c52b8ec4253", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-data-update.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-c0c6f4444616cea4", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "6aad9c4e574edb2c", "scanner": "scanner-primary", "fingerprint": "c0c6f4444616cea4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/daily-data-update.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e8fd1a12df4d03a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "585ecd3c31d59ba0", "scanner": "scanner-primary", "fingerprint": "9e8fd1a12df4d03a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/weekly-report.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-9e8fd1a12df4d03a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "22cccae717c3897f", "scanner": "scanner-primary", "fingerprint": "9e8fd1a12df4d03a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/weekly-report.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-fffae1e100f12946", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "3ed93d3d5f6e4d74", "scanner": "scanner-primary", "fingerprint": "fffae1e100f12946", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/weekly-report.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3c07e08e90fe2536", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c79818c9a0cf927d", "scanner": "scanner-primary", "fingerprint": "3c07e08e90fe2536", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-digest.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-3c07e08e90fe2536", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4fdf359d35939b58", "scanner": "scanner-primary", "fingerprint": "3c07e08e90fe2536", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-digest.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-5db238418a941b42", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "2ceb210633680c2c", "scanner": "scanner-primary", "fingerprint": "5db238418a941b42", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/sentiment-scan.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-032becf86fb716b7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4d57232b43f38344", "scanner": "scanner-primary", "fingerprint": "032becf86fb716b7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-holdings-guard.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-032becf86fb716b7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4c59bbc7f7cd6135", "scanner": "scanner-primary", "fingerprint": "032becf86fb716b7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/push-holdings-guard.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-68924daaabbab9c2", "level": "note", "message": {"text": "Very large file: worker.js (2867 lines)"}, "properties": {"repobilityId": "388b13aae54a4c61", "scanner": "scanner-primary", "fingerprint": "68924daaabbab9c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2d6e6cdd2e0c849f", "level": "note", "message": {"text": "Very large file: js/main.js (4192 lines)"}, "properties": {"repobilityId": "dc93415c7f49ba3d", "scanner": "scanner-primary", "fingerprint": "2d6e6cdd2e0c849f", "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": "193cd7abc6ab20f7", "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": "73ffd5c975a57935", "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": "e42009d4201c7e04", "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": "fbf1e6f2bee6d8d8", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "6eba7a0baeb4ca74", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "3aa7ee10acac0aea", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "a7eff14739c0b13f", "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": "5212deb064a41e1f", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-204cb2fabdda4410", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker.js:1055"}, "properties": {"repobilityId": "5f706bbca9afa518", "scanner": "scanner-primary", "fingerprint": "204cb2fabdda4410", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-564f51fbc34e26f3", "level": "note", "message": {"text": "Legacy-named symbol `leadfu_onboarded_v1` in js/main.js:1882"}, "properties": {"repobilityId": "8e45e05b6cf53927", "scanner": "scanner-primary", "fingerprint": "564f51fbc34e26f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bc694e51c29116f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 js/main.js:2138"}, "properties": {"repobilityId": "ee0db8007c76efa4", "scanner": "scanner-primary", "fingerprint": "bc694e51c29116f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2d60906b23e170a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/fetch_tdcc.py:22"}, "properties": {"repobilityId": "40faddd18ae6c84b", "scanner": "scanner-primary", "fingerprint": "c2d60906b23e170a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a506cdc68d03b89b", "level": "note", "message": {"text": "Legacy-named symbol `raw_backup` in scripts/fetch_emerging.py:190"}, "properties": {"repobilityId": "965872b0ceea4a76", "scanner": "scanner-primary", "fingerprint": "a506cdc68d03b89b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "cb8662f29bd3381d", "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": "0a5ea081eaa26209", "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": "724952c90bca949f", "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": "a9bd224429b55fdc", "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": "c7bbff1b69db4a85", "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": "9b9389c18ae2ec0f", "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": "09bd35f6b84a1ef9", "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": "76bf8bc91179f46d", "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": "430d98d8c67c4a08", "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": "7cfa556426da5cd5", "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": "6187125337fc75ca", "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": "ad7b15b246305c0e", "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": "f3bcad31481c5db0", "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": "52c90fbc39b3291b", "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": "8266becf35f1e188", "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": "8b9cc47c6ca6b75a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}