{"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-c9276057cc3e262a", "name": "Stray `console.log` in TS/JS \u2014 tests/snapshotBinary.spec.ts:203", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tests/snapshotBinary.spec.ts:203"}, "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-35f0969056acdfe5", "name": "Stray `console.log` in TS/JS \u2014 src/shared/ui/PauseScreen.ts:202", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/shared/ui/PauseScreen.ts:202"}, "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-8b07524fbc057a2c", "name": "Stray `console.log` in TS/JS \u2014 src/game-over/GameOverState.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/game-over/GameOverState.ts:46"}, "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-2fb29eb96621c992", "name": "Stray `console.log` in TS/JS \u2014 src/survivors/SurvivorsGameplayState.ts:732", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/SurvivorsGameplayState.ts:732"}, "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-2fd8d97c9bc5fc08", "name": "Stray `console.log` in TS/JS \u2014 src/survivors/WaveManager.ts:519", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/WaveManager.ts:519"}, "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-5196268a7139be85", "name": "Stray `console.log` in TS/JS \u2014 src/survivors/enemies/Enemy.ts:1401", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/enemies/Enemy.ts:1401"}, "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-3f1c3f5988d5a530", "name": "Stray `console.log` in TS/JS \u2014 src/survivors/enemies/BossEnemy.ts:536", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/enemies/BossEnemy.ts:536"}, "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-564f4d958e7f2e95", "name": "Stray `console.log` in TS/JS \u2014 src/survivors/champions/Champion.ts:467", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/champions/Champion.ts:467"}, "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-2d0c313125cfe5e0", "name": "Stray `console.log` in TS/JS \u2014 src/engine/StateManager.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/engine/StateManager.ts:61"}, "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-4feb63dd9a319bb0", "name": "Stray `console.log` in TS/JS \u2014 src/engine/Game.ts:591", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/engine/Game.ts:591"}, "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-915a04e97a65dff3", "name": "Stray `console.log` in TS/JS \u2014 src/engine/AssetManager.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/engine/AssetManager.ts:24"}, "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-5d560d32453729ac", "name": "Stray `console.log` in TS/JS \u2014 src/menu/MenuState.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/menu/MenuState.ts:28"}, "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-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac743aa9f5fc3601", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/net/coopDebug.ts:13", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/net/coopDebug.ts:13"}, "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-ba41c747a18103d4", "name": "Very large file: src/survivors/SurvivorsGameplayState.ts (4642 lines)", "shortDescription": {"text": "Very large file: src/survivors/SurvivorsGameplayState.ts (4642 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-0f5f220d668c1c34", "name": "Very large file: src/survivors/abilities/AbilityManager.ts (1358 lines)", "shortDescription": {"text": "Very large file: src/survivors/abilities/AbilityManager.ts (1358 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-28b22ce1567bdfed", "name": "Very large file: src/survivors/enemies/Enemy.ts (2358 lines)", "shortDescription": {"text": "Very large file: src/survivors/enemies/Enemy.ts (2358 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-6ee82f9065fbd00a", "name": "Very large file: src/survivors/champions/Champion.ts (2286 lines)", "shortDescription": {"text": "Very large file: src/survivors/champions/Champion.ts (2286 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-6b9f33fe5a6da658", "name": "Very large file: src/survivors/powers/PowerDefinitions.ts (1631 lines)", "shortDescription": {"text": "Very large file: src/survivors/powers/PowerDefinitions.ts (1631 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-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 61 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-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. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f227e43add2361c", "name": "Commented-code block (5 lines) in tests/PowerSlotManager.spec.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in tests/PowerSlotManager.spec.ts:8"}, "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-7c21be48700f5bab", "name": "Commented-code block (6 lines) in tests/MaterialCache.spec.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in tests/MaterialCache.spec.ts:7"}, "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-7ae71b6c7607eb07", "name": "Commented-code block (8 lines) in tests/coopItemsRouting.spec.ts:7", "shortDescription": {"text": "Commented-code block (8 lines) in tests/coopItemsRouting.spec.ts:7"}, "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-e61a1b12a7a5a415", "name": "Commented-code block (5 lines) in tests/ArrowMesh.spec.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in tests/ArrowMesh.spec.ts: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-f71401750a0567a1", "name": "Commented-code block (5 lines) in tests/coopItemsHeroStat.spec.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in tests/coopItemsHeroStat.spec.ts: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-05370cf26d9f8750", "name": "Legacy-named symbol `abs_old` in scripts/restructure.py:195", "shortDescription": {"text": "Legacy-named symbol `abs_old` in scripts/restructure.py:195"}, "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-f74366b6f4a14ec9", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/restructure.py:97", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/restructure.py:97"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3bb4ac6b0be6b2dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 worker/index.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/index.ts:91"}, "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-35d6fcddbf00b77f", "name": "Commented-code block (7 lines) in worker/rooms/Room.ts:73", "shortDescription": {"text": "Commented-code block (7 lines) in worker/rooms/Room.ts:73"}, "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-ecbb44ec335bfd1f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 worker/rooms/Room.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/rooms/Room.ts:33"}, "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-25df3de1fca497ad", "name": "Commented-code block (5 lines) in src/ui/GameUI.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in src/ui/GameUI.ts:27"}, "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-68cdd120115cdbcb", "name": "Commented-code block (8 lines) in src/survivors/integrateMove.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/survivors/integrateMove.ts: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-e93b7da676d5ef80", "name": "Commented-code block (5 lines) in src/survivors/cameraZoom.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/cameraZoom.ts: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-8451a5401e3eea04", "name": "Commented-code block (5 lines) in src/survivors/SurvivorsGameplayState.ts:2", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/SurvivorsGameplayState.ts:2"}, "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-9c9245061876a307", "name": "Commented-code block (5 lines) in src/survivors/HeroController.ts:110", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/HeroController.ts:110"}, "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-06c22c0e7d6863c5", "name": "Commented-code block (5 lines) in src/survivors/WaveManager.ts:916", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/WaveManager.ts:916"}, "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-dec47bc7e24e46ce", "name": "Commented-code block (6 lines) in src/survivors/coop/CoopFx.ts:28", "shortDescription": {"text": "Commented-code block (6 lines) in src/survivors/coop/CoopFx.ts:28"}, "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-c68a69160a558340", "name": "Commented-code block (5 lines) in src/survivors/coop/PendingCoop.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/coop/PendingCoop.ts: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-cb02f23d674a1734", "name": "Commented-code block (8 lines) in src/survivors/coop/GuestEnemies.ts:122", "shortDescription": {"text": "Commented-code block (8 lines) in src/survivors/coop/GuestEnemies.ts:122"}, "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-56877ab109541f87", "name": "Commented-code block (5 lines) in src/survivors/coop/CoopSession.ts:122", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/coop/CoopSession.ts:122"}, "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-205d152add4ee6cc", "name": "Commented-code block (5 lines) in src/survivors/abilities/AbilityManager.ts:109", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/abilities/AbilityManager.ts:109"}, "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-578b3ed5dc2d96a3", "name": "Commented-code block (5 lines) in src/survivors/abilities/AbilityVisuals.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/abilities/AbilityVisuals.ts:22"}, "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-86d89ffb0676103f", "name": "Commented-code block (5 lines) in src/survivors/enemies/Enemy.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/enemies/Enemy.ts:15"}, "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-3aee8a50e9ffb547", "name": "Commented-code block (5 lines) in src/survivors/enemies/HealerEnemy.ts:488", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/enemies/HealerEnemy.ts:488"}, "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-173139d2be41a0e9", "name": "Commented-code block (5 lines) in src/survivors/enemies/EliteSpawner.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/enemies/EliteSpawner.ts:64"}, "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-60ba7c8a6110aca7", "name": "Commented-code block (5 lines) in src/survivors/enemies/EnemyManager.ts:410", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/enemies/EnemyManager.ts:410"}, "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-f9e18885ff57231a", "name": "Commented-code block (5 lines) in src/survivors/enemies/BasicEnemy.ts:635", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/enemies/BasicEnemy.ts:635"}, "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-4179ded665a63ef1", "name": "Commented-code block (5 lines) in src/survivors/enemies/MilestoneBoss.ts:199", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/enemies/MilestoneBoss.ts:199"}, "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-5b06aec26701bec6", "name": "Commented-code block (5 lines) in src/survivors/enemies/ShieldEnemy.ts:744", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/enemies/ShieldEnemy.ts:744"}, "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-7d7382165de2ec8e", "name": "Commented-code block (5 lines) in src/survivors/globe/PropField.ts:99", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/globe/PropField.ts:99"}, "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-068dc36c5f7d532f", "name": "Commented-code block (5 lines) in src/survivors/globe/GlobeGround.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/globe/GlobeGround.ts:34"}, "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-5376f913a9040d9c", "name": "Commented-code block (5 lines) in src/survivors/globe/constants.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/globe/constants.ts: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-7d1547a114cca772", "name": "Commented-code block (5 lines) in src/survivors/champions/HeroBasicAttack.ts:196", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/champions/HeroBasicAttack.ts:196"}, "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-b1d100fd3420ddba", "name": "Commented-code block (5 lines) in src/survivors/champions/Champion.ts:210", "shortDescription": {"text": "Commented-code block (5 lines) in src/survivors/champions/Champion.ts:210"}, "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-f9763c2a48213b4a", "name": "Commented-code block (6 lines) in src/survivors/powers/FusionFactory.ts:146", "shortDescription": {"text": "Commented-code block (6 lines) in src/survivors/powers/FusionFactory.ts:146"}, "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-3e0c2e2495112a7f", "name": "Commented-code block (7 lines) in src/survivors/powers/StatusModel.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/survivors/powers/StatusModel.ts: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-e7a9c90a92932f9b", "name": "Commented-code block (8 lines) in src/survivors/powers/PowerEffects.ts:27", "shortDescription": {"text": "Commented-code block (8 lines) in src/survivors/powers/PowerEffects.ts:27"}, "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-9469add14b5a5fc3", "name": "Commented-code block (5 lines) in src/engine/StateManager.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/engine/StateManager.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-726adf2f38efe2dc", "name": "Commented-code block (5 lines) in src/engine/Game.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/engine/Game.ts:12"}, "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-9b3b40b184e59d0d", "name": "Commented-code block (6 lines) in src/engine/AssetManager.ts:84", "shortDescription": {"text": "Commented-code block (6 lines) in src/engine/AssetManager.ts:84"}, "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-22c1ec36ca04a19f", "name": "Commented-code block (5 lines) in src/engine/rendering/ProceduralGrass.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in src/engine/rendering/ProceduralGrass.ts:62"}, "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-32768bf079d3a11f", "name": "Commented-code block (5 lines) in src/engine/rendering/MaterialCache.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/engine/rendering/MaterialCache.ts: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-198f5a5cfec4c718", "name": "Commented-code block (9 lines) in src/net/SnapshotBinary.ts:12", "shortDescription": {"text": "Commented-code block (9 lines) in src/net/SnapshotBinary.ts:12"}, "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-6aa78a4158e565e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/net/coopDebug.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/net/coopDebug.ts:36"}, "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-2ed1e4b3b30423b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/net/RoomService.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/net/RoomService.ts:31"}, "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-2fd61d78a014c003", "name": "Commented-code block (5 lines) in src/menu/MenuState.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in src/menu/MenuState.ts:62"}, "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/18114"}, "properties": {"repository": "ricardomoreirab/fusion-td", "repoUrl": "https://github.com/ricardomoreirab/fusion-td", "branch": "main"}, "results": [{"ruleId": "scanner-c9276057cc3e262a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tests/snapshotBinary.spec.ts:203"}, "properties": {"repobilityId": "e47d3c1f6632b703", "scanner": "scanner-primary", "fingerprint": "c9276057cc3e262a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35f0969056acdfe5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/shared/ui/PauseScreen.ts:202"}, "properties": {"repobilityId": "919ba0754d702df0", "scanner": "scanner-primary", "fingerprint": "35f0969056acdfe5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b07524fbc057a2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/game-over/GameOverState.ts:46"}, "properties": {"repobilityId": "be85a83525339fa5", "scanner": "scanner-primary", "fingerprint": "8b07524fbc057a2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2fb29eb96621c992", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/SurvivorsGameplayState.ts:732"}, "properties": {"repobilityId": "210a3f7ad9907262", "scanner": "scanner-primary", "fingerprint": "2fb29eb96621c992", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2fd8d97c9bc5fc08", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/WaveManager.ts:519"}, "properties": {"repobilityId": "a9e4c168c3d57cdb", "scanner": "scanner-primary", "fingerprint": "2fd8d97c9bc5fc08", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5196268a7139be85", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/enemies/Enemy.ts:1401"}, "properties": {"repobilityId": "d3b13c6915e8ffe3", "scanner": "scanner-primary", "fingerprint": "5196268a7139be85", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f1c3f5988d5a530", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/enemies/BossEnemy.ts:536"}, "properties": {"repobilityId": "60f2fe9d5d100a6e", "scanner": "scanner-primary", "fingerprint": "3f1c3f5988d5a530", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-564f4d958e7f2e95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/survivors/champions/Champion.ts:467"}, "properties": {"repobilityId": "f659e4b63c16014f", "scanner": "scanner-primary", "fingerprint": "564f4d958e7f2e95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d0c313125cfe5e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/engine/StateManager.ts:61"}, "properties": {"repobilityId": "c81a49b1169b6b57", "scanner": "scanner-primary", "fingerprint": "2d0c313125cfe5e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4feb63dd9a319bb0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/engine/Game.ts:591"}, "properties": {"repobilityId": "57fe9bc19631e4a6", "scanner": "scanner-primary", "fingerprint": "4feb63dd9a319bb0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-915a04e97a65dff3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/engine/AssetManager.ts:24"}, "properties": {"repobilityId": "42b4088349ded052", "scanner": "scanner-primary", "fingerprint": "915a04e97a65dff3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5d560d32453729ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/menu/MenuState.ts:28"}, "properties": {"repobilityId": "252da7feefa4304b", "scanner": "scanner-primary", "fingerprint": "5d560d32453729ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-ac743aa9f5fc3601", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/net/coopDebug.ts:13"}, "properties": {"repobilityId": "a8fb9554aca4aff6", "scanner": "scanner-primary", "fingerprint": "ac743aa9f5fc3601", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/net/coopDebug.ts"}, "region": {"startLine": 13}}}]}, {"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-ba41c747a18103d4", "level": "note", "message": {"text": "Very large file: src/survivors/SurvivorsGameplayState.ts (4642 lines)"}, "properties": {"repobilityId": "a5e8bc9d551b37b6", "scanner": "scanner-primary", "fingerprint": "ba41c747a18103d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0f5f220d668c1c34", "level": "note", "message": {"text": "Very large file: src/survivors/abilities/AbilityManager.ts (1358 lines)"}, "properties": {"repobilityId": "aae8f6050927c0d9", "scanner": "scanner-primary", "fingerprint": "0f5f220d668c1c34", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-28b22ce1567bdfed", "level": "note", "message": {"text": "Very large file: src/survivors/enemies/Enemy.ts (2358 lines)"}, "properties": {"repobilityId": "0877b1ebf1ceb0aa", "scanner": "scanner-primary", "fingerprint": "28b22ce1567bdfed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6ee82f9065fbd00a", "level": "note", "message": {"text": "Very large file: src/survivors/champions/Champion.ts (2286 lines)"}, "properties": {"repobilityId": "4dff1103163a1c4b", "scanner": "scanner-primary", "fingerprint": "6ee82f9065fbd00a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6b9f33fe5a6da658", "level": "note", "message": {"text": "Very large file: src/survivors/powers/PowerDefinitions.ts (1631 lines)"}, "properties": {"repobilityId": "543a1582e23074c5", "scanner": "scanner-primary", "fingerprint": "6b9f33fe5a6da658", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "5a40085e2f79f0fe", "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": "54c5876539246d32", "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": "124ae2dc85b7194a", "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": "2252a731f1ff8003", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "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": "1b7fc3076e93509a", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "732f97bf2c83fce1", "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": "b323223d7882a137", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-5f227e43add2361c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/PowerSlotManager.spec.ts:8"}, "properties": {"repobilityId": "7324f2e97da2d297", "scanner": "scanner-primary", "fingerprint": "5f227e43add2361c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c21be48700f5bab", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/MaterialCache.spec.ts:7"}, "properties": {"repobilityId": "2d3429e445bb4975", "scanner": "scanner-primary", "fingerprint": "7c21be48700f5bab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ae71b6c7607eb07", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/coopItemsRouting.spec.ts:7"}, "properties": {"repobilityId": "b397e27f1266d356", "scanner": "scanner-primary", "fingerprint": "7ae71b6c7607eb07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e61a1b12a7a5a415", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/ArrowMesh.spec.ts:6"}, "properties": {"repobilityId": "5ca646cf933df5a5", "scanner": "scanner-primary", "fingerprint": "e61a1b12a7a5a415", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f71401750a0567a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/coopItemsHeroStat.spec.ts:17"}, "properties": {"repobilityId": "33b9f506c9ca4bbe", "scanner": "scanner-primary", "fingerprint": "f71401750a0567a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05370cf26d9f8750", "level": "note", "message": {"text": "Legacy-named symbol `abs_old` in scripts/restructure.py:195"}, "properties": {"repobilityId": "a27401a7675ac00f", "scanner": "scanner-primary", "fingerprint": "05370cf26d9f8750", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f74366b6f4a14ec9", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/restructure.py:97"}, "properties": {"repobilityId": "e896fe8dcf115016", "scanner": "scanner-primary", "fingerprint": "f74366b6f4a14ec9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bb4ac6b0be6b2dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/index.ts:91"}, "properties": {"repobilityId": "afa36b77fce34d40", "scanner": "scanner-primary", "fingerprint": "3bb4ac6b0be6b2dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-35d6fcddbf00b77f", "level": "none", "message": {"text": "Commented-code block (7 lines) in worker/rooms/Room.ts:73"}, "properties": {"repobilityId": "c20675e96cff3c0e", "scanner": "scanner-primary", "fingerprint": "35d6fcddbf00b77f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecbb44ec335bfd1f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 worker/rooms/Room.ts:33"}, "properties": {"repobilityId": "475608ecb4377c67", "scanner": "scanner-primary", "fingerprint": "ecbb44ec335bfd1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-25df3de1fca497ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/ui/GameUI.ts:27"}, "properties": {"repobilityId": "7bdf2a3e0dc6202b", "scanner": "scanner-primary", "fingerprint": "25df3de1fca497ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68cdd120115cdbcb", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/survivors/integrateMove.ts:1"}, "properties": {"repobilityId": "1cacacaf1bc69ce6", "scanner": "scanner-primary", "fingerprint": "68cdd120115cdbcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e93b7da676d5ef80", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/cameraZoom.ts:1"}, "properties": {"repobilityId": "f2b50a2f8975bf1c", "scanner": "scanner-primary", "fingerprint": "e93b7da676d5ef80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8451a5401e3eea04", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/SurvivorsGameplayState.ts:2"}, "properties": {"repobilityId": "194b082d5d65a4f0", "scanner": "scanner-primary", "fingerprint": "8451a5401e3eea04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c9245061876a307", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/HeroController.ts:110"}, "properties": {"repobilityId": "3ad41d5818d5da6a", "scanner": "scanner-primary", "fingerprint": "9c9245061876a307", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06c22c0e7d6863c5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/WaveManager.ts:916"}, "properties": {"repobilityId": "b624517bfb569e83", "scanner": "scanner-primary", "fingerprint": "06c22c0e7d6863c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dec47bc7e24e46ce", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/survivors/coop/CoopFx.ts:28"}, "properties": {"repobilityId": "037f140845c770b0", "scanner": "scanner-primary", "fingerprint": "dec47bc7e24e46ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c68a69160a558340", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/coop/PendingCoop.ts:1"}, "properties": {"repobilityId": "c2c76bb9f749bdd6", "scanner": "scanner-primary", "fingerprint": "c68a69160a558340", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb02f23d674a1734", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/survivors/coop/GuestEnemies.ts:122"}, "properties": {"repobilityId": "8197ffc5bb043776", "scanner": "scanner-primary", "fingerprint": "cb02f23d674a1734", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56877ab109541f87", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/coop/CoopSession.ts:122"}, "properties": {"repobilityId": "5aad09d066de4096", "scanner": "scanner-primary", "fingerprint": "56877ab109541f87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-205d152add4ee6cc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/abilities/AbilityManager.ts:109"}, "properties": {"repobilityId": "3a3c4fcf93d61504", "scanner": "scanner-primary", "fingerprint": "205d152add4ee6cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-578b3ed5dc2d96a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/abilities/AbilityVisuals.ts:22"}, "properties": {"repobilityId": "219d44ff65b27c49", "scanner": "scanner-primary", "fingerprint": "578b3ed5dc2d96a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86d89ffb0676103f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/enemies/Enemy.ts:15"}, "properties": {"repobilityId": "c5d1b4972bdc38c0", "scanner": "scanner-primary", "fingerprint": "86d89ffb0676103f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3aee8a50e9ffb547", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/enemies/HealerEnemy.ts:488"}, "properties": {"repobilityId": "09c92874b45b8eb9", "scanner": "scanner-primary", "fingerprint": "3aee8a50e9ffb547", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-173139d2be41a0e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/enemies/EliteSpawner.ts:64"}, "properties": {"repobilityId": "b59647e049a231b4", "scanner": "scanner-primary", "fingerprint": "173139d2be41a0e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60ba7c8a6110aca7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/enemies/EnemyManager.ts:410"}, "properties": {"repobilityId": "99acaa7a3be4598c", "scanner": "scanner-primary", "fingerprint": "60ba7c8a6110aca7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9e18885ff57231a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/enemies/BasicEnemy.ts:635"}, "properties": {"repobilityId": "951c646135d40776", "scanner": "scanner-primary", "fingerprint": "f9e18885ff57231a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4179ded665a63ef1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/enemies/MilestoneBoss.ts:199"}, "properties": {"repobilityId": "1d01e199c913b25d", "scanner": "scanner-primary", "fingerprint": "4179ded665a63ef1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b06aec26701bec6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/enemies/ShieldEnemy.ts:744"}, "properties": {"repobilityId": "8bee2d1cb4c3a028", "scanner": "scanner-primary", "fingerprint": "5b06aec26701bec6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d7382165de2ec8e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/globe/PropField.ts:99"}, "properties": {"repobilityId": "3db2eadcc210d547", "scanner": "scanner-primary", "fingerprint": "7d7382165de2ec8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-068dc36c5f7d532f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/globe/GlobeGround.ts:34"}, "properties": {"repobilityId": "d026a4995776e785", "scanner": "scanner-primary", "fingerprint": "068dc36c5f7d532f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5376f913a9040d9c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/globe/constants.ts:9"}, "properties": {"repobilityId": "70bb6160311cf342", "scanner": "scanner-primary", "fingerprint": "5376f913a9040d9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d1547a114cca772", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/champions/HeroBasicAttack.ts:196"}, "properties": {"repobilityId": "e863e80662b6fab5", "scanner": "scanner-primary", "fingerprint": "7d1547a114cca772", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1d100fd3420ddba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/survivors/champions/Champion.ts:210"}, "properties": {"repobilityId": "bdfc76719dfed467", "scanner": "scanner-primary", "fingerprint": "b1d100fd3420ddba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9763c2a48213b4a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/survivors/powers/FusionFactory.ts:146"}, "properties": {"repobilityId": "35033b646b077d8d", "scanner": "scanner-primary", "fingerprint": "f9763c2a48213b4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e0c2e2495112a7f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/survivors/powers/StatusModel.ts:1"}, "properties": {"repobilityId": "b04edb9bca4001f9", "scanner": "scanner-primary", "fingerprint": "3e0c2e2495112a7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7a9c90a92932f9b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/survivors/powers/PowerEffects.ts:27"}, "properties": {"repobilityId": "48867889a1c4716a", "scanner": "scanner-primary", "fingerprint": "e7a9c90a92932f9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9469add14b5a5fc3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/engine/StateManager.ts:36"}, "properties": {"repobilityId": "b8b36c07c26bfea5", "scanner": "scanner-primary", "fingerprint": "9469add14b5a5fc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-726adf2f38efe2dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/engine/Game.ts:12"}, "properties": {"repobilityId": "08728d11715422ca", "scanner": "scanner-primary", "fingerprint": "726adf2f38efe2dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b3b40b184e59d0d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/engine/AssetManager.ts:84"}, "properties": {"repobilityId": "0f2be352219a350c", "scanner": "scanner-primary", "fingerprint": "9b3b40b184e59d0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22c1ec36ca04a19f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/engine/rendering/ProceduralGrass.ts:62"}, "properties": {"repobilityId": "0e44e3e3f99c25fb", "scanner": "scanner-primary", "fingerprint": "22c1ec36ca04a19f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32768bf079d3a11f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/engine/rendering/MaterialCache.ts:17"}, "properties": {"repobilityId": "77b165a455453c41", "scanner": "scanner-primary", "fingerprint": "32768bf079d3a11f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-198f5a5cfec4c718", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/net/SnapshotBinary.ts:12"}, "properties": {"repobilityId": "3c8d5c1b0df66da5", "scanner": "scanner-primary", "fingerprint": "198f5a5cfec4c718", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aa78a4158e565e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/net/coopDebug.ts:36"}, "properties": {"repobilityId": "99e66fce326d6e04", "scanner": "scanner-primary", "fingerprint": "6aa78a4158e565e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ed1e4b3b30423b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/net/RoomService.ts:31"}, "properties": {"repobilityId": "1d9eaf8227cb9706", "scanner": "scanner-primary", "fingerprint": "2ed1e4b3b30423b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fd61d78a014c003", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/menu/MenuState.ts:62"}, "properties": {"repobilityId": "34a0a860e120f955", "scanner": "scanner-primary", "fingerprint": "2fd61d78a014c003", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}