{"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-6604e013ef8c7a99", "name": "Possibly dead Python function: find_softlocks", "shortDescription": {"text": "Possibly dead Python function: find_softlocks"}, "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-ca39600cbd8b6d91", "name": "Possibly dead Python function: build_credits_for_game", "shortDescription": {"text": "Possibly dead Python function: build_credits_for_game"}, "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-96ec94cf8d7cda58", "name": "Possibly dead Python function: ingest_gate_report", "shortDescription": {"text": "Possibly dead Python function: ingest_gate_report"}, "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-dc412ea5d11f56e5", "name": "Possibly dead Python function: load_journal", "shortDescription": {"text": "Possibly dead Python function: load_journal"}, "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-9a2930c18661b56f", "name": "Possibly dead Python function: platformer_js", "shortDescription": {"text": "Possibly dead Python function: platformer_js"}, "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-b11449ca835ffce3", "name": "Possibly dead Python function: shooter_js", "shortDescription": {"text": "Possibly dead Python function: shooter_js"}, "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-bc0813c15f419e68", "name": "Possibly dead Python function: collect_js", "shortDescription": {"text": "Possibly dead Python function: collect_js"}, "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-fb16f0e9928c0cda", "name": "Possibly dead Python function: check_perf", "shortDescription": {"text": "Possibly dead Python function: check_perf"}, "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-a00922b325bca659", "name": "Possibly dead Python function: diff_against", "shortDescription": {"text": "Possibly dead Python function: diff_against"}, "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-355f2e5c31685021", "name": "Possibly dead Python function: register_boss", "shortDescription": {"text": "Possibly dead Python function: register_boss"}, "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-df0bb5cdbdfb4bfe", "name": "Possibly dead Python function: register_npc_usage", "shortDescription": {"text": "Possibly dead Python function: register_npc_usage"}, "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-bcaddd1439fa1fea", "name": "Possibly dead Python function: generate_character_set", "shortDescription": {"text": "Possibly dead Python function: generate_character_set"}, "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-306ee305bb84b4bc", "name": "Possibly dead Python function: generate_enemy_sprites", "shortDescription": {"text": "Possibly dead Python function: generate_enemy_sprites"}, "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-a6b9bcbecc97c3eb", "name": "Possibly dead Python function: validate_game_references", "shortDescription": {"text": "Possibly dead Python function: validate_game_references"}, "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-ddbf82c750f767de", "name": "Possibly dead Python function: map_all_enemies", "shortDescription": {"text": "Possibly dead Python function: map_all_enemies"}, "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-0fdb70882fffc49a", "name": "Possibly dead Python function: copy_atlas_to_game", "shortDescription": {"text": "Possibly dead Python function: copy_atlas_to_game"}, "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-6261716d1ca8a759", "name": "Possibly dead Python function: generate_structured_animation_specs", "shortDescription": {"text": "Possibly dead Python function: generate_structured_animation_specs"}, "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-8d81f0cd6532068c", "name": "Possibly dead Python function: generate_js_enemy_animation_registrations", "shortDescription": {"text": "Possibly dead Python function: generate_js_enemy_animation_registrations"}, "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-2bc5b47d8aa7e3db", "name": "Possibly dead Python function: generate_enemy_type_to_kenney_map_js", "shortDescription": {"text": "Possibly dead Python function: generate_enemy_type_to_kenney_map_js"}, "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-0a399816cc5a4c5c", "name": "Possibly dead Python function: compose_game_levels", "shortDescription": {"text": "Possibly dead Python function: compose_game_levels"}, "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-43652361fd438417", "name": "Possibly dead Python function: remap_music_from_per_game", "shortDescription": {"text": "Possibly dead Python function: remap_music_from_per_game"}, "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-8051bd17fad80712", "name": "Possibly dead Python function: copy_audio_for_game", "shortDescription": {"text": "Possibly dead Python function: copy_audio_for_game"}, "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-bb2a24da14459167", "name": "Stray `console.log` in TS/JS \u2014 pages/games/@slug/+onBeforePrerenderStart.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 pages/games/@slug/+onBeforePrerenderStart.ts:27"}, "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-886a85a6d03a00db", "name": "`truncate` class without `title=` for hover reveal \u2014 pages/achievements/+Page.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pages/achievements/+Page.tsx:114"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00568fb84fb7c64b", "name": "`truncate` class without `title=` for hover reveal \u2014 pages/profile/+Page.tsx:144", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 pages/profile/+Page.tsx:144"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0545b9498bc015ba", "name": "Stray `console.log` in TS/JS \u2014 pipeline/templates/3d-arpg/game.js:356", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 pipeline/templates/3d-arpg/game.js:356"}, "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-fcb81c2bfa0e4556", "name": "TODO/FIXME marker in shipping code \u2014 pipeline/templates/shared/turn_based_combat.js:245", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 pipeline/templates/shared/turn_based_combat.js:245"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d7b46b4d0a2174a", "name": "Stray `console.log` in TS/JS \u2014 pipeline/templates/3d-platformer/game.js:152", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 pipeline/templates/3d-platformer/game.js:152"}, "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-2481921cd07ebf74", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/auth/UserMenu.tsx:223", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/auth/UserMenu.tsx:223"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6979f972a0583f6", "name": "TODO/FIXME marker in shipping code \u2014 src/components/game/GamePlayer.tsx:46", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/game/GamePlayer.tsx:46"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92209927b032534a", "name": "Stray `console.log` in TS/JS \u2014 src/components/game/GamePlayer.tsx:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/game/GamePlayer.tsx:47"}, "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-5e17761f63c8895d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/game/GameCard.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/game/GameCard.tsx:67"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5ddfe6f7562f1f2", "name": "Insecure pattern 'subprocess_shell_true' in upload_game.py:85", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in upload_game.py:85"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8d2f3762d89ec0db", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/lumen-run/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/lumen-run/game_controls.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-fe9ed3b08d8315ca", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/lumen-run/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/lumen-run/runtime/ffg_shell.js:35"}, "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-fa08b991a3080be4", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/game_controls.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-835af292974f04b9", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/ffg_campaign.js:329", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/ffg_campaign.js:329"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bea0299aca1435d2", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/ffg_shell.js:35"}, "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-51edc597a39badf6", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js:1747", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js:1747"}, "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-7282059c3aad5abb", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/3d/ffg_kernel_3d.js:221", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/3d/ffg_kernel_3d.js:221"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6bbb31e7df672183", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/game_controls.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-eb191d2298d5d4d6", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/ffg_shell.js:35"}, "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-5695f626ded3342e", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/net/ffg_online.js:51", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/net/ffg_online.js:51"}, "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-7fdac34344df1f11", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/3d/ffg_navalfree3d.js:1178", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/3d/ffg_navalfree3d.js:1178"}, "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-d92398f8b169dba6", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/3d/ffg_kernel_3d.js:144", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/3d/ffg_kernel_3d.js:144"}, "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-17b017359e27848e", "name": "Insecure pattern 'document_write' in games/shroud-of-the-ancients/index.html:26", "shortDescription": {"text": "Insecure pattern 'document_write' in games/shroud-of-the-ancients/index.html:26"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8b65cf5081a37de", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/block-breaker/pause.js:44", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/block-breaker/pause.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-995b1592d2afabb8", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/block-breaker/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/block-breaker/game_controls.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-42b65ffdfaf01e28", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/skybattle/game.jsx:1190", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/skybattle/game.jsx:1190"}, "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-3789a55f6d70a66c", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/starlance/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/starlance/game_controls.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-e6f7cc7c608c1547", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/starlance/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/starlance/runtime/ffg_shell.js:35"}, "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-29b03805be8039c6", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish/runtime/ffg_shell.js:35"}, "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-602499ee88870641", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/rift-tactics/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/rift-tactics/runtime/ffg_shell.js:35"}, "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-37d47364841e0d45", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/game_controls.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-cbb98cfda304fa9c", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/ffg_shell.js:35"}, "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-734993bbcf008340", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/net/ffg_online.js:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/net/ffg_online.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-4362f82278caa3d6", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/3d/ffg_battleship_3d.js:910", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/3d/ffg_battleship_3d.js:910"}, "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-fe4f2c9fea9e4c25", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/3d/ffg_kernel_3d.js:144", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/3d/ffg_kernel_3d.js:144"}, "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-0fe4553a448f1af8", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/game_controls.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-a0eb4ef6f7fbbc71", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/ffg_shell.js:35"}, "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-e34c6102439ea0fa", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/net/ffg_online.js:51", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/net/ffg_online.js:51"}, "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-8d10d6cd1645cd34", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/3d/ffg_kernel_3d.js:183", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/3d/ffg_kernel_3d.js:183"}, "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-44104939d6e98294", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/3d/ffg_chess3d.js:1059", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/3d/ffg_chess3d.js:1059"}, "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-3899a33a63d23092", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/neon-breakout/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/neon-breakout/game_controls.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-d838a98cb78bf709", "name": "Insecure pattern 'direct_innerhtml_assignment' in games/neon-breakout/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/neon-breakout/runtime/ffg_shell.js:35"}, "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-e94dcc7f7556610b", "name": "Insecure pattern 'cors_wildcard' in workers/games-cdn/src/index.js:57", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in workers/games-cdn/src/index.js:57"}, "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-1ad641c858ce5bbf", "name": "Insecure pattern 'subprocess_shell_true' in pipeline/deploy_game.py:114", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in pipeline/deploy_game.py:114"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a37c1060f9e02889", "name": "Insecure pattern 'subprocess_shell_true' in pipeline/deploy_portal.py:70", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in pipeline/deploy_portal.py:70"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9c42377f855eadd", "name": "Insecure pattern 'eval_used' in pipeline/qa/code_quality.py:63", "shortDescription": {"text": "Insecure pattern 'eval_used' in pipeline/qa/code_quality.py:63"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be254f19f67f795d", "name": "Insecure pattern 'new_function_used' in pipeline/qa/code_quality.py:65", "shortDescription": {"text": "Insecure pattern 'new_function_used' in pipeline/qa/code_quality.py:65"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e29ac6c4727bb16e", "name": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/ffg_campaign.js:329", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/ffg_campaign.js:329"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63210f52a703d1bf", "name": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/game_controls.js:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/game_controls.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-1d83e4b8f775a3ec", "name": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/ffg_shell.js:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/ffg_shell.js:35"}, "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-d4d2704202c2da8d", "name": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/net/ffg_online.js:51", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/net/ffg_online.js:51"}, "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-4958cd3133d387af", "name": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_tactics3d.js:1716", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_tactics3d.js:1716"}, "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-3bde941b12ed4b42", "name": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_battleship_3d.js:865", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_battleship_3d.js:865"}, "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-dab3be5332347ce2", "name": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_kernel_3d.js:221", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_kernel_3d.js:221"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b231f4920ce5c7c", "name": "Insecure pattern 'eval_used' in pipeline/engine/dev_journal/frost-spire.json:131", "shortDescription": {"text": "Insecure pattern 'eval_used' in pipeline/engine/dev_journal/frost-spire.json:131"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "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-648c885f12176bce", "name": "Very large file: games/void-skirmish-3d/runtime/sim/tactical_grid.js (949 lines)", "shortDescription": {"text": "Very large file: games/void-skirmish-3d/runtime/sim/tactical_grid.js (949 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-0813c41b873a6d3b", "name": "Very large file: games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js (2443 lines)", "shortDescription": {"text": "Very large file: games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js (2443 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-d8c224a5642800bb", "name": "Very large file: games/tide-breakers/runtime/3d/ffg_navalfree3d.js (1374 lines)", "shortDescription": {"text": "Very large file: games/tide-breakers/runtime/3d/ffg_navalfree3d.js (1374 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-e250dbfa68e20f74", "name": "Very large file: games/shroud-of-the-ancients/pass2.js (3354 lines)", "shortDescription": {"text": "Very large file: games/shroud-of-the-ancients/pass2.js (3354 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-9c2e48166591d77d", "name": "Very large file: games/skybattle/game.jsx (1848 lines)", "shortDescription": {"text": "Very large file: games/skybattle/game.jsx (1848 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-16b6c6c54e16be40", "name": "Very large file: games/starlance/runtime/ffg_shmup.js (1004 lines)", "shortDescription": {"text": "Very large file: games/starlance/runtime/ffg_shmup.js (1004 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-e1b7d910acdeaee9", "name": "Very large file: games/horizon-runner/game.jsx (2528 lines)", "shortDescription": {"text": "Very large file: games/horizon-runner/game.jsx (2528 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-81bcafe9195446dc", "name": "Very large file: games/iron-tide/runtime/3d/ffg_battleship_3d.js (1416 lines)", "shortDescription": {"text": "Very large file: games/iron-tide/runtime/3d/ffg_battleship_3d.js (1416 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-680f41d7a1d29032", "name": "Very large file: games/warboard-chess/runtime/3d/ffg_chess3d.js (1210 lines)", "shortDescription": {"text": "Very large file: games/warboard-chess/runtime/3d/ffg_chess3d.js (1210 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-be8a217bb61db1f6", "name": "Very large file: pipeline/qa/test_runner.py (971 lines)", "shortDescription": {"text": "Very large file: pipeline/qa/test_runner.py (971 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-df708fbcb1fb7066", "name": "Very large file: pipeline/templates/platformer/game.js (1725 lines)", "shortDescription": {"text": "Very large file: pipeline/templates/platformer/game.js (1725 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-37d7f79c3f9735f6", "name": "Very large file: pipeline/engine/v2_pipeline.py (1704 lines)", "shortDescription": {"text": "Very large file: pipeline/engine/v2_pipeline.py (1704 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-7f57ac991e7af136", "name": "Very large file: pipeline/engine/runtime/3d/ffg_tactics3d.js (2380 lines)", "shortDescription": {"text": "Very large file: pipeline/engine/runtime/3d/ffg_tactics3d.js (2380 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-050eb92750602568", "name": "Very large file: pipeline/engine/runtime/3d/ffg_battleship_3d.js (1163 lines)", "shortDescription": {"text": "Very large file: pipeline/engine/runtime/3d/ffg_battleship_3d.js (1163 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": "28 test file(s) for 295 source file(s) (ratio 0.09). 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 399 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 49 placeholder/mock markers across 27 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "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-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-97733bb613e4e2b6", "name": "Commented-code block (6 lines) in games/lumen-run/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in games/lumen-run/game_controls.js:96"}, "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-e2069711f6aa9d93", "name": "Commented-code block (6 lines) in games/lumen-run/runtime/ffg_kernel.js:84", "shortDescription": {"text": "Commented-code block (6 lines) in games/lumen-run/runtime/ffg_kernel.js:84"}, "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-5ff450a2b3d6e5a1", "name": "Commented-code block (6 lines) in games/lumen-run/runtime/ffg_platformer.js:140", "shortDescription": {"text": "Commented-code block (6 lines) in games/lumen-run/runtime/ffg_platformer.js:140"}, "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-d31b996cbed0e2a6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 games/lumen-run/runtime/ffg_loader.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/lumen-run/runtime/ffg_loader.js:7"}, "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-d20e68233d6761bf", "name": "Commented-code block (5 lines) in games/lumen-run/runtime/sim/platformer_controller.js:43", "shortDescription": {"text": "Commented-code block (5 lines) in games/lumen-run/runtime/sim/platformer_controller.js:43"}, "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-e247a29f39cf9992", "name": "Commented-code block (6 lines) in games/void-skirmish-3d/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in games/void-skirmish-3d/game_controls.js:96"}, "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-9eadd3bc0e21850e", "name": "Commented-code block (5 lines) in games/void-skirmish-3d/runtime/ffg_campaign.js:30", "shortDescription": {"text": "Commented-code block (5 lines) in games/void-skirmish-3d/runtime/ffg_campaign.js:30"}, "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-ce75c4395bf58c75", "name": "Commented-code block (7 lines) in games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js:34", "shortDescription": {"text": "Commented-code block (7 lines) in games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js:34"}, "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-efd5b6dfc9ffc51a", "name": "Commented-code block (6 lines) in games/void-skirmish-3d/runtime/3d/ffg_kernel_3d.js:146", "shortDescription": {"text": "Commented-code block (6 lines) in games/void-skirmish-3d/runtime/3d/ffg_kernel_3d.js:146"}, "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-6319f2e30b608bac", "name": "Commented-code block (6 lines) in games/tide-breakers/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in games/tide-breakers/game_controls.js:96"}, "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-d236a1c50e66ad6a", "name": "Commented-code block (5 lines) in games/tide-breakers/runtime/sim/navalfree.js:243", "shortDescription": {"text": "Commented-code block (5 lines) in games/tide-breakers/runtime/sim/navalfree.js:243"}, "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-7c7804f79b043818", "name": "Commented-code block (5 lines) in games/tide-breakers/runtime/3d/ffg_navalfree3d.js:66", "shortDescription": {"text": "Commented-code block (5 lines) in games/tide-breakers/runtime/3d/ffg_navalfree3d.js:66"}, "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-e3dcd8b1a4495f64", "name": "Commented-code block (5 lines) in games/tide-breakers/runtime/3d/ffg_kernel_3d.js:146", "shortDescription": {"text": "Commented-code block (5 lines) in games/tide-breakers/runtime/3d/ffg_kernel_3d.js:146"}, "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-a45d9abc19b5fff6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 games/thornline-tactics/runtime/ffg_loader.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/thornline-tactics/runtime/ffg_loader.js:7"}, "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-5f2b233b5f99f23a", "name": "Legacy-named symbol `shroud_save_v1` in games/shroud-of-the-ancients/pass2.js:16", "shortDescription": {"text": "Legacy-named symbol `shroud_save_v1` in games/shroud-of-the-ancients/pass2.js:16"}, "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-10b9a373f672c7b8", "name": "Commented-code block (9 lines) in games/shroud-of-the-ancients/pass2.js:514", "shortDescription": {"text": "Commented-code block (9 lines) in games/shroud-of-the-ancients/pass2.js:514"}, "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-96a5f7ecb41221b8", "name": "Commented-code block (6 lines) in games/shroud-of-the-ancients/shroud_act1_data.js:865", "shortDescription": {"text": "Commented-code block (6 lines) in games/shroud-of-the-ancients/shroud_act1_data.js:865"}, "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-b2b13d8a5b96a2ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 games/block-breaker/deep_audit.js:252", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/block-breaker/deep_audit.js:252"}, "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-f12546e30bd1e15b", "name": "Commented-code block (6 lines) in games/block-breaker/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in games/block-breaker/game_controls.js:96"}, "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-7386773a0bfa4dc3", "name": "Commented-code block (7 lines) in games/skybattle/game.jsx:222", "shortDescription": {"text": "Commented-code block (7 lines) in games/skybattle/game.jsx:222"}, "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-fe065fde8538e701", "name": "Commented-code block (6 lines) in games/starlance/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in games/starlance/game_controls.js:96"}, "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-4dbad478e021240d", "name": "Commented-code block (6 lines) in games/starlance/runtime/ffg_kernel.js:84", "shortDescription": {"text": "Commented-code block (6 lines) in games/starlance/runtime/ffg_kernel.js:84"}, "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-f103e4c152c4c0b5", "name": "Commented-code block (6 lines) in games/starlance/runtime/ffg_shmup.js:202", "shortDescription": {"text": "Commented-code block (6 lines) in games/starlance/runtime/ffg_shmup.js:202"}, "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-6fe7bf7081e3bb81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 games/starlance/runtime/ffg_loader.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/starlance/runtime/ffg_loader.js:7"}, "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-ee76bafefdd04dc9", "name": "Commented-code block (7 lines) in games/starlance/runtime/sim/shmup_core.js:348", "shortDescription": {"text": "Commented-code block (7 lines) in games/starlance/runtime/sim/shmup_core.js:348"}, "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-689b5e768b60cca9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 games/void-skirmish/runtime/ffg_loader.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/void-skirmish/runtime/ffg_loader.js:7"}, "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-666b489c0d15fb2e", "name": "Commented-code block (5 lines) in games/horizon-runner/game.jsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in games/horizon-runner/game.jsx: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-a09b8f9fade6dcc5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 games/rift-tactics/runtime/ffg_loader.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/rift-tactics/runtime/ffg_loader.js:7"}, "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-307860bff6bea530", "name": "Commented-code block (6 lines) in games/iron-tide/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in games/iron-tide/game_controls.js:96"}, "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-9305d9585ec38575", "name": "Commented-code block (5 lines) in games/iron-tide/runtime/3d/ffg_battleship_3d.js:75", "shortDescription": {"text": "Commented-code block (5 lines) in games/iron-tide/runtime/3d/ffg_battleship_3d.js:75"}, "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-10dc9a0b8ee175e7", "name": "Commented-code block (5 lines) in games/iron-tide/runtime/3d/ffg_kernel_3d.js:146", "shortDescription": {"text": "Commented-code block (5 lines) in games/iron-tide/runtime/3d/ffg_kernel_3d.js:146"}, "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-52cc2068fe4ffbf6", "name": "Commented-code block (6 lines) in games/warboard-chess/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in games/warboard-chess/game_controls.js:96"}, "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-c76eb85aae2b4a14", "name": "Commented-code block (6 lines) in games/warboard-chess/runtime/3d/ffg_kernel_3d.js:162", "shortDescription": {"text": "Commented-code block (6 lines) in games/warboard-chess/runtime/3d/ffg_kernel_3d.js:162"}, "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-01a94dcce0d81e7a", "name": "Commented-code block (5 lines) in games/warboard-chess/runtime/3d/ffg_chess3d.js:123", "shortDescription": {"text": "Commented-code block (5 lines) in games/warboard-chess/runtime/3d/ffg_chess3d.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-d3acd85c90e80e0e", "name": "Commented-code block (6 lines) in games/neon-breakout/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in games/neon-breakout/game_controls.js:96"}, "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-7f3277b545b45691", "name": "Commented-code block (6 lines) in games/neon-breakout/runtime/ffg_kernel.js:84", "shortDescription": {"text": "Commented-code block (6 lines) in games/neon-breakout/runtime/ffg_kernel.js:84"}, "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-282e4b7aa6a3cc0b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 games/neon-breakout/runtime/ffg_loader.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/neon-breakout/runtime/ffg_loader.js:7"}, "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-6d3722d7c3e4ca45", "name": "Commented-code block (6 lines) in games/neon-breakout/runtime/ffg_arcade.js:25", "shortDescription": {"text": "Commented-code block (6 lines) in games/neon-breakout/runtime/ffg_arcade.js:25"}, "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-73a354ebfd87c594", "name": "Commented-code block (5 lines) in games/neon-breakout/runtime/sim/arcade_core.js:502", "shortDescription": {"text": "Commented-code block (5 lines) in games/neon-breakout/runtime/sim/arcade_core.js:502"}, "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-3b99bca837eaefad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 workers/games-cdn/src/index.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 workers/games-cdn/src/index.js:7"}, "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-ec48d5901430c52a", "name": "Commented-code block (5 lines) in pages/games/@slug/+config.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in pages/games/@slug/+config.ts: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-a959b01b405b81c2", "name": "Commented-code block (7 lines) in pipeline/deploy_portal.py:86", "shortDescription": {"text": "Commented-code block (7 lines) in pipeline/deploy_portal.py:86"}, "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-2c8a2956e944f004", "name": "Commented-code block (7 lines) in pipeline/qa/speedrun_bot.py:288", "shortDescription": {"text": "Commented-code block (7 lines) in pipeline/qa/speedrun_bot.py:288"}, "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-e2a1a5d67a16ffdb", "name": "Commented-code block (5 lines) in pipeline/qa/oracle_bot.py:39", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/qa/oracle_bot.py:39"}, "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-c648efb5ff2e314e", "name": "Commented-code block (6 lines) in pipeline/qa/cross_browser.py:49", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/qa/cross_browser.py:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3df4a2e96f0b1d58", "name": "Commented-code block (9 lines) in pipeline/qa/boss_bot.py:188", "shortDescription": {"text": "Commented-code block (9 lines) in pipeline/qa/boss_bot.py:188"}, "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-2309995c820b5183", "name": "Commented-code block (6 lines) in pipeline/qa/test_runner.py:43", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/qa/test_runner.py:43"}, "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-dfbb51e9281a030e", "name": "Commented-code block (8 lines) in pipeline/qa/code_quality.py:73", "shortDescription": {"text": "Commented-code block (8 lines) in pipeline/qa/code_quality.py:73"}, "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-86434f968fc724be", "name": "Commented-code block (6 lines) in pipeline/qa/reachability_solver.py:312", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/qa/reachability_solver.py:312"}, "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-173f2950190c62c7", "name": "Commented-code block (6 lines) in pipeline/qa/playtest_bot.py:267", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/qa/playtest_bot.py:267"}, "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-9da9e756110ba509", "name": "Legacy-named symbol `tileset_legacy` in pipeline/assets/1-bit-pack/Tilemap/tileset_colored.tsx:3", "shortDescription": {"text": "Legacy-named symbol `tileset_legacy` in pipeline/assets/1-bit-pack/Tilemap/tileset_colored.tsx:3"}, "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-f60d8197e42657bd", "name": "Commented-code block (6 lines) in pipeline/templates/platformer/game.js:322", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/templates/platformer/game.js:322"}, "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-0e7161bacc60a7dc", "name": "Commented-code block (5 lines) in pipeline/templates/platformer/lib/world_mechanics.js:292", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/templates/platformer/lib/world_mechanics.js:292"}, "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-278aa559fea7566d", "name": "Commented-code block (5 lines) in pipeline/templates/platformer/lib/abilities.js:177", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/templates/platformer/lib/abilities.js:177"}, "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-5c6126c91c7ac402", "name": "Commented-code block (6 lines) in pipeline/templates/platformer/lib/hud_letters.js:34", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/templates/platformer/lib/hud_letters.js:34"}, "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-fc369ab3af5df7a4", "name": "Commented-code block (5 lines) in pipeline/templates/arpg/game.js:777", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/templates/arpg/game.js:777"}, "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-da72269840e14b76", "name": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/deep_audit.js:252", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/deep_audit.js:252"}, "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-f3bb68dfe5ed8a9f", "name": "Commented-code block (6 lines) in pipeline/templates/shared/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/templates/shared/game_controls.js:96"}, "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-ed771c56fee1bc96", "name": "Commented-code block (6 lines) in pipeline/templates/shared/i18n.js:99", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/templates/shared/i18n.js:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ddab73adbe12cc69", "name": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/i18n.js:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/i18n.js:126"}, "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-fdb8412bce962f9e", "name": "Commented-code block (5 lines) in pipeline/templates/shared/platformer_controller.js:47", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/templates/shared/platformer_controller.js:47"}, "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-562f24995ae18ba8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/analytics.js:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/analytics.js:16"}, "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-d6d5eb4b55182d92", "name": "Commented-code block (7 lines) in pipeline/templates/topdown/game.js:528", "shortDescription": {"text": "Commented-code block (7 lines) in pipeline/templates/topdown/game.js:528"}, "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-13444aa0257ee9c6", "name": "Commented-code block (5 lines) in pipeline/engine/engine_authoring.py:48", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/engine_authoring.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-338ac39ec483e04d", "name": "Commented-code block (5 lines) in pipeline/engine/xcom_autopipe.py:121", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/xcom_autopipe.py:121"}, "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-a4207a4e0c18d25c", "name": "Legacy-named symbol `forgeflow_games_v2` in pipeline/engine/v2_pipeline.py:87", "shortDescription": {"text": "Legacy-named symbol `forgeflow_games_v2` in pipeline/engine/v2_pipeline.py:87"}, "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-5837e02415037186", "name": "Commented-code block (6 lines) in pipeline/engine/v2_pipeline.py:52", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/engine/v2_pipeline.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-a7a8d03e1585d339", "name": "Network/subprocess call without timeout or try/except \u2014 pipeline/engine/build_order.py:198", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 pipeline/engine/build_order.py:198"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df5b666ce9c070fa", "name": "Commented-code block (5 lines) in pipeline/engine/build_target.py:235", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/build_target.py:235"}, "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-00938a68d842e46f", "name": "Commented-code block (5 lines) in pipeline/engine/seed_queue.py:45", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/seed_queue.py:45"}, "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-611c668d19511a2c", "name": "Commented-code block (5 lines) in pipeline/engine/runtime/ffg_campaign.js:30", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/runtime/ffg_campaign.js:30"}, "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-51946b22eaf1557b", "name": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_kernel.js:84", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_kernel.js:84"}, "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-867ba461d0eb6dd3", "name": "Commented-code block (6 lines) in pipeline/engine/runtime/game_controls.js:96", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/game_controls.js:96"}, "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-a72c3837d69214f1", "name": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_shmup.js:202", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_shmup.js:202"}, "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-77fcbd99486e55a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/engine/runtime/ffg_loader.js:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/engine/runtime/ffg_loader.js:7"}, "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-9dff11d197a8b715", "name": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_arcade.js:25", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_arcade.js:25"}, "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-4fbed6ffda246208", "name": "Commented-code block (5 lines) in pipeline/engine/runtime/sim/platformer_controller.js:43", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/runtime/sim/platformer_controller.js:43"}, "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-47fa330a583d4878", "name": "Commented-code block (7 lines) in pipeline/engine/runtime/sim/shmup_core.js:332", "shortDescription": {"text": "Commented-code block (7 lines) in pipeline/engine/runtime/sim/shmup_core.js:332"}, "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-d7802c95c7e0ae2c", "name": "Commented-code block (5 lines) in pipeline/engine/runtime/sim/arcade_core.js:502", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/runtime/sim/arcade_core.js:502"}, "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-737ccb1c4e091857", "name": "Commented-code block (7 lines) in pipeline/engine/runtime/3d/ffg_tactics3d.js:34", "shortDescription": {"text": "Commented-code block (7 lines) in pipeline/engine/runtime/3d/ffg_tactics3d.js:34"}, "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-2c6a9f6ef804be0e", "name": "Commented-code block (5 lines) in pipeline/engine/runtime/3d/ffg_battleship_3d.js:64", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/runtime/3d/ffg_battleship_3d.js:64"}, "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-59a54411352ede9e", "name": "Commented-code block (6 lines) in pipeline/engine/runtime/3d/ffg_kernel_3d.js:146", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/3d/ffg_kernel_3d.js:146"}, "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-0459b534292665ba", "name": "Network/subprocess call without timeout or try/except \u2014 pipeline/engine/gates/run_gates.py:21", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 pipeline/engine/gates/run_gates.py:21"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d248125e848561ba", "name": "Commented-code block (5 lines) in pipeline/engine/gates/capture.py:19", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/gates/capture.py: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-caa59b9fd7f6a201", "name": "Commented-code block (5 lines) in pipeline/engine/tools/gen_campaign.cjs:135", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/engine/tools/gen_campaign.cjs:135"}, "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-c4fb6ae52380493f", "name": "Commented-code block (6 lines) in pipeline/art/enemy_sprite_mapper.py:275", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/art/enemy_sprite_mapper.py:275"}, "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-74ecbb3b56548aa8", "name": "Commented-code block (5 lines) in pipeline/art/vision_classify.py:28", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/art/vision_classify.py:28"}, "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-620c2a0968ae0e23", "name": "Commented-code block (6 lines) in pipeline/art/asset_downloader.py:97", "shortDescription": {"text": "Commented-code block (6 lines) in pipeline/art/asset_downloader.py:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d55b3681b212833f", "name": "Commented-code block (5 lines) in pipeline/art/audio_mapper.py:375", "shortDescription": {"text": "Commented-code block (5 lines) in pipeline/art/audio_mapper.py:375"}, "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-bcc4a0d2a1240df2", "name": "Commented-code block (6 lines) in src/components/game/GamePlayer.tsx:15", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/game/GamePlayer.tsx:15"}, "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-7e0bf7d119a7b504", "name": "Commented-code block (5 lines) in src/lib/gameBridge.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/gameBridge.ts:40"}, "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-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ngames/iron-tide/runtime/net/_sp_smoke_test.py:run, games/iron-tide/runtime/net/_lobby_ui_test.py:run\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18063"}, "properties": {"repository": "Revuzia/forgeflow-games", "repoUrl": "https://github.com/Revuzia/forgeflow-games", "branch": "main"}, "results": [{"ruleId": "scanner-6604e013ef8c7a99", "level": "note", "message": {"text": "Possibly dead Python function: find_softlocks"}, "properties": {"repobilityId": "42276bf9560b89e8", "scanner": "scanner-primary", "fingerprint": "6604e013ef8c7a99", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/qa/reachability_solver.py:329"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca39600cbd8b6d91", "level": "note", "message": {"text": "Possibly dead Python function: build_credits_for_game"}, "properties": {"repobilityId": "32eed8e092e23681", "scanner": "scanner-primary", "fingerprint": "ca39600cbd8b6d91", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/audio/audio_cache.py:80"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-96ec94cf8d7cda58", "level": "note", "message": {"text": "Possibly dead Python function: ingest_gate_report"}, "properties": {"repobilityId": "5072e715cb21e09e", "scanner": "scanner-primary", "fingerprint": "96ec94cf8d7cda58", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/learn.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dc412ea5d11f56e5", "level": "note", "message": {"text": "Possibly dead Python function: load_journal"}, "properties": {"repobilityId": "66d751919b8ac27a", "scanner": "scanner-primary", "fingerprint": "dc412ea5d11f56e5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/v2_pipeline.py:690"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a2930c18661b56f", "level": "note", "message": {"text": "Possibly dead Python function: platformer_js"}, "properties": {"repobilityId": "329c40f0d2c7c532", "scanner": "scanner-primary", "fingerprint": "9a2930c18661b56f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/engine_game_emit.py:413"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b11449ca835ffce3", "level": "note", "message": {"text": "Possibly dead Python function: shooter_js"}, "properties": {"repobilityId": "04940263b67261c2", "scanner": "scanner-primary", "fingerprint": "b11449ca835ffce3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/engine_game_emit.py:431"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bc0813c15f419e68", "level": "note", "message": {"text": "Possibly dead Python function: collect_js"}, "properties": {"repobilityId": "1a42e5a8c9bffe69", "scanner": "scanner-primary", "fingerprint": "bc0813c15f419e68", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/engine_game_emit.py:449"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fb16f0e9928c0cda", "level": "note", "message": {"text": "Possibly dead Python function: check_perf"}, "properties": {"repobilityId": "9f1cf3c7fca35a63", "scanner": "scanner-primary", "fingerprint": "fb16f0e9928c0cda", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/gates/perf_gate.py:78"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a00922b325bca659", "level": "note", "message": {"text": "Possibly dead Python function: diff_against"}, "properties": {"repobilityId": "6605a34a34d97417", "scanner": "scanner-primary", "fingerprint": "a00922b325bca659", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/git_versioning.py:118"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-355f2e5c31685021", "level": "note", "message": {"text": "Possibly dead Python function: register_boss"}, "properties": {"repobilityId": "ea0ff4122f6abd6e", "scanner": "scanner-primary", "fingerprint": "355f2e5c31685021", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/character_uniqueness.py:75"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-df0bb5cdbdfb4bfe", "level": "note", "message": {"text": "Possibly dead Python function: register_npc_usage"}, "properties": {"repobilityId": "26a397f045d52a4c", "scanner": "scanner-primary", "fingerprint": "df0bb5cdbdfb4bfe", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/character_uniqueness.py:155"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bcaddd1439fa1fea", "level": "note", "message": {"text": "Possibly dead Python function: generate_character_set"}, "properties": {"repobilityId": "625043c520ea87f6", "scanner": "scanner-primary", "fingerprint": "bcaddd1439fa1fea", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/sprite_generator.py:129"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-306ee305bb84b4bc", "level": "note", "message": {"text": "Possibly dead Python function: generate_enemy_sprites"}, "properties": {"repobilityId": "0c20e71dfbcf48ab", "scanner": "scanner-primary", "fingerprint": "306ee305bb84b4bc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/sprite_generator.py:170"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a6b9bcbecc97c3eb", "level": "note", "message": {"text": "Possibly dead Python function: validate_game_references"}, "properties": {"repobilityId": "735f20a6410cb4fc", "scanner": "scanner-primary", "fingerprint": "a6b9bcbecc97c3eb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/asset_manifest.py:425"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ddbf82c750f767de", "level": "note", "message": {"text": "Possibly dead Python function: map_all_enemies"}, "properties": {"repobilityId": "ac328fde28edee1d", "scanner": "scanner-primary", "fingerprint": "ddbf82c750f767de", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/enemy_sprite_mapper.py:331"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0fdb70882fffc49a", "level": "note", "message": {"text": "Possibly dead Python function: copy_atlas_to_game"}, "properties": {"repobilityId": "95bde953e5e56367", "scanner": "scanner-primary", "fingerprint": "0fdb70882fffc49a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/enemy_sprite_mapper.py:343"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6261716d1ca8a759", "level": "note", "message": {"text": "Possibly dead Python function: generate_structured_animation_specs"}, "properties": {"repobilityId": "47a0fc12a2e3fe25", "scanner": "scanner-primary", "fingerprint": "6261716d1ca8a759", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/enemy_sprite_mapper.py:370"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d81f0cd6532068c", "level": "note", "message": {"text": "Possibly dead Python function: generate_js_enemy_animation_registrations"}, "properties": {"repobilityId": "810f566f90bf0859", "scanner": "scanner-primary", "fingerprint": "8d81f0cd6532068c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/enemy_sprite_mapper.py:417"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2bc5b47d8aa7e3db", "level": "note", "message": {"text": "Possibly dead Python function: generate_enemy_type_to_kenney_map_js"}, "properties": {"repobilityId": "1fabe7677756d182", "scanner": "scanner-primary", "fingerprint": "2bc5b47d8aa7e3db", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/enemy_sprite_mapper.py:474"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a399816cc5a4c5c", "level": "note", "message": {"text": "Possibly dead Python function: compose_game_levels"}, "properties": {"repobilityId": "44b869889ccc502b", "scanner": "scanner-primary", "fingerprint": "0a399816cc5a4c5c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/level_chunks.py:393"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-43652361fd438417", "level": "note", "message": {"text": "Possibly dead Python function: remap_music_from_per_game"}, "properties": {"repobilityId": "6f001123fcc16080", "scanner": "scanner-primary", "fingerprint": "43652361fd438417", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/audio_mapper.py:284"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8051bd17fad80712", "level": "note", "message": {"text": "Possibly dead Python function: copy_audio_for_game"}, "properties": {"repobilityId": "847f1396b9d64d70", "scanner": "scanner-primary", "fingerprint": "8051bd17fad80712", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/art/audio_mapper.py:335"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb2a24da14459167", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 pages/games/@slug/+onBeforePrerenderStart.ts:27"}, "properties": {"repobilityId": "6c02e5dc7ddb81ea", "scanner": "scanner-primary", "fingerprint": "bb2a24da14459167", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-886a85a6d03a00db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pages/achievements/+Page.tsx:114"}, "properties": {"repobilityId": "94554dc2260a6d48", "scanner": "scanner-primary", "fingerprint": "886a85a6d03a00db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-00568fb84fb7c64b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 pages/profile/+Page.tsx:144"}, "properties": {"repobilityId": "e0d0279e9065d265", "scanner": "scanner-primary", "fingerprint": "00568fb84fb7c64b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0545b9498bc015ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 pipeline/templates/3d-arpg/game.js:356"}, "properties": {"repobilityId": "8f1ac6a7052e60c1", "scanner": "scanner-primary", "fingerprint": "0545b9498bc015ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fcb81c2bfa0e4556", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 pipeline/templates/shared/turn_based_combat.js:245"}, "properties": {"repobilityId": "ddcaa81bed99053a", "scanner": "scanner-primary", "fingerprint": "fcb81c2bfa0e4556", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4d7b46b4d0a2174a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 pipeline/templates/3d-platformer/game.js:152"}, "properties": {"repobilityId": "e9c20513707923c6", "scanner": "scanner-primary", "fingerprint": "4d7b46b4d0a2174a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2481921cd07ebf74", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/auth/UserMenu.tsx:223"}, "properties": {"repobilityId": "20fa00c3e76927dc", "scanner": "scanner-primary", "fingerprint": "2481921cd07ebf74", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c6979f972a0583f6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/game/GamePlayer.tsx:46"}, "properties": {"repobilityId": "23ae6a9b14003a8b", "scanner": "scanner-primary", "fingerprint": "c6979f972a0583f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-92209927b032534a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/game/GamePlayer.tsx:47"}, "properties": {"repobilityId": "1a02c1266ef14701", "scanner": "scanner-primary", "fingerprint": "92209927b032534a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5e17761f63c8895d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/game/GameCard.tsx:67"}, "properties": {"repobilityId": "067e8d65cb0bb45b", "scanner": "scanner-primary", "fingerprint": "5e17761f63c8895d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b5ddfe6f7562f1f2", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in upload_game.py:85"}, "properties": {"repobilityId": "689c8c8191b265ba", "scanner": "scanner-primary", "fingerprint": "b5ddfe6f7562f1f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "upload_game.py"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-8d2f3762d89ec0db", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/lumen-run/game_controls.js:63"}, "properties": {"repobilityId": "8b4a5c234ab171c7", "scanner": "scanner-primary", "fingerprint": "8d2f3762d89ec0db", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/lumen-run/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-fe9ed3b08d8315ca", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/lumen-run/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "4dfe07634e0ca20c", "scanner": "scanner-primary", "fingerprint": "fe9ed3b08d8315ca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/lumen-run/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-fa08b991a3080be4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/game_controls.js:63"}, "properties": {"repobilityId": "c4ec91f499180524", "scanner": "scanner-primary", "fingerprint": "fa08b991a3080be4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/void-skirmish-3d/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-835af292974f04b9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/ffg_campaign.js:329"}, "properties": {"repobilityId": "8d7e28dc2fc44a05", "scanner": "scanner-primary", "fingerprint": "835af292974f04b9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/void-skirmish-3d/runtime/ffg_campaign.js"}, "region": {"startLine": 329}}}]}, {"ruleId": "scanner-bea0299aca1435d2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "a1cc7629e8484ae6", "scanner": "scanner-primary", "fingerprint": "bea0299aca1435d2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/void-skirmish-3d/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-51edc597a39badf6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js:1747"}, "properties": {"repobilityId": "8a12bf7d97eb4a84", "scanner": "scanner-primary", "fingerprint": "51edc597a39badf6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js"}, "region": {"startLine": 1747}}}]}, {"ruleId": "scanner-7282059c3aad5abb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish-3d/runtime/3d/ffg_kernel_3d.js:221"}, "properties": {"repobilityId": "16e4f2fc5db54744", "scanner": "scanner-primary", "fingerprint": "7282059c3aad5abb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/void-skirmish-3d/runtime/3d/ffg_kernel_3d.js"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-6bbb31e7df672183", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/game_controls.js:63"}, "properties": {"repobilityId": "4b065ea283a2c845", "scanner": "scanner-primary", "fingerprint": "6bbb31e7df672183", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/tide-breakers/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-eb191d2298d5d4d6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "e5374f15ee2b2f2c", "scanner": "scanner-primary", "fingerprint": "eb191d2298d5d4d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/tide-breakers/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-5695f626ded3342e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/net/ffg_online.js:51"}, "properties": {"repobilityId": "f019fdfd9d43a649", "scanner": "scanner-primary", "fingerprint": "5695f626ded3342e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/tide-breakers/runtime/net/ffg_online.js"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-7fdac34344df1f11", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/3d/ffg_navalfree3d.js:1178"}, "properties": {"repobilityId": "dff071bf8c6edf1e", "scanner": "scanner-primary", "fingerprint": "7fdac34344df1f11", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/tide-breakers/runtime/3d/ffg_navalfree3d.js"}, "region": {"startLine": 1178}}}]}, {"ruleId": "scanner-d92398f8b169dba6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/tide-breakers/runtime/3d/ffg_kernel_3d.js:144"}, "properties": {"repobilityId": "ee9fe2090943439d", "scanner": "scanner-primary", "fingerprint": "d92398f8b169dba6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/tide-breakers/runtime/3d/ffg_kernel_3d.js"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-17b017359e27848e", "level": "note", "message": {"text": "Insecure pattern 'document_write' in games/shroud-of-the-ancients/index.html:26"}, "properties": {"repobilityId": "0e2580290888acab", "scanner": "scanner-primary", "fingerprint": "17b017359e27848e", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/shroud-of-the-ancients/index.html"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-c8b65cf5081a37de", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/block-breaker/pause.js:44"}, "properties": {"repobilityId": "0b1adb96a5135264", "scanner": "scanner-primary", "fingerprint": "c8b65cf5081a37de", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/block-breaker/pause.js"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-995b1592d2afabb8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/block-breaker/game_controls.js:63"}, "properties": {"repobilityId": "2c07d0e6dd7be76f", "scanner": "scanner-primary", "fingerprint": "995b1592d2afabb8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/block-breaker/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-42b65ffdfaf01e28", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/skybattle/game.jsx:1190"}, "properties": {"repobilityId": "97e5f24b40e19329", "scanner": "scanner-primary", "fingerprint": "42b65ffdfaf01e28", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/skybattle/game.jsx"}, "region": {"startLine": 1190}}}]}, {"ruleId": "scanner-3789a55f6d70a66c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/starlance/game_controls.js:63"}, "properties": {"repobilityId": "9e39aa1979d6eed2", "scanner": "scanner-primary", "fingerprint": "3789a55f6d70a66c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/starlance/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-e6f7cc7c608c1547", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/starlance/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "76b807df5aa57459", "scanner": "scanner-primary", "fingerprint": "e6f7cc7c608c1547", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/starlance/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-29b03805be8039c6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/void-skirmish/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "5fe10f9ae054b913", "scanner": "scanner-primary", "fingerprint": "29b03805be8039c6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/void-skirmish/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-602499ee88870641", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/rift-tactics/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "e924532443d2e7ea", "scanner": "scanner-primary", "fingerprint": "602499ee88870641", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/rift-tactics/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-37d47364841e0d45", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/game_controls.js:63"}, "properties": {"repobilityId": "e910f61f78fee900", "scanner": "scanner-primary", "fingerprint": "37d47364841e0d45", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/iron-tide/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-cbb98cfda304fa9c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "32562414137eecef", "scanner": "scanner-primary", "fingerprint": "cbb98cfda304fa9c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/iron-tide/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-734993bbcf008340", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/net/ffg_online.js:48"}, "properties": {"repobilityId": "0a71c77e4b08789a", "scanner": "scanner-primary", "fingerprint": "734993bbcf008340", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/iron-tide/runtime/net/ffg_online.js"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-4362f82278caa3d6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/3d/ffg_battleship_3d.js:910"}, "properties": {"repobilityId": "9aee1b396feff8a3", "scanner": "scanner-primary", "fingerprint": "4362f82278caa3d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/iron-tide/runtime/3d/ffg_battleship_3d.js"}, "region": {"startLine": 910}}}]}, {"ruleId": "scanner-fe4f2c9fea9e4c25", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/iron-tide/runtime/3d/ffg_kernel_3d.js:144"}, "properties": {"repobilityId": "8e8c82fc09613e3e", "scanner": "scanner-primary", "fingerprint": "fe4f2c9fea9e4c25", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/iron-tide/runtime/3d/ffg_kernel_3d.js"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-0fe4553a448f1af8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/game_controls.js:63"}, "properties": {"repobilityId": "c5880a433f65bde5", "scanner": "scanner-primary", "fingerprint": "0fe4553a448f1af8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/warboard-chess/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-a0eb4ef6f7fbbc71", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "66343beddac6c24a", "scanner": "scanner-primary", "fingerprint": "a0eb4ef6f7fbbc71", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/warboard-chess/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-e34c6102439ea0fa", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/net/ffg_online.js:51"}, "properties": {"repobilityId": "d297ba28c413f65e", "scanner": "scanner-primary", "fingerprint": "e34c6102439ea0fa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/warboard-chess/runtime/net/ffg_online.js"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-8d10d6cd1645cd34", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/3d/ffg_kernel_3d.js:183"}, "properties": {"repobilityId": "dbb6ebed1920e338", "scanner": "scanner-primary", "fingerprint": "8d10d6cd1645cd34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/warboard-chess/runtime/3d/ffg_kernel_3d.js"}, "region": {"startLine": 183}}}]}, {"ruleId": "scanner-44104939d6e98294", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/warboard-chess/runtime/3d/ffg_chess3d.js:1059"}, "properties": {"repobilityId": "21a330985d912883", "scanner": "scanner-primary", "fingerprint": "44104939d6e98294", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/warboard-chess/runtime/3d/ffg_chess3d.js"}, "region": {"startLine": 1059}}}]}, {"ruleId": "scanner-3899a33a63d23092", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/neon-breakout/game_controls.js:63"}, "properties": {"repobilityId": "00de3a458eaef8e5", "scanner": "scanner-primary", "fingerprint": "3899a33a63d23092", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/neon-breakout/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-d838a98cb78bf709", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in games/neon-breakout/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "e1df50295f3d915c", "scanner": "scanner-primary", "fingerprint": "d838a98cb78bf709", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "games/neon-breakout/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-e94dcc7f7556610b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in workers/games-cdn/src/index.js:57"}, "properties": {"repobilityId": "506cad46d6db483f", "scanner": "scanner-primary", "fingerprint": "e94dcc7f7556610b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "workers/games-cdn/src/index.js"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-1ad641c858ce5bbf", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in pipeline/deploy_game.py:114"}, "properties": {"repobilityId": "373fa3c9a602001e", "scanner": "scanner-primary", "fingerprint": "1ad641c858ce5bbf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/deploy_game.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-a37c1060f9e02889", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in pipeline/deploy_portal.py:70"}, "properties": {"repobilityId": "6e9bb438ee63c4f9", "scanner": "scanner-primary", "fingerprint": "a37c1060f9e02889", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/deploy_portal.py"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-b9c42377f855eadd", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in pipeline/qa/code_quality.py:63"}, "properties": {"repobilityId": "e9dde0ae81c74405", "scanner": "scanner-primary", "fingerprint": "b9c42377f855eadd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/qa/code_quality.py"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-be254f19f67f795d", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in pipeline/qa/code_quality.py:65"}, "properties": {"repobilityId": "530fb239a5cfe60f", "scanner": "scanner-primary", "fingerprint": "be254f19f67f795d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/qa/code_quality.py"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-e29ac6c4727bb16e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/ffg_campaign.js:329"}, "properties": {"repobilityId": "4eebe583f6728ff0", "scanner": "scanner-primary", "fingerprint": "e29ac6c4727bb16e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/runtime/ffg_campaign.js"}, "region": {"startLine": 329}}}]}, {"ruleId": "scanner-63210f52a703d1bf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/game_controls.js:63"}, "properties": {"repobilityId": "8a38ebd7e9b0b10d", "scanner": "scanner-primary", "fingerprint": "63210f52a703d1bf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/runtime/game_controls.js"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-1d83e4b8f775a3ec", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/ffg_shell.js:35"}, "properties": {"repobilityId": "a85dc0411622e36d", "scanner": "scanner-primary", "fingerprint": "1d83e4b8f775a3ec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/runtime/ffg_shell.js"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-d4d2704202c2da8d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/net/ffg_online.js:51"}, "properties": {"repobilityId": "baf3d2fbf0896f8f", "scanner": "scanner-primary", "fingerprint": "d4d2704202c2da8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/runtime/net/ffg_online.js"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-4958cd3133d387af", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_tactics3d.js:1716"}, "properties": {"repobilityId": "a444ca7b1b4d80ae", "scanner": "scanner-primary", "fingerprint": "4958cd3133d387af", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/runtime/3d/ffg_tactics3d.js"}, "region": {"startLine": 1716}}}]}, {"ruleId": "scanner-3bde941b12ed4b42", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_battleship_3d.js:865"}, "properties": {"repobilityId": "35c590110243ad01", "scanner": "scanner-primary", "fingerprint": "3bde941b12ed4b42", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/runtime/3d/ffg_battleship_3d.js"}, "region": {"startLine": 865}}}]}, {"ruleId": "scanner-dab3be5332347ce2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pipeline/engine/runtime/3d/ffg_kernel_3d.js:221"}, "properties": {"repobilityId": "051063250eb3d9f9", "scanner": "scanner-primary", "fingerprint": "dab3be5332347ce2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/runtime/3d/ffg_kernel_3d.js"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-5b231f4920ce5c7c", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in pipeline/engine/dev_journal/frost-spire.json:131"}, "properties": {"repobilityId": "c299947c95fb4e3a", "scanner": "scanner-primary", "fingerprint": "5b231f4920ce5c7c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pipeline/engine/dev_journal/frost-spire.json"}, "region": {"startLine": 131}}}]}, {"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-648c885f12176bce", "level": "note", "message": {"text": "Very large file: games/void-skirmish-3d/runtime/sim/tactical_grid.js (949 lines)"}, "properties": {"repobilityId": "e5a11c3617cdf919", "scanner": "scanner-primary", "fingerprint": "648c885f12176bce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0813c41b873a6d3b", "level": "note", "message": {"text": "Very large file: games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js (2443 lines)"}, "properties": {"repobilityId": "83923e06c0fbdd05", "scanner": "scanner-primary", "fingerprint": "0813c41b873a6d3b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d8c224a5642800bb", "level": "note", "message": {"text": "Very large file: games/tide-breakers/runtime/3d/ffg_navalfree3d.js (1374 lines)"}, "properties": {"repobilityId": "c75d46e321e65af6", "scanner": "scanner-primary", "fingerprint": "d8c224a5642800bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e250dbfa68e20f74", "level": "note", "message": {"text": "Very large file: games/shroud-of-the-ancients/pass2.js (3354 lines)"}, "properties": {"repobilityId": "850a57af3d2b929c", "scanner": "scanner-primary", "fingerprint": "e250dbfa68e20f74", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9c2e48166591d77d", "level": "note", "message": {"text": "Very large file: games/skybattle/game.jsx (1848 lines)"}, "properties": {"repobilityId": "e7a5f469af8211ff", "scanner": "scanner-primary", "fingerprint": "9c2e48166591d77d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-16b6c6c54e16be40", "level": "note", "message": {"text": "Very large file: games/starlance/runtime/ffg_shmup.js (1004 lines)"}, "properties": {"repobilityId": "3e795a539b7d56f6", "scanner": "scanner-primary", "fingerprint": "16b6c6c54e16be40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1b7d910acdeaee9", "level": "note", "message": {"text": "Very large file: games/horizon-runner/game.jsx (2528 lines)"}, "properties": {"repobilityId": "15d451993d45b7fd", "scanner": "scanner-primary", "fingerprint": "e1b7d910acdeaee9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-81bcafe9195446dc", "level": "note", "message": {"text": "Very large file: games/iron-tide/runtime/3d/ffg_battleship_3d.js (1416 lines)"}, "properties": {"repobilityId": "28b4d8fa21d8d24e", "scanner": "scanner-primary", "fingerprint": "81bcafe9195446dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-680f41d7a1d29032", "level": "note", "message": {"text": "Very large file: games/warboard-chess/runtime/3d/ffg_chess3d.js (1210 lines)"}, "properties": {"repobilityId": "2d0af7effe3e4c42", "scanner": "scanner-primary", "fingerprint": "680f41d7a1d29032", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-be8a217bb61db1f6", "level": "note", "message": {"text": "Very large file: pipeline/qa/test_runner.py (971 lines)"}, "properties": {"repobilityId": "7260b722a5cfd6e4", "scanner": "scanner-primary", "fingerprint": "be8a217bb61db1f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-df708fbcb1fb7066", "level": "note", "message": {"text": "Very large file: pipeline/templates/platformer/game.js (1725 lines)"}, "properties": {"repobilityId": "37d59b0ae5c2b260", "scanner": "scanner-primary", "fingerprint": "df708fbcb1fb7066", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-37d7f79c3f9735f6", "level": "note", "message": {"text": "Very large file: pipeline/engine/v2_pipeline.py (1704 lines)"}, "properties": {"repobilityId": "273cae3b92b9ae16", "scanner": "scanner-primary", "fingerprint": "37d7f79c3f9735f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7f57ac991e7af136", "level": "note", "message": {"text": "Very large file: pipeline/engine/runtime/3d/ffg_tactics3d.js (2380 lines)"}, "properties": {"repobilityId": "55101f0445c07437", "scanner": "scanner-primary", "fingerprint": "7f57ac991e7af136", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-050eb92750602568", "level": "note", "message": {"text": "Very large file: pipeline/engine/runtime/3d/ffg_battleship_3d.js (1163 lines)"}, "properties": {"repobilityId": "0dae1c6e6197a33b", "scanner": "scanner-primary", "fingerprint": "050eb92750602568", "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": "59962df676c3f8a9", "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": "54e03666e121be10", "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": "4bc06b22d4e18270", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "a48055ccecb39bbd", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "afd4201af0041bbf", "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": "370cf5b57341694b", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "bae523e1a4ce36d7", "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": "7883bf78aed198d4", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-97733bb613e4e2b6", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/lumen-run/game_controls.js:96"}, "properties": {"repobilityId": "1c5434cd6d098d78", "scanner": "scanner-primary", "fingerprint": "97733bb613e4e2b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2069711f6aa9d93", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/lumen-run/runtime/ffg_kernel.js:84"}, "properties": {"repobilityId": "bb6329bf5bb7b3b0", "scanner": "scanner-primary", "fingerprint": "e2069711f6aa9d93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ff450a2b3d6e5a1", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/lumen-run/runtime/ffg_platformer.js:140"}, "properties": {"repobilityId": "ad0fc333d14b3d10", "scanner": "scanner-primary", "fingerprint": "5ff450a2b3d6e5a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d31b996cbed0e2a6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/lumen-run/runtime/ffg_loader.js:7"}, "properties": {"repobilityId": "80de73d0266fe06d", "scanner": "scanner-primary", "fingerprint": "d31b996cbed0e2a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d20e68233d6761bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/lumen-run/runtime/sim/platformer_controller.js:43"}, "properties": {"repobilityId": "51a8927a865e86d5", "scanner": "scanner-primary", "fingerprint": "d20e68233d6761bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e247a29f39cf9992", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/void-skirmish-3d/game_controls.js:96"}, "properties": {"repobilityId": "0c397ccc5fd43137", "scanner": "scanner-primary", "fingerprint": "e247a29f39cf9992", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9eadd3bc0e21850e", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/void-skirmish-3d/runtime/ffg_campaign.js:30"}, "properties": {"repobilityId": "ba0a38d0bed9edf6", "scanner": "scanner-primary", "fingerprint": "9eadd3bc0e21850e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce75c4395bf58c75", "level": "none", "message": {"text": "Commented-code block (7 lines) in games/void-skirmish-3d/runtime/3d/ffg_tactics3d.js:34"}, "properties": {"repobilityId": "85025a6e38c44694", "scanner": "scanner-primary", "fingerprint": "ce75c4395bf58c75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efd5b6dfc9ffc51a", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/void-skirmish-3d/runtime/3d/ffg_kernel_3d.js:146"}, "properties": {"repobilityId": "fe72114d91fea495", "scanner": "scanner-primary", "fingerprint": "efd5b6dfc9ffc51a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6319f2e30b608bac", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/tide-breakers/game_controls.js:96"}, "properties": {"repobilityId": "f6585c938c6a2960", "scanner": "scanner-primary", "fingerprint": "6319f2e30b608bac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d236a1c50e66ad6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/tide-breakers/runtime/sim/navalfree.js:243"}, "properties": {"repobilityId": "88c5d39db34dda00", "scanner": "scanner-primary", "fingerprint": "d236a1c50e66ad6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c7804f79b043818", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/tide-breakers/runtime/3d/ffg_navalfree3d.js:66"}, "properties": {"repobilityId": "1479c6d3f151d1c7", "scanner": "scanner-primary", "fingerprint": "7c7804f79b043818", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3dcd8b1a4495f64", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/tide-breakers/runtime/3d/ffg_kernel_3d.js:146"}, "properties": {"repobilityId": "cc66fdcf9a63748e", "scanner": "scanner-primary", "fingerprint": "e3dcd8b1a4495f64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a45d9abc19b5fff6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/thornline-tactics/runtime/ffg_loader.js:7"}, "properties": {"repobilityId": "5cce47d93dc89e48", "scanner": "scanner-primary", "fingerprint": "a45d9abc19b5fff6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f2b233b5f99f23a", "level": "note", "message": {"text": "Legacy-named symbol `shroud_save_v1` in games/shroud-of-the-ancients/pass2.js:16"}, "properties": {"repobilityId": "cad486e7e2ee4a06", "scanner": "scanner-primary", "fingerprint": "5f2b233b5f99f23a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-10b9a373f672c7b8", "level": "none", "message": {"text": "Commented-code block (9 lines) in games/shroud-of-the-ancients/pass2.js:514"}, "properties": {"repobilityId": "67c7d0e4910dfbae", "scanner": "scanner-primary", "fingerprint": "10b9a373f672c7b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96a5f7ecb41221b8", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/shroud-of-the-ancients/shroud_act1_data.js:865"}, "properties": {"repobilityId": "c73b7c593de89959", "scanner": "scanner-primary", "fingerprint": "96a5f7ecb41221b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2b13d8a5b96a2ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/block-breaker/deep_audit.js:252"}, "properties": {"repobilityId": "f0f4e16e7237e0b4", "scanner": "scanner-primary", "fingerprint": "b2b13d8a5b96a2ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f12546e30bd1e15b", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/block-breaker/game_controls.js:96"}, "properties": {"repobilityId": "e78875641e018f47", "scanner": "scanner-primary", "fingerprint": "f12546e30bd1e15b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7386773a0bfa4dc3", "level": "none", "message": {"text": "Commented-code block (7 lines) in games/skybattle/game.jsx:222"}, "properties": {"repobilityId": "5f79cf487e84111e", "scanner": "scanner-primary", "fingerprint": "7386773a0bfa4dc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe065fde8538e701", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/starlance/game_controls.js:96"}, "properties": {"repobilityId": "43aadb9b888e9704", "scanner": "scanner-primary", "fingerprint": "fe065fde8538e701", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4dbad478e021240d", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/starlance/runtime/ffg_kernel.js:84"}, "properties": {"repobilityId": "cdfa1540a67e3ffe", "scanner": "scanner-primary", "fingerprint": "4dbad478e021240d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f103e4c152c4c0b5", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/starlance/runtime/ffg_shmup.js:202"}, "properties": {"repobilityId": "8f177c47f2fdf077", "scanner": "scanner-primary", "fingerprint": "f103e4c152c4c0b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6fe7bf7081e3bb81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/starlance/runtime/ffg_loader.js:7"}, "properties": {"repobilityId": "67844b7c8051dcc5", "scanner": "scanner-primary", "fingerprint": "6fe7bf7081e3bb81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ee76bafefdd04dc9", "level": "none", "message": {"text": "Commented-code block (7 lines) in games/starlance/runtime/sim/shmup_core.js:348"}, "properties": {"repobilityId": "d5142e22607144da", "scanner": "scanner-primary", "fingerprint": "ee76bafefdd04dc9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-689b5e768b60cca9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/void-skirmish/runtime/ffg_loader.js:7"}, "properties": {"repobilityId": "cf36f5268cb547d4", "scanner": "scanner-primary", "fingerprint": "689b5e768b60cca9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-666b489c0d15fb2e", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/horizon-runner/game.jsx:13"}, "properties": {"repobilityId": "4f3e009e8b6b36c6", "scanner": "scanner-primary", "fingerprint": "666b489c0d15fb2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a09b8f9fade6dcc5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/rift-tactics/runtime/ffg_loader.js:7"}, "properties": {"repobilityId": "bf2e357413afa280", "scanner": "scanner-primary", "fingerprint": "a09b8f9fade6dcc5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-307860bff6bea530", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/iron-tide/game_controls.js:96"}, "properties": {"repobilityId": "68ca4aaa5ab37396", "scanner": "scanner-primary", "fingerprint": "307860bff6bea530", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9305d9585ec38575", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/iron-tide/runtime/3d/ffg_battleship_3d.js:75"}, "properties": {"repobilityId": "2ca286f83f30face", "scanner": "scanner-primary", "fingerprint": "9305d9585ec38575", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10dc9a0b8ee175e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/iron-tide/runtime/3d/ffg_kernel_3d.js:146"}, "properties": {"repobilityId": "5467669bae9ed354", "scanner": "scanner-primary", "fingerprint": "10dc9a0b8ee175e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52cc2068fe4ffbf6", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/warboard-chess/game_controls.js:96"}, "properties": {"repobilityId": "392cd52c7164fb28", "scanner": "scanner-primary", "fingerprint": "52cc2068fe4ffbf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c76eb85aae2b4a14", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/warboard-chess/runtime/3d/ffg_kernel_3d.js:162"}, "properties": {"repobilityId": "54f2fe7ede4b8d01", "scanner": "scanner-primary", "fingerprint": "c76eb85aae2b4a14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01a94dcce0d81e7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/warboard-chess/runtime/3d/ffg_chess3d.js:123"}, "properties": {"repobilityId": "cc4239bec719c75a", "scanner": "scanner-primary", "fingerprint": "01a94dcce0d81e7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3acd85c90e80e0e", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/neon-breakout/game_controls.js:96"}, "properties": {"repobilityId": "c9b6e8e097b3babe", "scanner": "scanner-primary", "fingerprint": "d3acd85c90e80e0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f3277b545b45691", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/neon-breakout/runtime/ffg_kernel.js:84"}, "properties": {"repobilityId": "5193086d57f41de4", "scanner": "scanner-primary", "fingerprint": "7f3277b545b45691", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-282e4b7aa6a3cc0b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 games/neon-breakout/runtime/ffg_loader.js:7"}, "properties": {"repobilityId": "9e061baa470f513c", "scanner": "scanner-primary", "fingerprint": "282e4b7aa6a3cc0b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6d3722d7c3e4ca45", "level": "none", "message": {"text": "Commented-code block (6 lines) in games/neon-breakout/runtime/ffg_arcade.js:25"}, "properties": {"repobilityId": "54ec139a58ad2752", "scanner": "scanner-primary", "fingerprint": "6d3722d7c3e4ca45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73a354ebfd87c594", "level": "none", "message": {"text": "Commented-code block (5 lines) in games/neon-breakout/runtime/sim/arcade_core.js:502"}, "properties": {"repobilityId": "fc17587a5d8588a3", "scanner": "scanner-primary", "fingerprint": "73a354ebfd87c594", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b99bca837eaefad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 workers/games-cdn/src/index.js:7"}, "properties": {"repobilityId": "d7fd1298cfd9beac", "scanner": "scanner-primary", "fingerprint": "3b99bca837eaefad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec48d5901430c52a", "level": "none", "message": {"text": "Commented-code block (5 lines) in pages/games/@slug/+config.ts:1"}, "properties": {"repobilityId": "f41bf8ad018dbe2e", "scanner": "scanner-primary", "fingerprint": "ec48d5901430c52a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a959b01b405b81c2", "level": "none", "message": {"text": "Commented-code block (7 lines) in pipeline/deploy_portal.py:86"}, "properties": {"repobilityId": "91507d252ca8dd75", "scanner": "scanner-primary", "fingerprint": "a959b01b405b81c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c8a2956e944f004", "level": "none", "message": {"text": "Commented-code block (7 lines) in pipeline/qa/speedrun_bot.py:288"}, "properties": {"repobilityId": "c10af1f3ab9e0d75", "scanner": "scanner-primary", "fingerprint": "2c8a2956e944f004", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2a1a5d67a16ffdb", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/qa/oracle_bot.py:39"}, "properties": {"repobilityId": "a3dc57b66de53a57", "scanner": "scanner-primary", "fingerprint": "e2a1a5d67a16ffdb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c648efb5ff2e314e", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/qa/cross_browser.py:49"}, "properties": {"repobilityId": "328c0df4e4f0a354", "scanner": "scanner-primary", "fingerprint": "c648efb5ff2e314e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3df4a2e96f0b1d58", "level": "none", "message": {"text": "Commented-code block (9 lines) in pipeline/qa/boss_bot.py:188"}, "properties": {"repobilityId": "ef6b7e8ec8b43542", "scanner": "scanner-primary", "fingerprint": "3df4a2e96f0b1d58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2309995c820b5183", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/qa/test_runner.py:43"}, "properties": {"repobilityId": "333022ad2dd6220b", "scanner": "scanner-primary", "fingerprint": "2309995c820b5183", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfbb51e9281a030e", "level": "none", "message": {"text": "Commented-code block (8 lines) in pipeline/qa/code_quality.py:73"}, "properties": {"repobilityId": "794e30022fc7114b", "scanner": "scanner-primary", "fingerprint": "dfbb51e9281a030e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86434f968fc724be", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/qa/reachability_solver.py:312"}, "properties": {"repobilityId": "06410e8c2b9d6372", "scanner": "scanner-primary", "fingerprint": "86434f968fc724be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-173f2950190c62c7", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/qa/playtest_bot.py:267"}, "properties": {"repobilityId": "6b8125605b09c58a", "scanner": "scanner-primary", "fingerprint": "173f2950190c62c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9da9e756110ba509", "level": "note", "message": {"text": "Legacy-named symbol `tileset_legacy` in pipeline/assets/1-bit-pack/Tilemap/tileset_colored.tsx:3"}, "properties": {"repobilityId": "d6bf9df42a8ff295", "scanner": "scanner-primary", "fingerprint": "9da9e756110ba509", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f60d8197e42657bd", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/templates/platformer/game.js:322"}, "properties": {"repobilityId": "0cbcf35d4997ce27", "scanner": "scanner-primary", "fingerprint": "f60d8197e42657bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e7161bacc60a7dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/templates/platformer/lib/world_mechanics.js:292"}, "properties": {"repobilityId": "8205cec567d9dba3", "scanner": "scanner-primary", "fingerprint": "0e7161bacc60a7dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-278aa559fea7566d", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/templates/platformer/lib/abilities.js:177"}, "properties": {"repobilityId": "07258016f0c499dd", "scanner": "scanner-primary", "fingerprint": "278aa559fea7566d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c6126c91c7ac402", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/templates/platformer/lib/hud_letters.js:34"}, "properties": {"repobilityId": "28eef75c78395b2d", "scanner": "scanner-primary", "fingerprint": "5c6126c91c7ac402", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc369ab3af5df7a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/templates/arpg/game.js:777"}, "properties": {"repobilityId": "d9df628c77a1baab", "scanner": "scanner-primary", "fingerprint": "fc369ab3af5df7a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da72269840e14b76", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/deep_audit.js:252"}, "properties": {"repobilityId": "b7a4915cecc876ed", "scanner": "scanner-primary", "fingerprint": "da72269840e14b76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3bb68dfe5ed8a9f", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/templates/shared/game_controls.js:96"}, "properties": {"repobilityId": "ebd05f0aa5fd2d1c", "scanner": "scanner-primary", "fingerprint": "f3bb68dfe5ed8a9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed771c56fee1bc96", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/templates/shared/i18n.js:99"}, "properties": {"repobilityId": "4c7b2d9e984ec5fc", "scanner": "scanner-primary", "fingerprint": "ed771c56fee1bc96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddab73adbe12cc69", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/i18n.js:126"}, "properties": {"repobilityId": "a334f7d73dc7cb1e", "scanner": "scanner-primary", "fingerprint": "ddab73adbe12cc69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fdb8412bce962f9e", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/templates/shared/platformer_controller.js:47"}, "properties": {"repobilityId": "500b76b19c687848", "scanner": "scanner-primary", "fingerprint": "fdb8412bce962f9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-562f24995ae18ba8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/templates/shared/analytics.js:16"}, "properties": {"repobilityId": "4eab629e98168b5f", "scanner": "scanner-primary", "fingerprint": "562f24995ae18ba8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6d5eb4b55182d92", "level": "none", "message": {"text": "Commented-code block (7 lines) in pipeline/templates/topdown/game.js:528"}, "properties": {"repobilityId": "3470983e1d956c5f", "scanner": "scanner-primary", "fingerprint": "d6d5eb4b55182d92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13444aa0257ee9c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/engine_authoring.py:48"}, "properties": {"repobilityId": "0cb2a4f77aa3170e", "scanner": "scanner-primary", "fingerprint": "13444aa0257ee9c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-338ac39ec483e04d", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/xcom_autopipe.py:121"}, "properties": {"repobilityId": "337e8b99302f5b48", "scanner": "scanner-primary", "fingerprint": "338ac39ec483e04d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4207a4e0c18d25c", "level": "note", "message": {"text": "Legacy-named symbol `forgeflow_games_v2` in pipeline/engine/v2_pipeline.py:87"}, "properties": {"repobilityId": "0c14f304415eb6ff", "scanner": "scanner-primary", "fingerprint": "a4207a4e0c18d25c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5837e02415037186", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/engine/v2_pipeline.py:52"}, "properties": {"repobilityId": "76af638556ab2a16", "scanner": "scanner-primary", "fingerprint": "5837e02415037186", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7a8d03e1585d339", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 pipeline/engine/build_order.py:198"}, "properties": {"repobilityId": "c344cf2be0979c96", "scanner": "scanner-primary", "fingerprint": "a7a8d03e1585d339", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-df5b666ce9c070fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/build_target.py:235"}, "properties": {"repobilityId": "a20f4332bb69b43f", "scanner": "scanner-primary", "fingerprint": "df5b666ce9c070fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00938a68d842e46f", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/seed_queue.py:45"}, "properties": {"repobilityId": "7c71a716f2ae8cad", "scanner": "scanner-primary", "fingerprint": "00938a68d842e46f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-611c668d19511a2c", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/runtime/ffg_campaign.js:30"}, "properties": {"repobilityId": "6abb81aea0d04f3e", "scanner": "scanner-primary", "fingerprint": "611c668d19511a2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51946b22eaf1557b", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_kernel.js:84"}, "properties": {"repobilityId": "a3e8521a0b1b9da7", "scanner": "scanner-primary", "fingerprint": "51946b22eaf1557b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-867ba461d0eb6dd3", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/game_controls.js:96"}, "properties": {"repobilityId": "0abbc9edbcea7a59", "scanner": "scanner-primary", "fingerprint": "867ba461d0eb6dd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a72c3837d69214f1", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_shmup.js:202"}, "properties": {"repobilityId": "0c38911c768087be", "scanner": "scanner-primary", "fingerprint": "a72c3837d69214f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77fcbd99486e55a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 pipeline/engine/runtime/ffg_loader.js:7"}, "properties": {"repobilityId": "2e8ea9d277431231", "scanner": "scanner-primary", "fingerprint": "77fcbd99486e55a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9dff11d197a8b715", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/ffg_arcade.js:25"}, "properties": {"repobilityId": "e3a0b801b784ead1", "scanner": "scanner-primary", "fingerprint": "9dff11d197a8b715", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fbed6ffda246208", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/runtime/sim/platformer_controller.js:43"}, "properties": {"repobilityId": "b7a0aa7c8c5ddb2f", "scanner": "scanner-primary", "fingerprint": "4fbed6ffda246208", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47fa330a583d4878", "level": "none", "message": {"text": "Commented-code block (7 lines) in pipeline/engine/runtime/sim/shmup_core.js:332"}, "properties": {"repobilityId": "af2ece4c2946f20c", "scanner": "scanner-primary", "fingerprint": "47fa330a583d4878", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7802c95c7e0ae2c", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/runtime/sim/arcade_core.js:502"}, "properties": {"repobilityId": "0d4df5b92a9ea3d4", "scanner": "scanner-primary", "fingerprint": "d7802c95c7e0ae2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-737ccb1c4e091857", "level": "none", "message": {"text": "Commented-code block (7 lines) in pipeline/engine/runtime/3d/ffg_tactics3d.js:34"}, "properties": {"repobilityId": "0bef239e5b702405", "scanner": "scanner-primary", "fingerprint": "737ccb1c4e091857", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c6a9f6ef804be0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/runtime/3d/ffg_battleship_3d.js:64"}, "properties": {"repobilityId": "42bd95e7025727e6", "scanner": "scanner-primary", "fingerprint": "2c6a9f6ef804be0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59a54411352ede9e", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/engine/runtime/3d/ffg_kernel_3d.js:146"}, "properties": {"repobilityId": "297329cfcce75f7f", "scanner": "scanner-primary", "fingerprint": "59a54411352ede9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0459b534292665ba", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 pipeline/engine/gates/run_gates.py:21"}, "properties": {"repobilityId": "59af8a1160fa15d7", "scanner": "scanner-primary", "fingerprint": "0459b534292665ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d248125e848561ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/gates/capture.py:19"}, "properties": {"repobilityId": "372b1008b1c6744c", "scanner": "scanner-primary", "fingerprint": "d248125e848561ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-caa59b9fd7f6a201", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/engine/tools/gen_campaign.cjs:135"}, "properties": {"repobilityId": "175ad189f661140b", "scanner": "scanner-primary", "fingerprint": "caa59b9fd7f6a201", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4fb6ae52380493f", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/art/enemy_sprite_mapper.py:275"}, "properties": {"repobilityId": "8fb02e26db884ddb", "scanner": "scanner-primary", "fingerprint": "c4fb6ae52380493f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74ecbb3b56548aa8", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/art/vision_classify.py:28"}, "properties": {"repobilityId": "3ed6383ca46a1f41", "scanner": "scanner-primary", "fingerprint": "74ecbb3b56548aa8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-620c2a0968ae0e23", "level": "none", "message": {"text": "Commented-code block (6 lines) in pipeline/art/asset_downloader.py:97"}, "properties": {"repobilityId": "52ec6bf3dadb22b9", "scanner": "scanner-primary", "fingerprint": "620c2a0968ae0e23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d55b3681b212833f", "level": "none", "message": {"text": "Commented-code block (5 lines) in pipeline/art/audio_mapper.py:375"}, "properties": {"repobilityId": "dfd7b04edcc57db8", "scanner": "scanner-primary", "fingerprint": "d55b3681b212833f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bcc4a0d2a1240df2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/game/GamePlayer.tsx:15"}, "properties": {"repobilityId": "ba5b4f2ff353e892", "scanner": "scanner-primary", "fingerprint": "bcc4a0d2a1240df2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e0bf7d119a7b504", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/gameBridge.ts:40"}, "properties": {"repobilityId": "c98beac4691615a7", "scanner": "scanner-primary", "fingerprint": "7e0bf7d119a7b504", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ceada4dda61da835", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "37714d806ae0d163", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}