{"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-7528299439db68e9", "name": "Stray `console.log` in TS/JS \u2014 dev-server.js:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 dev-server.js:120"}, "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-257eec913c50fd1a", "name": "Stray `console.log` in TS/JS \u2014 api/levels.js:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/levels.js:107"}, "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-970d1fc9a39282e6", "name": "Stray `console.log` in TS/JS \u2014 scripts/recheck-levels.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recheck-levels.js:9"}, "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-cf9bb8856404c1bd", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-cowboy-pool.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-cowboy-pool.js:40"}, "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-2ff0bc69adbc53ae", "name": "Stray `console.log` in TS/JS \u2014 scripts/setup-db.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-db.js:19"}, "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-d6b4e84e64de0c5b", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-reference-art.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-reference-art.js:53"}, "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-b9a02a27654762f0", "name": "TODO/FIXME marker in shipping code \u2014 src/AssetPortal.jsx:43", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/AssetPortal.jsx:43"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a89ab831dd671799", "name": "Stray `console.log` in TS/JS \u2014 lib/db.js:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/db.js:141"}, "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-087493c7ddbdefbe", "name": "Insecure pattern 'cors_wildcard' in dev-server.js:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in dev-server.js:20"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ed5c47197a5e6f4", "name": "Insecure pattern 'node_child_process' in vite.config.js:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in vite.config.js:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f14e6088cfa1a4e", "name": "Insecure pattern 'cors_wildcard' in api/stats.js:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/stats.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c34b5e6e9c192c46", "name": "Insecure pattern 'cors_wildcard' in api/user-prefs.js:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/user-prefs.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f49e1b8db81c892e", "name": "Insecure pattern 'cors_wildcard' in api/levels.js:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/levels.js:18"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7d6d250079e4a0e9", "name": "Insecure pattern 'cors_wildcard' in api/leaderboard.js:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/leaderboard.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fb775076ec32650f", "name": "Insecure pattern 'cors_wildcard' in api/campaigns.js:7", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/campaigns.js:7"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-633be7d2c5840a51", "name": "Insecure pattern 'cors_wildcard' in api/aggregates.js:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/aggregates.js:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0e0faf39c316c70", "name": "Insecure pattern 'cors_wildcard' in api/level-coverage.js:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/level-coverage.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e45c5a1abb93a67", "name": "Insecure pattern 'cors_wildcard' in api/auto-level-ratings.js:37", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auto-level-ratings.js:37"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d3d8c24909b42713", "name": "Insecure pattern 'cors_wildcard' in api/users.js:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/users.js:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d06d2e208e0c47e1", "name": "Insecure pattern 'cors_wildcard' in api/auto-level-config.js:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auto-level-config.js:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da522ceade1e94b5", "name": "Insecure pattern 'cors_wildcard' in api/user-stats.js:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/user-stats.js:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e4937e19ad3c50e1", "name": "Insecure pattern 'cors_wildcard' in api/_art.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/_art.js:9"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c37abf8e73c8739", "name": "Insecure pattern 'cors_wildcard' in api/auto-level-pool.js:30", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auto-level-pool.js:30"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e319efa99a4be4ff", "name": "Very large file: src/LevelEditor.jsx (3238 lines)", "shortDescription": {"text": "Very large file: src/LevelEditor.jsx (3238 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-2f0d52577ff1fad7", "name": "Very large file: src/App.jsx (1617 lines)", "shortDescription": {"text": "Very large file: src/App.jsx (1617 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 55 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 39 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 25 placeholder/mock markers across 5 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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, ci, 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-d30654287cb451d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 dev-server.js:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 dev-server.js:58"}, "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-a5461a09244751a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/levels.js:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/levels.js:43"}, "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-392ced91b81736ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/campaigns.js:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/campaigns.js:23"}, "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-4c48895a90a572de", "name": "Commented-code block (10 lines) in api/_artAuth.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in api/_artAuth.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-abdb0cc8b4308c50", "name": "Commented-code block (6 lines) in api/_autoPool.js:134", "shortDescription": {"text": "Commented-code block (6 lines) in api/_autoPool.js:134"}, "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-fe749db520cbc366", "name": "Commented-code block (12 lines) in api/auto-level-pool.js:14", "shortDescription": {"text": "Commented-code block (12 lines) in api/auto-level-pool.js:14"}, "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-56cf9dc749557304", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/recheck-levels.js:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/recheck-levels.js:11"}, "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-e2cb28bad9fa89ac", "name": "Commented-code block (5 lines) in scripts/seed-cowboy-pool.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/seed-cowboy-pool.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-b713503b19f07ea8", "name": "Legacy-named symbol `jf_campaign_v1` in src/LevelEditor.jsx:1160", "shortDescription": {"text": "Legacy-named symbol `jf_campaign_v1` in src/LevelEditor.jsx:1160"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bed8d3f079ae8cdb", "name": "Commented-code block (5 lines) in src/LevelEditor.jsx:1480", "shortDescription": {"text": "Commented-code block (5 lines) in src/LevelEditor.jsx:1480"}, "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-84e75d083ebf4ed8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/LevelEditor.jsx:1425", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/LevelEditor.jsx:1425"}, "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-5b18290001a8b4f3", "name": "Commented-code block (5 lines) in src/GamePieces.jsx:569", "shortDescription": {"text": "Commented-code block (5 lines) in src/GamePieces.jsx:569"}, "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-93917f35c34af918", "name": "Commented-code block (11 lines) in src/levels.js:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/levels.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-47fe3f75bb305de7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.jsx:289", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.jsx:289"}, "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-cb08af4947b20fbe", "name": "Commented-code block (6 lines) in src/AssetPortal.jsx:42", "shortDescription": {"text": "Commented-code block (6 lines) in src/AssetPortal.jsx:42"}, "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-257614d7205b360a", "name": "Commented-code block (6 lines) in src/lib/useGameTimer.js:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/useGameTimer.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-4c3db78ac57d3577", "name": "Commented-code block (5 lines) in src/lib/portalAuth.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/portalAuth.js:6"}, "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-3cd0fc5be0ee17a4", "name": "Commented-code block (17 lines) in lib/artRegistry.js:11", "shortDescription": {"text": "Commented-code block (17 lines) in lib/artRegistry.js:11"}, "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-a1d1f8887e126cc0", "name": "Commented-code block (5 lines) in lib/autoLevelGenerator.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in lib/autoLevelGenerator.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}}]}}, "automationDetails": {"id": "repobility/24548"}, "properties": {"repository": "benlewis/FrogsAndSnakes", "repoUrl": "https://github.com/benlewis/FrogsAndSnakes", "branch": "main"}, "results": [{"ruleId": "scanner-7528299439db68e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 dev-server.js:120"}, "properties": {"repobilityId": "3067af217c90fb50", "scanner": "scanner-primary", "fingerprint": "7528299439db68e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-257eec913c50fd1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/levels.js:107"}, "properties": {"repobilityId": "732f0fa7051c0e65", "scanner": "scanner-primary", "fingerprint": "257eec913c50fd1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-970d1fc9a39282e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recheck-levels.js:9"}, "properties": {"repobilityId": "3880d2b8eeec0237", "scanner": "scanner-primary", "fingerprint": "970d1fc9a39282e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf9bb8856404c1bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-cowboy-pool.js:40"}, "properties": {"repobilityId": "bd48504a42b008ed", "scanner": "scanner-primary", "fingerprint": "cf9bb8856404c1bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ff0bc69adbc53ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-db.js:19"}, "properties": {"repobilityId": "14fb2a7199ff27f0", "scanner": "scanner-primary", "fingerprint": "2ff0bc69adbc53ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6b4e84e64de0c5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-reference-art.js:53"}, "properties": {"repobilityId": "1d801d3a8ce058a9", "scanner": "scanner-primary", "fingerprint": "d6b4e84e64de0c5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9a02a27654762f0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/AssetPortal.jsx:43"}, "properties": {"repobilityId": "d7f33a0cdc13195e", "scanner": "scanner-primary", "fingerprint": "b9a02a27654762f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a89ab831dd671799", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/db.js:141"}, "properties": {"repobilityId": "410b356045e362c5", "scanner": "scanner-primary", "fingerprint": "a89ab831dd671799", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-087493c7ddbdefbe", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in dev-server.js:20"}, "properties": {"repobilityId": "5ce5f2a694da3edb", "scanner": "scanner-primary", "fingerprint": "087493c7ddbdefbe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dev-server.js"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-6ed5c47197a5e6f4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in vite.config.js:5"}, "properties": {"repobilityId": "fb99635354426984", "scanner": "scanner-primary", "fingerprint": "6ed5c47197a5e6f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vite.config.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-8f14e6088cfa1a4e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/stats.js:6"}, "properties": {"repobilityId": "e9524a97e52ccc13", "scanner": "scanner-primary", "fingerprint": "8f14e6088cfa1a4e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/stats.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-c34b5e6e9c192c46", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/user-prefs.js:6"}, "properties": {"repobilityId": "75c0220a30a13ab9", "scanner": "scanner-primary", "fingerprint": "c34b5e6e9c192c46", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/user-prefs.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-f49e1b8db81c892e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/levels.js:18"}, "properties": {"repobilityId": "77a909b576189b78", "scanner": "scanner-primary", "fingerprint": "f49e1b8db81c892e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/levels.js"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-7d6d250079e4a0e9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/leaderboard.js:6"}, "properties": {"repobilityId": "b3925ca5017627b0", "scanner": "scanner-primary", "fingerprint": "7d6d250079e4a0e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/leaderboard.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-fb775076ec32650f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/campaigns.js:7"}, "properties": {"repobilityId": "d1aebf2ff83b6f9b", "scanner": "scanner-primary", "fingerprint": "fb775076ec32650f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/campaigns.js"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-633be7d2c5840a51", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/aggregates.js:4"}, "properties": {"repobilityId": "b8713a328487befb", "scanner": "scanner-primary", "fingerprint": "633be7d2c5840a51", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/aggregates.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-b0e0faf39c316c70", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/level-coverage.js:6"}, "properties": {"repobilityId": "80d31e3096846143", "scanner": "scanner-primary", "fingerprint": "b0e0faf39c316c70", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/level-coverage.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-3e45c5a1abb93a67", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auto-level-ratings.js:37"}, "properties": {"repobilityId": "625cf0e0d748b1d3", "scanner": "scanner-primary", "fingerprint": "3e45c5a1abb93a67", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auto-level-ratings.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-d3d8c24909b42713", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/users.js:4"}, "properties": {"repobilityId": "9a11d6b842c022b4", "scanner": "scanner-primary", "fingerprint": "d3d8c24909b42713", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/users.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-d06d2e208e0c47e1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auto-level-config.js:12"}, "properties": {"repobilityId": "4ce0fe9b96629c77", "scanner": "scanner-primary", "fingerprint": "d06d2e208e0c47e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auto-level-config.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-da522ceade1e94b5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/user-stats.js:4"}, "properties": {"repobilityId": "7dd1ff66859f0af4", "scanner": "scanner-primary", "fingerprint": "da522ceade1e94b5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/user-stats.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-e4937e19ad3c50e1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/_art.js:9"}, "properties": {"repobilityId": "2b7d8b99dc5b1162", "scanner": "scanner-primary", "fingerprint": "e4937e19ad3c50e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/_art.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-0c37abf8e73c8739", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auto-level-pool.js:30"}, "properties": {"repobilityId": "7a02caf00cea66f2", "scanner": "scanner-primary", "fingerprint": "0c37abf8e73c8739", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auto-level-pool.js"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-e319efa99a4be4ff", "level": "note", "message": {"text": "Very large file: src/LevelEditor.jsx (3238 lines)"}, "properties": {"repobilityId": "15acda610ae48275", "scanner": "scanner-primary", "fingerprint": "e319efa99a4be4ff", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2f0d52577ff1fad7", "level": "note", "message": {"text": "Very large file: src/App.jsx (1617 lines)"}, "properties": {"repobilityId": "a59a84e7052cf35b", "scanner": "scanner-primary", "fingerprint": "2f0d52577ff1fad7", "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": "c3b62a8827cbc07d", "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": "1d836b64792857f4", "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": "f0b05591476e87f2", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "9822020e6f1c954f", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "9344a615e935da68", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "c26cf55ddff1ac94", "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": "d2129f83f0bb1534", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-d30654287cb451d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 dev-server.js:58"}, "properties": {"repobilityId": "a69ce036dc2bdffe", "scanner": "scanner-primary", "fingerprint": "d30654287cb451d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a5461a09244751a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/levels.js:43"}, "properties": {"repobilityId": "6879f57f1057e6c0", "scanner": "scanner-primary", "fingerprint": "a5461a09244751a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-392ced91b81736ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/campaigns.js:23"}, "properties": {"repobilityId": "df503682f7906971", "scanner": "scanner-primary", "fingerprint": "392ced91b81736ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c48895a90a572de", "level": "none", "message": {"text": "Commented-code block (10 lines) in api/_artAuth.js:3"}, "properties": {"repobilityId": "159b592cc157eb8e", "scanner": "scanner-primary", "fingerprint": "4c48895a90a572de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abdb0cc8b4308c50", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/_autoPool.js:134"}, "properties": {"repobilityId": "7d162d66c2ef395c", "scanner": "scanner-primary", "fingerprint": "abdb0cc8b4308c50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe749db520cbc366", "level": "none", "message": {"text": "Commented-code block (12 lines) in api/auto-level-pool.js:14"}, "properties": {"repobilityId": "623db407bdfe8103", "scanner": "scanner-primary", "fingerprint": "fe749db520cbc366", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56cf9dc749557304", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/recheck-levels.js:11"}, "properties": {"repobilityId": "b259b150d435ba63", "scanner": "scanner-primary", "fingerprint": "56cf9dc749557304", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2cb28bad9fa89ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/seed-cowboy-pool.js:3"}, "properties": {"repobilityId": "380035028a394e5a", "scanner": "scanner-primary", "fingerprint": "e2cb28bad9fa89ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b713503b19f07ea8", "level": "note", "message": {"text": "Legacy-named symbol `jf_campaign_v1` in src/LevelEditor.jsx:1160"}, "properties": {"repobilityId": "4b9576d8d801d03f", "scanner": "scanner-primary", "fingerprint": "b713503b19f07ea8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bed8d3f079ae8cdb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/LevelEditor.jsx:1480"}, "properties": {"repobilityId": "5197f7cb52f1e8a1", "scanner": "scanner-primary", "fingerprint": "bed8d3f079ae8cdb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84e75d083ebf4ed8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/LevelEditor.jsx:1425"}, "properties": {"repobilityId": "6bb4f48809a39b59", "scanner": "scanner-primary", "fingerprint": "84e75d083ebf4ed8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b18290001a8b4f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/GamePieces.jsx:569"}, "properties": {"repobilityId": "8b602dd9c8dff9e0", "scanner": "scanner-primary", "fingerprint": "5b18290001a8b4f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93917f35c34af918", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/levels.js:1"}, "properties": {"repobilityId": "2d13df3898d327b9", "scanner": "scanner-primary", "fingerprint": "93917f35c34af918", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47fe3f75bb305de7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.jsx:289"}, "properties": {"repobilityId": "cb1a788833635d4a", "scanner": "scanner-primary", "fingerprint": "47fe3f75bb305de7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb08af4947b20fbe", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/AssetPortal.jsx:42"}, "properties": {"repobilityId": "cd27590e790b3fe2", "scanner": "scanner-primary", "fingerprint": "cb08af4947b20fbe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-257614d7205b360a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/useGameTimer.js:5"}, "properties": {"repobilityId": "a386cdfcca1c5b4f", "scanner": "scanner-primary", "fingerprint": "257614d7205b360a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c3db78ac57d3577", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/portalAuth.js:6"}, "properties": {"repobilityId": "daf08377156b5f1f", "scanner": "scanner-primary", "fingerprint": "4c3db78ac57d3577", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cd0fc5be0ee17a4", "level": "none", "message": {"text": "Commented-code block (17 lines) in lib/artRegistry.js:11"}, "properties": {"repobilityId": "fc83c49fb7ced51f", "scanner": "scanner-primary", "fingerprint": "3cd0fc5be0ee17a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1d1f8887e126cc0", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/autoLevelGenerator.js:3"}, "properties": {"repobilityId": "f9c7d1e62174358c", "scanner": "scanner-primary", "fingerprint": "a1d1f8887e126cc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}