{"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-61d8add67c889f7f", "name": "Stray `console.log` in TS/JS \u2014 test/lightsout.test.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/lightsout.test.js:6"}, "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-034c8fad9a1bca4d", "name": "Stray `console.log` in TS/JS \u2014 test/sudoku.test.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/sudoku.test.js:6"}, "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-ea610733df3dced7", "name": "Stray `console.log` in TS/JS \u2014 test/trio.test.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/trio.test.js:7"}, "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-ed7bd2de8a8de879", "name": "Stray `console.log` in TS/JS \u2014 test/mines.test.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/mines.test.js:7"}, "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-461c1c4ba57495cf", "name": "Stray `console.log` in TS/JS \u2014 test/memory.test.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/memory.test.js:7"}, "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-e07997ac60103905", "name": "Stray `console.log` in TS/JS \u2014 test/nonogram.test.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/nonogram.test.js:6"}, "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-b24dc49015cb4961", "name": "Stray `console.log` in TS/JS \u2014 test/g2048.test.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/g2048.test.js:6"}, "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-79f278ff7f70814b", "name": "Stray `console.log` in TS/JS \u2014 test/wordsearch.test.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/wordsearch.test.js:7"}, "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-d3d41a9cc1fdade1", "name": "Stray `console.log` in TS/JS \u2014 test/star.test.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/star.test.js:7"}, "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-e827fc034a41f90d", "name": "Stray `console.log` in TS/JS \u2014 test/solver.test.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/solver.test.js:18"}, "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-ba0d5c27a402a815", "name": "Stray `console.log` in TS/JS \u2014 test/boggle.test.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/boggle.test.js:7"}, "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-25f186459a7fca14", "name": "Stray `console.log` in TS/JS \u2014 test/pipes.test.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/pipes.test.js:6"}, "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-2eaa56eb5e6f56d2", "name": "Stray `console.log` in TS/JS \u2014 test/kenken.test.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/kenken.test.js:7"}, "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-4e8b3948b676e7a6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 ui/components/Bits.jsx:48", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 ui/components/Bits.jsx:48"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc7a97b73c50ef65", "name": "Insecure pattern 'direct_innerhtml_assignment' in ui/components/Party.jsx:244", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ui/components/Party.jsx:244"}, "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-a38f03b0948abcd7", "name": "Insecure pattern 'dangerous_innerhtml' in ui/components/Bits.jsx:48", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in ui/components/Bits.jsx:48"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a524bbed42f7aad9", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/sudoku.js:289", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/sudoku.js:289"}, "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-2f57062a83d06111", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/memory.js:112", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/memory.js:112"}, "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-92aa7c312d18edbf", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/lightsout.js:123", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/lightsout.js:123"}, "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-ac544162c20fd0f2", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/trio.js:158", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/trio.js:158"}, "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-d7b012bafc9e7dce", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/pipes.js:183", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/pipes.js:183"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af8b5a3a9a4ea204", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/mines.js:147", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/mines.js:147"}, "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-e9634454b3fa4a31", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/nonogram.js:190", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/nonogram.js:190"}, "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-59fac999eadb01e0", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/genius-square.js:95", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/genius-square.js:95"}, "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-1eca8f6724f43540", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/boggle.js:169", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/boggle.js:169"}, "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-42f6933dab98a982", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/g2048.js:144", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/g2048.js:144"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a0c5ac8a8a5a19c", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/wordsearch.js:167", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/wordsearch.js:167"}, "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-9bd7d2457a183d95", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/kenken.js:353", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/kenken.js:353"}, "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-b61584fe1308e4df", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/games/star.js:340", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/star.js:340"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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 5 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39f4a09d8ed51ac9", "name": "Commented-code block (5 lines) in test/mines.test.js:26", "shortDescription": {"text": "Commented-code block (5 lines) in test/mines.test.js:26"}, "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-07e0006fc285a36f", "name": "Commented-code block (5 lines) in test/boggle.test.js:17", "shortDescription": {"text": "Commented-code block (5 lines) in test/boggle.test.js:17"}, "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-482719d98c1ff644", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ui/state.js:135", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui/state.js:135"}, "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-77442e1e5e2815ef", "name": "Commented-code block (5 lines) in scripts/room-e2e.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/room-e2e.mjs: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-51639525969546aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/room-e2e.mjs:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/room-e2e.mjs:32"}, "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-ef789a6e30d67768", "name": "Commented-code block (5 lines) in public/games/lightsout.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in public/games/lightsout.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-ed10ec3c3f9eeb03", "name": "Commented-code block (5 lines) in public/games/pipes.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in public/games/pipes.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-01dc672239532f84", "name": "Commented-code block (5 lines) in public/games/nonogram.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in public/games/nonogram.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-d3e7ce8877fdc376", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/games/genius-square.js:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/games/genius-square.js:8"}, "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-0a53a334b4f27ca1", "name": "Commented-code block (6 lines) in public/games/star.js:9", "shortDescription": {"text": "Commented-code block (6 lines) in public/games/star.js:9"}, "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-bea4becf19e599d1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/worker.js:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/worker.js:19"}, "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-3b1d2e5dec0fa440", "name": "Commented-code block (5 lines) in src/feedback.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/feedback.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-626d3d4ac7aec2fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/feedback.js:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/feedback.js:14"}, "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-356571c473bac6e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/directory.js:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/directory.js:13"}, "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-8c4738670bc538ec", "name": "Commented-code block (6 lines) in src/room.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/room.js:5"}, "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-c8fd74e054d685e9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/room.js:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/room.js:68"}, "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/19636"}, "properties": {"repository": "silkyrich/puzzle-party", "repoUrl": "https://github.com/silkyrich/puzzle-party", "branch": "main"}, "results": [{"ruleId": "scanner-61d8add67c889f7f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/lightsout.test.js:6"}, "properties": {"repobilityId": "c110fdf799372dfc", "scanner": "scanner-primary", "fingerprint": "61d8add67c889f7f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-034c8fad9a1bca4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/sudoku.test.js:6"}, "properties": {"repobilityId": "4744e5fb0260b1c6", "scanner": "scanner-primary", "fingerprint": "034c8fad9a1bca4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea610733df3dced7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/trio.test.js:7"}, "properties": {"repobilityId": "46fe0adbc6fe8b81", "scanner": "scanner-primary", "fingerprint": "ea610733df3dced7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed7bd2de8a8de879", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/mines.test.js:7"}, "properties": {"repobilityId": "c118e8dfd4e5a671", "scanner": "scanner-primary", "fingerprint": "ed7bd2de8a8de879", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-461c1c4ba57495cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/memory.test.js:7"}, "properties": {"repobilityId": "93e0ffd49df30768", "scanner": "scanner-primary", "fingerprint": "461c1c4ba57495cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e07997ac60103905", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/nonogram.test.js:6"}, "properties": {"repobilityId": "e9cb230be20df417", "scanner": "scanner-primary", "fingerprint": "e07997ac60103905", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b24dc49015cb4961", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/g2048.test.js:6"}, "properties": {"repobilityId": "3c7cd000771498bb", "scanner": "scanner-primary", "fingerprint": "b24dc49015cb4961", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79f278ff7f70814b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/wordsearch.test.js:7"}, "properties": {"repobilityId": "cf52df1d9a26e891", "scanner": "scanner-primary", "fingerprint": "79f278ff7f70814b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3d41a9cc1fdade1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/star.test.js:7"}, "properties": {"repobilityId": "45fdbb1004a15a50", "scanner": "scanner-primary", "fingerprint": "d3d41a9cc1fdade1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e827fc034a41f90d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/solver.test.js:18"}, "properties": {"repobilityId": "0b2fd6d06c63640c", "scanner": "scanner-primary", "fingerprint": "e827fc034a41f90d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba0d5c27a402a815", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/boggle.test.js:7"}, "properties": {"repobilityId": "c89a60893eb36753", "scanner": "scanner-primary", "fingerprint": "ba0d5c27a402a815", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25f186459a7fca14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/pipes.test.js:6"}, "properties": {"repobilityId": "b4b67cb3e154f19a", "scanner": "scanner-primary", "fingerprint": "25f186459a7fca14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2eaa56eb5e6f56d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/kenken.test.js:7"}, "properties": {"repobilityId": "8a7dc9f427bf0f15", "scanner": "scanner-primary", "fingerprint": "2eaa56eb5e6f56d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e8b3948b676e7a6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 ui/components/Bits.jsx:48"}, "properties": {"repobilityId": "d078bff99fdf3ba9", "scanner": "scanner-primary", "fingerprint": "4e8b3948b676e7a6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-cc7a97b73c50ef65", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in ui/components/Party.jsx:244"}, "properties": {"repobilityId": "4da47fce28612599", "scanner": "scanner-primary", "fingerprint": "cc7a97b73c50ef65", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui/components/Party.jsx"}, "region": {"startLine": 244}}}]}, {"ruleId": "scanner-a38f03b0948abcd7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in ui/components/Bits.jsx:48"}, "properties": {"repobilityId": "82f0a4eec8f02bd0", "scanner": "scanner-primary", "fingerprint": "a38f03b0948abcd7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui/components/Bits.jsx"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-a524bbed42f7aad9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/sudoku.js:289"}, "properties": {"repobilityId": "710b8cd236f1d6a1", "scanner": "scanner-primary", "fingerprint": "a524bbed42f7aad9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/sudoku.js"}, "region": {"startLine": 289}}}]}, {"ruleId": "scanner-2f57062a83d06111", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/memory.js:112"}, "properties": {"repobilityId": "e58aaa6cb10b9ae2", "scanner": "scanner-primary", "fingerprint": "2f57062a83d06111", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/memory.js"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-92aa7c312d18edbf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/lightsout.js:123"}, "properties": {"repobilityId": "1b85a0c9aaecf39c", "scanner": "scanner-primary", "fingerprint": "92aa7c312d18edbf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/lightsout.js"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-ac544162c20fd0f2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/trio.js:158"}, "properties": {"repobilityId": "0d3ca82a5cda454a", "scanner": "scanner-primary", "fingerprint": "ac544162c20fd0f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/trio.js"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-d7b012bafc9e7dce", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/pipes.js:183"}, "properties": {"repobilityId": "b2829c5a4bba6cdc", "scanner": "scanner-primary", "fingerprint": "d7b012bafc9e7dce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/pipes.js"}, "region": {"startLine": 183}}}]}, {"ruleId": "scanner-af8b5a3a9a4ea204", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/mines.js:147"}, "properties": {"repobilityId": "2ba0aacbfd257db7", "scanner": "scanner-primary", "fingerprint": "af8b5a3a9a4ea204", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/mines.js"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-e9634454b3fa4a31", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/nonogram.js:190"}, "properties": {"repobilityId": "99a045c25888acff", "scanner": "scanner-primary", "fingerprint": "e9634454b3fa4a31", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/nonogram.js"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-59fac999eadb01e0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/genius-square.js:95"}, "properties": {"repobilityId": "816d0e971bf088d4", "scanner": "scanner-primary", "fingerprint": "59fac999eadb01e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/genius-square.js"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-1eca8f6724f43540", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/boggle.js:169"}, "properties": {"repobilityId": "911b28dbb8c8b6b3", "scanner": "scanner-primary", "fingerprint": "1eca8f6724f43540", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/boggle.js"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-42f6933dab98a982", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/g2048.js:144"}, "properties": {"repobilityId": "7dff0d61191d2931", "scanner": "scanner-primary", "fingerprint": "42f6933dab98a982", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/g2048.js"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-4a0c5ac8a8a5a19c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/wordsearch.js:167"}, "properties": {"repobilityId": "7b24ae981c63e4f1", "scanner": "scanner-primary", "fingerprint": "4a0c5ac8a8a5a19c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/wordsearch.js"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-9bd7d2457a183d95", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/kenken.js:353"}, "properties": {"repobilityId": "56852231c1a49636", "scanner": "scanner-primary", "fingerprint": "9bd7d2457a183d95", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/kenken.js"}, "region": {"startLine": 353}}}]}, {"ruleId": "scanner-b61584fe1308e4df", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/games/star.js:340"}, "properties": {"repobilityId": "909ff3a8d628a003", "scanner": "scanner-primary", "fingerprint": "b61584fe1308e4df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/games/star.js"}, "region": {"startLine": 340}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "6d5687705b5d00d0", "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": "24a77f6e83ec4684", "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": "a5f344d5495a4ff3", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "e871ea62f7580f7c", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "2ed1b46370cf238a", "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": "94b68541bd51e3e8", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-39f4a09d8ed51ac9", "level": "none", "message": {"text": "Commented-code block (5 lines) in test/mines.test.js:26"}, "properties": {"repobilityId": "82a4fc0a04033ed5", "scanner": "scanner-primary", "fingerprint": "39f4a09d8ed51ac9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07e0006fc285a36f", "level": "none", "message": {"text": "Commented-code block (5 lines) in test/boggle.test.js:17"}, "properties": {"repobilityId": "ea14c456f2b688e4", "scanner": "scanner-primary", "fingerprint": "07e0006fc285a36f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-482719d98c1ff644", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui/state.js:135"}, "properties": {"repobilityId": "d9b8ace1a49d1132", "scanner": "scanner-primary", "fingerprint": "482719d98c1ff644", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77442e1e5e2815ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/room-e2e.mjs:1"}, "properties": {"repobilityId": "2de4e78792aa1ed0", "scanner": "scanner-primary", "fingerprint": "77442e1e5e2815ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51639525969546aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/room-e2e.mjs:32"}, "properties": {"repobilityId": "a95a69bcf8e8c9eb", "scanner": "scanner-primary", "fingerprint": "51639525969546aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef789a6e30d67768", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/games/lightsout.js:1"}, "properties": {"repobilityId": "821bb6a18b0a4673", "scanner": "scanner-primary", "fingerprint": "ef789a6e30d67768", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed10ec3c3f9eeb03", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/games/pipes.js:1"}, "properties": {"repobilityId": "cc1682e7faca7193", "scanner": "scanner-primary", "fingerprint": "ed10ec3c3f9eeb03", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01dc672239532f84", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/games/nonogram.js:1"}, "properties": {"repobilityId": "f26a4dbfd729037c", "scanner": "scanner-primary", "fingerprint": "01dc672239532f84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3e7ce8877fdc376", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/games/genius-square.js:8"}, "properties": {"repobilityId": "9a09854b98b6a80f", "scanner": "scanner-primary", "fingerprint": "d3e7ce8877fdc376", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0a53a334b4f27ca1", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/games/star.js:9"}, "properties": {"repobilityId": "41498cabc0f767a7", "scanner": "scanner-primary", "fingerprint": "0a53a334b4f27ca1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bea4becf19e599d1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/worker.js:19"}, "properties": {"repobilityId": "13773f0c1a559689", "scanner": "scanner-primary", "fingerprint": "bea4becf19e599d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3b1d2e5dec0fa440", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/feedback.js:1"}, "properties": {"repobilityId": "e4d1559e40cafecd", "scanner": "scanner-primary", "fingerprint": "3b1d2e5dec0fa440", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-626d3d4ac7aec2fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/feedback.js:14"}, "properties": {"repobilityId": "9a91c152810a382f", "scanner": "scanner-primary", "fingerprint": "626d3d4ac7aec2fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-356571c473bac6e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/directory.js:13"}, "properties": {"repobilityId": "b08e0a49ec1198af", "scanner": "scanner-primary", "fingerprint": "356571c473bac6e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c4738670bc538ec", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/room.js:5"}, "properties": {"repobilityId": "b0b6f47472c800e6", "scanner": "scanner-primary", "fingerprint": "8c4738670bc538ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8fd74e054d685e9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/room.js:68"}, "properties": {"repobilityId": "dfea3665ccfe5e53", "scanner": "scanner-primary", "fingerprint": "c8fd74e054d685e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}