{"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-09ba9575a1673af3", "name": "Stray `console.log` in TS/JS \u2014 tft-news-bot/src/utils/logger.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tft-news-bot/src/utils/logger.js:30"}, "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-e50ff31a89b04324", "name": "Stray `console.log` in TS/JS \u2014 apps/metatft-url-generator/script.js:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/metatft-url-generator/script.js:100"}, "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-27711ddcfa94519b", "name": "Stray `console.log` in TS/JS \u2014 tools/metatft-url/script.js:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/metatft-url/script.js:100"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b665304e320f6d9", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/metatft-url-generator/displayLinkButtons.js:10", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/metatft-url-generator/displayLinkButtons.js:10"}, "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-01004985e0edfaa1", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/metatft-url-generator/displaydatas.js:10", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/metatft-url-generator/displaydatas.js:10"}, "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-4fcb6072b92d7a13", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/itempuzzle/index.html:1125", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/itempuzzle/index.html:1125"}, "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-745dc45a246485ae", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-hydrate.js:109", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-hydrate.js:109"}, "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-4d4477bdcac652e0", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-renderer-core.mjs:3476", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-renderer-core.mjs:3476"}, "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-0ef9bd29e6b1fa89", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-interactions.js:58", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-interactions.js:58"}, "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-6a49afeb7d2c6d38", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/cms.html:3053", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/cms.html:3053"}, "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-dce7c7d202aa9851", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/articles.html:365", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/articles.html:365"}, "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-5e8b4f9c8afdb1a3", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/ability-editor.html:902", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/ability-editor.html:902"}, "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-6bf6462e61102da4", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-synergy-quiz/index.html:802", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-synergy-quiz/index.html:802"}, "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-1cc76b09710d5807", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-common/tft-tips.js:1657", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-common/tft-tips.js:1657"}, "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-c359ef08f025269c", "name": "Insecure pattern 'node_child_process' in apps/tft-local/server.mjs:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/tft-local/server.mjs:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7d57d28f352f5a0", "name": "Insecure pattern 'node_child_process' in scripts/check-js-syntax.mjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-js-syntax.mjs:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b8d8f8ed928e45a1", "name": "Insecure pattern 'node_child_process' in scripts/sync-main.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/sync-main.mjs:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a796dad6518da5f1", "name": "Insecure pattern 'node_child_process' in scripts/vps/check-tournament-next.mjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/vps/check-tournament-next.mjs:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8ecd20caa903cf97", "name": "Insecure pattern 'node_child_process' in scripts/vps/publish-public.mjs:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/vps/publish-public.mjs:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2a18f739bbc4e35", "name": "Insecure pattern 'node_child_process' in scripts/vps/check-backup.mjs:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/vps/check-backup.mjs:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-961ff705acd17ea8", "name": "Insecure pattern 'node_child_process' in server/twitch-subs/server.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server/twitch-subs/server.mjs:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c628c7bd269d2e2f", "name": "Insecure pattern 'document_write' in server/twitch-subs/server.mjs:5061", "shortDescription": {"text": "Insecure pattern 'document_write' in server/twitch-subs/server.mjs:5061"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8d82b8c0fb4ad53", "name": "Insecure pattern 'cors_wildcard' in server/twitch-subs/server.mjs:2199", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/twitch-subs/server.mjs:2199"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89bfc652ea47c84a", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/guide-editor-app.html:3253", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/guide-editor-app.html:3253"}, "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-949af37b10b647a7", "name": "Insecure pattern 'document_write' in server/twitch-subs/private/name-aliases-app.html:666", "shortDescription": {"text": "Insecure pattern 'document_write' in server/twitch-subs/private/name-aliases-app.html:666"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-08b314aacc2ba959", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/name-aliases-app.html:1050", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/name-aliases-app.html:1050"}, "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-dc346fe7aa6507d3", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/cms-app.html:634", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/cms-app.html:634"}, "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-cb4e0d2ce154bf03", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/term-glossary-app.html:369", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/term-glossary-app.html:369"}, "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-38dcb6c942104959", "name": "Insecure pattern 'document_write' in server/twitch-subs/private/tft-items-app.html:354", "shortDescription": {"text": "Insecure pattern 'document_write' in server/twitch-subs/private/tft-items-app.html:354"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d947b3934356152", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/tft-items-app.html:548", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/tft-items-app.html:548"}, "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-8ada8caf52dc5a01", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/branching-app.html:2325", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/branching-app.html:2325"}, "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-a1937dbd0a37c73e", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/next-tournament-app.html:699", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/next-tournament-app.html:699"}, "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-4908e3f0f3a502be", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/news-app.html:404", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/news-app.html:404"}, "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-fdcc0f6c5ca2c9bc", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/splash-framing-app.html:854", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/splash-framing-app.html:854"}, "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-8278f12acc2d8aee", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/news-accounts-app.html:297", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/news-accounts-app.html:297"}, "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-2123048d50c51aa2", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/users-app.html:434", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/users-app.html:434"}, "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-ed430cfae08abe9e", "name": "Insecure pattern 'document_write' in server/twitch-subs/private/dictionary-register-app.html:383", "shortDescription": {"text": "Insecure pattern 'document_write' in server/twitch-subs/private/dictionary-register-app.html:383"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3766195f8629525e", "name": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/dictionary-register-app.html:612", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/dictionary-register-app.html:612"}, "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-7865b41dd55606fd", "name": "Insecure pattern 'direct_innerhtml_assignment' in tools/synergy-quiz/index.html:870", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/synergy-quiz/index.html:870"}, "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-6ada25edd48338d4", "name": "Insecure pattern 'direct_innerhtml_assignment' in tools/item-puzzle/index.html:1193", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/item-puzzle/index.html:1193"}, "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-551532fbe2b653d9", "name": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/displayLinkButtons.js:10", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/displayLinkButtons.js:10"}, "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-af43d5f94771aa3a", "name": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/icon-test.html:151", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/icon-test.html: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-66c47df5a94fff31", "name": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/displaydatas.js:10", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/displaydatas.js:10"}, "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-df68c877e9a83c40", "name": "Insecure pattern 'direct_innerhtml_assignment' in guides/index.html:1510", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in guides/index.html:1510"}, "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-9c97ebd7839df338", "name": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/metatft-url-generator/icon-test.html:144", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/metatft-url-generator/icon-test.html:144"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0cb325ac1b1cfc26", "name": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-opening-trainer/index.html:1503", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-opening-trainer/index.html:1503"}, "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-9fac4fd21c2f3df3", "name": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/board-trait-display-p", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/board-trait-display-patterns.html:531"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b22f59ec0d89643a", "name": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/augment-icon-color-pa", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/augment-icon-color-patterns.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-39d3d1f99800619a", "name": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/item-reverse-guide-pa", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/item-reverse-guide-patterns.html:463"}, "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-3021901a03b06886", "name": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/augment-glow-assets-p", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/augment-glow-assets-preview.html:230"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e51f11939293fac", "name": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/board-color-patterns.", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/board-color-patterns.html:321"}, "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-5c030accd048cc78", "name": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tept-fight-tactics/index.html:557", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tept-fight-tactics/index.html:557"}, "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-1a5801c8c215dbc1", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c6c8ab184478fda", "name": "Very large file: apps/tft-reroll-guide/guide-renderer-core.mjs (4072 lines)", "shortDescription": {"text": "Very large file: apps/tft-reroll-guide/guide-renderer-core.mjs (4072 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-53199bd171dcd317", "name": "Very large file: apps/tft-common/tft-tips.js (1753 lines)", "shortDescription": {"text": "Very large file: apps/tft-common/tft-tips.js (1753 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-4d1cca87d4b5ee18", "name": "Very large file: apps/tft-local/server.mjs (1692 lines)", "shortDescription": {"text": "Very large file: apps/tft-local/server.mjs (1692 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-fe139f5e23a2e81b", "name": "Very large file: server/twitch-subs/server.mjs (6802 lines)", "shortDescription": {"text": "Very large file: server/twitch-subs/server.mjs (6802 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": "6 test file(s) for 94 source file(s) (ratio 0.06). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 127 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30efa89085e5d877", "name": "Agent authority lacks a verifier contract: .claude/skills/set-migration/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/set-migration/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09d34149fa5a90b3", "name": "Agent authority lacks a verifier contract: .claude/skills/vps-ops/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/vps-ops/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-126175a96e1f1280", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tft-news-bot/src/ai/analyzeTweet.js:221", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tft-news-bot/src/ai/analyzeTweet.js:221"}, "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-90f26523024e3745", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tft-news-bot/src/discord/notifyCandidate.js:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tft-news-bot/src/discord/notifyCandidate.js:155"}, "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-e31959aaa7402a24", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/tft-reroll-guide/guide-hydrate.js:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/tft-reroll-guide/guide-hydrate.js:90"}, "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-77aed4e2736a9bd6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/download-tactician-hud-icons.mjs:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/download-tactician-hud-icons.mjs:26"}, "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-22c96fe9b2f5f84c", "name": "Legacy-named symbol `hero__copy` in scripts/tft/generate-card-pages.mjs:115", "shortDescription": {"text": "Legacy-named symbol `hero__copy` in scripts/tft/generate-card-pages.mjs:115"}, "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-1eccd1e2a6ef7a4c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/generate-tft-app-set.mjs:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/generate-tft-app-set.mjs:113"}, "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-3a68e1649b7b8e72", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/download-items-from-cdragon.mjs:171", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/download-items-from-cdragon.mjs:171"}, "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-7da3f7e885f835f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/twitch-subs/server.mjs:3449", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/twitch-subs/server.mjs:3449"}, "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-d30f85c43b86dcf0", "name": "27 env vars used in code but missing from .env.example", "shortDescription": {"text": "27 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `BRANCHING_DRAFT_DATA_FILE`, `TEPDEMY_ADMIN_PREVIEW_MODE`, `TEPDEMY_ADMIN_PREVIEW_SEED`, `TEPDEMY_BACKUP_ROOT`, `TEPDEMY_BRANCHING_DATA_FILE`, `TEPDEMY_COMPS_API_URL`, `TEPDEMY_ENV_FILE`, `TEPDEMY_GUIDE_PUBLIC_DATA_DIR` + 19 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20981"}, "properties": {"repository": "tept-creator/tept-creator.github.io", "repoUrl": "https://github.com/tept-creator/tept-creator.github.io", "branch": "main"}, "results": [{"ruleId": "scanner-09ba9575a1673af3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tft-news-bot/src/utils/logger.js:30"}, "properties": {"repobilityId": "a142d609776f2774", "scanner": "scanner-primary", "fingerprint": "09ba9575a1673af3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e50ff31a89b04324", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/metatft-url-generator/script.js:100"}, "properties": {"repobilityId": "9bc70e07cf5494a1", "scanner": "scanner-primary", "fingerprint": "e50ff31a89b04324", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27711ddcfa94519b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/metatft-url/script.js:100"}, "properties": {"repobilityId": "cb5d2c55d84b1224", "scanner": "scanner-primary", "fingerprint": "27711ddcfa94519b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9b665304e320f6d9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/metatft-url-generator/displayLinkButtons.js:10"}, "properties": {"repobilityId": "81ed8fa2fb618ac2", "scanner": "scanner-primary", "fingerprint": "9b665304e320f6d9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/metatft-url-generator/displayLinkButtons.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-01004985e0edfaa1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/metatft-url-generator/displaydatas.js:10"}, "properties": {"repobilityId": "630e03fc5ccd193e", "scanner": "scanner-primary", "fingerprint": "01004985e0edfaa1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/metatft-url-generator/displaydatas.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-4fcb6072b92d7a13", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/itempuzzle/index.html:1125"}, "properties": {"repobilityId": "d7bb99c0f98216c6", "scanner": "scanner-primary", "fingerprint": "4fcb6072b92d7a13", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/itempuzzle/index.html"}, "region": {"startLine": 1125}}}]}, {"ruleId": "scanner-745dc45a246485ae", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-hydrate.js:109"}, "properties": {"repobilityId": "b7ddec4c873d18c6", "scanner": "scanner-primary", "fingerprint": "745dc45a246485ae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-reroll-guide/guide-hydrate.js"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-4d4477bdcac652e0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-renderer-core.mjs:3476"}, "properties": {"repobilityId": "9816a83fb3c0636e", "scanner": "scanner-primary", "fingerprint": "4d4477bdcac652e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-reroll-guide/guide-renderer-core.mjs"}, "region": {"startLine": 3476}}}]}, {"ruleId": "scanner-0ef9bd29e6b1fa89", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/guide-interactions.js:58"}, "properties": {"repobilityId": "2ade7c0d54e38726", "scanner": "scanner-primary", "fingerprint": "0ef9bd29e6b1fa89", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-reroll-guide/guide-interactions.js"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-6a49afeb7d2c6d38", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/cms.html:3053"}, "properties": {"repobilityId": "ddf884f562828f55", "scanner": "scanner-primary", "fingerprint": "6a49afeb7d2c6d38", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-reroll-guide/cms.html"}, "region": {"startLine": 3053}}}]}, {"ruleId": "scanner-dce7c7d202aa9851", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/articles.html:365"}, "properties": {"repobilityId": "1d11eabe2321669b", "scanner": "scanner-primary", "fingerprint": "dce7c7d202aa9851", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-reroll-guide/articles.html"}, "region": {"startLine": 365}}}]}, {"ruleId": "scanner-5e8b4f9c8afdb1a3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-reroll-guide/ability-editor.html:902"}, "properties": {"repobilityId": "53790db1f9056374", "scanner": "scanner-primary", "fingerprint": "5e8b4f9c8afdb1a3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-reroll-guide/ability-editor.html"}, "region": {"startLine": 902}}}]}, {"ruleId": "scanner-6bf6462e61102da4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-synergy-quiz/index.html:802"}, "properties": {"repobilityId": "31815adc1aca73fa", "scanner": "scanner-primary", "fingerprint": "6bf6462e61102da4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-synergy-quiz/index.html"}, "region": {"startLine": 802}}}]}, {"ruleId": "scanner-1cc76b09710d5807", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/tft-common/tft-tips.js:1657"}, "properties": {"repobilityId": "a49c95e410845dc9", "scanner": "scanner-primary", "fingerprint": "1cc76b09710d5807", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-common/tft-tips.js"}, "region": {"startLine": 1657}}}]}, {"ruleId": "scanner-c359ef08f025269c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/tft-local/server.mjs:4"}, "properties": {"repobilityId": "b99a11021ad4b014", "scanner": "scanner-primary", "fingerprint": "c359ef08f025269c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/tft-local/server.mjs"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-a7d57d28f352f5a0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-js-syntax.mjs:3"}, "properties": {"repobilityId": "a2562129da0f7e54", "scanner": "scanner-primary", "fingerprint": "a7d57d28f352f5a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-js-syntax.mjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-b8d8f8ed928e45a1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/sync-main.mjs:1"}, "properties": {"repobilityId": "2f87cae984561d47", "scanner": "scanner-primary", "fingerprint": "b8d8f8ed928e45a1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/sync-main.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a796dad6518da5f1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/vps/check-tournament-next.mjs:3"}, "properties": {"repobilityId": "b194afdd8531f982", "scanner": "scanner-primary", "fingerprint": "a796dad6518da5f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/vps/check-tournament-next.mjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-8ecd20caa903cf97", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/vps/publish-public.mjs:7"}, "properties": {"repobilityId": "b7c4af3ae3504616", "scanner": "scanner-primary", "fingerprint": "8ecd20caa903cf97", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/vps/publish-public.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-c2a18f739bbc4e35", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/vps/check-backup.mjs:3"}, "properties": {"repobilityId": "cfd972cf391586ba", "scanner": "scanner-primary", "fingerprint": "c2a18f739bbc4e35", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/vps/check-backup.mjs"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-961ff705acd17ea8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server/twitch-subs/server.mjs:2"}, "properties": {"repobilityId": "6f3a0b876279f4ab", "scanner": "scanner-primary", "fingerprint": "961ff705acd17ea8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/server.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-c628c7bd269d2e2f", "level": "note", "message": {"text": "Insecure pattern 'document_write' in server/twitch-subs/server.mjs:5061"}, "properties": {"repobilityId": "4326681bdc3b6e2d", "scanner": "scanner-primary", "fingerprint": "c628c7bd269d2e2f", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/server.mjs"}, "region": {"startLine": 5061}}}]}, {"ruleId": "scanner-b8d82b8c0fb4ad53", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/twitch-subs/server.mjs:2199"}, "properties": {"repobilityId": "b15a1d5e61ed8446", "scanner": "scanner-primary", "fingerprint": "b8d82b8c0fb4ad53", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/server.mjs"}, "region": {"startLine": 2199}}}]}, {"ruleId": "scanner-89bfc652ea47c84a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/guide-editor-app.html:3253"}, "properties": {"repobilityId": "23dae0589a7e6bbd", "scanner": "scanner-primary", "fingerprint": "89bfc652ea47c84a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/guide-editor-app.html"}, "region": {"startLine": 3253}}}]}, {"ruleId": "scanner-949af37b10b647a7", "level": "note", "message": {"text": "Insecure pattern 'document_write' in server/twitch-subs/private/name-aliases-app.html:666"}, "properties": {"repobilityId": "daa6533fe17e6ca7", "scanner": "scanner-primary", "fingerprint": "949af37b10b647a7", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/name-aliases-app.html"}, "region": {"startLine": 666}}}]}, {"ruleId": "scanner-08b314aacc2ba959", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/name-aliases-app.html:1050"}, "properties": {"repobilityId": "570bbb4f0821da34", "scanner": "scanner-primary", "fingerprint": "08b314aacc2ba959", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/name-aliases-app.html"}, "region": {"startLine": 1050}}}]}, {"ruleId": "scanner-dc346fe7aa6507d3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/cms-app.html:634"}, "properties": {"repobilityId": "1753ed64a556b101", "scanner": "scanner-primary", "fingerprint": "dc346fe7aa6507d3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/cms-app.html"}, "region": {"startLine": 634}}}]}, {"ruleId": "scanner-cb4e0d2ce154bf03", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/term-glossary-app.html:369"}, "properties": {"repobilityId": "84639b54633b7bd0", "scanner": "scanner-primary", "fingerprint": "cb4e0d2ce154bf03", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/term-glossary-app.html"}, "region": {"startLine": 369}}}]}, {"ruleId": "scanner-38dcb6c942104959", "level": "note", "message": {"text": "Insecure pattern 'document_write' in server/twitch-subs/private/tft-items-app.html:354"}, "properties": {"repobilityId": "82a5b132fc7a23de", "scanner": "scanner-primary", "fingerprint": "38dcb6c942104959", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/tft-items-app.html"}, "region": {"startLine": 354}}}]}, {"ruleId": "scanner-1d947b3934356152", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/tft-items-app.html:548"}, "properties": {"repobilityId": "cdc97cded154ca86", "scanner": "scanner-primary", "fingerprint": "1d947b3934356152", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/tft-items-app.html"}, "region": {"startLine": 548}}}]}, {"ruleId": "scanner-8ada8caf52dc5a01", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/branching-app.html:2325"}, "properties": {"repobilityId": "f97890e3df6ed1dc", "scanner": "scanner-primary", "fingerprint": "8ada8caf52dc5a01", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/branching-app.html"}, "region": {"startLine": 2325}}}]}, {"ruleId": "scanner-a1937dbd0a37c73e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/next-tournament-app.html:699"}, "properties": {"repobilityId": "f7265d1651b5832f", "scanner": "scanner-primary", "fingerprint": "a1937dbd0a37c73e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/next-tournament-app.html"}, "region": {"startLine": 699}}}]}, {"ruleId": "scanner-4908e3f0f3a502be", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/news-app.html:404"}, "properties": {"repobilityId": "1d00e957a5c472fe", "scanner": "scanner-primary", "fingerprint": "4908e3f0f3a502be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/news-app.html"}, "region": {"startLine": 404}}}]}, {"ruleId": "scanner-fdcc0f6c5ca2c9bc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/splash-framing-app.html:854"}, "properties": {"repobilityId": "a6fdd8494d697e2d", "scanner": "scanner-primary", "fingerprint": "fdcc0f6c5ca2c9bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/splash-framing-app.html"}, "region": {"startLine": 854}}}]}, {"ruleId": "scanner-8278f12acc2d8aee", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/news-accounts-app.html:297"}, "properties": {"repobilityId": "da972979b0169715", "scanner": "scanner-primary", "fingerprint": "8278f12acc2d8aee", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/news-accounts-app.html"}, "region": {"startLine": 297}}}]}, {"ruleId": "scanner-2123048d50c51aa2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/users-app.html:434"}, "properties": {"repobilityId": "29e86a7fbdc02d94", "scanner": "scanner-primary", "fingerprint": "2123048d50c51aa2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/users-app.html"}, "region": {"startLine": 434}}}]}, {"ruleId": "scanner-ed430cfae08abe9e", "level": "note", "message": {"text": "Insecure pattern 'document_write' in server/twitch-subs/private/dictionary-register-app.html:383"}, "properties": {"repobilityId": "2b7391086f17adcf", "scanner": "scanner-primary", "fingerprint": "ed430cfae08abe9e", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/dictionary-register-app.html"}, "region": {"startLine": 383}}}]}, {"ruleId": "scanner-3766195f8629525e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in server/twitch-subs/private/dictionary-register-app.html:612"}, "properties": {"repobilityId": "d50f9683ce75c434", "scanner": "scanner-primary", "fingerprint": "3766195f8629525e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/twitch-subs/private/dictionary-register-app.html"}, "region": {"startLine": 612}}}]}, {"ruleId": "scanner-7865b41dd55606fd", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/synergy-quiz/index.html:870"}, "properties": {"repobilityId": "eac0b40dfd986a96", "scanner": "scanner-primary", "fingerprint": "7865b41dd55606fd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/synergy-quiz/index.html"}, "region": {"startLine": 870}}}]}, {"ruleId": "scanner-6ada25edd48338d4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/item-puzzle/index.html:1193"}, "properties": {"repobilityId": "1ac99626bc676dd9", "scanner": "scanner-primary", "fingerprint": "6ada25edd48338d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/item-puzzle/index.html"}, "region": {"startLine": 1193}}}]}, {"ruleId": "scanner-551532fbe2b653d9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/displayLinkButtons.js:10"}, "properties": {"repobilityId": "e37b3f93a0e7f2c3", "scanner": "scanner-primary", "fingerprint": "551532fbe2b653d9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/metatft-url/displayLinkButtons.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-af43d5f94771aa3a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/icon-test.html:151"}, "properties": {"repobilityId": "423d6db435b03971", "scanner": "scanner-primary", "fingerprint": "af43d5f94771aa3a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/metatft-url/icon-test.html"}, "region": {"startLine": 151}}}]}, {"ruleId": "scanner-66c47df5a94fff31", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tools/metatft-url/displaydatas.js:10"}, "properties": {"repobilityId": "bdafd2fc4be6832c", "scanner": "scanner-primary", "fingerprint": "66c47df5a94fff31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/metatft-url/displaydatas.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-df68c877e9a83c40", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in guides/index.html:1510"}, "properties": {"repobilityId": "d8b0a90e01cba4ab", "scanner": "scanner-primary", "fingerprint": "df68c877e9a83c40", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "guides/index.html"}, "region": {"startLine": 1510}}}]}, {"ruleId": "scanner-9c97ebd7839df338", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/metatft-url-generator/icon-test.html:144"}, "properties": {"repobilityId": "bd754c9112b6eb99", "scanner": "scanner-primary", "fingerprint": "9c97ebd7839df338", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deprecated/apps/metatft-url-generator/icon-test.html"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-0cb325ac1b1cfc26", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-opening-trainer/index.html:1503"}, "properties": {"repobilityId": "ee56a80d0bcc4a13", "scanner": "scanner-primary", "fingerprint": "0cb325ac1b1cfc26", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deprecated/apps/tft-opening-trainer/index.html"}, "region": {"startLine": 1503}}}]}, {"ruleId": "scanner-9fac4fd21c2f3df3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/board-trait-display-patterns.html:531"}, "properties": {"repobilityId": "66395c38685e32d0", "scanner": "scanner-primary", "fingerprint": "9fac4fd21c2f3df3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deprecated/apps/tft-reroll-guide/design-patterns/board-trait-display-patterns.html"}, "region": {"startLine": 531}}}]}, {"ruleId": "scanner-b22f59ec0d89643a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/augment-icon-color-patterns.html:397"}, "properties": {"repobilityId": "51e658ca0b1c78d8", "scanner": "scanner-primary", "fingerprint": "b22f59ec0d89643a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deprecated/apps/tft-reroll-guide/design-patterns/augment-icon-color-patterns.html"}, "region": {"startLine": 397}}}]}, {"ruleId": "scanner-39d3d1f99800619a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/item-reverse-guide-patterns.html:463"}, "properties": {"repobilityId": "ff7ea7fbb7cdbae2", "scanner": "scanner-primary", "fingerprint": "39d3d1f99800619a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deprecated/apps/tft-reroll-guide/design-patterns/item-reverse-guide-patterns.html"}, "region": {"startLine": 463}}}]}, {"ruleId": "scanner-3021901a03b06886", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/augment-glow-assets-preview.html:230"}, "properties": {"repobilityId": "9d1ab9776c4843a7", "scanner": "scanner-primary", "fingerprint": "3021901a03b06886", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deprecated/apps/tft-reroll-guide/design-patterns/augment-glow-assets-preview.html"}, "region": {"startLine": 230}}}]}, {"ruleId": "scanner-9e51f11939293fac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tft-reroll-guide/design-patterns/board-color-patterns.html:321"}, "properties": {"repobilityId": "e7c6b59ee0038a7c", "scanner": "scanner-primary", "fingerprint": "9e51f11939293fac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deprecated/apps/tft-reroll-guide/design-patterns/board-color-patterns.html"}, "region": {"startLine": 321}}}]}, {"ruleId": "scanner-5c030accd048cc78", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deprecated/apps/tept-fight-tactics/index.html:557"}, "properties": {"repobilityId": "ac70862d49d67b69", "scanner": "scanner-primary", "fingerprint": "5c030accd048cc78", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deprecated/apps/tept-fight-tactics/index.html"}, "region": {"startLine": 557}}}]}, {"ruleId": "scanner-1a5801c8c215dbc1", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "c71f1b81a3b660a8", "scanner": "scanner-primary", "fingerprint": "1a5801c8c215dbc1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-tft-data.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c6c8ab184478fda", "level": "note", "message": {"text": "Very large file: apps/tft-reroll-guide/guide-renderer-core.mjs (4072 lines)"}, "properties": {"repobilityId": "b029958c10473510", "scanner": "scanner-primary", "fingerprint": "7c6c8ab184478fda", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-53199bd171dcd317", "level": "note", "message": {"text": "Very large file: apps/tft-common/tft-tips.js (1753 lines)"}, "properties": {"repobilityId": "f457b0fc251382e4", "scanner": "scanner-primary", "fingerprint": "53199bd171dcd317", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d1cca87d4b5ee18", "level": "note", "message": {"text": "Very large file: apps/tft-local/server.mjs (1692 lines)"}, "properties": {"repobilityId": "b20157e1e3d09324", "scanner": "scanner-primary", "fingerprint": "4d1cca87d4b5ee18", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fe139f5e23a2e81b", "level": "note", "message": {"text": "Very large file: server/twitch-subs/server.mjs (6802 lines)"}, "properties": {"repobilityId": "68616304c5ef7839", "scanner": "scanner-primary", "fingerprint": "fe139f5e23a2e81b", "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": "c65f54ce2b0dc9e5", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "8089daa082b72f61", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "558084cfd9b79a21", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "f6ef3961ad746f9d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "57342184e8016d61", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "d808c00723ced3b0", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "1b5c8ad3d4072f42", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-30efa89085e5d877", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/set-migration/SKILL.md"}, "properties": {"repobilityId": "86a99b3f26dc0797", "scanner": "scanner-primary", "fingerprint": "30efa89085e5d877", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/set-migration/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-09d34149fa5a90b3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/vps-ops/SKILL.md"}, "properties": {"repobilityId": "5b4d60939e4740d6", "scanner": "scanner-primary", "fingerprint": "09d34149fa5a90b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/vps-ops/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-126175a96e1f1280", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tft-news-bot/src/ai/analyzeTweet.js:221"}, "properties": {"repobilityId": "1bb96756209b908d", "scanner": "scanner-primary", "fingerprint": "126175a96e1f1280", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-90f26523024e3745", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tft-news-bot/src/discord/notifyCandidate.js:155"}, "properties": {"repobilityId": "f73121c0e3ff9ae1", "scanner": "scanner-primary", "fingerprint": "90f26523024e3745", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e31959aaa7402a24", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/tft-reroll-guide/guide-hydrate.js:90"}, "properties": {"repobilityId": "69d08136fb266330", "scanner": "scanner-primary", "fingerprint": "e31959aaa7402a24", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77aed4e2736a9bd6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/download-tactician-hud-icons.mjs:26"}, "properties": {"repobilityId": "101cfea55d74b355", "scanner": "scanner-primary", "fingerprint": "77aed4e2736a9bd6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22c96fe9b2f5f84c", "level": "note", "message": {"text": "Legacy-named symbol `hero__copy` in scripts/tft/generate-card-pages.mjs:115"}, "properties": {"repobilityId": "67447cc4419fe7a9", "scanner": "scanner-primary", "fingerprint": "22c96fe9b2f5f84c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1eccd1e2a6ef7a4c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/generate-tft-app-set.mjs:113"}, "properties": {"repobilityId": "887760fe70a5c157", "scanner": "scanner-primary", "fingerprint": "1eccd1e2a6ef7a4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a68e1649b7b8e72", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/tft/download-items-from-cdragon.mjs:171"}, "properties": {"repobilityId": "3ed5569faad2008b", "scanner": "scanner-primary", "fingerprint": "3a68e1649b7b8e72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7da3f7e885f835f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/twitch-subs/server.mjs:3449"}, "properties": {"repobilityId": "a30853442a23849a", "scanner": "scanner-primary", "fingerprint": "7da3f7e885f835f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d30f85c43b86dcf0", "level": "note", "message": {"text": "27 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "4816db1c74a26e4a", "scanner": "scanner-primary", "fingerprint": "d30f85c43b86dcf0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}