{"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-924fd8b0f7036a23", "name": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ.js:268", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ.js:268"}, "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-317ddc529730eb1f", "name": "Icon-only button without accessible name \u2014 civ-lab/app.js:2109", "shortDescription": {"text": "Icon-only button without accessible name \u2014 civ-lab/app.js:2109"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55d42462a30f0b46", "name": "Stray `console.log` in TS/JS \u2014 civ-lab/app.js:4433", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/app.js:4433"}, "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-008a93256dcad461", "name": "Icon-only button without accessible name \u2014 civ-lab/tour.js:110", "shortDescription": {"text": "Icon-only button without accessible name \u2014 civ-lab/tour.js:110"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7a860a2ec9c1076", "name": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ_explorer_data.js:431", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ_explorer_data.js:431"}, "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-269aeeec9739199d", "name": "Stray `console.log` in TS/JS \u2014 civ-lab/prehistoric_kb.js:1990", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/prehistoric_kb.js:1990"}, "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-99a3a5a7f0347d9d", "name": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ_kb.js:2048", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ_kb.js:2048"}, "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-628205db7f482c9f", "name": "Stray `console.log` in TS/JS \u2014 civ-lab/knowledge_base.js:229", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/knowledge_base.js:229"}, "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-272e0905e6f38ad9", "name": "Icon-only button without accessible name \u2014 express/app.js:1886", "shortDescription": {"text": "Icon-only button without accessible name \u2014 express/app.js:1886"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d6a6148a709bf04", "name": "Insecure pattern 'direct_innerhtml_assignment' in football2d.html:769", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in football2d.html:769"}, "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-3899ae20740127de", "name": "Insecure pattern 'direct_innerhtml_assignment' in script.js:186", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in script.js:186"}, "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-7fb036418b6731d1", "name": "Insecure pattern 'direct_innerhtml_assignment' in index.html:1227", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:1227"}, "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-2a368fdd661e84a8", "name": "Insecure pattern 'direct_innerhtml_assignment' in shooter.html:1297", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in shooter.html:1297"}, "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-23987cbdc5016c72", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/family.html:110", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/family.html:110"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-23114540b165399b", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-explorer.html:273", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-explorer.html:273"}, "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-88b05d45b48ab102", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-network.html:409", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-network.html:409"}, "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-3c9f3cdd49fd5e34", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-b.html:156", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-b.html:156"}, "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-8e0acb48a6b3f7ac", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-d.html:539", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-d.html:539"}, "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-b4f345003bf9eb89", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-network.html:397", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-network.html:397"}, "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-ffd6bef0af0048bb", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/early-network.html:380", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/early-network.html:380"}, "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-6a209556d534b551", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/cosmos-design-system.html:210", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/cosmos-design-system.html:210"}, "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-8c444c54a4a0c0ac", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-network.html:437", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-network.html:437"}, "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-b944273309a6c1aa", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/perspectives.html:57", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/perspectives.html:57"}, "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-101130b7ca561ef3", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-explorer.html:246", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-explorer.html:246"}, "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-498de7bb137b8535", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-explorer.html:246", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-explorer.html:246"}, "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-17bb757474a00f8b", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-network.html:456", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-network.html:456"}, "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-e3690337bab7dc26", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/profile.html:70", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/profile.html:70"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-baf8aa67aa053795", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/app.js:151", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/app.js:151"}, "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-0709d63764ece5fb", "name": "Insecure pattern 'insert_adjacent_html' in civ-lab/app.js:1422", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/app.js:1422"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d59e401fc47371a6", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer.html:380", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer.html:380"}, "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-59cee2f39287ae8a", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-deep.html:523", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-deep.html:523"}, "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-fa6753f8761a5ab9", "name": "Insecure pattern 'insert_adjacent_html' in civ-lab/medieval-deep.html:1377", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/medieval-deep.html:1377"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e46fc54d7023480", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-explorer.html:251", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-explorer.html:251"}, "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-6b9af659f5fa4ac5", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/roleplay.html:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/roleplay.html:56"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba56b7d3d73e7a9a", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/tour.js:94", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/tour.js:94"}, "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-1d8b397499392a43", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-deep.html:524", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-deep.html:524"}, "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-bb002f2e1ecc8a92", "name": "Insecure pattern 'insert_adjacent_html' in civ-lab/contemporary-deep.html:1378", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/contemporary-deep.html:1378"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-297443f85c559939", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-deep.html:524", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-deep.html:524"}, "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-fa6e9749efc83d89", "name": "Insecure pattern 'insert_adjacent_html' in civ-lab/global-deep.html:1378", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/global-deep.html:1378"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-376c1385aa870225", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/meanwhile.html:102", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/meanwhile.html:102"}, "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-aede9b7e801969bb", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-v2.html:673", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-v2.html:673"}, "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-a4d25c6763e4cddd", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-deep.html:524", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-deep.html:524"}, "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-6a7780470847f789", "name": "Insecure pattern 'insert_adjacent_html' in civ-lab/modern-deep.html:1378", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/modern-deep.html:1378"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-13d6c7fa897e40fd", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-network.html:448", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-network.html:448"}, "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-7ced88e699c1cd51", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/route.html:67", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/route.html:67"}, "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-8585776574edf39d", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-deep.html:522", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-deep.html:522"}, "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-ae5c5b9ab415a7df", "name": "Insecure pattern 'insert_adjacent_html' in civ-lab/civ-deep.html:1353", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/civ-deep.html:1353"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c5a63d0f480c9b23", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/v2.html:988", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/v2.html:988"}, "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-c592a10ba50bad3b", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/causality.html:100", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/causality.html:100"}, "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-2297671ea59bf8b6", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/ai_float.js:78", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/ai_float.js:78"}, "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-78ae3307658634ab", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-explorer.html:269", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-explorer.html:269"}, "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-73f5921c1ff419ef", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/map.html:222", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/map.html:222"}, "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-3cfd1e7b17474956", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/compare.html:83", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/compare.html:83"}, "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-a60414d37f47bb88", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-deep.html:523", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-deep.html:523"}, "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-089da0294b278201", "name": "Insecure pattern 'insert_adjacent_html' in civ-lab/classical-deep.html:1371", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/classical-deep.html:1371"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5890af837dcd7d3b", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/feed.html:162", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/feed.html:162"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a8bba69565d61113", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/evidence.html:72", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/evidence.html:72"}, "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-568cf8dee6af01a8", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-e.html:299", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-e.html:299"}, "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-5546482a15e62392", "name": "Insecure pattern 'direct_outerhtml_assignment' in civ-lab/civ-explorer-e.html:503", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in civ-lab/civ-explorer-e.html:503"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95783339b6a5b290", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-c.html:165", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-c.html:165"}, "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-1c1b2852b1fd47b1", "name": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-a.html:153", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-a.html:153"}, "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-9921d802d62b140e", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/talk.html:162", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/talk.html:162"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64fbb908480605b9", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/app.js:44", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/app.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-f059ac5398630c54", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/combined.html:101", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/combined.html:101"}, "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-326b4b70973ee7dd", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/pokemon.html:57", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/pokemon.html:57"}, "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-c8b43c0f051c7f0d", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/friend.html:68", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/friend.html:68"}, "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-e9d850ab9bfcc4c8", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/author.html:77", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/author.html:77"}, "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-764bfe81e4ff58fe", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/grow.html:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/grow.html:93"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c20f8f4126a737b", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/words.html:106", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/words.html:106"}, "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-2a99d6899d3d9d5f", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/report.html:120", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/report.html:120"}, "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-90d84c312b06e72b", "name": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/explore.html:79", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/explore.html:79"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49b72687f3650474", "name": "Very large file: civ-lab/prehistoric.js (1003 lines)", "shortDescription": {"text": "Very large file: civ-lab/prehistoric.js (1003 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-4a5e285d975690de", "name": "Very large file: civ-lab/app.js (4896 lines)", "shortDescription": {"text": "Very large file: civ-lab/app.js (4896 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-d5cbfa20bb24e1f0", "name": "Very large file: civ-lab/prehistoric_kb.js (1991 lines)", "shortDescription": {"text": "Very large file: civ-lab/prehistoric_kb.js (1991 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-6f9fd25cc936077f", "name": "Very large file: civ-lab/early_civ_deep.js (3220 lines)", "shortDescription": {"text": "Very large file: civ-lab/early_civ_deep.js (3220 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-546cacecc680a970", "name": "Very large file: civ-lab/data.js (1791 lines)", "shortDescription": {"text": "Very large file: civ-lab/data.js (1791 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-2e5cfbeabc64dfda", "name": "Very large file: civ-lab/early_civ_kb.js (2049 lines)", "shortDescription": {"text": "Very large file: civ-lab/early_civ_kb.js (2049 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-86571c2c37fc939b", "name": "Very large file: express/app.js (2650 lines)", "shortDescription": {"text": "Very large file: express/app.js (2650 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 47 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01f96f71d9907a8c", "name": "README lacks setup or run instructions", "shortDescription": {"text": "README lacks setup or run instructions"}, "fullDescription": {"text": "A README exists, but it does not contain common install/setup/run markers. This matches a frequent generated-code pattern: UI is present, operational handoff is thin."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 6 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 142 placeholder/mock markers across 6 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cbd81d02d647afd3", "name": "Legacy-named symbol `today_legacy` in civ-lab/contemporary_deep.js:133", "shortDescription": {"text": "Legacy-named symbol `today_legacy` in civ-lab/contemporary_deep.js:133"}, "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-72a4c94c4a71ff15", "name": "Legacy-named symbol `egypt_old` in civ-lab/chapters_data.js:78", "shortDescription": {"text": "Legacy-named symbol `egypt_old` in civ-lab/chapters_data.js:78"}, "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-d808759151e5c789", "name": "Legacy-named symbol `egypt_old` in civ-lab/evidence_data.js:2", "shortDescription": {"text": "Legacy-named symbol `egypt_old` in civ-lab/evidence_data.js:2"}, "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-1f79f196569a1935", "name": "Legacy-named symbol `rest_v1` in civ-lab/app.js:4452", "shortDescription": {"text": "Legacy-named symbol `rest_v1` in civ-lab/app.js:4452"}, "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-1943b2ef933ada29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 civ-lab/app.js:3611", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 civ-lab/app.js:3611"}, "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-51a27bbe87021405", "name": "Legacy-named symbol `egypt_old` in civ-lab/map_data.js:2", "shortDescription": {"text": "Legacy-named symbol `egypt_old` in civ-lab/map_data.js:2"}, "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-ab2d0ec38a7e9a9d", "name": "Legacy-named symbol `civlab_track_v1` in civ-lab/track.js:3", "shortDescription": {"text": "Legacy-named symbol `civlab_track_v1` in civ-lab/track.js: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-a1d24a006618b4c8", "name": "Legacy-named symbol `egypt_old` in civ-lab/early_civ_explorer_data.js:14", "shortDescription": {"text": "Legacy-named symbol `egypt_old` in civ-lab/early_civ_explorer_data.js:14"}, "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-03a30516bf18e26b", "name": "Commented-code block (5 lines) in civ-lab/early_civ_explorer_data.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in civ-lab/early_civ_explorer_data.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0a14c17ba8cfa14", "name": "Commented-code block (9 lines) in civ-lab/prehistoric_kb.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in civ-lab/prehistoric_kb.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eac497516822206e", "name": "Legacy-named symbol `today_legacy` in civ-lab/classical_deep.js:399", "shortDescription": {"text": "Legacy-named symbol `today_legacy` in civ-lab/classical_deep.js:399"}, "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-48de201ea66e69f2", "name": "Commented-code block (7 lines) in civ-lab/classical_deep.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in civ-lab/classical_deep.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-998c882d2c1887df", "name": "Legacy-named symbol `today_legacy` in civ-lab/medieval_deep.js:406", "shortDescription": {"text": "Legacy-named symbol `today_legacy` in civ-lab/medieval_deep.js:406"}, "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-c57966c91ec892a7", "name": "Commented-code block (7 lines) in civ-lab/medieval_deep.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in civ-lab/medieval_deep.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9b39e20f375d30a", "name": "Legacy-named symbol `egypt_old` in civ-lab/early_civ_deep.js:294", "shortDescription": {"text": "Legacy-named symbol `egypt_old` in civ-lab/early_civ_deep.js:294"}, "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-8e5e9ed521c00f30", "name": "Commented-code block (8 lines) in civ-lab/early_civ_deep.js:1", "shortDescription": {"text": "Commented-code block (8 lines) in civ-lab/early_civ_deep.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92c55f6d98382776", "name": "Legacy-named symbol `kb_egypt_old` in civ-lab/data.js:805", "shortDescription": {"text": "Legacy-named symbol `kb_egypt_old` in civ-lab/data.js:805"}, "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-744d9ee5f9e7c31c", "name": "Commented-code block (5 lines) in civ-lab/data.js:1636", "shortDescription": {"text": "Commented-code block (5 lines) in civ-lab/data.js:1636"}, "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-849fa78d3198adcd", "name": "Commented-code block (5 lines) in civ-lab/early_civ_kb.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in civ-lab/early_civ_kb.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0d6fad274eedb25", "name": "Legacy-named symbol `egypt_old` in civ-lab/meanwhile_data.js:4", "shortDescription": {"text": "Legacy-named symbol `egypt_old` in civ-lab/meanwhile_data.js:4"}, "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-691397a77f91afce", "name": "Legacy-named symbol `today_legacy` in civ-lab/global_deep.js:159", "shortDescription": {"text": "Legacy-named symbol `today_legacy` in civ-lab/global_deep.js:159"}, "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-3da10a379f45af47", "name": "`fetch()` without try/.catch or AbortSignal \u2014 civ-lab/ai_float.js:164", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 civ-lab/ai_float.js:164"}, "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-d1f5b8fbe0e5d7e3", "name": "Legacy-named symbol `today_legacy` in civ-lab/modern_deep.js:133", "shortDescription": {"text": "Legacy-named symbol `today_legacy` in civ-lab/modern_deep.js:133"}, "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-92c416698bf87fda", "name": "Legacy-named symbol `egypt_old` in civ-lab/compare_data.js:2", "shortDescription": {"text": "Legacy-named symbol `egypt_old` in civ-lab/compare_data.js:2"}, "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-9b53b00ec5bd692b", "name": "Commented-code block (6 lines) in civ-lab/classical_people_deep.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in civ-lab/classical_people_deep.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1017ba5588ec651", "name": "Commented-code block (5 lines) in civ-lab/medieval_people_deep.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in civ-lab/medieval_people_deep.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f61042dd08c5fad5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 express/app.js:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 express/app.js:87"}, "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-cc42402af759143f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 express/cloudflare-worker.js:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 express/cloudflare-worker.js:37"}, "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}}]}}, "automationDetails": {"id": "repobility/25142"}, "properties": {"repository": "crystalbai88-code/my-website", "repoUrl": "https://github.com/crystalbai88-code/my-website", "branch": "main"}, "results": [{"ruleId": "scanner-924fd8b0f7036a23", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ.js:268"}, "properties": {"repobilityId": "84f3a2d0b4f253e7", "scanner": "scanner-primary", "fingerprint": "924fd8b0f7036a23", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-317ddc529730eb1f", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 civ-lab/app.js:2109"}, "properties": {"repobilityId": "56b94f409d992d54", "scanner": "scanner-primary", "fingerprint": "317ddc529730eb1f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-55d42462a30f0b46", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/app.js:4433"}, "properties": {"repobilityId": "0fdf9085a6e54088", "scanner": "scanner-primary", "fingerprint": "55d42462a30f0b46", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-008a93256dcad461", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 civ-lab/tour.js:110"}, "properties": {"repobilityId": "3887abebaf666dc9", "scanner": "scanner-primary", "fingerprint": "008a93256dcad461", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f7a860a2ec9c1076", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ_explorer_data.js:431"}, "properties": {"repobilityId": "dd8fe9fc56795983", "scanner": "scanner-primary", "fingerprint": "f7a860a2ec9c1076", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-269aeeec9739199d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/prehistoric_kb.js:1990"}, "properties": {"repobilityId": "e0a1769d01b3e86c", "scanner": "scanner-primary", "fingerprint": "269aeeec9739199d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99a3a5a7f0347d9d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/early_civ_kb.js:2048"}, "properties": {"repobilityId": "b59d560727a8f0fa", "scanner": "scanner-primary", "fingerprint": "99a3a5a7f0347d9d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-628205db7f482c9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 civ-lab/knowledge_base.js:229"}, "properties": {"repobilityId": "c152caec94ff9b5d", "scanner": "scanner-primary", "fingerprint": "628205db7f482c9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-272e0905e6f38ad9", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 express/app.js:1886"}, "properties": {"repobilityId": "62f3937fc2e401b5", "scanner": "scanner-primary", "fingerprint": "272e0905e6f38ad9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7d6a6148a709bf04", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in football2d.html:769"}, "properties": {"repobilityId": "4b03fc0e490edead", "scanner": "scanner-primary", "fingerprint": "7d6a6148a709bf04", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "football2d.html"}, "region": {"startLine": 769}}}]}, {"ruleId": "scanner-3899ae20740127de", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in script.js:186"}, "properties": {"repobilityId": "6579c6710200525f", "scanner": "scanner-primary", "fingerprint": "3899ae20740127de", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "script.js"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-7fb036418b6731d1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in index.html:1227"}, "properties": {"repobilityId": "f91708437a3a5445", "scanner": "scanner-primary", "fingerprint": "7fb036418b6731d1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index.html"}, "region": {"startLine": 1227}}}]}, {"ruleId": "scanner-2a368fdd661e84a8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in shooter.html:1297"}, "properties": {"repobilityId": "f09e1afd16ac44f7", "scanner": "scanner-primary", "fingerprint": "2a368fdd661e84a8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shooter.html"}, "region": {"startLine": 1297}}}]}, {"ruleId": "scanner-23987cbdc5016c72", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/family.html:110"}, "properties": {"repobilityId": "51741f65bd8c4784", "scanner": "scanner-primary", "fingerprint": "23987cbdc5016c72", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/family.html"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-23114540b165399b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-explorer.html:273"}, "properties": {"repobilityId": "de8db3354f37ae6c", "scanner": "scanner-primary", "fingerprint": "23114540b165399b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/medieval-explorer.html"}, "region": {"startLine": 273}}}]}, {"ruleId": "scanner-88b05d45b48ab102", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-network.html:409"}, "properties": {"repobilityId": "2d008bfdc4e3afab", "scanner": "scanner-primary", "fingerprint": "88b05d45b48ab102", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/medieval-network.html"}, "region": {"startLine": 409}}}]}, {"ruleId": "scanner-3c9f3cdd49fd5e34", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-b.html:156"}, "properties": {"repobilityId": "8de52ad8142d0163", "scanner": "scanner-primary", "fingerprint": "3c9f3cdd49fd5e34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-explorer-b.html"}, "region": {"startLine": 156}}}]}, {"ruleId": "scanner-8e0acb48a6b3f7ac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-d.html:539"}, "properties": {"repobilityId": "a9fd7c084d5e1935", "scanner": "scanner-primary", "fingerprint": "8e0acb48a6b3f7ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-explorer-d.html"}, "region": {"startLine": 539}}}]}, {"ruleId": "scanner-b4f345003bf9eb89", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-network.html:397"}, "properties": {"repobilityId": "9687d83f901660fe", "scanner": "scanner-primary", "fingerprint": "b4f345003bf9eb89", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/classical-network.html"}, "region": {"startLine": 397}}}]}, {"ruleId": "scanner-ffd6bef0af0048bb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/early-network.html:380"}, "properties": {"repobilityId": "ca61b45af7def4ba", "scanner": "scanner-primary", "fingerprint": "ffd6bef0af0048bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/early-network.html"}, "region": {"startLine": 380}}}]}, {"ruleId": "scanner-6a209556d534b551", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/cosmos-design-system.html:210"}, "properties": {"repobilityId": "83480e566080a9cf", "scanner": "scanner-primary", "fingerprint": "6a209556d534b551", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/cosmos-design-system.html"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-8c444c54a4a0c0ac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-network.html:437"}, "properties": {"repobilityId": "e6762a6a3a4dbf9c", "scanner": "scanner-primary", "fingerprint": "8c444c54a4a0c0ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/contemporary-network.html"}, "region": {"startLine": 437}}}]}, {"ruleId": "scanner-b944273309a6c1aa", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/perspectives.html:57"}, "properties": {"repobilityId": "795af73a13657dec", "scanner": "scanner-primary", "fingerprint": "b944273309a6c1aa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/perspectives.html"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-101130b7ca561ef3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-explorer.html:246"}, "properties": {"repobilityId": "b7a764563e0a6077", "scanner": "scanner-primary", "fingerprint": "101130b7ca561ef3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/modern-explorer.html"}, "region": {"startLine": 246}}}]}, {"ruleId": "scanner-498de7bb137b8535", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-explorer.html:246"}, "properties": {"repobilityId": "712a807934fb780c", "scanner": "scanner-primary", "fingerprint": "498de7bb137b8535", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/contemporary-explorer.html"}, "region": {"startLine": 246}}}]}, {"ruleId": "scanner-17bb757474a00f8b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-network.html:456"}, "properties": {"repobilityId": "b8b8597c109c7f90", "scanner": "scanner-primary", "fingerprint": "17bb757474a00f8b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/modern-network.html"}, "region": {"startLine": 456}}}]}, {"ruleId": "scanner-e3690337bab7dc26", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/profile.html:70"}, "properties": {"repobilityId": "28bcf0a8afe4ec14", "scanner": "scanner-primary", "fingerprint": "e3690337bab7dc26", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/profile.html"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-baf8aa67aa053795", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/app.js:151"}, "properties": {"repobilityId": "c741b3b7ded95818", "scanner": "scanner-primary", "fingerprint": "baf8aa67aa053795", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/app.js"}, "region": {"startLine": 151}}}]}, {"ruleId": "scanner-0709d63764ece5fb", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/app.js:1422"}, "properties": {"repobilityId": "23426bc681e40e7e", "scanner": "scanner-primary", "fingerprint": "0709d63764ece5fb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/app.js"}, "region": {"startLine": 1422}}}]}, {"ruleId": "scanner-d59e401fc47371a6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer.html:380"}, "properties": {"repobilityId": "a4df9982ddff4983", "scanner": "scanner-primary", "fingerprint": "d59e401fc47371a6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-explorer.html"}, "region": {"startLine": 380}}}]}, {"ruleId": "scanner-59cee2f39287ae8a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/medieval-deep.html:523"}, "properties": {"repobilityId": "f38e79f7068ce230", "scanner": "scanner-primary", "fingerprint": "59cee2f39287ae8a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/medieval-deep.html"}, "region": {"startLine": 523}}}]}, {"ruleId": "scanner-fa6753f8761a5ab9", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/medieval-deep.html:1377"}, "properties": {"repobilityId": "067fe058fc13229f", "scanner": "scanner-primary", "fingerprint": "fa6753f8761a5ab9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/medieval-deep.html"}, "region": {"startLine": 1377}}}]}, {"ruleId": "scanner-8e46fc54d7023480", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-explorer.html:251"}, "properties": {"repobilityId": "68d766c0926d25a6", "scanner": "scanner-primary", "fingerprint": "8e46fc54d7023480", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/global-explorer.html"}, "region": {"startLine": 251}}}]}, {"ruleId": "scanner-6b9af659f5fa4ac5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/roleplay.html:56"}, "properties": {"repobilityId": "197cc3f425b2b258", "scanner": "scanner-primary", "fingerprint": "6b9af659f5fa4ac5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/roleplay.html"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-ba56b7d3d73e7a9a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/tour.js:94"}, "properties": {"repobilityId": "134afac2568f4298", "scanner": "scanner-primary", "fingerprint": "ba56b7d3d73e7a9a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/tour.js"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-1d8b397499392a43", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/contemporary-deep.html:524"}, "properties": {"repobilityId": "30aa688643ed83c4", "scanner": "scanner-primary", "fingerprint": "1d8b397499392a43", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/contemporary-deep.html"}, "region": {"startLine": 524}}}]}, {"ruleId": "scanner-bb002f2e1ecc8a92", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/contemporary-deep.html:1378"}, "properties": {"repobilityId": "4424d6e3168af6be", "scanner": "scanner-primary", "fingerprint": "bb002f2e1ecc8a92", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/contemporary-deep.html"}, "region": {"startLine": 1378}}}]}, {"ruleId": "scanner-297443f85c559939", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-deep.html:524"}, "properties": {"repobilityId": "10204a665aa86e9f", "scanner": "scanner-primary", "fingerprint": "297443f85c559939", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/global-deep.html"}, "region": {"startLine": 524}}}]}, {"ruleId": "scanner-fa6e9749efc83d89", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/global-deep.html:1378"}, "properties": {"repobilityId": "e082accb22f6ac57", "scanner": "scanner-primary", "fingerprint": "fa6e9749efc83d89", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/global-deep.html"}, "region": {"startLine": 1378}}}]}, {"ruleId": "scanner-376c1385aa870225", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/meanwhile.html:102"}, "properties": {"repobilityId": "744ef03a974fbd8d", "scanner": "scanner-primary", "fingerprint": "376c1385aa870225", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/meanwhile.html"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-aede9b7e801969bb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-v2.html:673"}, "properties": {"repobilityId": "8a6cdbadefb463ca", "scanner": "scanner-primary", "fingerprint": "aede9b7e801969bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-explorer-v2.html"}, "region": {"startLine": 673}}}]}, {"ruleId": "scanner-a4d25c6763e4cddd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/modern-deep.html:524"}, "properties": {"repobilityId": "47cbc1f4968d1b92", "scanner": "scanner-primary", "fingerprint": "a4d25c6763e4cddd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/modern-deep.html"}, "region": {"startLine": 524}}}]}, {"ruleId": "scanner-6a7780470847f789", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/modern-deep.html:1378"}, "properties": {"repobilityId": "b9e6bee1fe11d414", "scanner": "scanner-primary", "fingerprint": "6a7780470847f789", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/modern-deep.html"}, "region": {"startLine": 1378}}}]}, {"ruleId": "scanner-13d6c7fa897e40fd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/global-network.html:448"}, "properties": {"repobilityId": "9032fa0fc600acc5", "scanner": "scanner-primary", "fingerprint": "13d6c7fa897e40fd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/global-network.html"}, "region": {"startLine": 448}}}]}, {"ruleId": "scanner-7ced88e699c1cd51", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/route.html:67"}, "properties": {"repobilityId": "4663c3e3475eb842", "scanner": "scanner-primary", "fingerprint": "7ced88e699c1cd51", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/route.html"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-8585776574edf39d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-deep.html:522"}, "properties": {"repobilityId": "f1782ca2845c9b06", "scanner": "scanner-primary", "fingerprint": "8585776574edf39d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-deep.html"}, "region": {"startLine": 522}}}]}, {"ruleId": "scanner-ae5c5b9ab415a7df", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/civ-deep.html:1353"}, "properties": {"repobilityId": "577e890bc0e80126", "scanner": "scanner-primary", "fingerprint": "ae5c5b9ab415a7df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-deep.html"}, "region": {"startLine": 1353}}}]}, {"ruleId": "scanner-c5a63d0f480c9b23", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/v2.html:988"}, "properties": {"repobilityId": "20deece1ca7d2476", "scanner": "scanner-primary", "fingerprint": "c5a63d0f480c9b23", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/v2.html"}, "region": {"startLine": 988}}}]}, {"ruleId": "scanner-c592a10ba50bad3b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/causality.html:100"}, "properties": {"repobilityId": "9e1fad37893b27d9", "scanner": "scanner-primary", "fingerprint": "c592a10ba50bad3b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/causality.html"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-2297671ea59bf8b6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/ai_float.js:78"}, "properties": {"repobilityId": "dfe9e32d79d995f2", "scanner": "scanner-primary", "fingerprint": "2297671ea59bf8b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/ai_float.js"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-78ae3307658634ab", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-explorer.html:269"}, "properties": {"repobilityId": "5790a96be4e13e25", "scanner": "scanner-primary", "fingerprint": "78ae3307658634ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/classical-explorer.html"}, "region": {"startLine": 269}}}]}, {"ruleId": "scanner-73f5921c1ff419ef", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/map.html:222"}, "properties": {"repobilityId": "5051bfa759a9ffb4", "scanner": "scanner-primary", "fingerprint": "73f5921c1ff419ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/map.html"}, "region": {"startLine": 222}}}]}, {"ruleId": "scanner-3cfd1e7b17474956", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/compare.html:83"}, "properties": {"repobilityId": "0b0febccaf141f66", "scanner": "scanner-primary", "fingerprint": "3cfd1e7b17474956", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/compare.html"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-a60414d37f47bb88", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/classical-deep.html:523"}, "properties": {"repobilityId": "a632465c79ed3fbb", "scanner": "scanner-primary", "fingerprint": "a60414d37f47bb88", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/classical-deep.html"}, "region": {"startLine": 523}}}]}, {"ruleId": "scanner-089da0294b278201", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in civ-lab/classical-deep.html:1371"}, "properties": {"repobilityId": "582f1cadb942d3ef", "scanner": "scanner-primary", "fingerprint": "089da0294b278201", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/classical-deep.html"}, "region": {"startLine": 1371}}}]}, {"ruleId": "scanner-5890af837dcd7d3b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/feed.html:162"}, "properties": {"repobilityId": "711943b110884e77", "scanner": "scanner-primary", "fingerprint": "5890af837dcd7d3b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/feed.html"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-a8bba69565d61113", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/evidence.html:72"}, "properties": {"repobilityId": "9121063e02e4681b", "scanner": "scanner-primary", "fingerprint": "a8bba69565d61113", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/evidence.html"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-568cf8dee6af01a8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-e.html:299"}, "properties": {"repobilityId": "b4c8d66528d9a33b", "scanner": "scanner-primary", "fingerprint": "568cf8dee6af01a8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-explorer-e.html"}, "region": {"startLine": 299}}}]}, {"ruleId": "scanner-5546482a15e62392", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in civ-lab/civ-explorer-e.html:503"}, "properties": {"repobilityId": "66387c94599b3717", "scanner": "scanner-primary", "fingerprint": "5546482a15e62392", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-explorer-e.html"}, "region": {"startLine": 503}}}]}, {"ruleId": "scanner-95783339b6a5b290", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-c.html:165"}, "properties": {"repobilityId": "9df631e21785bee6", "scanner": "scanner-primary", "fingerprint": "95783339b6a5b290", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-explorer-c.html"}, "region": {"startLine": 165}}}]}, {"ruleId": "scanner-1c1b2852b1fd47b1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in civ-lab/civ-explorer-a.html:153"}, "properties": {"repobilityId": "17cfc14a1a11ed5b", "scanner": "scanner-primary", "fingerprint": "1c1b2852b1fd47b1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "civ-lab/civ-explorer-a.html"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-9921d802d62b140e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/talk.html:162"}, "properties": {"repobilityId": "14af26a493668bf2", "scanner": "scanner-primary", "fingerprint": "9921d802d62b140e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/talk.html"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-64fbb908480605b9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/app.js:44"}, "properties": {"repobilityId": "f6485d30ce0379bf", "scanner": "scanner-primary", "fingerprint": "64fbb908480605b9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/app.js"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-f059ac5398630c54", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/combined.html:101"}, "properties": {"repobilityId": "53e29a0f0a80d673", "scanner": "scanner-primary", "fingerprint": "f059ac5398630c54", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/demos/combined.html"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-326b4b70973ee7dd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/pokemon.html:57"}, "properties": {"repobilityId": "65089364d8636121", "scanner": "scanner-primary", "fingerprint": "326b4b70973ee7dd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/demos/pokemon.html"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-c8b43c0f051c7f0d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/friend.html:68"}, "properties": {"repobilityId": "9b0279fb3d386992", "scanner": "scanner-primary", "fingerprint": "c8b43c0f051c7f0d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/demos/friend.html"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-e9d850ab9bfcc4c8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/author.html:77"}, "properties": {"repobilityId": "7ee3ea6c3455a2fe", "scanner": "scanner-primary", "fingerprint": "e9d850ab9bfcc4c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/demos/author.html"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-764bfe81e4ff58fe", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/grow.html:93"}, "properties": {"repobilityId": "b0e6e82750693758", "scanner": "scanner-primary", "fingerprint": "764bfe81e4ff58fe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/demos/grow.html"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-2c20f8f4126a737b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/words.html:106"}, "properties": {"repobilityId": "b8f67b7dc7fd42e7", "scanner": "scanner-primary", "fingerprint": "2c20f8f4126a737b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/demos/words.html"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-2a99d6899d3d9d5f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/report.html:120"}, "properties": {"repobilityId": "29ec7abd141abb9c", "scanner": "scanner-primary", "fingerprint": "2a99d6899d3d9d5f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/demos/report.html"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-90d84c312b06e72b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in express/demos/explore.html:79"}, "properties": {"repobilityId": "72ca4ab38e131449", "scanner": "scanner-primary", "fingerprint": "90d84c312b06e72b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "express/demos/explore.html"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-49b72687f3650474", "level": "note", "message": {"text": "Very large file: civ-lab/prehistoric.js (1003 lines)"}, "properties": {"repobilityId": "f217d9fb63cbaf88", "scanner": "scanner-primary", "fingerprint": "49b72687f3650474", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4a5e285d975690de", "level": "note", "message": {"text": "Very large file: civ-lab/app.js (4896 lines)"}, "properties": {"repobilityId": "0e9b5d86a5f09b38", "scanner": "scanner-primary", "fingerprint": "4a5e285d975690de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d5cbfa20bb24e1f0", "level": "note", "message": {"text": "Very large file: civ-lab/prehistoric_kb.js (1991 lines)"}, "properties": {"repobilityId": "bb67dd46df924159", "scanner": "scanner-primary", "fingerprint": "d5cbfa20bb24e1f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6f9fd25cc936077f", "level": "note", "message": {"text": "Very large file: civ-lab/early_civ_deep.js (3220 lines)"}, "properties": {"repobilityId": "0e9828f88be961b1", "scanner": "scanner-primary", "fingerprint": "6f9fd25cc936077f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-546cacecc680a970", "level": "note", "message": {"text": "Very large file: civ-lab/data.js (1791 lines)"}, "properties": {"repobilityId": "825438c121369430", "scanner": "scanner-primary", "fingerprint": "546cacecc680a970", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2e5cfbeabc64dfda", "level": "note", "message": {"text": "Very large file: civ-lab/early_civ_kb.js (2049 lines)"}, "properties": {"repobilityId": "e9d78d25105211a4", "scanner": "scanner-primary", "fingerprint": "2e5cfbeabc64dfda", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-86571c2c37fc939b", "level": "note", "message": {"text": "Very large file: express/app.js (2650 lines)"}, "properties": {"repobilityId": "72c48deb6820c274", "scanner": "scanner-primary", "fingerprint": "86571c2c37fc939b", "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": "02afbafcfabfe892", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-01f96f71d9907a8c", "level": "note", "message": {"text": "README lacks setup or run instructions"}, "properties": {"repobilityId": "a80816a3072eb251", "scanner": "scanner-primary", "fingerprint": "01f96f71d9907a8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b38ac12bc6ebc99b", "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": "14beec1227108442", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "0ee9f3d151666ae7", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "24bd99e9d18c957f", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-cbd81d02d647afd3", "level": "note", "message": {"text": "Legacy-named symbol `today_legacy` in civ-lab/contemporary_deep.js:133"}, "properties": {"repobilityId": "0be5f3283e22db53", "scanner": "scanner-primary", "fingerprint": "cbd81d02d647afd3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-72a4c94c4a71ff15", "level": "note", "message": {"text": "Legacy-named symbol `egypt_old` in civ-lab/chapters_data.js:78"}, "properties": {"repobilityId": "4938d97bd86f8a9d", "scanner": "scanner-primary", "fingerprint": "72a4c94c4a71ff15", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d808759151e5c789", "level": "note", "message": {"text": "Legacy-named symbol `egypt_old` in civ-lab/evidence_data.js:2"}, "properties": {"repobilityId": "9db4c9babba6d83a", "scanner": "scanner-primary", "fingerprint": "d808759151e5c789", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1f79f196569a1935", "level": "note", "message": {"text": "Legacy-named symbol `rest_v1` in civ-lab/app.js:4452"}, "properties": {"repobilityId": "fe99e5c9ae534c8d", "scanner": "scanner-primary", "fingerprint": "1f79f196569a1935", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1943b2ef933ada29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 civ-lab/app.js:3611"}, "properties": {"repobilityId": "9ff1eda8f249af16", "scanner": "scanner-primary", "fingerprint": "1943b2ef933ada29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51a27bbe87021405", "level": "note", "message": {"text": "Legacy-named symbol `egypt_old` in civ-lab/map_data.js:2"}, "properties": {"repobilityId": "0b4441eaa2a8f420", "scanner": "scanner-primary", "fingerprint": "51a27bbe87021405", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ab2d0ec38a7e9a9d", "level": "note", "message": {"text": "Legacy-named symbol `civlab_track_v1` in civ-lab/track.js:3"}, "properties": {"repobilityId": "bb0d167960fd4274", "scanner": "scanner-primary", "fingerprint": "ab2d0ec38a7e9a9d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a1d24a006618b4c8", "level": "note", "message": {"text": "Legacy-named symbol `egypt_old` in civ-lab/early_civ_explorer_data.js:14"}, "properties": {"repobilityId": "aade316d261b78a3", "scanner": "scanner-primary", "fingerprint": "a1d24a006618b4c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-03a30516bf18e26b", "level": "none", "message": {"text": "Commented-code block (5 lines) in civ-lab/early_civ_explorer_data.js:1"}, "properties": {"repobilityId": "8a364f738f05586b", "scanner": "scanner-primary", "fingerprint": "03a30516bf18e26b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0a14c17ba8cfa14", "level": "none", "message": {"text": "Commented-code block (9 lines) in civ-lab/prehistoric_kb.js:1"}, "properties": {"repobilityId": "6d37560ba22d9e12", "scanner": "scanner-primary", "fingerprint": "a0a14c17ba8cfa14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eac497516822206e", "level": "note", "message": {"text": "Legacy-named symbol `today_legacy` in civ-lab/classical_deep.js:399"}, "properties": {"repobilityId": "d6fa9c338b9f4e7e", "scanner": "scanner-primary", "fingerprint": "eac497516822206e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-48de201ea66e69f2", "level": "none", "message": {"text": "Commented-code block (7 lines) in civ-lab/classical_deep.js:1"}, "properties": {"repobilityId": "ff3ff6d25a3fdbe2", "scanner": "scanner-primary", "fingerprint": "48de201ea66e69f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-998c882d2c1887df", "level": "note", "message": {"text": "Legacy-named symbol `today_legacy` in civ-lab/medieval_deep.js:406"}, "properties": {"repobilityId": "84bb8ad4a20a5e53", "scanner": "scanner-primary", "fingerprint": "998c882d2c1887df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c57966c91ec892a7", "level": "none", "message": {"text": "Commented-code block (7 lines) in civ-lab/medieval_deep.js:1"}, "properties": {"repobilityId": "2d98598427824da3", "scanner": "scanner-primary", "fingerprint": "c57966c91ec892a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9b39e20f375d30a", "level": "note", "message": {"text": "Legacy-named symbol `egypt_old` in civ-lab/early_civ_deep.js:294"}, "properties": {"repobilityId": "e5429022edbb7833", "scanner": "scanner-primary", "fingerprint": "c9b39e20f375d30a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8e5e9ed521c00f30", "level": "none", "message": {"text": "Commented-code block (8 lines) in civ-lab/early_civ_deep.js:1"}, "properties": {"repobilityId": "7a065d6617ee56a1", "scanner": "scanner-primary", "fingerprint": "8e5e9ed521c00f30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92c55f6d98382776", "level": "note", "message": {"text": "Legacy-named symbol `kb_egypt_old` in civ-lab/data.js:805"}, "properties": {"repobilityId": "1cabb88f21059192", "scanner": "scanner-primary", "fingerprint": "92c55f6d98382776", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-744d9ee5f9e7c31c", "level": "none", "message": {"text": "Commented-code block (5 lines) in civ-lab/data.js:1636"}, "properties": {"repobilityId": "2d0ba4a9ed928179", "scanner": "scanner-primary", "fingerprint": "744d9ee5f9e7c31c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-849fa78d3198adcd", "level": "none", "message": {"text": "Commented-code block (5 lines) in civ-lab/early_civ_kb.js:1"}, "properties": {"repobilityId": "22c62b087521264f", "scanner": "scanner-primary", "fingerprint": "849fa78d3198adcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0d6fad274eedb25", "level": "note", "message": {"text": "Legacy-named symbol `egypt_old` in civ-lab/meanwhile_data.js:4"}, "properties": {"repobilityId": "fbae3162af945268", "scanner": "scanner-primary", "fingerprint": "a0d6fad274eedb25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-691397a77f91afce", "level": "note", "message": {"text": "Legacy-named symbol `today_legacy` in civ-lab/global_deep.js:159"}, "properties": {"repobilityId": "984635973e2131ef", "scanner": "scanner-primary", "fingerprint": "691397a77f91afce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3da10a379f45af47", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 civ-lab/ai_float.js:164"}, "properties": {"repobilityId": "06bd6fd82d27fda4", "scanner": "scanner-primary", "fingerprint": "3da10a379f45af47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d1f5b8fbe0e5d7e3", "level": "note", "message": {"text": "Legacy-named symbol `today_legacy` in civ-lab/modern_deep.js:133"}, "properties": {"repobilityId": "03e4bd6caaf58932", "scanner": "scanner-primary", "fingerprint": "d1f5b8fbe0e5d7e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-92c416698bf87fda", "level": "note", "message": {"text": "Legacy-named symbol `egypt_old` in civ-lab/compare_data.js:2"}, "properties": {"repobilityId": "8f336d48f9b52241", "scanner": "scanner-primary", "fingerprint": "92c416698bf87fda", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9b53b00ec5bd692b", "level": "none", "message": {"text": "Commented-code block (6 lines) in civ-lab/classical_people_deep.js:1"}, "properties": {"repobilityId": "2c2162ea7348d859", "scanner": "scanner-primary", "fingerprint": "9b53b00ec5bd692b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1017ba5588ec651", "level": "none", "message": {"text": "Commented-code block (5 lines) in civ-lab/medieval_people_deep.js:1"}, "properties": {"repobilityId": "cdf1903f01fb64d2", "scanner": "scanner-primary", "fingerprint": "a1017ba5588ec651", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f61042dd08c5fad5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 express/app.js:87"}, "properties": {"repobilityId": "f81e56cc3c1d8996", "scanner": "scanner-primary", "fingerprint": "f61042dd08c5fad5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc42402af759143f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 express/cloudflare-worker.js:37"}, "properties": {"repobilityId": "fa3a767f844a1711", "scanner": "scanner-primary", "fingerprint": "cc42402af759143f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}