{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-be03074886660424", "name": "Possibly dead Python function: write_stats_for_demo", "shortDescription": {"text": "Possibly dead Python function: write_stats_for_demo"}, "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-e9d3b9d61543d49e", "name": "Icon-only button without accessible name \u2014 cs2-hub/roster.js:67", "shortDescription": {"text": "Icon-only button without accessible name \u2014 cs2-hub/roster.js:67"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8856f4a077b8de7a", "name": "Stray `console.log` in TS/JS \u2014 cs2-hub/schedule.js:181", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cs2-hub/schedule.js:181"}, "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-c41e22a44ecf8d9c", "name": "Stray `console.log` in TS/JS \u2014 cs2-hub/demo-viewer.js:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cs2-hub/demo-viewer.js:142"}, "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-8bf6f541eb80f234", "name": "Icon-only button without accessible name \u2014 cs2-hub/vod-detail.js:129", "shortDescription": {"text": "Icon-only button without accessible name \u2014 cs2-hub/vod-detail.js:129"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f6d6fb383c5af9b", "name": "Stray `console.log` in TS/JS \u2014 cs2-hub/_design_mock.js:383", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cs2-hub/_design_mock.js:383"}, "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-75c3d8beaaaf7e8e", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/antistrat-drawer.js:44", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/antistrat-drawer.js:44"}, "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-cd45cd697265a5d1", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard.js:17", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard.js:17"}, "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-17292a68065222f7", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/roster.js:34", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/roster.js:34"}, "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-0a634b92a5e61b4a", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/public-team.js:23", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/public-team.js:23"}, "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-9b7427ad940cc0f3", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-match-reports.test.html:16", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-match-reports.test.html:16"}, "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-9edf8d38f4eec9a7", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-stats-cockpit.js:340", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-stats-cockpit.js:340"}, "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-c093b27f1b6192d4", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook.js:16", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook.js:16"}, "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-4c373737ac2c7416", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/schedule.js:46", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/schedule.js:46"}, "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-9813006300136c29", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/round-compare.js:52", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/round-compare.js:52"}, "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-f40b9a6a77d74d04", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/save-popover.js:46", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/save-popover.js:46"}, "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-4a48fe93f47c228d", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-hero.js:119", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-hero.js:119"}, "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-79ff607e7c85a0d9", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/toast.js:16", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/toast.js:16"}, "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-87273089f9aa3dc1", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/team-select.js:30", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/team-select.js:30"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ece5aefad89ac28f", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/goals.js:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/goals.js:56"}, "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-8fc54d9806888c23", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-map-pool.js:91", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-map-pool.js:91"}, "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-dceaa5516bfc1e6c", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/layout.js:81", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/layout.js:81"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5483131130c0780", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-map-pool.test.html:43", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-map-pool.test.html:43"}, "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-f76604209ae69975", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/antistrat-editor.test.html:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/antistrat-editor.test.html:48"}, "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-594e7bf895a690eb", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/command-palette.js:164", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/command-palette.js: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-b338a20cbfeac154", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-hero.test.html:80", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-hero.test.html:80"}, "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-3e20a287e93d5103", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponent-detail.js:45", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponent-detail.js:45"}, "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-ec0c6c56f9ca2f29", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponents.js:136", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponents.js:136"}, "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-967e2bf86b5ccf16", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-impact.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-impact.js:63"}, "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-0f14bf52566c5ecf", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/team-autocomplete.js:97", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/team-autocomplete.js:97"}, "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-65300fbe4a5c375e", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard-team-stats.js:61", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard-team-stats.js:61"}, "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-9bb197bc6175df9c", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook-fullscreen.html:317", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook-fullscreen.html:317"}, "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-06ba0a788a75caee", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-match-reports.js:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-match-reports.js:93"}, "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-1019563d591b8e93", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats-advanced.js:179", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats-advanced.js:179"}, "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-cf7817c260da14a0", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/player-autocomplete.js:71", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/player-autocomplete.js:71"}, "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-56e3eb9bd42be852", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scrim-finder.js:62", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scrim-finder.js:62"}, "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-e05a87d82ef4cf7e", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/assign-teams-modal.js:158", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/assign-teams-modal.js:158"}, "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-b880add08a9874a0", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/dashboard.js:198", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/dashboard.js:198"}, "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-43068ebdedc6eb9d", "name": "Insecure pattern 'insert_adjacent_html' in cs2-hub/dashboard.js:732", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in cs2-hub/dashboard.js:732"}, "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-6e170352933e47be", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/hover-preview.js:60", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/hover-preview.js:60"}, "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-26aec272920cb546", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard-team-stats.test.html:39", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard-team-stats.test.html:39"}, "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-245045ea73096278", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-filter.test.html:25", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-filter.test.html:25"}, "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-f96bbddaadc14b3a", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/analysis.js:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/analysis.js:93"}, "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-8602c1b012e2e3b3", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/keywords.js:82", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/keywords.js:82"}, "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-6d0a4bf014f94107", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/demo-viewer.js:317", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/demo-viewer.js:317"}, "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-d3fa528b5e6e2937", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/veto-simulator.js:425", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/veto-simulator.js:425"}, "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-8efa411e0da0082e", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/demos.js:32", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/demos.js:32"}, "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-29dd7a288a586cbd", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods.js:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods.js:48"}, "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-ef1da932fed540a1", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/tooltip.js:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/tooltip.js:48"}, "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-3c63770a78d627fb", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/presence.js:92", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/presence.js:92"}, "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-b54ca1dec422f841", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponent-overview.js:301", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponent-overview.js:301"}, "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-20f7c1533b4ccd16", "name": "Insecure pattern 'insert_adjacent_html' in cs2-hub/opponent-overview.js:328", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in cs2-hub/opponent-overview.js:328"}, "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-3fb36e92989b56b6", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/veto.js:212", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/veto.js: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-a9ec80ad48c6dd89", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vod-detail.js:107", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vod-detail.js:107"}, "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-109b9c325971e9dc", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/issues.js:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/issues.js:56"}, "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-07849ccfb7d57495", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-impact.test.html:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-impact.test.html:38"}, "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-a3913039dc59607e", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats-advanced.test.html:41", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats-advanced.test.html:41"}, "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-185414aa734f7f77", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-filter.js:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-filter.js:48"}, "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-9355240ca1ff01a4", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-panel.js:9", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-panel.js:9"}, "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-8319a40a80d53596", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats.js:87", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats.js:87"}, "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-f0ec18d23f8b5fd2", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/admin.js:33", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/admin.js:33"}, "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-f7bcbeb65fee3113", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook-detail.js:23", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook-detail.js:23"}, "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-68295c72bfcf52f4", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats.test.html:29", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats.test.html:29"}, "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-74b16f88f0a07ddd", "name": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/player-drawer.js:14", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/player-drawer.js:14"}, "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-ddc11db5bf1b2e06", "name": "Insecure pattern 'cors_wildcard' in cs2-hub/api/calendar.js:83", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in cs2-hub/api/calendar.js:83"}, "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-41bd8ba45de07302", "name": "Insecure pattern 'cors_wildcard' in cs2-hub/api/team-profile.js:100", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in cs2-hub/api/team-profile.js:100"}, "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-db8aee06066a59b5", "name": "Insecure pattern 'cors_wildcard' in vps/main.py:128", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in vps/main.py:128"}, "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-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac792505c5840b95", "name": "Very large file: cs2-hub/dashboard.js (1133 lines)", "shortDescription": {"text": "Very large file: cs2-hub/dashboard.js (1133 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-4e65a30abaeb58e8", "name": "Very large file: cs2-hub/analysis.js (2096 lines)", "shortDescription": {"text": "Very large file: cs2-hub/analysis.js (2096 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-8a84fe34f00adb60", "name": "Very large file: cs2-hub/demo-viewer.js (1923 lines)", "shortDescription": {"text": "Very large file: cs2-hub/demo-viewer.js (1923 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-933ff0aa446dee83", "name": "Very large file: cs2-hub/demos.js (1328 lines)", "shortDescription": {"text": "Very large file: cs2-hub/demos.js (1328 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-7879502fefb59e15", "name": "Very large file: vps/demo_parser.py (2091 lines)", "shortDescription": {"text": "Very large file: vps/demo_parser.py (2091 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": "7 test file(s) for 99 source file(s) (ratio 0.07). 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 180 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 60 placeholder/mock markers across 21 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b3c065cc65d895e", "name": "Commented-code block (5 lines) in cs2-hub/vods-stats-cockpit.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/vods-stats-cockpit.js:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e7f2c18e3cc274d", "name": "Commented-code block (5 lines) in cs2-hub/roster-stats-render.js:19", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/roster-stats-render.js:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6757446da0848f36", "name": "Commented-code block (5 lines) in cs2-hub/save-popover.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/save-popover.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-313a55761d222980", "name": "Commented-code block (5 lines) in cs2-hub/layout.js:123", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/layout.js:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8e0cc2d02b95441", "name": "Commented-code block (5 lines) in cs2-hub/post-end-tick.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/post-end-tick.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dff1bec71c27a7a5", "name": "Commented-code block (5 lines) in cs2-hub/opponent-detail.js:364", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/opponent-detail.js:364"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db15374864472296", "name": "Commented-code block (5 lines) in cs2-hub/assign-teams.js:29", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/assign-teams.js:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a22d31ab6ed7c588", "name": "Commented-code block (8 lines) in cs2-hub/team-autocomplete.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in cs2-hub/team-autocomplete.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-213f132124749270", "name": "Commented-code block (5 lines) in cs2-hub/scrim-finder.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/scrim-finder.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e86e1c666b84096", "name": "Commented-code block (10 lines) in cs2-hub/assign-teams-modal.js:91", "shortDescription": {"text": "Commented-code block (10 lines) in cs2-hub/assign-teams-modal.js:91"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24df5d6f68ce5038", "name": "Commented-code block (6 lines) in cs2-hub/dashboard.js:394", "shortDescription": {"text": "Commented-code block (6 lines) in cs2-hub/dashboard.js:394"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bfefc88ebcbc55df", "name": "Commented-code block (7 lines) in cs2-hub/pracc-sync.js:20", "shortDescription": {"text": "Commented-code block (7 lines) in cs2-hub/pracc-sync.js:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77c979a7c406e4dc", "name": "Commented-code block (7 lines) in cs2-hub/analysis.js:149", "shortDescription": {"text": "Commented-code block (7 lines) in cs2-hub/analysis.js:149"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c69443d8be62ff1d", "name": "Commented-code block (5 lines) in cs2-hub/demo-viewer.js:544", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/demo-viewer.js:544"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-18410a18d416ef21", "name": "Commented-code block (6 lines) in cs2-hub/antistrat-editor.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in cs2-hub/antistrat-editor.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bb1ee0eba1c4bda", "name": "Commented-code block (5 lines) in cs2-hub/analysis-rounds.js:38", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/analysis-rounds.js:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e46d8cad43f44fe", "name": "Commented-code block (5 lines) in cs2-hub/charts.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/charts.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c522a5062ddd9d43", "name": "Commented-code block (7 lines) in cs2-hub/veto-simulator.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in cs2-hub/veto-simulator.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b03d05bdb95782ec", "name": "Commented-code block (6 lines) in cs2-hub/pixel-field.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in cs2-hub/pixel-field.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-66230672d841738e", "name": "Commented-code block (5 lines) in cs2-hub/auto-fill-vod.js:59", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/auto-fill-vod.js:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa2a726cec86a5a8", "name": "Commented-code block (5 lines) in cs2-hub/demos.js:72", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/demos.js:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74d108f471f3706d", "name": "Commented-code block (5 lines) in cs2-hub/vods.js:307", "shortDescription": {"text": "Commented-code block (5 lines) in cs2-hub/vods.js:307"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-beb512e62e6adbfc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/seed-diamant-ancient.mjs:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/seed-diamant-ancient.mjs:112"}, "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-5d05bc301cc53858", "name": "Commented-code block (8 lines) in cs2-hub/opponent-overview.js:52", "shortDescription": {"text": "Commented-code block (8 lines) in cs2-hub/opponent-overview.js:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc239d66fc7ed0f3", "name": "Commented-code block (6 lines) in cs2-hub/veto.js:304", "shortDescription": {"text": "Commented-code block (6 lines) in cs2-hub/veto.js:304"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ddc72bf23e90b3c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/seed-demo.mjs:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/seed-demo.mjs:15"}, "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-4c33a7f143b0b1cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/vod-detail.js:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/vod-detail.js:42"}, "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-35a87a105395d889", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/migrate-strats.mjs:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/migrate-strats.mjs:29"}, "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-745250d22b7ad2af", "name": "Commented-code block (6 lines) in cs2-hub/team-stats-aggregate.js:29", "shortDescription": {"text": "Commented-code block (6 lines) in cs2-hub/team-stats-aggregate.js:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c98c54df6f1b2ad6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/admin.js:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/admin.js:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-21cee910d5891c9d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/export-calendar.js:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/export-calendar.js:8"}, "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-c665e71b7bdb61ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/steam-callback.js:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/steam-callback.js:18"}, "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-ec27f96f8284bada", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/scan-scoreboard.js:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/scan-scoreboard.js:10"}, "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-a690e7defbf5512c", "name": "Commented-code block (6 lines) in cs2-hub/api/team-profile.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in cs2-hub/api/team-profile.js:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efba05a330dc44fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/team-profile.js:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/team-profile.js:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0202b76c56197613", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/admin.js:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/admin.js:20"}, "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-69a51cb8e65b7544", "name": "Commented-code block (7 lines) in vps/hltv_refresh_subprocess.py:7", "shortDescription": {"text": "Commented-code block (7 lines) in vps/hltv_refresh_subprocess.py:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acd369b43efcb44b", "name": "Commented-code block (11 lines) in vps/backfill_public_scores.py:13", "shortDescription": {"text": "Commented-code block (11 lines) in vps/backfill_public_scores.py:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38a806bfb5aa6c64", "name": "Commented-code block (6 lines) in vps/hltv_ingest_subprocess.py:5", "shortDescription": {"text": "Commented-code block (6 lines) in vps/hltv_ingest_subprocess.py:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbc036b5d011d350", "name": "Commented-code block (7 lines) in vps/backfill_public_played_at.py:5", "shortDescription": {"text": "Commented-code block (7 lines) in vps/backfill_public_played_at.py:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8961cbf57e3509a8", "name": "Commented-code block (5 lines) in vps/main.py:50", "shortDescription": {"text": "Commented-code block (5 lines) in vps/main.py:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7af23266a47e90cf", "name": "Commented-code block (6 lines) in vps/hltv_ingest.py:48", "shortDescription": {"text": "Commented-code block (6 lines) in vps/hltv_ingest.py:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69706a181785ae74", "name": "Commented-code block (7 lines) in vps/demo_parser.py:325", "shortDescription": {"text": "Commented-code block (7 lines) in vps/demo_parser.py:325"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea54794e37b4da43", "name": "Commented-code block (5 lines) in vps/hltv_scraper.py:68", "shortDescription": {"text": "Commented-code block (5 lines) in vps/hltv_scraper.py:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29afce892b0080c9", "name": "Commented-code block (5 lines) in vps/tests/test_hltv_scraper.py:52", "shortDescription": {"text": "Commented-code block (5 lines) in vps/tests/test_hltv_scraper.py:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2536d4b86688ac8e", "name": "Commented-code block (5 lines) in vps/tests/test_stats.py:391", "shortDescription": {"text": "Commented-code block (5 lines) in vps/tests/test_stats.py:391"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c8b918e1fee9558", "name": "20 env vars used in code but missing from .env.example", "shortDescription": {"text": "20 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_API_KEY`, `APP_URL`, `DATABASE_URL`, `DEMOS_DIR`, `HLTV_DEMOS_DIR_SOFT_CAP_BYTES`, `HLTV_FORCE_PLAYWRIGHT`, `HLTV_INGEST_DAYS`, `HLTV_INGEST_ENABLED` + 12 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e70b22a82b7f700", "name": "FastAPI POST `sync_team_vetos_endpoint` without auth dependency \u2014 vps/main.py:210", "shortDescription": {"text": "FastAPI POST `sync_team_vetos_endpoint` without auth dependency \u2014 vps/main.py:210"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3358dd7eeacd826b", "name": "FastAPI POST `upload_demo` without auth dependency \u2014 vps/main.py:253", "shortDescription": {"text": "FastAPI POST `upload_demo` without auth dependency \u2014 vps/main.py:253"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8832b3cda8e33525", "name": "Dangling fetch: GET /api/team-profile?id=${encodeURIComponent(teamId)} (cs2-hub/public-team.js:42)", "shortDescription": {"text": "Dangling fetch: GET /api/team-profile?id=${encodeURIComponent(teamId)} (cs2-hub/public-team.js:42)"}, "fullDescription": {"text": "`cs2-hub/public-team.js:42` calls `GET /api/team-profile?id=${encodeURIComponent(teamId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team-profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea5d779b9b183001", "name": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.pracc_url)} (cs2-hub/schedule.js:90)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.pracc_url)} (cs2-hub/schedule.js:90)"}, "fullDescription": {"text": "`cs2-hub/schedule.js:90` calls `GET /api/calendar?url=${encodeURIComponent(teamRow.pracc_url)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38bb18b405b41dcd", "name": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.gcal_url)} (cs2-hub/schedule.js:93)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.gcal_url)} (cs2-hub/schedule.js:93)"}, "fullDescription": {"text": "`cs2-hub/schedule.js:93` calls `GET /api/calendar?url=${encodeURIComponent(teamRow.gcal_url)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-447f82e5ac8b64dc", "name": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.pracc_url)} (cs2-hub/dashboard.js:116)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.pracc_url)} (cs2-hub/dashboard.js:116)"}, "fullDescription": {"text": "`cs2-hub/dashboard.js:116` calls `GET /api/calendar?url=${encodeURIComponent(teamRow.pracc_url)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-512f2ba599b89662", "name": "Dangling fetch: POST /api/scan-scoreboard (cs2-hub/vod-detail.js:42)", "shortDescription": {"text": "Dangling fetch: POST /api/scan-scoreboard (cs2-hub/vod-detail.js:42)"}, "fullDescription": {"text": "`cs2-hub/vod-detail.js:42` calls `POST /api/scan-scoreboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scan-scoreboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-546fd09b6212fc60", "name": "Dangling fetch: POST https://steamcommunity.com/openid/login (cs2-hub/api/steam-callback.js:18)", "shortDescription": {"text": "Dangling fetch: POST https://steamcommunity.com/openid/login (cs2-hub/api/steam-callback.js:18)"}, "fullDescription": {"text": "`cs2-hub/api/steam-callback.js:18` calls `POST https://steamcommunity.com/openid/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/steamcommunity.com/openid/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffc6a9e8d4cb2357", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (cs2-hub/api/scan-scoreboard.js:32)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (cs2-hub/api/scan-scoreboard.js:32)"}, "fullDescription": {"text": "`cs2-hub/api/scan-scoreboard.js:32` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0550dd0202a43d86", "name": "Unused endpoint: POST /sync-team-vetos", "shortDescription": {"text": "Unused endpoint: POST /sync-team-vetos"}, "fullDescription": {"text": "`vps/main.py` declares `POST /sync-team-vetos` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`vps/main.py` declares `POST /upload` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24062"}, "properties": {"repository": "alexcze1/cs2-hub", "repoUrl": "https://github.com/alexcze1/cs2-hub", "branch": "main"}, "results": [{"ruleId": "scanner-be03074886660424", "level": "note", "message": {"text": "Possibly dead Python function: write_stats_for_demo"}, "properties": {"repobilityId": "b611a3b083163eb7", "scanner": "scanner-primary", "fingerprint": "be03074886660424", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vps/main.py:689"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e9d3b9d61543d49e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 cs2-hub/roster.js:67"}, "properties": {"repobilityId": "bcf4f515020317eb", "scanner": "scanner-primary", "fingerprint": "e9d3b9d61543d49e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8856f4a077b8de7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cs2-hub/schedule.js:181"}, "properties": {"repobilityId": "1579003e3eaf6a23", "scanner": "scanner-primary", "fingerprint": "8856f4a077b8de7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c41e22a44ecf8d9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cs2-hub/demo-viewer.js:142"}, "properties": {"repobilityId": "7b76094bf41f5af9", "scanner": "scanner-primary", "fingerprint": "c41e22a44ecf8d9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8bf6f541eb80f234", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 cs2-hub/vod-detail.js:129"}, "properties": {"repobilityId": "bc68700191712c0b", "scanner": "scanner-primary", "fingerprint": "8bf6f541eb80f234", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-1f6d6fb383c5af9b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cs2-hub/_design_mock.js:383"}, "properties": {"repobilityId": "ff5aa79a88d0f223", "scanner": "scanner-primary", "fingerprint": "1f6d6fb383c5af9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-75c3d8beaaaf7e8e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/antistrat-drawer.js:44"}, "properties": {"repobilityId": "85aa7bffb7e6413e", "scanner": "scanner-primary", "fingerprint": "75c3d8beaaaf7e8e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/antistrat-drawer.js"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-cd45cd697265a5d1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard.js:17"}, "properties": {"repobilityId": "2fb890fb70d29c20", "scanner": "scanner-primary", "fingerprint": "cd45cd697265a5d1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/scoreboard.js"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-17292a68065222f7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/roster.js:34"}, "properties": {"repobilityId": "2357948c22539e4d", "scanner": "scanner-primary", "fingerprint": "17292a68065222f7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/roster.js"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-0a634b92a5e61b4a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/public-team.js:23"}, "properties": {"repobilityId": "9ca50ac6929f5998", "scanner": "scanner-primary", "fingerprint": "0a634b92a5e61b4a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/public-team.js"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-9b7427ad940cc0f3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-match-reports.test.html:16"}, "properties": {"repobilityId": "234b6f46af1a2fe0", "scanner": "scanner-primary", "fingerprint": "9b7427ad940cc0f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-match-reports.test.html"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-9edf8d38f4eec9a7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-stats-cockpit.js:340"}, "properties": {"repobilityId": "c4c660c66c3bd45f", "scanner": "scanner-primary", "fingerprint": "9edf8d38f4eec9a7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-stats-cockpit.js"}, "region": {"startLine": 340}}}]}, {"ruleId": "scanner-c093b27f1b6192d4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook.js:16"}, "properties": {"repobilityId": "45e05faa39d2cb85", "scanner": "scanner-primary", "fingerprint": "c093b27f1b6192d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/stratbook.js"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-4c373737ac2c7416", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/schedule.js:46"}, "properties": {"repobilityId": "6c49e13b7b173102", "scanner": "scanner-primary", "fingerprint": "4c373737ac2c7416", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/schedule.js"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-9813006300136c29", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/round-compare.js:52"}, "properties": {"repobilityId": "5333ff5111330259", "scanner": "scanner-primary", "fingerprint": "9813006300136c29", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/round-compare.js"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-f40b9a6a77d74d04", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/save-popover.js:46"}, "properties": {"repobilityId": "8510236d6596b777", "scanner": "scanner-primary", "fingerprint": "f40b9a6a77d74d04", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/save-popover.js"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-4a48fe93f47c228d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-hero.js:119"}, "properties": {"repobilityId": "5a6479d7620af135", "scanner": "scanner-primary", "fingerprint": "4a48fe93f47c228d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-hero.js"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-79ff607e7c85a0d9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/toast.js:16"}, "properties": {"repobilityId": "0b51f1fe612acb14", "scanner": "scanner-primary", "fingerprint": "79ff607e7c85a0d9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/toast.js"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-87273089f9aa3dc1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/team-select.js:30"}, "properties": {"repobilityId": "173800049f16165e", "scanner": "scanner-primary", "fingerprint": "87273089f9aa3dc1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/team-select.js"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-ece5aefad89ac28f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/goals.js:56"}, "properties": {"repobilityId": "acb4e011b57c3edf", "scanner": "scanner-primary", "fingerprint": "ece5aefad89ac28f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/goals.js"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-8fc54d9806888c23", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-map-pool.js:91"}, "properties": {"repobilityId": "7b0d4fe06c35acc9", "scanner": "scanner-primary", "fingerprint": "8fc54d9806888c23", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-map-pool.js"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-dceaa5516bfc1e6c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/layout.js:81"}, "properties": {"repobilityId": "8326077de113236d", "scanner": "scanner-primary", "fingerprint": "dceaa5516bfc1e6c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/layout.js"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-b5483131130c0780", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-map-pool.test.html:43"}, "properties": {"repobilityId": "4797db24e00c7f9f", "scanner": "scanner-primary", "fingerprint": "b5483131130c0780", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-map-pool.test.html"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-f76604209ae69975", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/antistrat-editor.test.html:48"}, "properties": {"repobilityId": "73902dd57b5d182a", "scanner": "scanner-primary", "fingerprint": "f76604209ae69975", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/antistrat-editor.test.html"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-594e7bf895a690eb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/command-palette.js:164"}, "properties": {"repobilityId": "34ef6a807759a67c", "scanner": "scanner-primary", "fingerprint": "594e7bf895a690eb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/command-palette.js"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-b338a20cbfeac154", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-hero.test.html:80"}, "properties": {"repobilityId": "b8d9dbaef46f997b", "scanner": "scanner-primary", "fingerprint": "b338a20cbfeac154", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-hero.test.html"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-3e20a287e93d5103", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponent-detail.js:45"}, "properties": {"repobilityId": "99a6e31c2ea20a40", "scanner": "scanner-primary", "fingerprint": "3e20a287e93d5103", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/opponent-detail.js"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-ec0c6c56f9ca2f29", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponents.js:136"}, "properties": {"repobilityId": "13ee9cfdb5ecac2f", "scanner": "scanner-primary", "fingerprint": "ec0c6c56f9ca2f29", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/opponents.js"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-967e2bf86b5ccf16", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-impact.js:63"}, "properties": {"repobilityId": "c81cc92635dcb4d0", "scanner": "scanner-primary", "fingerprint": "967e2bf86b5ccf16", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-player-impact.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-0f14bf52566c5ecf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/team-autocomplete.js:97"}, "properties": {"repobilityId": "59d73eff4943b3b2", "scanner": "scanner-primary", "fingerprint": "0f14bf52566c5ecf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/team-autocomplete.js"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-65300fbe4a5c375e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard-team-stats.js:61"}, "properties": {"repobilityId": "1a4f94336f2c61b6", "scanner": "scanner-primary", "fingerprint": "65300fbe4a5c375e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/scoreboard-team-stats.js"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-9bb197bc6175df9c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook-fullscreen.html:317"}, "properties": {"repobilityId": "eab9d4a9f56710e6", "scanner": "scanner-primary", "fingerprint": "9bb197bc6175df9c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/stratbook-fullscreen.html"}, "region": {"startLine": 317}}}]}, {"ruleId": "scanner-06ba0a788a75caee", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-match-reports.js:93"}, "properties": {"repobilityId": "cbd8e90cbb1a41c9", "scanner": "scanner-primary", "fingerprint": "06ba0a788a75caee", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-match-reports.js"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-1019563d591b8e93", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats-advanced.js:179"}, "properties": {"repobilityId": "e635ef26c5a5d11d", "scanner": "scanner-primary", "fingerprint": "1019563d591b8e93", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-team-stats-advanced.js"}, "region": {"startLine": 179}}}]}, {"ruleId": "scanner-cf7817c260da14a0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/player-autocomplete.js:71"}, "properties": {"repobilityId": "81076d50ad118bde", "scanner": "scanner-primary", "fingerprint": "cf7817c260da14a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/player-autocomplete.js"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-56e3eb9bd42be852", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scrim-finder.js:62"}, "properties": {"repobilityId": "a4e3ad981594dd1b", "scanner": "scanner-primary", "fingerprint": "56e3eb9bd42be852", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/scrim-finder.js"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-e05a87d82ef4cf7e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/assign-teams-modal.js:158"}, "properties": {"repobilityId": "15e1703357b9faa5", "scanner": "scanner-primary", "fingerprint": "e05a87d82ef4cf7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/assign-teams-modal.js"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-b880add08a9874a0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/dashboard.js:198"}, "properties": {"repobilityId": "736742ba613305d1", "scanner": "scanner-primary", "fingerprint": "b880add08a9874a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/dashboard.js"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-43068ebdedc6eb9d", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in cs2-hub/dashboard.js:732"}, "properties": {"repobilityId": "7559d3e1afa06f67", "scanner": "scanner-primary", "fingerprint": "43068ebdedc6eb9d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/dashboard.js"}, "region": {"startLine": 732}}}]}, {"ruleId": "scanner-6e170352933e47be", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/hover-preview.js:60"}, "properties": {"repobilityId": "085244a072b6b1c3", "scanner": "scanner-primary", "fingerprint": "6e170352933e47be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/hover-preview.js"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-26aec272920cb546", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/scoreboard-team-stats.test.html:39"}, "properties": {"repobilityId": "758942a6b8091f0c", "scanner": "scanner-primary", "fingerprint": "26aec272920cb546", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/scoreboard-team-stats.test.html"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-245045ea73096278", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-filter.test.html:25"}, "properties": {"repobilityId": "3bbfbca328309000", "scanner": "scanner-primary", "fingerprint": "245045ea73096278", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-filter.test.html"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-f96bbddaadc14b3a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/analysis.js:93"}, "properties": {"repobilityId": "0a279a826be4862e", "scanner": "scanner-primary", "fingerprint": "f96bbddaadc14b3a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/analysis.js"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-8602c1b012e2e3b3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/keywords.js:82"}, "properties": {"repobilityId": "c4064ed29aa7a5e5", "scanner": "scanner-primary", "fingerprint": "8602c1b012e2e3b3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/keywords.js"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-6d0a4bf014f94107", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/demo-viewer.js:317"}, "properties": {"repobilityId": "22d3e031dc038bd9", "scanner": "scanner-primary", "fingerprint": "6d0a4bf014f94107", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/demo-viewer.js"}, "region": {"startLine": 317}}}]}, {"ruleId": "scanner-d3fa528b5e6e2937", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/veto-simulator.js:425"}, "properties": {"repobilityId": "e835dec96ba2fba1", "scanner": "scanner-primary", "fingerprint": "d3fa528b5e6e2937", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/veto-simulator.js"}, "region": {"startLine": 425}}}]}, {"ruleId": "scanner-8efa411e0da0082e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/demos.js:32"}, "properties": {"repobilityId": "b0ff2195e86b876a", "scanner": "scanner-primary", "fingerprint": "8efa411e0da0082e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/demos.js"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-29dd7a288a586cbd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods.js:48"}, "properties": {"repobilityId": "5611f3df0ae9c515", "scanner": "scanner-primary", "fingerprint": "29dd7a288a586cbd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods.js"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-ef1da932fed540a1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/tooltip.js:48"}, "properties": {"repobilityId": "d29be9519b656326", "scanner": "scanner-primary", "fingerprint": "ef1da932fed540a1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/tooltip.js"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-3c63770a78d627fb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/presence.js:92"}, "properties": {"repobilityId": "b5a8e02eebcb5549", "scanner": "scanner-primary", "fingerprint": "3c63770a78d627fb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/presence.js"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-b54ca1dec422f841", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/opponent-overview.js:301"}, "properties": {"repobilityId": "1d93e846553d1f11", "scanner": "scanner-primary", "fingerprint": "b54ca1dec422f841", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/opponent-overview.js"}, "region": {"startLine": 301}}}]}, {"ruleId": "scanner-20f7c1533b4ccd16", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in cs2-hub/opponent-overview.js:328"}, "properties": {"repobilityId": "06ddf199ff9b9ead", "scanner": "scanner-primary", "fingerprint": "20f7c1533b4ccd16", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/opponent-overview.js"}, "region": {"startLine": 328}}}]}, {"ruleId": "scanner-3fb36e92989b56b6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/veto.js:212"}, "properties": {"repobilityId": "a90551f802e6bc18", "scanner": "scanner-primary", "fingerprint": "3fb36e92989b56b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/veto.js"}, "region": {"startLine": 212}}}]}, {"ruleId": "scanner-a9ec80ad48c6dd89", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vod-detail.js:107"}, "properties": {"repobilityId": "e7b08293060a7633", "scanner": "scanner-primary", "fingerprint": "a9ec80ad48c6dd89", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vod-detail.js"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-109b9c325971e9dc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/issues.js:56"}, "properties": {"repobilityId": "625acb88ff770a01", "scanner": "scanner-primary", "fingerprint": "109b9c325971e9dc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/issues.js"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-07849ccfb7d57495", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-impact.test.html:38"}, "properties": {"repobilityId": "6e939dd59ffdc72e", "scanner": "scanner-primary", "fingerprint": "07849ccfb7d57495", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-player-impact.test.html"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-a3913039dc59607e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats-advanced.test.html:41"}, "properties": {"repobilityId": "d0b51548395be28b", "scanner": "scanner-primary", "fingerprint": "a3913039dc59607e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-team-stats-advanced.test.html"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-185414aa734f7f77", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-filter.js:48"}, "properties": {"repobilityId": "5a40e34000904b78", "scanner": "scanner-primary", "fingerprint": "185414aa734f7f77", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-filter.js"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-9355240ca1ff01a4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-player-panel.js:9"}, "properties": {"repobilityId": "4003e809716bbf36", "scanner": "scanner-primary", "fingerprint": "9355240ca1ff01a4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-player-panel.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-8319a40a80d53596", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats.js:87"}, "properties": {"repobilityId": "138c750534b08f6e", "scanner": "scanner-primary", "fingerprint": "8319a40a80d53596", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-team-stats.js"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-f0ec18d23f8b5fd2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/admin.js:33"}, "properties": {"repobilityId": "ecb75a1a5b3561c7", "scanner": "scanner-primary", "fingerprint": "f0ec18d23f8b5fd2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/admin.js"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-f7bcbeb65fee3113", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/stratbook-detail.js:23"}, "properties": {"repobilityId": "afe2023dbc51c394", "scanner": "scanner-primary", "fingerprint": "f7bcbeb65fee3113", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/stratbook-detail.js"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-68295c72bfcf52f4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/vods-team-stats.test.html:29"}, "properties": {"repobilityId": "f824feb54a56bb54", "scanner": "scanner-primary", "fingerprint": "68295c72bfcf52f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/vods-team-stats.test.html"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-74b16f88f0a07ddd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in cs2-hub/player-drawer.js:14"}, "properties": {"repobilityId": "95aade0b6f5927d4", "scanner": "scanner-primary", "fingerprint": "74b16f88f0a07ddd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/player-drawer.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-ddc11db5bf1b2e06", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in cs2-hub/api/calendar.js:83"}, "properties": {"repobilityId": "043efa86fa0591da", "scanner": "scanner-primary", "fingerprint": "ddc11db5bf1b2e06", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/api/calendar.js"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-41bd8ba45de07302", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in cs2-hub/api/team-profile.js:100"}, "properties": {"repobilityId": "9c94a2b9f0a2f1ea", "scanner": "scanner-primary", "fingerprint": "41bd8ba45de07302", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cs2-hub/api/team-profile.js"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-db8aee06066a59b5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in vps/main.py:128"}, "properties": {"repobilityId": "44ec19c71b442e49", "scanner": "scanner-primary", "fingerprint": "db8aee06066a59b5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vps/main.py"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-ac792505c5840b95", "level": "note", "message": {"text": "Very large file: cs2-hub/dashboard.js (1133 lines)"}, "properties": {"repobilityId": "da8376f7e8242995", "scanner": "scanner-primary", "fingerprint": "ac792505c5840b95", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4e65a30abaeb58e8", "level": "note", "message": {"text": "Very large file: cs2-hub/analysis.js (2096 lines)"}, "properties": {"repobilityId": "d04e913620b22a89", "scanner": "scanner-primary", "fingerprint": "4e65a30abaeb58e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8a84fe34f00adb60", "level": "note", "message": {"text": "Very large file: cs2-hub/demo-viewer.js (1923 lines)"}, "properties": {"repobilityId": "5aaea8550e14e8f5", "scanner": "scanner-primary", "fingerprint": "8a84fe34f00adb60", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-933ff0aa446dee83", "level": "note", "message": {"text": "Very large file: cs2-hub/demos.js (1328 lines)"}, "properties": {"repobilityId": "1111811238ffbf17", "scanner": "scanner-primary", "fingerprint": "933ff0aa446dee83", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7879502fefb59e15", "level": "note", "message": {"text": "Very large file: vps/demo_parser.py (2091 lines)"}, "properties": {"repobilityId": "fce5f8a9e7d5275b", "scanner": "scanner-primary", "fingerprint": "7879502fefb59e15", "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": "2071f4cf258691da", "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": "7859ceb0f4ffc48b", "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": "a491518e89048b7a", "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": "e3a9f9e419ec3f8c", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "91c70ab85692dff1", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-1b3c065cc65d895e", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/vods-stats-cockpit.js:7"}, "properties": {"repobilityId": "35e4c4c3511c1fe2", "scanner": "scanner-primary", "fingerprint": "1b3c065cc65d895e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e7f2c18e3cc274d", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/roster-stats-render.js:19"}, "properties": {"repobilityId": "5f47c6893f2874f0", "scanner": "scanner-primary", "fingerprint": "6e7f2c18e3cc274d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6757446da0848f36", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/save-popover.js:6"}, "properties": {"repobilityId": "a8deb1c5f6ee39ca", "scanner": "scanner-primary", "fingerprint": "6757446da0848f36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-313a55761d222980", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/layout.js:123"}, "properties": {"repobilityId": "0289ef92769064dd", "scanner": "scanner-primary", "fingerprint": "313a55761d222980", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8e0cc2d02b95441", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/post-end-tick.js:3"}, "properties": {"repobilityId": "27c9c20e4c58f78b", "scanner": "scanner-primary", "fingerprint": "d8e0cc2d02b95441", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dff1bec71c27a7a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/opponent-detail.js:364"}, "properties": {"repobilityId": "71bd7cba0e964ae8", "scanner": "scanner-primary", "fingerprint": "dff1bec71c27a7a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db15374864472296", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/assign-teams.js:29"}, "properties": {"repobilityId": "07484b4b43fee9ce", "scanner": "scanner-primary", "fingerprint": "db15374864472296", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a22d31ab6ed7c588", "level": "none", "message": {"text": "Commented-code block (8 lines) in cs2-hub/team-autocomplete.js:3"}, "properties": {"repobilityId": "e67cf52cdb4871d3", "scanner": "scanner-primary", "fingerprint": "a22d31ab6ed7c588", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-213f132124749270", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/scrim-finder.js:1"}, "properties": {"repobilityId": "79d3fea3c17bdc55", "scanner": "scanner-primary", "fingerprint": "213f132124749270", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e86e1c666b84096", "level": "none", "message": {"text": "Commented-code block (10 lines) in cs2-hub/assign-teams-modal.js:91"}, "properties": {"repobilityId": "7240f835b7041464", "scanner": "scanner-primary", "fingerprint": "2e86e1c666b84096", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24df5d6f68ce5038", "level": "none", "message": {"text": "Commented-code block (6 lines) in cs2-hub/dashboard.js:394"}, "properties": {"repobilityId": "d8dc51a4fcde05c4", "scanner": "scanner-primary", "fingerprint": "24df5d6f68ce5038", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfefc88ebcbc55df", "level": "none", "message": {"text": "Commented-code block (7 lines) in cs2-hub/pracc-sync.js:20"}, "properties": {"repobilityId": "8ad9e399e0dfa607", "scanner": "scanner-primary", "fingerprint": "bfefc88ebcbc55df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77c979a7c406e4dc", "level": "none", "message": {"text": "Commented-code block (7 lines) in cs2-hub/analysis.js:149"}, "properties": {"repobilityId": "a278821bf35f09d8", "scanner": "scanner-primary", "fingerprint": "77c979a7c406e4dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c69443d8be62ff1d", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/demo-viewer.js:544"}, "properties": {"repobilityId": "e44b97cd67d931d7", "scanner": "scanner-primary", "fingerprint": "c69443d8be62ff1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18410a18d416ef21", "level": "none", "message": {"text": "Commented-code block (6 lines) in cs2-hub/antistrat-editor.js:1"}, "properties": {"repobilityId": "e91046e3d801b1e7", "scanner": "scanner-primary", "fingerprint": "18410a18d416ef21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bb1ee0eba1c4bda", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/analysis-rounds.js:38"}, "properties": {"repobilityId": "8a2c02038108bd75", "scanner": "scanner-primary", "fingerprint": "9bb1ee0eba1c4bda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e46d8cad43f44fe", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/charts.js:3"}, "properties": {"repobilityId": "7f19110ec27752ed", "scanner": "scanner-primary", "fingerprint": "8e46d8cad43f44fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c522a5062ddd9d43", "level": "none", "message": {"text": "Commented-code block (7 lines) in cs2-hub/veto-simulator.js:3"}, "properties": {"repobilityId": "72506078f02c7f78", "scanner": "scanner-primary", "fingerprint": "c522a5062ddd9d43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b03d05bdb95782ec", "level": "none", "message": {"text": "Commented-code block (6 lines) in cs2-hub/pixel-field.js:1"}, "properties": {"repobilityId": "15609fd9c8e1d7f3", "scanner": "scanner-primary", "fingerprint": "b03d05bdb95782ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66230672d841738e", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/auto-fill-vod.js:59"}, "properties": {"repobilityId": "e67c19d9fd97c179", "scanner": "scanner-primary", "fingerprint": "66230672d841738e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa2a726cec86a5a8", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/demos.js:72"}, "properties": {"repobilityId": "d48e99d9c3218827", "scanner": "scanner-primary", "fingerprint": "fa2a726cec86a5a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74d108f471f3706d", "level": "none", "message": {"text": "Commented-code block (5 lines) in cs2-hub/vods.js:307"}, "properties": {"repobilityId": "67466dca29f3a38d", "scanner": "scanner-primary", "fingerprint": "74d108f471f3706d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-beb512e62e6adbfc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/seed-diamant-ancient.mjs:112"}, "properties": {"repobilityId": "bf2a8a5bd2879d5a", "scanner": "scanner-primary", "fingerprint": "beb512e62e6adbfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5d05bc301cc53858", "level": "none", "message": {"text": "Commented-code block (8 lines) in cs2-hub/opponent-overview.js:52"}, "properties": {"repobilityId": "5bbc7f895dbec5c4", "scanner": "scanner-primary", "fingerprint": "5d05bc301cc53858", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc239d66fc7ed0f3", "level": "none", "message": {"text": "Commented-code block (6 lines) in cs2-hub/veto.js:304"}, "properties": {"repobilityId": "16b27214c70d1238", "scanner": "scanner-primary", "fingerprint": "fc239d66fc7ed0f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddc72bf23e90b3c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/seed-demo.mjs:15"}, "properties": {"repobilityId": "1efbee017d0fe7a2", "scanner": "scanner-primary", "fingerprint": "ddc72bf23e90b3c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c33a7f143b0b1cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/vod-detail.js:42"}, "properties": {"repobilityId": "b0c58f7fc818c986", "scanner": "scanner-primary", "fingerprint": "4c33a7f143b0b1cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-35a87a105395d889", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/migrate-strats.mjs:29"}, "properties": {"repobilityId": "a7891886196b3119", "scanner": "scanner-primary", "fingerprint": "35a87a105395d889", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-745250d22b7ad2af", "level": "none", "message": {"text": "Commented-code block (6 lines) in cs2-hub/team-stats-aggregate.js:29"}, "properties": {"repobilityId": "c6c907988af1b333", "scanner": "scanner-primary", "fingerprint": "745250d22b7ad2af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c98c54df6f1b2ad6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/admin.js:25"}, "properties": {"repobilityId": "2544d7312ba4693f", "scanner": "scanner-primary", "fingerprint": "c98c54df6f1b2ad6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-21cee910d5891c9d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/export-calendar.js:8"}, "properties": {"repobilityId": "6fb4a0590931d776", "scanner": "scanner-primary", "fingerprint": "21cee910d5891c9d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c665e71b7bdb61ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/steam-callback.js:18"}, "properties": {"repobilityId": "14128a3968596b92", "scanner": "scanner-primary", "fingerprint": "c665e71b7bdb61ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec27f96f8284bada", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/scan-scoreboard.js:10"}, "properties": {"repobilityId": "82edfc5bf14e052c", "scanner": "scanner-primary", "fingerprint": "ec27f96f8284bada", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a690e7defbf5512c", "level": "none", "message": {"text": "Commented-code block (6 lines) in cs2-hub/api/team-profile.js:4"}, "properties": {"repobilityId": "87df9ffc0c468c63", "scanner": "scanner-primary", "fingerprint": "a690e7defbf5512c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efba05a330dc44fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/team-profile.js:25"}, "properties": {"repobilityId": "7a4b4119225d419f", "scanner": "scanner-primary", "fingerprint": "efba05a330dc44fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0202b76c56197613", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cs2-hub/api/admin.js:20"}, "properties": {"repobilityId": "9b058ad6cf14b9a7", "scanner": "scanner-primary", "fingerprint": "0202b76c56197613", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69a51cb8e65b7544", "level": "none", "message": {"text": "Commented-code block (7 lines) in vps/hltv_refresh_subprocess.py:7"}, "properties": {"repobilityId": "b060ad217362f4fe", "scanner": "scanner-primary", "fingerprint": "69a51cb8e65b7544", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acd369b43efcb44b", "level": "none", "message": {"text": "Commented-code block (11 lines) in vps/backfill_public_scores.py:13"}, "properties": {"repobilityId": "78202a876c786b88", "scanner": "scanner-primary", "fingerprint": "acd369b43efcb44b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38a806bfb5aa6c64", "level": "none", "message": {"text": "Commented-code block (6 lines) in vps/hltv_ingest_subprocess.py:5"}, "properties": {"repobilityId": "8584553c9be77c7e", "scanner": "scanner-primary", "fingerprint": "38a806bfb5aa6c64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbc036b5d011d350", "level": "none", "message": {"text": "Commented-code block (7 lines) in vps/backfill_public_played_at.py:5"}, "properties": {"repobilityId": "6dbcad1af2368df0", "scanner": "scanner-primary", "fingerprint": "dbc036b5d011d350", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8961cbf57e3509a8", "level": "none", "message": {"text": "Commented-code block (5 lines) in vps/main.py:50"}, "properties": {"repobilityId": "7e5a2ed6484c2ad8", "scanner": "scanner-primary", "fingerprint": "8961cbf57e3509a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7af23266a47e90cf", "level": "none", "message": {"text": "Commented-code block (6 lines) in vps/hltv_ingest.py:48"}, "properties": {"repobilityId": "e2feb6f33a127584", "scanner": "scanner-primary", "fingerprint": "7af23266a47e90cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69706a181785ae74", "level": "none", "message": {"text": "Commented-code block (7 lines) in vps/demo_parser.py:325"}, "properties": {"repobilityId": "ebc50f4867003291", "scanner": "scanner-primary", "fingerprint": "69706a181785ae74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea54794e37b4da43", "level": "none", "message": {"text": "Commented-code block (5 lines) in vps/hltv_scraper.py:68"}, "properties": {"repobilityId": "f8f57bd8a63f5f38", "scanner": "scanner-primary", "fingerprint": "ea54794e37b4da43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29afce892b0080c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in vps/tests/test_hltv_scraper.py:52"}, "properties": {"repobilityId": "85b24c3e11881652", "scanner": "scanner-primary", "fingerprint": "29afce892b0080c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2536d4b86688ac8e", "level": "none", "message": {"text": "Commented-code block (5 lines) in vps/tests/test_stats.py:391"}, "properties": {"repobilityId": "6be37f7d8a6d1356", "scanner": "scanner-primary", "fingerprint": "2536d4b86688ac8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c8b918e1fee9558", "level": "note", "message": {"text": "20 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "bd1f6d44917e8105", "scanner": "scanner-primary", "fingerprint": "7c8b918e1fee9558", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-8e70b22a82b7f700", "level": "error", "message": {"text": "FastAPI POST `sync_team_vetos_endpoint` without auth dependency \u2014 vps/main.py:210"}, "properties": {"repobilityId": "3ae0d2e60a7de0fc", "scanner": "scanner-primary", "fingerprint": "8e70b22a82b7f700", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vps/main.py"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-3358dd7eeacd826b", "level": "error", "message": {"text": "FastAPI POST `upload_demo` without auth dependency \u2014 vps/main.py:253"}, "properties": {"repobilityId": "3bbab1f83e4af9f3", "scanner": "scanner-primary", "fingerprint": "3358dd7eeacd826b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vps/main.py"}, "region": {"startLine": 253}}}]}, {"ruleId": "scanner-8832b3cda8e33525", "level": "error", "message": {"text": "Dangling fetch: GET /api/team-profile?id=${encodeURIComponent(teamId)} (cs2-hub/public-team.js:42)"}, "properties": {"repobilityId": "a4d3cc1f8677c167", "scanner": "scanner-primary", "fingerprint": "8832b3cda8e33525", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea5d779b9b183001", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.pracc_url)} (cs2-hub/schedule.js:90)"}, "properties": {"repobilityId": "2aebda14371da1fe", "scanner": "scanner-primary", "fingerprint": "ea5d779b9b183001", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38bb18b405b41dcd", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.gcal_url)} (cs2-hub/schedule.js:93)"}, "properties": {"repobilityId": "289c67285208e145", "scanner": "scanner-primary", "fingerprint": "38bb18b405b41dcd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-447f82e5ac8b64dc", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar?url=${encodeURIComponent(teamRow.pracc_url)} (cs2-hub/dashboard.js:116)"}, "properties": {"repobilityId": "e630e863edbdf26f", "scanner": "scanner-primary", "fingerprint": "447f82e5ac8b64dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-512f2ba599b89662", "level": "error", "message": {"text": "Dangling fetch: POST /api/scan-scoreboard (cs2-hub/vod-detail.js:42)"}, "properties": {"repobilityId": "79a42f9ed747516d", "scanner": "scanner-primary", "fingerprint": "512f2ba599b89662", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-546fd09b6212fc60", "level": "error", "message": {"text": "Dangling fetch: POST https://steamcommunity.com/openid/login (cs2-hub/api/steam-callback.js:18)"}, "properties": {"repobilityId": "9dae0d46eec44b68", "scanner": "scanner-primary", "fingerprint": "546fd09b6212fc60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffc6a9e8d4cb2357", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (cs2-hub/api/scan-scoreboard.js:32)"}, "properties": {"repobilityId": "c8158afba718a37e", "scanner": "scanner-primary", "fingerprint": "ffc6a9e8d4cb2357", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0550dd0202a43d86", "level": "note", "message": {"text": "Unused endpoint: POST /sync-team-vetos"}, "properties": {"repobilityId": "d5791c2a0f28b1ab", "scanner": "scanner-primary", "fingerprint": "0550dd0202a43d86", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "5048e6c27f561d38", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}