{"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-ca11df40c3696ab0", "name": "Stray `console.log` in TS/JS \u2014 server/pong-online/server.js:1254", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/pong-online/server.js:1254"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f24734e9b60b603", "name": "Insecure pattern 'direct_innerhtml_assignment' in js/hub.js:90", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/hub.js:90"}, "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-860a1f1a2c7b3f49", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/reflex/index.html:252", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/reflex/index.html:252"}, "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-72c659b032f3d44c", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/adventskalender/app.js:119", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/adventskalender/app.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-e61f6eff68c2af56", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/frequenz/index.html:201", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/frequenz/index.html:201"}, "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-769d23aea751d0cf", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/minesweeper/index.html:287", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/minesweeper/index.html:287"}, "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-eaf0ebfcbed818ed", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/pong/index.html:306", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/pong/index.html:306"}, "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-dffec4bcdbc29dd5", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/youtube-race/index.html:263", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/youtube-race/index.html:263"}, "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-d028a20c207d639e", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/wirtschafts-race/index.html:378", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/wirtschafts-race/index.html:378"}, "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-5f1022559b141aa9", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tanks/game.js:762", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tanks/game.js:762"}, "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-88ac8bd35bbf1662", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/jetspiel/game.js:1384", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/jetspiel/game.js:1384"}, "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-7af329b70d3c6666", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/memory/index.html:270", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/memory/index.html:270"}, "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-992817d9dc4f1add", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/towerdefense/game.js:471", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/towerdefense/game.js:471"}, "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-998e52eca4ab5441", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/gaming-race/index.html:368", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/gaming-race/index.html:368"}, "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-aadfbcd168774d0e", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/cps/index.html:262", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/cps/index.html:262"}, "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-77bc98cd5633a7e1", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/blockblast/game.js:508", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/blockblast/game.js:508"}, "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-fad0166cde043952", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/trivia/game.js:129", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/trivia/game.js:129"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3af7658b37fc6f5c", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/uno/game.js:168", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/uno/game.js:168"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11be81e761a0014b", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tictactoe/index.html:326", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tictactoe/index.html:326"}, "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-61cc9850bacada18", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/seeschlacht/index.html:187", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/seeschlacht/index.html:187"}, "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-a678cb5b89d16fda", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/todo/index.html:309", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/todo/index.html:309"}, "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-ce11c51236bea12c", "name": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tycoon/game.js:323", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tycoon/game.js:323"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8418ca3bc875f2c2", "name": "Very large file: spiele/jetspiel/game.js (3934 lines)", "shortDescription": {"text": "Very large file: spiele/jetspiel/game.js (3934 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-35ef57779cbf48f9", "name": "Very large file: spiele/towerdefense/game.js (3540 lines)", "shortDescription": {"text": "Very large file: spiele/towerdefense/game.js (3540 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-d3940ca1aa2ddd81", "name": "Very large file: server/pong-online/trivia-bulk.js (8390 lines)", "shortDescription": {"text": "Very large file: server/pong-online/trivia-bulk.js (8390 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 25 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01f96f71d9907a8c", "name": "README lacks setup or run instructions", "shortDescription": {"text": "README lacks setup or run instructions"}, "fullDescription": {"text": "A README exists, but it does not contain common install/setup/run markers. This matches a frequent generated-code pattern: UI is present, operational handoff is thin."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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, tests, operator-readme. 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": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edd1a7c5d7a134b6", "name": "Legacy-named symbol `hub_filter_v1` in js/hub.js:17", "shortDescription": {"text": "Legacy-named symbol `hub_filter_v1` in js/hub.js:17"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fdb232f9ba0804e9", "name": "Legacy-named symbol `jet_touchbar_v1` in spiele/jetspiel/game.js:3785", "shortDescription": {"text": "Legacy-named symbol `jet_touchbar_v1` in spiele/jetspiel/game.js:3785"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-22d092ce55d31888", "name": "Legacy-named symbol `td_settings_v1` in spiele/towerdefense/game.js:378", "shortDescription": {"text": "Legacy-named symbol `td_settings_v1` in spiele/towerdefense/game.js:378"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3eba704a19e26f78", "name": "Legacy-named symbol `blockblast_best_v1` in spiele/blockblast/game.js:24", "shortDescription": {"text": "Legacy-named symbol `blockblast_best_v1` in spiele/blockblast/game.js:24"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a5653a23aa7e55d", "name": "Legacy-named symbol `uno_name_v1` in spiele/uno/game.js:40", "shortDescription": {"text": "Legacy-named symbol `uno_name_v1` in spiele/uno/game.js:40"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e729d6cd465cc4f", "name": "Legacy-named symbol `thomasfun_clicker_v1` in spiele/tycoon/game.js:5", "shortDescription": {"text": "Legacy-named symbol `thomasfun_clicker_v1` in spiele/tycoon/game.js:5"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21208"}, "properties": {"repository": "Thomas76149/thomas-projekte", "repoUrl": "https://github.com/Thomas76149/thomas-projekte", "branch": "main"}, "results": [{"ruleId": "scanner-ca11df40c3696ab0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/pong-online/server.js:1254"}, "properties": {"repobilityId": "a55ceb94822f4c99", "scanner": "scanner-primary", "fingerprint": "ca11df40c3696ab0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9f24734e9b60b603", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in js/hub.js:90"}, "properties": {"repobilityId": "d635108a2314aeee", "scanner": "scanner-primary", "fingerprint": "9f24734e9b60b603", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "js/hub.js"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-860a1f1a2c7b3f49", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/reflex/index.html:252"}, "properties": {"repobilityId": "6c205c991da74c9b", "scanner": "scanner-primary", "fingerprint": "860a1f1a2c7b3f49", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/reflex/index.html"}, "region": {"startLine": 252}}}]}, {"ruleId": "scanner-72c659b032f3d44c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/adventskalender/app.js:119"}, "properties": {"repobilityId": "c52de809e09b72bb", "scanner": "scanner-primary", "fingerprint": "72c659b032f3d44c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/adventskalender/app.js"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-e61f6eff68c2af56", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/frequenz/index.html:201"}, "properties": {"repobilityId": "377ff6013707f934", "scanner": "scanner-primary", "fingerprint": "e61f6eff68c2af56", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/frequenz/index.html"}, "region": {"startLine": 201}}}]}, {"ruleId": "scanner-769d23aea751d0cf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/minesweeper/index.html:287"}, "properties": {"repobilityId": "df395dea296b208e", "scanner": "scanner-primary", "fingerprint": "769d23aea751d0cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/minesweeper/index.html"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-eaf0ebfcbed818ed", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/pong/index.html:306"}, "properties": {"repobilityId": "77643de36905f1ba", "scanner": "scanner-primary", "fingerprint": "eaf0ebfcbed818ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/pong/index.html"}, "region": {"startLine": 306}}}]}, {"ruleId": "scanner-dffec4bcdbc29dd5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/youtube-race/index.html:263"}, "properties": {"repobilityId": "ae6ddb261ba40888", "scanner": "scanner-primary", "fingerprint": "dffec4bcdbc29dd5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/youtube-race/index.html"}, "region": {"startLine": 263}}}]}, {"ruleId": "scanner-d028a20c207d639e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/wirtschafts-race/index.html:378"}, "properties": {"repobilityId": "111842fb989b04d7", "scanner": "scanner-primary", "fingerprint": "d028a20c207d639e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/wirtschafts-race/index.html"}, "region": {"startLine": 378}}}]}, {"ruleId": "scanner-5f1022559b141aa9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tanks/game.js:762"}, "properties": {"repobilityId": "7f31a2624b8bc58f", "scanner": "scanner-primary", "fingerprint": "5f1022559b141aa9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/tanks/game.js"}, "region": {"startLine": 762}}}]}, {"ruleId": "scanner-88ac8bd35bbf1662", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/jetspiel/game.js:1384"}, "properties": {"repobilityId": "ae5293c1865d448e", "scanner": "scanner-primary", "fingerprint": "88ac8bd35bbf1662", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/jetspiel/game.js"}, "region": {"startLine": 1384}}}]}, {"ruleId": "scanner-7af329b70d3c6666", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/memory/index.html:270"}, "properties": {"repobilityId": "907e2f924152b60c", "scanner": "scanner-primary", "fingerprint": "7af329b70d3c6666", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/memory/index.html"}, "region": {"startLine": 270}}}]}, {"ruleId": "scanner-992817d9dc4f1add", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/towerdefense/game.js:471"}, "properties": {"repobilityId": "75324ca9ac98b973", "scanner": "scanner-primary", "fingerprint": "992817d9dc4f1add", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/towerdefense/game.js"}, "region": {"startLine": 471}}}]}, {"ruleId": "scanner-998e52eca4ab5441", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/gaming-race/index.html:368"}, "properties": {"repobilityId": "a06b7c265bab6265", "scanner": "scanner-primary", "fingerprint": "998e52eca4ab5441", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/gaming-race/index.html"}, "region": {"startLine": 368}}}]}, {"ruleId": "scanner-aadfbcd168774d0e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/cps/index.html:262"}, "properties": {"repobilityId": "4d7265abd2c9f1a0", "scanner": "scanner-primary", "fingerprint": "aadfbcd168774d0e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/cps/index.html"}, "region": {"startLine": 262}}}]}, {"ruleId": "scanner-77bc98cd5633a7e1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/blockblast/game.js:508"}, "properties": {"repobilityId": "f6fad080e0e02839", "scanner": "scanner-primary", "fingerprint": "77bc98cd5633a7e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/blockblast/game.js"}, "region": {"startLine": 508}}}]}, {"ruleId": "scanner-fad0166cde043952", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/trivia/game.js:129"}, "properties": {"repobilityId": "fb7b2561342d35ea", "scanner": "scanner-primary", "fingerprint": "fad0166cde043952", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/trivia/game.js"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-3af7658b37fc6f5c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/uno/game.js:168"}, "properties": {"repobilityId": "9525b0c26eb1c768", "scanner": "scanner-primary", "fingerprint": "3af7658b37fc6f5c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/uno/game.js"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-11be81e761a0014b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tictactoe/index.html:326"}, "properties": {"repobilityId": "cb508aa7fdb48d1d", "scanner": "scanner-primary", "fingerprint": "11be81e761a0014b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/tictactoe/index.html"}, "region": {"startLine": 326}}}]}, {"ruleId": "scanner-61cc9850bacada18", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/seeschlacht/index.html:187"}, "properties": {"repobilityId": "c4efc02fc43d2fd6", "scanner": "scanner-primary", "fingerprint": "61cc9850bacada18", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/seeschlacht/index.html"}, "region": {"startLine": 187}}}]}, {"ruleId": "scanner-a678cb5b89d16fda", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/todo/index.html:309"}, "properties": {"repobilityId": "d96397752f009c68", "scanner": "scanner-primary", "fingerprint": "a678cb5b89d16fda", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/todo/index.html"}, "region": {"startLine": 309}}}]}, {"ruleId": "scanner-ce11c51236bea12c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in spiele/tycoon/game.js:323"}, "properties": {"repobilityId": "d550c23c1615f6f9", "scanner": "scanner-primary", "fingerprint": "ce11c51236bea12c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spiele/tycoon/game.js"}, "region": {"startLine": 323}}}]}, {"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-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-8418ca3bc875f2c2", "level": "note", "message": {"text": "Very large file: spiele/jetspiel/game.js (3934 lines)"}, "properties": {"repobilityId": "42c526d8cf33b7c1", "scanner": "scanner-primary", "fingerprint": "8418ca3bc875f2c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-35ef57779cbf48f9", "level": "note", "message": {"text": "Very large file: spiele/towerdefense/game.js (3540 lines)"}, "properties": {"repobilityId": "25127e7b644b22bf", "scanner": "scanner-primary", "fingerprint": "35ef57779cbf48f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d3940ca1aa2ddd81", "level": "note", "message": {"text": "Very large file: server/pong-online/trivia-bulk.js (8390 lines)"}, "properties": {"repobilityId": "92304925ba746690", "scanner": "scanner-primary", "fingerprint": "d3940ca1aa2ddd81", "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": "87b278ca55858e3b", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-01f96f71d9907a8c", "level": "note", "message": {"text": "README lacks setup or run instructions"}, "properties": {"repobilityId": "9e7d29ec1a7503e6", "scanner": "scanner-primary", "fingerprint": "01f96f71d9907a8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "59317b63e9da69d1", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "a27933e5b6ea8cf8", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "fe212ca71ff3adbc", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-edd1a7c5d7a134b6", "level": "note", "message": {"text": "Legacy-named symbol `hub_filter_v1` in js/hub.js:17"}, "properties": {"repobilityId": "2f5e62de90701fa0", "scanner": "scanner-primary", "fingerprint": "edd1a7c5d7a134b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fdb232f9ba0804e9", "level": "note", "message": {"text": "Legacy-named symbol `jet_touchbar_v1` in spiele/jetspiel/game.js:3785"}, "properties": {"repobilityId": "4353e1fdedc81b65", "scanner": "scanner-primary", "fingerprint": "fdb232f9ba0804e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-22d092ce55d31888", "level": "note", "message": {"text": "Legacy-named symbol `td_settings_v1` in spiele/towerdefense/game.js:378"}, "properties": {"repobilityId": "c7c7ee16fb84e147", "scanner": "scanner-primary", "fingerprint": "22d092ce55d31888", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3eba704a19e26f78", "level": "note", "message": {"text": "Legacy-named symbol `blockblast_best_v1` in spiele/blockblast/game.js:24"}, "properties": {"repobilityId": "31dbe6024d429c95", "scanner": "scanner-primary", "fingerprint": "3eba704a19e26f78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0a5653a23aa7e55d", "level": "note", "message": {"text": "Legacy-named symbol `uno_name_v1` in spiele/uno/game.js:40"}, "properties": {"repobilityId": "ba1381161d2b84ff", "scanner": "scanner-primary", "fingerprint": "0a5653a23aa7e55d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2e729d6cd465cc4f", "level": "note", "message": {"text": "Legacy-named symbol `thomasfun_clicker_v1` in spiele/tycoon/game.js:5"}, "properties": {"repobilityId": "4e45e22d207df1c5", "scanner": "scanner-primary", "fingerprint": "2e729d6cd465cc4f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}]}]}