{"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-1b60eac1096add00", "name": "Stray `console.log` in TS/JS \u2014 play/progress-sync.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 play/progress-sync.js:59"}, "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-e41efa824f7406de", "name": "Stray `console.log` in TS/JS \u2014 play/sw-register.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 play/sw-register.js:21"}, "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-2b47c71f155de447", "name": "Stray `console.log` in TS/JS \u2014 play/sw.js:320", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 play/sw.js:320"}, "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-fe4e906793025f2d", "name": "Stray `console.log` in TS/JS \u2014 play/storyline-mode.js:236", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 play/storyline-mode.js:236"}, "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-fe1377c73a7877b6", "name": "Stray `console.log` in TS/JS \u2014 play/hint-system.js:635", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 play/hint-system.js:635"}, "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-790f5851eb30baa2", "name": "Stray `console.log` in TS/JS \u2014 play/app.js:458", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 play/app.js:458"}, "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-41935651da97acbc", "name": "Stray `console.log` in TS/JS \u2014 play/content/sticker-book.js:403", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 play/content/sticker-book.js:403"}, "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-925a022cca91d6b6", "name": "Stray `console.log` in TS/JS \u2014 play/content/daily-challenge-streak.js:389", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 play/content/daily-challenge-streak.js:389"}, "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-65a174b036ac18bb", "name": "Stray `console.log` in TS/JS \u2014 worker/worker.js:355", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker/worker.js:355"}, "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-4c35686c68fe0b59", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/sw-register.js:110", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/sw-register.js: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-de0027a29e876dcc", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/parent-dashboard.js:159", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/parent-dashboard.js:159"}, "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-c28cc1b83ee84d60", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/storyline-mode.js:299", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/storyline-mode.js: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-194c74fb93aef2ab", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/hint-system.js:200", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/hint-system.js:200"}, "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-3b63994b840891c5", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/install-prompt.js:102", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/install-prompt.js: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-d9705a8f605db601", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/app.js:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/app.js:38"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b0abfef088992e6", "name": "Insecure pattern 'direct_outerhtml_assignment' in play/app.js:808", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in play/app.js:808"}, "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-b89da5e81a40c2ba", "name": "Insecure pattern 'insert_adjacent_html' in play/app.js:800", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in play/app.js:800"}, "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-c24d6cd834ca675d", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/paywall.js:171", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/paywall.js:171"}, "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-d67d659f1fb96b8d", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/content/sticker-book.js:128", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/sticker-book.js:128"}, "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-0235d43acb1a4e0b", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/content/memory-hunt.js:120", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/memory-hunt.js: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-05c62c6ac471cd8f", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/content/phonics-hunt.js:215", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/phonics-hunt.js:215"}, "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-8cb90c3b119f0b86", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/content/sorting-safari.js:277", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/sorting-safari.js:277"}, "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-fe24fbaa7c66a82a", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/content/daily-challenge-streak.js:264", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/daily-challenge-streak.js:264"}, "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-daf79f66e706f88f", "name": "Insecure pattern 'direct_innerhtml_assignment' in play/content/review-mode.js:223", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/review-mode.js:223"}, "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-29e736a8d56b8674", "name": "Very large file: play/app.js (2057 lines)", "shortDescription": {"text": "Very large file: play/app.js (2057 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 22 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-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "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 16 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-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-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "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, 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-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, tests, operator-readme. 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-3bbef0c44a363b81", "name": "Commented-code block (6 lines) in play/progress-sync.js:132", "shortDescription": {"text": "Commented-code block (6 lines) in play/progress-sync.js:132"}, "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-cc91525d45980aab", "name": "Commented-code block (6 lines) in play/sw-register.js:66", "shortDescription": {"text": "Commented-code block (6 lines) in play/sw-register.js:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60f45d2dcd810068", "name": "Commented-code block (5 lines) in play/parent-dashboard.js:29", "shortDescription": {"text": "Commented-code block (5 lines) in play/parent-dashboard.js:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84dc1961f38db3cf", "name": "Commented-code block (5 lines) in play/sw.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in play/sw.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-5466aca807d037e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 play/sw.js:364", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 play/sw.js:364"}, "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-872309c06c27292f", "name": "Commented-code block (13 lines) in play/storyline-mode.js:36", "shortDescription": {"text": "Commented-code block (13 lines) in play/storyline-mode.js:36"}, "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-a52eb9a4a9e76dc7", "name": "Commented-code block (5 lines) in play/install-prompt.js:118", "shortDescription": {"text": "Commented-code block (5 lines) in play/install-prompt.js:118"}, "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-d4a2bc050ae97f8c", "name": "Commented-code block (6 lines) in play/app.js:16", "shortDescription": {"text": "Commented-code block (6 lines) in play/app.js:16"}, "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-4b9a9e31073f82fc", "name": "Commented-code block (5 lines) in play/paywall.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in play/paywall.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-afc29d5176433e25", "name": "`fetch()` without try/.catch or AbortSignal \u2014 play/paywall.js:232", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 play/paywall.js:232"}, "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-c08a88ff0441aeb7", "name": "Commented-code block (6 lines) in play/content/sticker-book.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in play/content/sticker-book.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-ac6bf53b0924a13f", "name": "Commented-code block (7 lines) in play/content/memory-hunt.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in play/content/memory-hunt.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-82900ea9489e3b96", "name": "Commented-code block (7 lines) in play/content/phonics-hunt.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in play/content/phonics-hunt.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-9d42e1a1ee2f3f11", "name": "Commented-code block (5 lines) in play/content/daily-challenge-streak.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in play/content/daily-challenge-streak.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-48bd5fdc810e2658", "name": "Commented-code block (8 lines) in play/content/review-mode.js:1", "shortDescription": {"text": "Commented-code block (8 lines) in play/content/review-mode.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-2887c287724d0525", "name": "Commented-code block (5 lines) in play/content/rich-sound-fx.js:140", "shortDescription": {"text": "Commented-code block (5 lines) in play/content/rich-sound-fx.js:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fbc39a59d437a57", "name": "Commented-code block (5 lines) in play/content/animations/new-celebrations.js:283", "shortDescription": {"text": "Commented-code block (5 lines) in play/content/animations/new-celebrations.js:283"}, "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-2921cd06554b8851", "name": "Commented-code block (6 lines) in play/content/translations/languages-config.js:31", "shortDescription": {"text": "Commented-code block (6 lines) in play/content/translations/languages-config.js:31"}, "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-0aa26586ad2932a9", "name": "Commented-code block (5 lines) in worker/worker.js:144", "shortDescription": {"text": "Commented-code block (5 lines) in worker/worker.js:144"}, "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-e440dfd3b9d71e74", "name": "`fetch()` without try/.catch or AbortSignal \u2014 worker/worker.js:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/worker.js:39"}, "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/22159"}, "properties": {"repository": "VentureLabAI/picture-hunt", "repoUrl": "https://github.com/VentureLabAI/picture-hunt", "branch": "main"}, "results": [{"ruleId": "scanner-1b60eac1096add00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 play/progress-sync.js:59"}, "properties": {"repobilityId": "5ab047c43edc5882", "scanner": "scanner-primary", "fingerprint": "1b60eac1096add00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e41efa824f7406de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 play/sw-register.js:21"}, "properties": {"repobilityId": "c599342f64622b46", "scanner": "scanner-primary", "fingerprint": "e41efa824f7406de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b47c71f155de447", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 play/sw.js:320"}, "properties": {"repobilityId": "7b1196c556703b85", "scanner": "scanner-primary", "fingerprint": "2b47c71f155de447", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe4e906793025f2d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 play/storyline-mode.js:236"}, "properties": {"repobilityId": "8965ae68bb9ad31e", "scanner": "scanner-primary", "fingerprint": "fe4e906793025f2d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe1377c73a7877b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 play/hint-system.js:635"}, "properties": {"repobilityId": "ae8bc76248a22909", "scanner": "scanner-primary", "fingerprint": "fe1377c73a7877b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-790f5851eb30baa2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 play/app.js:458"}, "properties": {"repobilityId": "1f3c775183bd3816", "scanner": "scanner-primary", "fingerprint": "790f5851eb30baa2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-41935651da97acbc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 play/content/sticker-book.js:403"}, "properties": {"repobilityId": "85da23b2e77b3101", "scanner": "scanner-primary", "fingerprint": "41935651da97acbc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-925a022cca91d6b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 play/content/daily-challenge-streak.js:389"}, "properties": {"repobilityId": "1f89038a6e8f6d83", "scanner": "scanner-primary", "fingerprint": "925a022cca91d6b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65a174b036ac18bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker/worker.js:355"}, "properties": {"repobilityId": "a15c15ecd5bc7370", "scanner": "scanner-primary", "fingerprint": "65a174b036ac18bb", "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-4c35686c68fe0b59", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/sw-register.js:110"}, "properties": {"repobilityId": "03b1f824b2f8dafa", "scanner": "scanner-primary", "fingerprint": "4c35686c68fe0b59", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/sw-register.js"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-de0027a29e876dcc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/parent-dashboard.js:159"}, "properties": {"repobilityId": "9f3b286ef609d206", "scanner": "scanner-primary", "fingerprint": "de0027a29e876dcc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/parent-dashboard.js"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-c28cc1b83ee84d60", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/storyline-mode.js:299"}, "properties": {"repobilityId": "64b7fcb562540b53", "scanner": "scanner-primary", "fingerprint": "c28cc1b83ee84d60", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/storyline-mode.js"}, "region": {"startLine": 299}}}]}, {"ruleId": "scanner-194c74fb93aef2ab", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/hint-system.js:200"}, "properties": {"repobilityId": "693005ccb319bf22", "scanner": "scanner-primary", "fingerprint": "194c74fb93aef2ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/hint-system.js"}, "region": {"startLine": 200}}}]}, {"ruleId": "scanner-3b63994b840891c5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/install-prompt.js:102"}, "properties": {"repobilityId": "f92042c6a890ae0b", "scanner": "scanner-primary", "fingerprint": "3b63994b840891c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/install-prompt.js"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-d9705a8f605db601", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/app.js:38"}, "properties": {"repobilityId": "5047de29df17947d", "scanner": "scanner-primary", "fingerprint": "d9705a8f605db601", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/app.js"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-6b0abfef088992e6", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in play/app.js:808"}, "properties": {"repobilityId": "6a73b5ce7110e3bf", "scanner": "scanner-primary", "fingerprint": "6b0abfef088992e6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/app.js"}, "region": {"startLine": 808}}}]}, {"ruleId": "scanner-b89da5e81a40c2ba", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in play/app.js:800"}, "properties": {"repobilityId": "163471cbe40e22e0", "scanner": "scanner-primary", "fingerprint": "b89da5e81a40c2ba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/app.js"}, "region": {"startLine": 800}}}]}, {"ruleId": "scanner-c24d6cd834ca675d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/paywall.js:171"}, "properties": {"repobilityId": "7898f166ea7912dd", "scanner": "scanner-primary", "fingerprint": "c24d6cd834ca675d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/paywall.js"}, "region": {"startLine": 171}}}]}, {"ruleId": "scanner-d67d659f1fb96b8d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/sticker-book.js:128"}, "properties": {"repobilityId": "b7365789e0eb61d9", "scanner": "scanner-primary", "fingerprint": "d67d659f1fb96b8d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/content/sticker-book.js"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-0235d43acb1a4e0b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/memory-hunt.js:120"}, "properties": {"repobilityId": "43c68c8930a7a5e0", "scanner": "scanner-primary", "fingerprint": "0235d43acb1a4e0b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/content/memory-hunt.js"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-05c62c6ac471cd8f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/phonics-hunt.js:215"}, "properties": {"repobilityId": "5392415ad56ef8fd", "scanner": "scanner-primary", "fingerprint": "05c62c6ac471cd8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/content/phonics-hunt.js"}, "region": {"startLine": 215}}}]}, {"ruleId": "scanner-8cb90c3b119f0b86", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/sorting-safari.js:277"}, "properties": {"repobilityId": "33bfbaefb7a2761a", "scanner": "scanner-primary", "fingerprint": "8cb90c3b119f0b86", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/content/sorting-safari.js"}, "region": {"startLine": 277}}}]}, {"ruleId": "scanner-fe24fbaa7c66a82a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/daily-challenge-streak.js:264"}, "properties": {"repobilityId": "75d86d06bc5e79da", "scanner": "scanner-primary", "fingerprint": "fe24fbaa7c66a82a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/content/daily-challenge-streak.js"}, "region": {"startLine": 264}}}]}, {"ruleId": "scanner-daf79f66e706f88f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in play/content/review-mode.js:223"}, "properties": {"repobilityId": "ab0b5fe98d69a436", "scanner": "scanner-primary", "fingerprint": "daf79f66e706f88f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "play/content/review-mode.js"}, "region": {"startLine": 223}}}]}, {"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-29e736a8d56b8674", "level": "note", "message": {"text": "Very large file: play/app.js (2057 lines)"}, "properties": {"repobilityId": "6d2b949ac70c144d", "scanner": "scanner-primary", "fingerprint": "29e736a8d56b8674", "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": "bbd38690183b3b00", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "75eebba4247a41ec", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "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": "ed14134c7f6af54b", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "d6e181f9fef75d67", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "21c3ebe71968fb20", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "a4396a051bc80577", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "0fa4c4812623fddd", "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": "2704fe7a39d5e6a5", "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": "5e2b0742154104d8", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-3bbef0c44a363b81", "level": "none", "message": {"text": "Commented-code block (6 lines) in play/progress-sync.js:132"}, "properties": {"repobilityId": "c8b5c89a0364fcf6", "scanner": "scanner-primary", "fingerprint": "3bbef0c44a363b81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc91525d45980aab", "level": "none", "message": {"text": "Commented-code block (6 lines) in play/sw-register.js:66"}, "properties": {"repobilityId": "106af85b62fc2127", "scanner": "scanner-primary", "fingerprint": "cc91525d45980aab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60f45d2dcd810068", "level": "none", "message": {"text": "Commented-code block (5 lines) in play/parent-dashboard.js:29"}, "properties": {"repobilityId": "c5cd3181195c5347", "scanner": "scanner-primary", "fingerprint": "60f45d2dcd810068", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84dc1961f38db3cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in play/sw.js:1"}, "properties": {"repobilityId": "eb3194178511b652", "scanner": "scanner-primary", "fingerprint": "84dc1961f38db3cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5466aca807d037e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 play/sw.js:364"}, "properties": {"repobilityId": "dd3837793c8fecdf", "scanner": "scanner-primary", "fingerprint": "5466aca807d037e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-872309c06c27292f", "level": "none", "message": {"text": "Commented-code block (13 lines) in play/storyline-mode.js:36"}, "properties": {"repobilityId": "a8a2c013da7d1fd9", "scanner": "scanner-primary", "fingerprint": "872309c06c27292f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a52eb9a4a9e76dc7", "level": "none", "message": {"text": "Commented-code block (5 lines) in play/install-prompt.js:118"}, "properties": {"repobilityId": "26e714de27da4899", "scanner": "scanner-primary", "fingerprint": "a52eb9a4a9e76dc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4a2bc050ae97f8c", "level": "none", "message": {"text": "Commented-code block (6 lines) in play/app.js:16"}, "properties": {"repobilityId": "9c8a399243b597b2", "scanner": "scanner-primary", "fingerprint": "d4a2bc050ae97f8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b9a9e31073f82fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in play/paywall.js:3"}, "properties": {"repobilityId": "086d633f3ff66d2b", "scanner": "scanner-primary", "fingerprint": "4b9a9e31073f82fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afc29d5176433e25", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 play/paywall.js:232"}, "properties": {"repobilityId": "8568cf4119945fe7", "scanner": "scanner-primary", "fingerprint": "afc29d5176433e25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c08a88ff0441aeb7", "level": "none", "message": {"text": "Commented-code block (6 lines) in play/content/sticker-book.js:1"}, "properties": {"repobilityId": "fbdea62bcaf6db7c", "scanner": "scanner-primary", "fingerprint": "c08a88ff0441aeb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac6bf53b0924a13f", "level": "none", "message": {"text": "Commented-code block (7 lines) in play/content/memory-hunt.js:1"}, "properties": {"repobilityId": "008f194fa573307a", "scanner": "scanner-primary", "fingerprint": "ac6bf53b0924a13f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82900ea9489e3b96", "level": "none", "message": {"text": "Commented-code block (7 lines) in play/content/phonics-hunt.js:1"}, "properties": {"repobilityId": "1e698c68d1afe1ce", "scanner": "scanner-primary", "fingerprint": "82900ea9489e3b96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d42e1a1ee2f3f11", "level": "none", "message": {"text": "Commented-code block (5 lines) in play/content/daily-challenge-streak.js:1"}, "properties": {"repobilityId": "dc572635b7f490c6", "scanner": "scanner-primary", "fingerprint": "9d42e1a1ee2f3f11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48bd5fdc810e2658", "level": "none", "message": {"text": "Commented-code block (8 lines) in play/content/review-mode.js:1"}, "properties": {"repobilityId": "27205f59acd00eb1", "scanner": "scanner-primary", "fingerprint": "48bd5fdc810e2658", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2887c287724d0525", "level": "none", "message": {"text": "Commented-code block (5 lines) in play/content/rich-sound-fx.js:140"}, "properties": {"repobilityId": "438e72cf0c3cb02c", "scanner": "scanner-primary", "fingerprint": "2887c287724d0525", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fbc39a59d437a57", "level": "none", "message": {"text": "Commented-code block (5 lines) in play/content/animations/new-celebrations.js:283"}, "properties": {"repobilityId": "b7585758af8b009f", "scanner": "scanner-primary", "fingerprint": "7fbc39a59d437a57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2921cd06554b8851", "level": "none", "message": {"text": "Commented-code block (6 lines) in play/content/translations/languages-config.js:31"}, "properties": {"repobilityId": "110d2ad868718b3e", "scanner": "scanner-primary", "fingerprint": "2921cd06554b8851", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0aa26586ad2932a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in worker/worker.js:144"}, "properties": {"repobilityId": "e0eaa85af4e3fec8", "scanner": "scanner-primary", "fingerprint": "0aa26586ad2932a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e440dfd3b9d71e74", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/worker.js:39"}, "properties": {"repobilityId": "246f9ce3db26898a", "scanner": "scanner-primary", "fingerprint": "e440dfd3b9d71e74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}