{"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-12adcbeae0941c3e", "name": "Stray `console.log` in TS/JS \u2014 frontend/app/(tabs)/index.tsx:490", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/app/(tabs)/index.tsx:490"}, "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-8c5f2ba35a51f785", "name": "Stray `console.log` in TS/JS \u2014 frontend/services/api.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/services/api.ts:145"}, "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-0c12dcdcbf95ed1e", "name": "Stray `console.log` in TS/JS \u2014 frontend/services/analytics.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/services/analytics.ts:37"}, "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-14332943c3eb78ab", "name": "Stray `console.log` in TS/JS \u2014 frontend/services/notifications.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/services/notifications.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-8fe681230414294a", "name": "Stray `console.log` in TS/JS \u2014 frontend/services/purchases.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/services/purchases.ts:43"}, "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-c153265eb7b28460", "name": "Stray `console.log` in TS/JS \u2014 frontend/store/trainStore.ts:511", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/store/trainStore.ts:511"}, "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-033d56081ba5bab5", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-demo-blueprints.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-demo-blueprints.ts:103"}, "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-8ed1f453b03aecf3", "name": "Stray `console.log` in TS/JS \u2014 backend/src/index.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/index.ts:112"}, "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-05b9ba15b9637de0", "name": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/visionEval.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/visionEval.ts:93"}, "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-09d84511d8bb0df6", "name": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/idOne.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/idOne.ts:15"}, "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-3fb385418e86bd0d", "name": "Stray `console.log` in TS/JS \u2014 backend/src/routes/webhooks.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/webhooks.ts:95"}, "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-0a2344eddde47888", "name": "Stray `console.log` in TS/JS \u2014 backend/src/routes/identify.ts:238", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/identify.ts:238"}, "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-d72abfdb1b33937f", "name": "Stray `console.log` in TS/JS \u2014 backend/src/cron/runLeagueWeeklyReset.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/cron/runLeagueWeeklyReset.ts:22"}, "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-4f66491be917de9d", "name": "Stray `console.log` in TS/JS \u2014 backend/src/cron/runZeroEngagementRescuePush.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/cron/runZeroEngagementRescuePush.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-68af3362c9160fc4", "name": "Stray `console.log` in TS/JS \u2014 backend/src/cron/leagueWeeklyReset.ts:335", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/cron/leagueWeeklyReset.ts:335"}, "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-dc3394bef698a34f", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/email.ts:178", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/email.ts:178"}, "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-74f8f0574b63ea62", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainCache.ts:329", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainCache.ts:329"}, "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-0c9bc3bac788f4d3", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/rarity.ts:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/rarity.ts:183"}, "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-6ac576355bc6b2b4", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/analytics.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/analytics.ts:26"}, "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-83ef7c67e850a937", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/vision.ts:496", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/vision.ts:496"}, "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-d54128168f6f1ce3", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/redis.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/redis.ts:27"}, "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-28fc1d257ac7c895", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainSpecs.ts:194", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainSpecs.ts:194"}, "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-206d1620416368b4", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/wikidataSpecs.ts:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/wikidataSpecs.ts:207"}, "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-669e5a09e524fe2f", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainFacts.ts:163", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainFacts.ts:163"}, "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-4ad82b956aa49808", "name": "Insecure pattern 'cors_wildcard' in backend/src/services/wikidataSpecs.ts:153", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in backend/src/services/wikidataSpecs.ts:153"}, "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-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-523eb16acdca66a2", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d4c87cd005861dd", "name": "Very large file: frontend/app/card-reveal.tsx (1739 lines)", "shortDescription": {"text": "Very large file: frontend/app/card-reveal.tsx (1739 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-e568a63ffd62b693", "name": "Very large file: backend/src/services/trainSpecs.ts (1672 lines)", "shortDescription": {"text": "Very large file: backend/src/services/trainSpecs.ts (1672 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-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 101 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 29 placeholder/mock markers across 16 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, 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": "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, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17d866d91a7c451e", "name": "Agent instruction/config may expose a secret: CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24f2ea4bd14badc1", "name": "Agent instruction contains unpinned remote install: CLAUDE.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: CLAUDE.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8059a765780fdfa3", "name": "Commented-code block (6 lines) in frontend/__tests__/fetchProfileMigration.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/__tests__/fetchProfileMigration.test.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-fab10976b93adef8", "name": "Commented-code block (5 lines) in frontend/__tests__/languagePicker.test.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/__tests__/languagePicker.test.tsx: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-a10743a72782361b", "name": "Commented-code block (6 lines) in frontend/__tests__/services/spotQueue.test.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/__tests__/services/spotQueue.test.ts:4"}, "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-9a187cbf77b0cb01", "name": "Commented-code block (5 lines) in frontend/types/index.ts:307", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/types/index.ts:307"}, "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-53b78eb483912fff", "name": "Commented-code block (7 lines) in frontend/config/secureStorage.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/config/secureStorage.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-58d78e0273a29bd5", "name": "Commented-code block (5 lines) in frontend/config/supabase.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/config/supabase.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1be889f47416dbd", "name": "Commented-code block (5 lines) in frontend/constants/api.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/constants/api.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-fad42134ba5cfecb", "name": "Commented-code block (7 lines) in frontend/constants/rarityScore.ts:34", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/constants/rarityScore.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-cfd45fe13187255d", "name": "Commented-code block (5 lines) in frontend/utils/classDisplay.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/utils/classDisplay.ts: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-aa470a0f50bd44d3", "name": "Commented-code block (5 lines) in frontend/components/EmojiPicker.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/EmojiPicker.tsx: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-ace70ecbbd93180b", "name": "Commented-code block (5 lines) in frontend/components/ProExpiringBanner.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/ProExpiringBanner.tsx:4"}, "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-7f8bd0b3690466c4", "name": "Commented-code block (6 lines) in frontend/components/ThemedDayBanner.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/components/ThemedDayBanner.tsx: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-0e62d8aad7d139d6", "name": "Commented-code block (6 lines) in frontend/components/ProExpiringBanner-helpers.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/components/ProExpiringBanner-helpers.ts:4"}, "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-30e7f21a19dcce94", "name": "Commented-code block (8 lines) in frontend/components/PaywallSoftPrompt.tsx:4", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/components/PaywallSoftPrompt.tsx:4"}, "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-b5b5f3d9c5028c05", "name": "Commented-code block (5 lines) in frontend/components/CountryFlagPicker.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/CountryFlagPicker.tsx: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-39cd2521e79e063c", "name": "Commented-code block (6 lines) in frontend/components/ScanningGuideCard.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/components/ScanningGuideCard.tsx:4"}, "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-c5ab953adb4d8ce5", "name": "Commented-code block (9 lines) in frontend/components/ProRescuePrompt.tsx:4", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/components/ProRescuePrompt.tsx:4"}, "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-90e5ebd86bdb6952", "name": "Commented-code block (5 lines) in frontend/components/HomeProUpsellCard.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/HomeProUpsellCard.tsx:10"}, "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-e16f42288cb4f972", "name": "Commented-code block (6 lines) in frontend/components/ParticleEffect.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/components/ParticleEffect.tsx: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-cca33258087b967e", "name": "Commented-code block (5 lines) in frontend/components/IdentityBadge.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/IdentityBadge.tsx: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-4b8a38976870a79a", "name": "Commented-code block (8 lines) in frontend/components/leaderboard/CollectionTab.tsx:4", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/components/leaderboard/CollectionTab.tsx:4"}, "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-c0c53970bf53e30b", "name": "Commented-code block (6 lines) in frontend/components/leaderboard/WeeklyChampionCard.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/components/leaderboard/WeeklyChampionCard.tsx:4"}, "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-c80ec67b74488574", "name": "Commented-code block (5 lines) in frontend/components/leaderboard/RarityScoreInfo.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/leaderboard/RarityScoreInfo.tsx:4"}, "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-c26b0482fc815aab", "name": "Commented-code block (5 lines) in frontend/components/leaderboard/CountryTab.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/components/leaderboard/CountryTab.tsx:4"}, "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-39f3fc184a093df7", "name": "Commented-code block (7 lines) in frontend/components/leaderboard/LeaderboardProUpsellCard.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/components/leaderboard/LeaderboardProUpsellCard.tsx:4"}, "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-cb92927abfe46e0b", "name": "Commented-code block (7 lines) in frontend/components/leaderboard/LeagueAboutButton.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/components/leaderboard/LeagueAboutButton.tsx:4"}, "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-8065f363a51f24ef", "name": "Commented-code block (7 lines) in frontend/app/paywall-helpers.ts:42", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/app/paywall-helpers.ts: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-32f279c4727249fb", "name": "Commented-code block (5 lines) in frontend/app/language-picker.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/language-picker.tsx: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-5fec959471e0b795", "name": "Commented-code block (6 lines) in frontend/app/paywall-winback-helpers.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/app/paywall-winback-helpers.ts:4"}, "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-37445a09f6ee0369", "name": "Commented-code block (9 lines) in frontend/app/onboarding-identity.tsx:1", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/app/onboarding-identity.tsx: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-d3cd9f929cdfc4ce", "name": "Commented-code block (5 lines) in frontend/app/paywall.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/paywall.tsx: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-91889f890e31f0c0", "name": "Commented-code block (5 lines) in frontend/app/blueprint.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/blueprint.tsx: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-db36a77f7da40320", "name": "Commented-code block (7 lines) in frontend/app/card-reveal.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/app/card-reveal.tsx: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-97c3c4d084eec987", "name": "Commented-code block (5 lines) in frontend/app/_layout.tsx:91", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/_layout.tsx:91"}, "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-1539aa61135397f5", "name": "Commented-code block (8 lines) in frontend/app/(tabs)/leaderboard.tsx:4", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/app/(tabs)/leaderboard.tsx:4"}, "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-c11f9301404e99a2", "name": "Commented-code block (5 lines) in frontend/app/(tabs)/index.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/(tabs)/index.tsx: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-ab754ce295540d5f", "name": "Commented-code block (5 lines) in frontend/app/(tabs)/history.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/app/(tabs)/history.tsx: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-5c42239526eeb058", "name": "Commented-code block (6 lines) in frontend/services/api.ts:299", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/services/api.ts:299"}, "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-f0451a2fe4299eb9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/services/api.ts:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/services/api.ts:126"}, "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-557da4c99ccff700", "name": "Commented-code block (5 lines) in frontend/services/verification.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/services/verification.ts:4"}, "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-b85e6036c641fd27", "name": "Commented-code block (6 lines) in frontend/services/analytics.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/services/analytics.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-697d764f716329e0", "name": "Commented-code block (5 lines) in frontend/services/notifications.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/services/notifications.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-0c415eeb0e176040", "name": "Commented-code block (5 lines) in frontend/services/purchases.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/services/purchases.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-ace5c20d1abfb8fa", "name": "Commented-code block (5 lines) in frontend/services/supabase.ts:194", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/services/supabase.ts:194"}, "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-9a8eeadd63932fa1", "name": "Commented-code block (5 lines) in frontend/services/spotQueue.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/services/spotQueue.ts:4"}, "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-19c3e5002e92581e", "name": "Commented-code block (7 lines) in frontend/store/settingsStore.ts:14", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/store/settingsStore.ts: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-80704a8241c9226c", "name": "Commented-code block (5 lines) in frontend/store/trainStore.ts:60", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/store/trainStore.ts:60"}, "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-bef8519d49f0cd8e", "name": "Commented-code block (7 lines) in frontend/store/authStore.ts:69", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/store/authStore.ts:69"}, "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-4e64f090dc322e06", "name": "Commented-code block (10 lines) in frontend/store/leaderboardStore.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in frontend/store/leaderboardStore.ts:4"}, "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-8475c82ab62ec17c", "name": "Commented-code block (5 lines) in backend/src/__tests__/cron/leagueWeeklyReset.test.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/__tests__/cron/leagueWeeklyReset.test.ts:4"}, "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-4a491df4bb7fb1fa", "name": "Commented-code block (6 lines) in backend/src/__tests__/services/leagues.test.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/__tests__/services/leagues.test.ts:4"}, "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-30546d4c9d3578ae", "name": "Commented-code block (7 lines) in backend/src/__tests__/services/verification.test.ts:10", "shortDescription": {"text": "Commented-code block (7 lines) in backend/src/__tests__/services/verification.test.ts:10"}, "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-2d83581bbc6f1595", "name": "Commented-code block (6 lines) in backend/src/types/index.ts:49", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/types/index.ts:49"}, "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-51c1c16089e602ff", "name": "Commented-code block (6 lines) in backend/src/config/verification.ts:25", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/config/verification.ts:25"}, "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-e5d30c2e9a0ff6a3", "name": "Commented-code block (5 lines) in backend/src/config/languageInstructions.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/config/languageInstructions.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-c864468f0ba7664c", "name": "Commented-code block (5 lines) in backend/src/scripts/visionEval.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/scripts/visionEval.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-af13ce1fa8c1ff27", "name": "Commented-code block (6 lines) in backend/src/routes/webhooks.ts:99", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/routes/webhooks.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-6b8e96c220afb79c", "name": "Commented-code block (5 lines) in backend/src/routes/imageStatus.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/routes/imageStatus.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-c1474dc3787366cf", "name": "Commented-code block (5 lines) in backend/src/routes/credits.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/routes/credits.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-a0bf0c9e7e9e453a", "name": "Commented-code block (14 lines) in backend/src/routes/identify.ts:49", "shortDescription": {"text": "Commented-code block (14 lines) in backend/src/routes/identify.ts:49"}, "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-07190ef8e84118d3", "name": "Commented-code block (5 lines) in backend/src/cron/runLeagueWeeklyReset.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/cron/runLeagueWeeklyReset.ts:4"}, "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-ab3ba5e9d2d4f0e7", "name": "Commented-code block (7 lines) in backend/src/cron/leagueWeeklyReset.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in backend/src/cron/leagueWeeklyReset.ts:4"}, "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-27f7d52be92c2e8e", "name": "Commented-code block (7 lines) in backend/src/cron/zeroEngagementRescuePush.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in backend/src/cron/zeroEngagementRescuePush.ts:4"}, "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-a9ed6b9cab2b8412", "name": "Commented-code block (8 lines) in backend/src/services/operatorNames.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in backend/src/services/operatorNames.ts: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-5a7e1c68ddc78cee", "name": "Commented-code block (5 lines) in backend/src/services/email.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/email.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-b2f288938c2343f6", "name": "Commented-code block (11 lines) in backend/src/services/verification.ts:9", "shortDescription": {"text": "Commented-code block (11 lines) in backend/src/services/verification.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-cead18bb05904de4", "name": "Commented-code block (5 lines) in backend/src/services/trainCache.ts:67", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/trainCache.ts:67"}, "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-450c3b3371f1985a", "name": "Commented-code block (5 lines) in backend/src/services/rarity.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/rarity.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-f5cdd53d4a3d24c0", "name": "Commented-code block (5 lines) in backend/src/services/analytics.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/analytics.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-05860b3d15234f2a", "name": "Commented-code block (10 lines) in backend/src/services/classNames.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in backend/src/services/classNames.ts: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-2218db3516b3a6c0", "name": "Commented-code block (6 lines) in backend/src/services/leagues.ts:15", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/services/leagues.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-4b2ef9a8a473cf74", "name": "Commented-code block (5 lines) in backend/src/services/vision.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/vision.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-46e38a187375e353", "name": "Commented-code block (6 lines) in backend/src/services/redis.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in backend/src/services/redis.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-c479122d88b54606", "name": "Commented-code block (5 lines) in backend/src/services/trainSpecs.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/trainSpecs.ts: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-d20ce6350e795a93", "name": "Commented-code block (5 lines) in backend/src/services/wikidataSpecs.ts:260", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/wikidataSpecs.ts:260"}, "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-ba65475984c4abd2", "name": "Commented-code block (5 lines) in backend/src/services/trainFacts.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in backend/src/services/trainFacts.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-250f57e8a1dbd3c5", "name": "4 env vars used in code but missing from .env.example", "shortDescription": {"text": "4 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ENABLE_SENTRY_UPLOAD`, `EXPO_PUBLIC_BETA_PRO`, `PHOTO_DIR`, `TWO_STAGE_VISION`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e97bec01cddcde84", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/rarity.ts:206)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/rarity.ts:206)"}, "fullDescription": {"text": "`backend/src/services/rarity.ts:206` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-543607b422ef1eb2", "name": "Dangling fetch: POST https://api.openai.com/v1/images/generations (backend/src/services/imageGen.ts:226)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/images/generations (backend/src/services/imageGen.ts:226)"}, "fullDescription": {"text": "`backend/src/services/imageGen.ts:226` calls `POST https://api.openai.com/v1/images/generations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.openai.com/v1/images/generations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-defbae85ba5f68fa", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/vision.ts:639)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/vision.ts:639)"}, "fullDescription": {"text": "`backend/src/services/vision.ts:639` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94c88e7302fb528a", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/trainSpecs.ts:217)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/trainSpecs.ts:217)"}, "fullDescription": {"text": "`backend/src/services/trainSpecs.ts:217` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0476b010ae78b17", "name": "Dangling fetch: GET https://www.wikidata.org/w/api.php (backend/src/services/wikidataSpecs.ts:145)", "shortDescription": {"text": "Dangling fetch: GET https://www.wikidata.org/w/api.php (backend/src/services/wikidataSpecs.ts:145)"}, "fullDescription": {"text": "`backend/src/services/wikidataSpecs.ts:145` calls `GET https://www.wikidata.org/w/api.php` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.wikidata.org/w/api.php`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d962247d607bc9fe", "name": "Dangling fetch: GET https://www.wikidata.org/wiki/Special:EntityData/${qid}.json (backend/src/services/wikidataSpecs.ts:", "shortDescription": {"text": "Dangling fetch: GET https://www.wikidata.org/wiki/Special:EntityData/${qid}.json (backend/src/services/wikidataSpecs.ts:178)"}, "fullDescription": {"text": "`backend/src/services/wikidataSpecs.ts:178` calls `GET https://www.wikidata.org/wiki/Special:EntityData/${qid}.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.wikidata.org/wiki/special/<p>/<p>.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e671875c3188caf4", "name": "Dangling fetch: GET https://www.wikidata.org/wiki/Special:EntityData/${qid}.json (backend/src/services/wikidataSpecs.ts:", "shortDescription": {"text": "Dangling fetch: GET https://www.wikidata.org/wiki/Special:EntityData/${qid}.json (backend/src/services/wikidataSpecs.ts:187)"}, "fullDescription": {"text": "`backend/src/services/wikidataSpecs.ts:187` calls `GET https://www.wikidata.org/wiki/Special:EntityData/${qid}.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.wikidata.org/wiki/special/<p>/<p>.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d857f5ba411dc34d", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/trainFacts.ts:186)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/trainFacts.ts:186)"}, "fullDescription": {"text": "`backend/src/services/trainFacts.ts:186` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94874b21fdcdcb30", "name": "Unused endpoint: POST /api/blueprint/generate", "shortDescription": {"text": "Unused endpoint: POST /api/blueprint/generate"}, "fullDescription": {"text": "`frontend/services/api.ts` declares `POST /api/blueprint/generate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`frontend/services/api.ts` declares `GET /api/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f087bf40e5243ad1", "name": "Unused endpoint: USE /api/identify", "shortDescription": {"text": "Unused endpoint: USE /api/identify"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/identify` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b071bfd529a872f7", "name": "Unused endpoint: USE /api/blueprint", "shortDescription": {"text": "Unused endpoint: USE /api/blueprint"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/blueprint` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-203ec659ed8ada77", "name": "Unused endpoint: USE /api/webhooks", "shortDescription": {"text": "Unused endpoint: USE /api/webhooks"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/webhooks` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-00d2f0293753841f", "name": "Unused endpoint: USE /api/credits", "shortDescription": {"text": "Unused endpoint: USE /api/credits"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/credits` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d93a530ce10d47d9", "name": "Unused endpoint: USE /api/admin", "shortDescription": {"text": "Unused endpoint: USE /api/admin"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2faa950a290e5c7e", "name": "Unused endpoint: POST /revenuecat", "shortDescription": {"text": "Unused endpoint: POST /revenuecat"}, "fullDescription": {"text": "`backend/src/routes/webhooks.ts` declares `POST /revenuecat` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d0b6f772385f725", "name": "Unused endpoint: POST /supabase", "shortDescription": {"text": "Unused endpoint: POST /supabase"}, "fullDescription": {"text": "`backend/src/routes/webhooks.ts` declares `POST /supabase` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-970eb92d6ec2bfaa", "name": "Unused endpoint: POST /generate", "shortDescription": {"text": "Unused endpoint: POST /generate"}, "fullDescription": {"text": "`backend/src/routes/imageStatus.ts` declares `POST /generate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7cc904ee95789566", "name": "Unused endpoint: GET /:taskId", "shortDescription": {"text": "Unused endpoint: GET /:taskId"}, "fullDescription": {"text": "`backend/src/routes/imageStatus.ts` declares `GET /:taskId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2fd21712b535f550", "name": "Unused endpoint: POST /deduct", "shortDescription": {"text": "Unused endpoint: POST /deduct"}, "fullDescription": {"text": "`backend/src/routes/credits.ts` declares `POST /deduct` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7fa8929da9cbe3f", "name": "Unused endpoint: GET /balance", "shortDescription": {"text": "Unused endpoint: GET /balance"}, "fullDescription": {"text": "`backend/src/routes/credits.ts` declares `GET /balance` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`backend/src/routes/identify.ts` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-992bb19b8ca89a40", "name": "Unused endpoint: POST /league-reset/:weekStartUtc", "shortDescription": {"text": "Unused endpoint: POST /league-reset/:weekStartUtc"}, "fullDescription": {"text": "`backend/src/routes/admin.ts` declares `POST /league-reset/:weekStartUtc` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20299"}, "properties": {"repository": "StephenLear/locosnap", "repoUrl": "https://github.com/StephenLear/locosnap", "branch": "main"}, "results": [{"ruleId": "scanner-12adcbeae0941c3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/app/(tabs)/index.tsx:490"}, "properties": {"repobilityId": "39d995d45f3c5c9c", "scanner": "scanner-primary", "fingerprint": "12adcbeae0941c3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c5f2ba35a51f785", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/services/api.ts:145"}, "properties": {"repobilityId": "7883b2a464b11514", "scanner": "scanner-primary", "fingerprint": "8c5f2ba35a51f785", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c12dcdcbf95ed1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/services/analytics.ts:37"}, "properties": {"repobilityId": "14d8cd7855ddad95", "scanner": "scanner-primary", "fingerprint": "0c12dcdcbf95ed1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-14332943c3eb78ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/services/notifications.ts:28"}, "properties": {"repobilityId": "098556667a18f04c", "scanner": "scanner-primary", "fingerprint": "14332943c3eb78ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8fe681230414294a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/services/purchases.ts:43"}, "properties": {"repobilityId": "123a59f04fee3c42", "scanner": "scanner-primary", "fingerprint": "8fe681230414294a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c153265eb7b28460", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/store/trainStore.ts:511"}, "properties": {"repobilityId": "b384e90ef02538a0", "scanner": "scanner-primary", "fingerprint": "c153265eb7b28460", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-033d56081ba5bab5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-demo-blueprints.ts:103"}, "properties": {"repobilityId": "1d83ad7d30b6d531", "scanner": "scanner-primary", "fingerprint": "033d56081ba5bab5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ed1f453b03aecf3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/index.ts:112"}, "properties": {"repobilityId": "db2171a39601fa41", "scanner": "scanner-primary", "fingerprint": "8ed1f453b03aecf3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05b9ba15b9637de0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/visionEval.ts:93"}, "properties": {"repobilityId": "61702e3b43968f2f", "scanner": "scanner-primary", "fingerprint": "05b9ba15b9637de0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09d84511d8bb0df6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/idOne.ts:15"}, "properties": {"repobilityId": "948da9d7382a966a", "scanner": "scanner-primary", "fingerprint": "09d84511d8bb0df6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3fb385418e86bd0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/webhooks.ts:95"}, "properties": {"repobilityId": "61bc5840fef936bd", "scanner": "scanner-primary", "fingerprint": "3fb385418e86bd0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a2344eddde47888", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/identify.ts:238"}, "properties": {"repobilityId": "03fcc8c32a8173b0", "scanner": "scanner-primary", "fingerprint": "0a2344eddde47888", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d72abfdb1b33937f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/cron/runLeagueWeeklyReset.ts:22"}, "properties": {"repobilityId": "9f8215e2017be57e", "scanner": "scanner-primary", "fingerprint": "d72abfdb1b33937f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f66491be917de9d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/cron/runZeroEngagementRescuePush.ts:24"}, "properties": {"repobilityId": "fc471fe32077d7cf", "scanner": "scanner-primary", "fingerprint": "4f66491be917de9d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-68af3362c9160fc4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/cron/leagueWeeklyReset.ts:335"}, "properties": {"repobilityId": "93b59291e48261e9", "scanner": "scanner-primary", "fingerprint": "68af3362c9160fc4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc3394bef698a34f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/email.ts:178"}, "properties": {"repobilityId": "149f7117f3d67ca8", "scanner": "scanner-primary", "fingerprint": "dc3394bef698a34f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74f8f0574b63ea62", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainCache.ts:329"}, "properties": {"repobilityId": "24dd69376e66d30a", "scanner": "scanner-primary", "fingerprint": "74f8f0574b63ea62", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c9bc3bac788f4d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/rarity.ts:183"}, "properties": {"repobilityId": "256dc3b6e336d56c", "scanner": "scanner-primary", "fingerprint": "0c9bc3bac788f4d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ac576355bc6b2b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/analytics.ts:26"}, "properties": {"repobilityId": "d249b30fe0cf3b55", "scanner": "scanner-primary", "fingerprint": "6ac576355bc6b2b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83ef7c67e850a937", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/vision.ts:496"}, "properties": {"repobilityId": "54ba98efc36bff87", "scanner": "scanner-primary", "fingerprint": "83ef7c67e850a937", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d54128168f6f1ce3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/redis.ts:27"}, "properties": {"repobilityId": "c9365d436d9ed577", "scanner": "scanner-primary", "fingerprint": "d54128168f6f1ce3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28fc1d257ac7c895", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainSpecs.ts:194"}, "properties": {"repobilityId": "3be1c75e19fdbfd9", "scanner": "scanner-primary", "fingerprint": "28fc1d257ac7c895", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-206d1620416368b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/wikidataSpecs.ts:207"}, "properties": {"repobilityId": "0b843e41f4f15810", "scanner": "scanner-primary", "fingerprint": "206d1620416368b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-669e5a09e524fe2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/trainFacts.ts:163"}, "properties": {"repobilityId": "b43d276b1312c9f9", "scanner": "scanner-primary", "fingerprint": "669e5a09e524fe2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ad82b956aa49808", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in backend/src/services/wikidataSpecs.ts:153"}, "properties": {"repobilityId": "4e3ab76dbd17e363", "scanner": "scanner-primary", "fingerprint": "4ad82b956aa49808", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/services/wikidataSpecs.ts"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-523eb16acdca66a2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ea5be05ebc354b9f", "scanner": "scanner-primary", "fingerprint": "523eb16acdca66a2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/preview.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-523eb16acdca66a2", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cc53bef6edb33569", "scanner": "scanner-primary", "fingerprint": "523eb16acdca66a2", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/preview.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-523eb16acdca66a2", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "784b8a2321237c07", "scanner": "scanner-primary", "fingerprint": "523eb16acdca66a2", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/preview.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-7d4c87cd005861dd", "level": "note", "message": {"text": "Very large file: frontend/app/card-reveal.tsx (1739 lines)"}, "properties": {"repobilityId": "68e039a0bebccd90", "scanner": "scanner-primary", "fingerprint": "7d4c87cd005861dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e568a63ffd62b693", "level": "note", "message": {"text": "Very large file: backend/src/services/trainSpecs.ts (1672 lines)"}, "properties": {"repobilityId": "9726c2603f1142b3", "scanner": "scanner-primary", "fingerprint": "e568a63ffd62b693", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "84fe76de8a9e1d71", "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": "0a063528cd6dd9fa", "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": "ecc766df66cf73fa", "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": "4ecfd1bf722802fb", "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": "78c7c6dd97b663bc", "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": "bc173e81386ce1ec", "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": "2e9f05d3a4bace5f", "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": "9167f3bd9c7ad190", "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": "8c7e4f3a0568a23a", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-17d866d91a7c451e", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "properties": {"repobilityId": "ccce5984e58a48f0", "scanner": "scanner-primary", "fingerprint": "17d866d91a7c451e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-24f2ea4bd14badc1", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: CLAUDE.md"}, "properties": {"repobilityId": "0f6049734704e537", "scanner": "scanner-primary", "fingerprint": "24f2ea4bd14badc1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 363}}}]}, {"ruleId": "scanner-8059a765780fdfa3", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/__tests__/fetchProfileMigration.test.ts:1"}, "properties": {"repobilityId": "244b89288e03cce6", "scanner": "scanner-primary", "fingerprint": "8059a765780fdfa3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fab10976b93adef8", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/__tests__/languagePicker.test.tsx:1"}, "properties": {"repobilityId": "e05f64fa9cfd6d96", "scanner": "scanner-primary", "fingerprint": "fab10976b93adef8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a10743a72782361b", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/__tests__/services/spotQueue.test.ts:4"}, "properties": {"repobilityId": "d1390d97bdad9d62", "scanner": "scanner-primary", "fingerprint": "a10743a72782361b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a187cbf77b0cb01", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/types/index.ts:307"}, "properties": {"repobilityId": "25ad3226e588bb0d", "scanner": "scanner-primary", "fingerprint": "9a187cbf77b0cb01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53b78eb483912fff", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/config/secureStorage.ts:1"}, "properties": {"repobilityId": "af63a9bd35b474ad", "scanner": "scanner-primary", "fingerprint": "53b78eb483912fff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58d78e0273a29bd5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/config/supabase.ts:16"}, "properties": {"repobilityId": "76ca02c618c233b4", "scanner": "scanner-primary", "fingerprint": "58d78e0273a29bd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1be889f47416dbd", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/constants/api.ts:15"}, "properties": {"repobilityId": "8c16d28bcc18cf3f", "scanner": "scanner-primary", "fingerprint": "f1be889f47416dbd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fad42134ba5cfecb", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/constants/rarityScore.ts:34"}, "properties": {"repobilityId": "54ee9745bbd8978d", "scanner": "scanner-primary", "fingerprint": "fad42134ba5cfecb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfd45fe13187255d", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/utils/classDisplay.ts:3"}, "properties": {"repobilityId": "9dc10a4c54ed2adf", "scanner": "scanner-primary", "fingerprint": "cfd45fe13187255d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa470a0f50bd44d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/EmojiPicker.tsx:1"}, "properties": {"repobilityId": "1ae681c7afdb2e3b", "scanner": "scanner-primary", "fingerprint": "aa470a0f50bd44d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ace70ecbbd93180b", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/ProExpiringBanner.tsx:4"}, "properties": {"repobilityId": "5bb0cb9faefa7191", "scanner": "scanner-primary", "fingerprint": "ace70ecbbd93180b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f8bd0b3690466c4", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/components/ThemedDayBanner.tsx:8"}, "properties": {"repobilityId": "4c3870431d642dc1", "scanner": "scanner-primary", "fingerprint": "7f8bd0b3690466c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e62d8aad7d139d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/components/ProExpiringBanner-helpers.ts:4"}, "properties": {"repobilityId": "0db4e8a78d12b2d4", "scanner": "scanner-primary", "fingerprint": "0e62d8aad7d139d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30e7f21a19dcce94", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/components/PaywallSoftPrompt.tsx:4"}, "properties": {"repobilityId": "4c7a5b7945b9668c", "scanner": "scanner-primary", "fingerprint": "30e7f21a19dcce94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5b5f3d9c5028c05", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/CountryFlagPicker.tsx:1"}, "properties": {"repobilityId": "6fc3bcd6541caa7e", "scanner": "scanner-primary", "fingerprint": "b5b5f3d9c5028c05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39cd2521e79e063c", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/components/ScanningGuideCard.tsx:4"}, "properties": {"repobilityId": "379b25fb41ef748e", "scanner": "scanner-primary", "fingerprint": "39cd2521e79e063c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5ab953adb4d8ce5", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/components/ProRescuePrompt.tsx:4"}, "properties": {"repobilityId": "6034f9a35b00dc6b", "scanner": "scanner-primary", "fingerprint": "c5ab953adb4d8ce5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90e5ebd86bdb6952", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/HomeProUpsellCard.tsx:10"}, "properties": {"repobilityId": "bb1eda3fef8ff41c", "scanner": "scanner-primary", "fingerprint": "90e5ebd86bdb6952", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e16f42288cb4f972", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/components/ParticleEffect.tsx:1"}, "properties": {"repobilityId": "9ec82a961b8a16fd", "scanner": "scanner-primary", "fingerprint": "e16f42288cb4f972", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cca33258087b967e", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/IdentityBadge.tsx:1"}, "properties": {"repobilityId": "0079f211e585faf7", "scanner": "scanner-primary", "fingerprint": "cca33258087b967e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b8a38976870a79a", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/components/leaderboard/CollectionTab.tsx:4"}, "properties": {"repobilityId": "d9413c58f2e9583f", "scanner": "scanner-primary", "fingerprint": "4b8a38976870a79a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0c53970bf53e30b", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/components/leaderboard/WeeklyChampionCard.tsx:4"}, "properties": {"repobilityId": "4c2997e4ce49b39b", "scanner": "scanner-primary", "fingerprint": "c0c53970bf53e30b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c80ec67b74488574", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/leaderboard/RarityScoreInfo.tsx:4"}, "properties": {"repobilityId": "48a165db1e22e5a9", "scanner": "scanner-primary", "fingerprint": "c80ec67b74488574", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c26b0482fc815aab", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/components/leaderboard/CountryTab.tsx:4"}, "properties": {"repobilityId": "f1dabde7bd4f3f5a", "scanner": "scanner-primary", "fingerprint": "c26b0482fc815aab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39f3fc184a093df7", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/components/leaderboard/LeaderboardProUpsellCard.tsx:4"}, "properties": {"repobilityId": "3473196c015db829", "scanner": "scanner-primary", "fingerprint": "39f3fc184a093df7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb92927abfe46e0b", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/components/leaderboard/LeagueAboutButton.tsx:4"}, "properties": {"repobilityId": "d8a5883d4fcdd415", "scanner": "scanner-primary", "fingerprint": "cb92927abfe46e0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8065f363a51f24ef", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/app/paywall-helpers.ts:42"}, "properties": {"repobilityId": "15c166ab5ef5f1fa", "scanner": "scanner-primary", "fingerprint": "8065f363a51f24ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32f279c4727249fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/language-picker.tsx:1"}, "properties": {"repobilityId": "b77283cbfde2c371", "scanner": "scanner-primary", "fingerprint": "32f279c4727249fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fec959471e0b795", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/app/paywall-winback-helpers.ts:4"}, "properties": {"repobilityId": "afeb841c14bc887a", "scanner": "scanner-primary", "fingerprint": "5fec959471e0b795", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37445a09f6ee0369", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/app/onboarding-identity.tsx:1"}, "properties": {"repobilityId": "3dfa4ada114c2b37", "scanner": "scanner-primary", "fingerprint": "37445a09f6ee0369", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3cd9f929cdfc4ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/paywall.tsx:1"}, "properties": {"repobilityId": "6601146c742229a5", "scanner": "scanner-primary", "fingerprint": "d3cd9f929cdfc4ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91889f890e31f0c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/blueprint.tsx:1"}, "properties": {"repobilityId": "1c8da3e605a429ea", "scanner": "scanner-primary", "fingerprint": "91889f890e31f0c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db36a77f7da40320", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/app/card-reveal.tsx:1"}, "properties": {"repobilityId": "17202ec4dd81eb46", "scanner": "scanner-primary", "fingerprint": "db36a77f7da40320", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97c3c4d084eec987", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/_layout.tsx:91"}, "properties": {"repobilityId": "d1946a3dd71a8cd7", "scanner": "scanner-primary", "fingerprint": "97c3c4d084eec987", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1539aa61135397f5", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/app/(tabs)/leaderboard.tsx:4"}, "properties": {"repobilityId": "29d621cffefb76fe", "scanner": "scanner-primary", "fingerprint": "1539aa61135397f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c11f9301404e99a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/(tabs)/index.tsx:1"}, "properties": {"repobilityId": "d3ac259dd6472b51", "scanner": "scanner-primary", "fingerprint": "c11f9301404e99a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab754ce295540d5f", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/app/(tabs)/history.tsx:1"}, "properties": {"repobilityId": "2a92c5bd373798ef", "scanner": "scanner-primary", "fingerprint": "ab754ce295540d5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c42239526eeb058", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/services/api.ts:299"}, "properties": {"repobilityId": "27444577ad6c94ac", "scanner": "scanner-primary", "fingerprint": "5c42239526eeb058", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0451a2fe4299eb9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/services/api.ts:126"}, "properties": {"repobilityId": "8477c769f3914b27", "scanner": "scanner-primary", "fingerprint": "f0451a2fe4299eb9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-557da4c99ccff700", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/services/verification.ts:4"}, "properties": {"repobilityId": "c0d6704fa01782d9", "scanner": "scanner-primary", "fingerprint": "557da4c99ccff700", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b85e6036c641fd27", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/services/analytics.ts:1"}, "properties": {"repobilityId": "1cdb2308cb108367", "scanner": "scanner-primary", "fingerprint": "b85e6036c641fd27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-697d764f716329e0", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/services/notifications.ts:1"}, "properties": {"repobilityId": "c8a95d4ea7891867", "scanner": "scanner-primary", "fingerprint": "697d764f716329e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c415eeb0e176040", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/services/purchases.ts:1"}, "properties": {"repobilityId": "9f02b20a141712cd", "scanner": "scanner-primary", "fingerprint": "0c415eeb0e176040", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ace5c20d1abfb8fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/services/supabase.ts:194"}, "properties": {"repobilityId": "de1aa30f489028ab", "scanner": "scanner-primary", "fingerprint": "ace5c20d1abfb8fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a8eeadd63932fa1", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/services/spotQueue.ts:4"}, "properties": {"repobilityId": "28a9d851f3269575", "scanner": "scanner-primary", "fingerprint": "9a8eeadd63932fa1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19c3e5002e92581e", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/store/settingsStore.ts:14"}, "properties": {"repobilityId": "701420850d31a7fd", "scanner": "scanner-primary", "fingerprint": "19c3e5002e92581e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80704a8241c9226c", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/store/trainStore.ts:60"}, "properties": {"repobilityId": "bc4379776ce611f6", "scanner": "scanner-primary", "fingerprint": "80704a8241c9226c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bef8519d49f0cd8e", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/store/authStore.ts:69"}, "properties": {"repobilityId": "29f91ff0a497d78a", "scanner": "scanner-primary", "fingerprint": "bef8519d49f0cd8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e64f090dc322e06", "level": "none", "message": {"text": "Commented-code block (10 lines) in frontend/store/leaderboardStore.ts:4"}, "properties": {"repobilityId": "6bd8af20b25ddcd1", "scanner": "scanner-primary", "fingerprint": "4e64f090dc322e06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8475c82ab62ec17c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/__tests__/cron/leagueWeeklyReset.test.ts:4"}, "properties": {"repobilityId": "eda4f91e18ca6f2a", "scanner": "scanner-primary", "fingerprint": "8475c82ab62ec17c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a491df4bb7fb1fa", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/__tests__/services/leagues.test.ts:4"}, "properties": {"repobilityId": "b4efda36162d41f0", "scanner": "scanner-primary", "fingerprint": "4a491df4bb7fb1fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30546d4c9d3578ae", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/src/__tests__/services/verification.test.ts:10"}, "properties": {"repobilityId": "3caf282b72fa66ed", "scanner": "scanner-primary", "fingerprint": "30546d4c9d3578ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d83581bbc6f1595", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/types/index.ts:49"}, "properties": {"repobilityId": "37a9a1f70aa91d34", "scanner": "scanner-primary", "fingerprint": "2d83581bbc6f1595", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51c1c16089e602ff", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/config/verification.ts:25"}, "properties": {"repobilityId": "50dc7449de6e50c0", "scanner": "scanner-primary", "fingerprint": "51c1c16089e602ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5d30c2e9a0ff6a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/config/languageInstructions.ts:6"}, "properties": {"repobilityId": "7e2ad3401bfa1f49", "scanner": "scanner-primary", "fingerprint": "e5d30c2e9a0ff6a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c864468f0ba7664c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/scripts/visionEval.ts:1"}, "properties": {"repobilityId": "39da9056d923a6cc", "scanner": "scanner-primary", "fingerprint": "c864468f0ba7664c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af13ce1fa8c1ff27", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/routes/webhooks.ts:99"}, "properties": {"repobilityId": "1caae6e85f3583a0", "scanner": "scanner-primary", "fingerprint": "af13ce1fa8c1ff27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b8e96c220afb79c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/routes/imageStatus.ts:1"}, "properties": {"repobilityId": "8070597bea311fe6", "scanner": "scanner-primary", "fingerprint": "6b8e96c220afb79c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1474dc3787366cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/routes/credits.ts:1"}, "properties": {"repobilityId": "a7c648bd43cdd25d", "scanner": "scanner-primary", "fingerprint": "c1474dc3787366cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0bf0c9e7e9e453a", "level": "none", "message": {"text": "Commented-code block (14 lines) in backend/src/routes/identify.ts:49"}, "properties": {"repobilityId": "ad9f403bc6f91e29", "scanner": "scanner-primary", "fingerprint": "a0bf0c9e7e9e453a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07190ef8e84118d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/cron/runLeagueWeeklyReset.ts:4"}, "properties": {"repobilityId": "f06c28f119a607ac", "scanner": "scanner-primary", "fingerprint": "07190ef8e84118d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab3ba5e9d2d4f0e7", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/src/cron/leagueWeeklyReset.ts:4"}, "properties": {"repobilityId": "39cb569ae7c6cdd1", "scanner": "scanner-primary", "fingerprint": "ab3ba5e9d2d4f0e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27f7d52be92c2e8e", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/src/cron/zeroEngagementRescuePush.ts:4"}, "properties": {"repobilityId": "65ff7e0dfae7c5e6", "scanner": "scanner-primary", "fingerprint": "27f7d52be92c2e8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9ed6b9cab2b8412", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/src/services/operatorNames.ts:3"}, "properties": {"repobilityId": "8b7453624dcc50dd", "scanner": "scanner-primary", "fingerprint": "a9ed6b9cab2b8412", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a7e1c68ddc78cee", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/email.ts:1"}, "properties": {"repobilityId": "5ce3c521403f4a31", "scanner": "scanner-primary", "fingerprint": "5a7e1c68ddc78cee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2f288938c2343f6", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/src/services/verification.ts:9"}, "properties": {"repobilityId": "916aea26bf38aa48", "scanner": "scanner-primary", "fingerprint": "b2f288938c2343f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cead18bb05904de4", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/trainCache.ts:67"}, "properties": {"repobilityId": "4ce789aa3d69a442", "scanner": "scanner-primary", "fingerprint": "cead18bb05904de4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-450c3b3371f1985a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/rarity.ts:1"}, "properties": {"repobilityId": "c14d64163cb5f1b5", "scanner": "scanner-primary", "fingerprint": "450c3b3371f1985a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5cdd53d4a3d24c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/analytics.ts:1"}, "properties": {"repobilityId": "b8cd897d48ffb3ac", "scanner": "scanner-primary", "fingerprint": "f5cdd53d4a3d24c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05860b3d15234f2a", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/src/services/classNames.ts:3"}, "properties": {"repobilityId": "cc49deeab74dcd9e", "scanner": "scanner-primary", "fingerprint": "05860b3d15234f2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2218db3516b3a6c0", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/services/leagues.ts:15"}, "properties": {"repobilityId": "5884e7042b613369", "scanner": "scanner-primary", "fingerprint": "2218db3516b3a6c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b2ef9a8a473cf74", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/vision.ts:1"}, "properties": {"repobilityId": "000272fdc0e5c4f9", "scanner": "scanner-primary", "fingerprint": "4b2ef9a8a473cf74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46e38a187375e353", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/src/services/redis.ts:1"}, "properties": {"repobilityId": "1302d8dedfeeb9ce", "scanner": "scanner-primary", "fingerprint": "46e38a187375e353", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c479122d88b54606", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/trainSpecs.ts:5"}, "properties": {"repobilityId": "7194c2d972d3a7e9", "scanner": "scanner-primary", "fingerprint": "c479122d88b54606", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d20ce6350e795a93", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/wikidataSpecs.ts:260"}, "properties": {"repobilityId": "d008df3cd92cc049", "scanner": "scanner-primary", "fingerprint": "d20ce6350e795a93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba65475984c4abd2", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/src/services/trainFacts.ts:1"}, "properties": {"repobilityId": "9169be8e43f23a9f", "scanner": "scanner-primary", "fingerprint": "ba65475984c4abd2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-250f57e8a1dbd3c5", "level": "none", "message": {"text": "4 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "57584f22b735b5ee", "scanner": "scanner-primary", "fingerprint": "250f57e8a1dbd3c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-e97bec01cddcde84", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/rarity.ts:206)"}, "properties": {"repobilityId": "f55d091083a86313", "scanner": "scanner-primary", "fingerprint": "e97bec01cddcde84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-543607b422ef1eb2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/images/generations (backend/src/services/imageGen.ts:226)"}, "properties": {"repobilityId": "40457d9fa2288b07", "scanner": "scanner-primary", "fingerprint": "543607b422ef1eb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-defbae85ba5f68fa", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/vision.ts:639)"}, "properties": {"repobilityId": "eff398d1570ddd13", "scanner": "scanner-primary", "fingerprint": "defbae85ba5f68fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-94c88e7302fb528a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/trainSpecs.ts:217)"}, "properties": {"repobilityId": "6abc9aecd918183b", "scanner": "scanner-primary", "fingerprint": "94c88e7302fb528a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e0476b010ae78b17", "level": "error", "message": {"text": "Dangling fetch: GET https://www.wikidata.org/w/api.php (backend/src/services/wikidataSpecs.ts:145)"}, "properties": {"repobilityId": "866e12ea0ff1d27f", "scanner": "scanner-primary", "fingerprint": "e0476b010ae78b17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d962247d607bc9fe", "level": "error", "message": {"text": "Dangling fetch: GET https://www.wikidata.org/wiki/Special:EntityData/${qid}.json (backend/src/services/wikidataSpecs.ts:178)"}, "properties": {"repobilityId": "b96af7d47d20bcf8", "scanner": "scanner-primary", "fingerprint": "d962247d607bc9fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e671875c3188caf4", "level": "error", "message": {"text": "Dangling fetch: GET https://www.wikidata.org/wiki/Special:EntityData/${qid}.json (backend/src/services/wikidataSpecs.ts:187)"}, "properties": {"repobilityId": "f85680e929edd019", "scanner": "scanner-primary", "fingerprint": "e671875c3188caf4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d857f5ba411dc34d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (backend/src/services/trainFacts.ts:186)"}, "properties": {"repobilityId": "49bf5e869f2fead4", "scanner": "scanner-primary", "fingerprint": "d857f5ba411dc34d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-94874b21fdcdcb30", "level": "note", "message": {"text": "Unused endpoint: POST /api/blueprint/generate"}, "properties": {"repobilityId": "3de1fa69f2501fae", "scanner": "scanner-primary", "fingerprint": "94874b21fdcdcb30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "689c6d4ffdb5fb89", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f087bf40e5243ad1", "level": "note", "message": {"text": "Unused endpoint: USE /api/identify"}, "properties": {"repobilityId": "56254bf8157c6021", "scanner": "scanner-primary", "fingerprint": "f087bf40e5243ad1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b071bfd529a872f7", "level": "note", "message": {"text": "Unused endpoint: USE /api/blueprint"}, "properties": {"repobilityId": "364b898421e56ea7", "scanner": "scanner-primary", "fingerprint": "b071bfd529a872f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-203ec659ed8ada77", "level": "note", "message": {"text": "Unused endpoint: USE /api/webhooks"}, "properties": {"repobilityId": "6fd6f72b7ee25e7a", "scanner": "scanner-primary", "fingerprint": "203ec659ed8ada77", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-00d2f0293753841f", "level": "note", "message": {"text": "Unused endpoint: USE /api/credits"}, "properties": {"repobilityId": "35d9384ae0dc98d1", "scanner": "scanner-primary", "fingerprint": "00d2f0293753841f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d93a530ce10d47d9", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin"}, "properties": {"repobilityId": "0fd7b508ffe65f2b", "scanner": "scanner-primary", "fingerprint": "d93a530ce10d47d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2faa950a290e5c7e", "level": "note", "message": {"text": "Unused endpoint: POST /revenuecat"}, "properties": {"repobilityId": "7e877f807223cc3c", "scanner": "scanner-primary", "fingerprint": "2faa950a290e5c7e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4d0b6f772385f725", "level": "note", "message": {"text": "Unused endpoint: POST /supabase"}, "properties": {"repobilityId": "fb014985c5010079", "scanner": "scanner-primary", "fingerprint": "4d0b6f772385f725", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-970eb92d6ec2bfaa", "level": "note", "message": {"text": "Unused endpoint: POST /generate"}, "properties": {"repobilityId": "cd7157c8fa3dd890", "scanner": "scanner-primary", "fingerprint": "970eb92d6ec2bfaa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7cc904ee95789566", "level": "note", "message": {"text": "Unused endpoint: GET /:taskId"}, "properties": {"repobilityId": "5343a871fd47c92b", "scanner": "scanner-primary", "fingerprint": "7cc904ee95789566", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2fd21712b535f550", "level": "note", "message": {"text": "Unused endpoint: POST /deduct"}, "properties": {"repobilityId": "9d2a388e30c1b75f", "scanner": "scanner-primary", "fingerprint": "2fd21712b535f550", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7fa8929da9cbe3f", "level": "note", "message": {"text": "Unused endpoint: GET /balance"}, "properties": {"repobilityId": "e086ec14f2e01e65", "scanner": "scanner-primary", "fingerprint": "d7fa8929da9cbe3f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "9b4c535af88d7196", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-992bb19b8ca89a40", "level": "note", "message": {"text": "Unused endpoint: POST /league-reset/:weekStartUtc"}, "properties": {"repobilityId": "2ca1c60abed0e6c4", "scanner": "scanner-primary", "fingerprint": "992bb19b8ca89a40", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}